From 7ed1fff489bf1b28b16edb50e2eb564235e9a8f6 Mon Sep 17 00:00:00 2001 From: john-rock Date: Fri, 29 Sep 2023 14:06:22 -0400 Subject: [PATCH 001/305] start work --- website/docs/quickstarts/bigquery-qs.md | 2 + website/docs/quickstarts/codespace-qs.md | 1 + website/docs/quickstarts/databricks-qs.md | 1 + website/docs/quickstarts/redshift-qs.md | 1 + website/package.json | 2 + .../components/quickstartGuideCard/index.js | 25 ++++++++--- .../quickstartGuideCard/styles.module.css | 27 +++++++++-- .../components/quickstartGuideList/index.js | 45 +++++++++++++++++-- .../quickstartGuideList/styles.module.css | 10 ++++- .../src/components/selectDropdown/index.js | 17 +++++++ .../selectDropdown/styles.module.css | 1 + 11 files changed, 118 insertions(+), 14 deletions(-) create mode 100644 website/src/components/selectDropdown/index.js create mode 100644 website/src/components/selectDropdown/styles.module.css diff --git a/website/docs/quickstarts/bigquery-qs.md b/website/docs/quickstarts/bigquery-qs.md index 7f7f9aa7655..01b2cf7ba7e 100644 --- a/website/docs/quickstarts/bigquery-qs.md +++ b/website/docs/quickstarts/bigquery-qs.md @@ -5,6 +5,8 @@ time_to_complete: '30 minutes' platform: 'dbt-cloud' icon: 'bigquery' hide_table_of_contents: true +tags: ['BigQuery', 'dbt Cloud'] +level: 'Beginner' --- ## Introduction diff --git a/website/docs/quickstarts/codespace-qs.md b/website/docs/quickstarts/codespace-qs.md index 3cd048c97a4..f2671335ddc 100644 --- a/website/docs/quickstarts/codespace-qs.md +++ b/website/docs/quickstarts/codespace-qs.md @@ -4,6 +4,7 @@ id: codespace platform: 'dbt-core' icon: 'fa-github' hide_table_of_contents: true +tags: ['dbt Core'] --- ## Introduction diff --git a/website/docs/quickstarts/databricks-qs.md b/website/docs/quickstarts/databricks-qs.md index 08334862517..cbd1c36f9a1 100644 --- a/website/docs/quickstarts/databricks-qs.md +++ b/website/docs/quickstarts/databricks-qs.md @@ -4,6 +4,7 @@ id: "databricks" platform: 'dbt-cloud' icon: 'databricks' hide_table_of_contents: true +recently_updated: true --- ## Introduction diff --git a/website/docs/quickstarts/redshift-qs.md b/website/docs/quickstarts/redshift-qs.md index 67f66d6e275..82c865ae123 100644 --- a/website/docs/quickstarts/redshift-qs.md +++ b/website/docs/quickstarts/redshift-qs.md @@ -4,6 +4,7 @@ id: "redshift" platform: 'dbt-cloud' icon: 'redshift' hide_table_of_contents: true +tags: ['Redshift', 'dbt Cloud'] --- ## Introduction diff --git a/website/package.json b/website/package.json index afb7a9b1cd4..5dee165966f 100644 --- a/website/package.json +++ b/website/package.json @@ -39,6 +39,7 @@ "react-dom": "^17.0.1", "react-full-screen": "^1.1.1", "react-is": "^18.1.0", + "react-select": "^5.7.5", "react-tooltip": "^4.2.21", "redoc": "^2.0.0-rc.57", "rehype-katex": "^5.0.0", @@ -79,6 +80,7 @@ "stream-http": "^3.2.0", "style-loader": "^1.1.3", "svg-inline-loader": "^0.8.2", + "tailwindcss": "^3.3.3", "tty-browserify": "0.0.1", "webpack": "^5.75.0", "webpack-dev-server": "^4.11.1" diff --git a/website/src/components/quickstartGuideCard/index.js b/website/src/components/quickstartGuideCard/index.js index fdc629bd7b0..a019022d079 100644 --- a/website/src/components/quickstartGuideCard/index.js +++ b/website/src/components/quickstartGuideCard/index.js @@ -4,14 +4,15 @@ import styles from "./styles.module.css"; import getIconType from "../../utils/get-icon-type"; function QuickstartGuideCard({ frontMatter }) { - const { id, title, time_to_complete, icon } = frontMatter; + const { id, title, time_to_complete, icon, tags, level, recently_updated } = frontMatter; + return ( - + + {recently_updated && ( + Updated + )} {icon && getIconType(icon, styles.icon)} - +

{title}

{time_to_complete && ( @@ -21,6 +22,18 @@ function QuickstartGuideCard({ frontMatter }) { Start + + {(tags || level) && ( +
+ {tags && + tags.map((tag, i) => ( +
+ {tag} +
+ ))} + {level &&
{level}
} +
+ )} ); } diff --git a/website/src/components/quickstartGuideCard/styles.module.css b/website/src/components/quickstartGuideCard/styles.module.css index 8202f694fcd..d8f60cb3a73 100644 --- a/website/src/components/quickstartGuideCard/styles.module.css +++ b/website/src/components/quickstartGuideCard/styles.module.css @@ -4,21 +4,20 @@ box-shadow: 0px 11px 24px rgba(138, 138, 138, .1); padding: 2.5rem 2.5rem 1.5rem 2.5rem; flex: 0 0 30%; - border-bottom: solid 4px var(--color-light-teal); display: flex; flex-direction: column; text-decoration: none !important; transition: all 0.2s ease-in-out; + position: relative; } .quickstartCard:hover { - border-bottom-color: var(--color-orange); transform: translateY(-7px); } .quickstartCard .icon { - max-width: 25px; - font-size: 25px; + max-width: 46px; + font-size: 46px; margin-bottom: .8rem; color: var(--ifm-menu-color); } @@ -63,3 +62,23 @@ content: " →"; margin-left: 5px; } + +.quickstartCard .recently_updated { + position: absolute; + top: 1.5rem; + right: 1.5rem; +} + +.quickstartCard .tag_container { + display: flex; + flex-wrap: wrap; + gap: 0.375rem; + margin-top: 1rem; +} + +.quickstartCard .tag_container .tag { + background: #E5E7EB; + border-radius: 1.5rem; + color:#262A38; + padding: 0rem 0.75rem; +} diff --git a/website/src/components/quickstartGuideList/index.js b/website/src/components/quickstartGuideList/index.js index 954d54e6d47..e48b8b2e7ef 100644 --- a/website/src/components/quickstartGuideList/index.js +++ b/website/src/components/quickstartGuideList/index.js @@ -1,20 +1,56 @@ import React from 'react'; +import { useState } from 'react'; import Head from '@docusaurus/Head'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import Layout from '@theme/Layout'; import Hero from '@site/src/components/hero'; import QuickstartGuideCard from '../quickstartGuideCard' import styles from './styles.module.css'; +import { SelectDropdown } from '../selectDropdown'; const quickstartTitle = 'Quickstarts' const quickstartDescription = 'dbt Core is a powerful open-source tool for data transformations and dbt Cloud is the fastest and most reliable way to deploy your dbt jobs. With the help of a sample project, learn how to quickly start using dbt and one of the most common data platforms.' + function QuickstartList({ quickstartData }) { const { siteConfig } = useDocusaurusContext() + const [filteredData, setFilteredData] = useState(quickstartData); // Build meta title from quickstartTitle and docusaurus config site title const metaTitle = `${quickstartTitle}${siteConfig?.title ? ` | ${siteConfig.title}` : ''}` + // Create an options array for the tag select dropdown + const tagOptions = []; + quickstartData.forEach((guide) => { + if (guide.data.tags) { + guide.data.tags.forEach((tag) => { + const tagOption = { value: tag, label: tag }; + if (!tagOptions.find((option) => option.value === tag)) { + tagOptions.push(tagOption); + } + }); + } + }); + + // Filter the quickstart guides based on the selected tags + const onChange = (selectedOption) => { + // only return the quickstart guides that have the selected tag and match all of the selected tags + const filteredGuides = quickstartData.filter((guide) => { + if (guide.data.tags) { + return selectedOption.every((option) => + guide.data.tags.includes(option.value) + ); + } + }); + setFilteredData(filteredGuides); + + // If no tags are selected, show all quickstart guides + if (selectedOption.length === 0) { + setFilteredData(quickstartData); + } + + }; + return ( @@ -30,15 +66,18 @@ function QuickstartList({ quickstartData }) { classNames={styles.quickstartHero} />
+
+ +
- {quickstartData && quickstartData.length > 0 ? ( + {filteredData && filteredData.length > 0 ? ( <> - {quickstartData.map((guide, i) => ( + {filteredData.map((guide, i) => ( ))} ) : -

No quickstarts are available at this time. 😕

+

No quickstarts are available with the selected filters.

}
diff --git a/website/src/components/quickstartGuideList/styles.module.css b/website/src/components/quickstartGuideList/styles.module.css index 8c4e45edc8c..54b6a2e70f0 100644 --- a/website/src/components/quickstartGuideList/styles.module.css +++ b/website/src/components/quickstartGuideList/styles.module.css @@ -18,10 +18,18 @@ .quickstartCardContainer { display: grid; grid-template-columns: 1fr 1fr 1fr; - grid-gap: 2rem; + grid-gap: 1rem; padding: 5rem 1rem; } +.quickstartFilterContainer { + +} + +.quickstartFilterContainer > div:first-child { + padding: 0; +} + @media (max-width: 996px) { .quickstartCardContainer { grid-template-columns: 1fr; diff --git a/website/src/components/selectDropdown/index.js b/website/src/components/selectDropdown/index.js new file mode 100644 index 00000000000..216c5213aae --- /dev/null +++ b/website/src/components/selectDropdown/index.js @@ -0,0 +1,17 @@ +import React from "react"; +import Select from "react-select"; +import styles from "./styles.module.css"; + +export const SelectDropdown = ({ options, value, onChange }) => { + return ( + ); diff --git a/website/src/components/selectDropdown/styles.module.css b/website/src/components/selectDropdown/styles.module.css index 8b137891791..9892fea5f93 100644 --- a/website/src/components/selectDropdown/styles.module.css +++ b/website/src/components/selectDropdown/styles.module.css @@ -1 +1,3 @@ - +.selectContainer { + min-width: 25rem; +} From 37a3ea029c4e3c4f162a6b12773fa48f0fc6ba59 Mon Sep 17 00:00:00 2001 From: john-rock Date: Fri, 29 Sep 2023 14:40:56 -0400 Subject: [PATCH 003/305] update package lock --- website/package-lock.json | 1022 ++++++++++++++++++++++++++++++++++++- 1 file changed, 994 insertions(+), 28 deletions(-) diff --git a/website/package-lock.json b/website/package-lock.json index b15a903e97f..0e907bfd99f 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -36,6 +36,7 @@ "react-dom": "^17.0.1", "react-full-screen": "^1.1.1", "react-is": "^18.1.0", + "react-select": "^5.7.5", "react-tooltip": "^4.2.21", "redoc": "^2.0.0-rc.57", "rehype-katex": "^5.0.0", @@ -73,6 +74,7 @@ "stream-http": "^3.2.0", "style-loader": "^1.1.3", "svg-inline-loader": "^0.8.2", + "tailwindcss": "^3.3.3", "tty-browserify": "0.0.1", "webpack": "^5.75.0", "webpack-dev-server": "^4.11.1" @@ -232,6 +234,18 @@ "@algolia/requester-common": "4.16.0" } }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@ampproject/remapping": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", @@ -3098,6 +3112,59 @@ "node": ">=12" } }, + "node_modules/@emotion/babel-plugin": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", + "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/serialize": "^1.1.2", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "node_modules/@emotion/babel-plugin/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", + "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", + "dependencies": { + "@emotion/memoize": "^0.8.1", + "@emotion/sheet": "^1.2.2", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/cache/node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "node_modules/@emotion/hash": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" + }, "node_modules/@emotion/is-prop-valid": { "version": "0.8.8", "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", @@ -3111,6 +3178,56 @@ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" }, + "node_modules/@emotion/react": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.1.tgz", + "integrity": "sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/cache": "^11.11.0", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.2.tgz", + "integrity": "sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==", + "dependencies": { + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/unitless": "^0.8.1", + "@emotion/utils": "^1.2.1", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/serialize/node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "node_modules/@emotion/serialize/node_modules/@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" + }, + "node_modules/@emotion/sheet": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", + "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" + }, "node_modules/@emotion/stylis": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", @@ -3121,6 +3238,24 @@ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", + "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", + "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" + }, "node_modules/@endiliey/react-ideal-image": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/@endiliey/react-ideal-image/-/react-ideal-image-0.0.11.tgz", @@ -3204,6 +3339,28 @@ "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-5.5.3.tgz", "integrity": "sha512-R11tGE6yIFwqpaIqcfkcg7AICXzFg14+5h5v0TfF/9+RMDL6jhzCy/pxHVOfbALGdtVYdt6JdR21tuxEgl34dw==" }, + "node_modules/@floating-ui/core": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.0.tgz", + "integrity": "sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==", + "dependencies": { + "@floating-ui/utils": "^0.1.3" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.3.tgz", + "integrity": "sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==", + "dependencies": { + "@floating-ui/core": "^1.4.2", + "@floating-ui/utils": "^0.1.3" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.4.tgz", + "integrity": "sha512-qprfWkn82Iw821mcKofJ5Pk9wgioHicxcQMxx+5zt5GSKoqdWvgG5AxVmpmUUjzTLPVSH5auBrhI93Deayn/DA==" + }, "node_modules/@fortawesome/fontawesome-common-types": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.0.tgz", @@ -6820,6 +6977,14 @@ "@types/react-router": "*" } }, + "node_modules/@types/react-transition-group": { + "version": "4.4.7", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.7.tgz", + "integrity": "sha512-ICCyBl5mvyqYp8Qeq9B5G/fyBSRC0zx3XM3sCC6KkcMsNeAHqXBKkmat4GqdJET5jtYUpZXrxI5flve5qhi2Eg==", + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@types/resize-observer-browser": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/@types/resize-observer-browser/-/resize-observer-browser-0.1.7.tgz", @@ -7636,6 +7801,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -7981,6 +8152,20 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", @@ -10535,6 +10720,12 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, "node_modules/diff-sequences": { "version": "29.4.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", @@ -10570,6 +10761,12 @@ "node": ">=8" } }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, "node_modules/dns-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", @@ -12111,6 +12308,11 @@ "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, "node_modules/find-up": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", @@ -14081,9 +14283,9 @@ } }, "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "dependencies": { "has": "^1.0.3" }, @@ -16052,6 +16254,15 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/jiti": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.20.0.tgz", + "integrity": "sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, "node_modules/joi": { "version": "17.8.3", "resolved": "https://registry.npmjs.org/joi/-/joi-17.8.3.tgz", @@ -17456,6 +17667,11 @@ "node": ">= 4.0.0" } }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + }, "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -17884,6 +18100,17 @@ "multicast-dns": "cli.js" } }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "node_modules/nano-memoize": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/nano-memoize/-/nano-memoize-1.3.1.tgz", @@ -17898,9 +18125,15 @@ } }, "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -18335,6 +18568,15 @@ "node": ">=0.10.0" } }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/object-inspect": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", @@ -19034,9 +19276,9 @@ } }, "node_modules/postcss": { - "version": "8.4.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", - "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "funding": [ { "type": "opencollective", @@ -19045,10 +19287,14 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -19158,6 +19404,80 @@ "postcss": "^8.2.15" } }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", + "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", + "dev": true, + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^2.1.1" + }, + "engines": { + "node": ">= 14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/yaml": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz", + "integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, "node_modules/postcss-loader": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.2.tgz", @@ -19428,6 +19748,25 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, "node_modules/postcss-normalize-charset": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", @@ -20644,6 +20983,26 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "node_modules/react-select": { + "version": "5.7.5", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.7.5.tgz", + "integrity": "sha512-jgYZa2xgKP0DVn5GZk7tZwbRx7kaVz1VqU41S8z1KWmshRDhlrpKS0w80aS1RaK5bVIXpttgSou7XCjWw1ncKA==", + "dependencies": { + "@babel/runtime": "^7.12.0", + "@emotion/cache": "^11.4.0", + "@emotion/react": "^11.8.1", + "@floating-ui/dom": "^1.0.1", + "@types/react-transition-group": "^4.4.0", + "memoize-one": "^6.0.0", + "prop-types": "^15.6.0", + "react-transition-group": "^4.3.0", + "use-isomorphic-layout-effect": "^1.1.2" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-tabs": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/react-tabs/-/react-tabs-3.2.3.tgz", @@ -20696,6 +21055,30 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/react-transition-group/node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, "node_modules/react-universal-interface": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/react-universal-interface/-/react-universal-interface-0.6.2.tgz", @@ -20719,6 +21102,15 @@ "react": "^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, "node_modules/readable-stream": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.1.tgz", @@ -21378,11 +21770,11 @@ "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" }, "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.6", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", + "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -22870,6 +23262,71 @@ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" }, + "node_modules/sucrase": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", + "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -23165,6 +23622,64 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, + "node_modules/tailwindcss": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz", + "integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==", + "dev": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.12", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.18.2", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/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/tailwindcss/node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -23333,6 +23848,27 @@ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/throat": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", @@ -23505,6 +24041,12 @@ "resolved": "https://registry.npmjs.org/ts-easing/-/ts-easing-0.2.0.tgz", "integrity": "sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==" }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, "node_modules/ts-keycode-enum": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/ts-keycode-enum/-/ts-keycode-enum-1.0.6.tgz", @@ -25404,6 +25946,12 @@ "@algolia/requester-common": "4.16.0" } }, + "@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true + }, "@ampproject/remapping": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", @@ -27423,6 +27971,60 @@ "tslib": "^2.4.0" } }, + "@emotion/babel-plugin": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", + "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/serialize": "^1.1.2", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + }, + "dependencies": { + "@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + } + } + }, + "@emotion/cache": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", + "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", + "requires": { + "@emotion/memoize": "^0.8.1", + "@emotion/sheet": "^1.2.2", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "stylis": "4.2.0" + }, + "dependencies": { + "@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + } + } + }, + "@emotion/hash": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" + }, "@emotion/is-prop-valid": { "version": "0.8.8", "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", @@ -27436,6 +28038,50 @@ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" }, + "@emotion/react": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.1.tgz", + "integrity": "sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==", + "requires": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/cache": "^11.11.0", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "hoist-non-react-statics": "^3.3.1" + } + }, + "@emotion/serialize": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.2.tgz", + "integrity": "sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==", + "requires": { + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/unitless": "^0.8.1", + "@emotion/utils": "^1.2.1", + "csstype": "^3.0.2" + }, + "dependencies": { + "@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" + } + } + }, + "@emotion/sheet": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", + "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" + }, "@emotion/stylis": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", @@ -27446,6 +28092,22 @@ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" }, + "@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", + "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", + "requires": {} + }, + "@emotion/utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" + }, + "@emotion/weak-memoize": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", + "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" + }, "@endiliey/react-ideal-image": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/@endiliey/react-ideal-image/-/react-ideal-image-0.0.11.tgz", @@ -27502,6 +28164,28 @@ "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-5.5.3.tgz", "integrity": "sha512-R11tGE6yIFwqpaIqcfkcg7AICXzFg14+5h5v0TfF/9+RMDL6jhzCy/pxHVOfbALGdtVYdt6JdR21tuxEgl34dw==" }, + "@floating-ui/core": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.0.tgz", + "integrity": "sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==", + "requires": { + "@floating-ui/utils": "^0.1.3" + } + }, + "@floating-ui/dom": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.3.tgz", + "integrity": "sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==", + "requires": { + "@floating-ui/core": "^1.4.2", + "@floating-ui/utils": "^0.1.3" + } + }, + "@floating-ui/utils": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.4.tgz", + "integrity": "sha512-qprfWkn82Iw821mcKofJ5Pk9wgioHicxcQMxx+5zt5GSKoqdWvgG5AxVmpmUUjzTLPVSH5auBrhI93Deayn/DA==" + }, "@fortawesome/fontawesome-common-types": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.0.tgz", @@ -30317,6 +31001,14 @@ "@types/react-router": "*" } }, + "@types/react-transition-group": { + "version": "4.4.7", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.7.tgz", + "integrity": "sha512-ICCyBl5mvyqYp8Qeq9B5G/fyBSRC0zx3XM3sCC6KkcMsNeAHqXBKkmat4GqdJET5jtYUpZXrxI5flve5qhi2Eg==", + "requires": { + "@types/react": "*" + } + }, "@types/resize-observer-browser": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/@types/resize-observer-browser/-/resize-observer-browser-0.1.7.tgz", @@ -30966,6 +31658,12 @@ "color-convert": "^2.0.1" } }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, "anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -31224,6 +31922,16 @@ "@types/babel__traverse": "^7.0.6" } }, + "babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "requires": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + } + }, "babel-plugin-polyfill-corejs2": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", @@ -33156,6 +33864,12 @@ } } }, + "didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, "diff-sequences": { "version": "29.4.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", @@ -33187,6 +33901,12 @@ "path-type": "^4.0.0" } }, + "dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, "dns-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", @@ -34367,6 +35087,11 @@ "pkg-dir": "^4.1.0" } }, + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, "find-up": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", @@ -35795,9 +36520,9 @@ } }, "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "requires": { "has": "^1.0.3" } @@ -37299,6 +38024,12 @@ } } }, + "jiti": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.20.0.tgz", + "integrity": "sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==", + "dev": true + }, "joi": { "version": "17.8.3", "resolved": "https://registry.npmjs.org/joi/-/joi-17.8.3.tgz", @@ -38307,6 +39038,11 @@ "fs-monkey": "^1.0.3" } }, + "memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -38591,6 +39327,17 @@ "thunky": "^1.0.2" } }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "nano-memoize": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/nano-memoize/-/nano-memoize-1.3.1.tgz", @@ -38605,9 +39352,9 @@ } }, "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==" }, "napi-build-utils": { "version": "1.0.2", @@ -38932,6 +39679,12 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, + "object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true + }, "object-inspect": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", @@ -39455,11 +40208,11 @@ } }, "postcss": { - "version": "8.4.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", - "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "requires": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } @@ -39525,6 +40278,44 @@ "postcss-selector-parser": "^6.0.5" } }, + "postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + } + }, + "postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "requires": { + "camelcase-css": "^2.0.1" + } + }, + "postcss-load-config": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", + "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", + "dev": true, + "requires": { + "lilconfig": "^2.0.5", + "yaml": "^2.1.1" + }, + "dependencies": { + "yaml": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz", + "integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==", + "dev": true + } + } + }, "postcss-loader": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.2.tgz", @@ -39713,6 +40504,15 @@ } } }, + "postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.11" + } + }, "postcss-normalize-charset": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", @@ -40579,6 +41379,22 @@ "prop-types": "^15.7.2" } }, + "react-select": { + "version": "5.7.5", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.7.5.tgz", + "integrity": "sha512-jgYZa2xgKP0DVn5GZk7tZwbRx7kaVz1VqU41S8z1KWmshRDhlrpKS0w80aS1RaK5bVIXpttgSou7XCjWw1ncKA==", + "requires": { + "@babel/runtime": "^7.12.0", + "@emotion/cache": "^11.4.0", + "@emotion/react": "^11.8.1", + "@floating-ui/dom": "^1.0.1", + "@types/react-transition-group": "^4.4.0", + "memoize-one": "^6.0.0", + "prop-types": "^15.6.0", + "react-transition-group": "^4.3.0", + "use-isomorphic-layout-effect": "^1.1.2" + } + }, "react-tabs": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/react-tabs/-/react-tabs-3.2.3.tgz", @@ -40614,6 +41430,28 @@ } } }, + "react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "requires": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "dependencies": { + "dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "requires": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + } + } + }, "react-universal-interface": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/react-universal-interface/-/react-universal-interface-0.6.2.tgz", @@ -40631,6 +41469,15 @@ "react-is": "^17.0.1 || ^18.0.0" } }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "requires": { + "pify": "^2.3.0" + } + }, "readable-stream": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.1.tgz", @@ -41126,11 +41973,11 @@ "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" }, "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.6", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", + "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", "requires": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -42254,6 +43101,54 @@ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" }, + "sucrase": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", + "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -42470,6 +43365,53 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, + "tailwindcss": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz", + "integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==", + "dev": true, + "requires": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.12", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.18.2", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.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" + } + }, + "lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true + } + } + }, "tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -42584,6 +43526,24 @@ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, "throat": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", @@ -42717,6 +43677,12 @@ "resolved": "https://registry.npmjs.org/ts-easing/-/ts-easing-0.2.0.tgz", "integrity": "sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==" }, + "ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, "ts-keycode-enum": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/ts-keycode-enum/-/ts-keycode-enum-1.0.6.tgz", From 0682660a91a92322fa0f2c01c58c3d5ee648af33 Mon Sep 17 00:00:00 2001 From: john-rock Date: Fri, 29 Sep 2023 16:09:48 -0400 Subject: [PATCH 004/305] get search working --- .../components/quickstartGuideList/index.js | 19 ++++++++++++------- website/src/components/searchInput/index.js | 15 +++++++++++++++ 2 files changed, 27 insertions(+), 7 deletions(-) create mode 100644 website/src/components/searchInput/index.js diff --git a/website/src/components/quickstartGuideList/index.js b/website/src/components/quickstartGuideList/index.js index 61069299c6b..638eec0ae55 100644 --- a/website/src/components/quickstartGuideList/index.js +++ b/website/src/components/quickstartGuideList/index.js @@ -7,6 +7,7 @@ import Hero from '@site/src/components/hero'; import QuickstartGuideCard from '../quickstartGuideCard' import styles from './styles.module.css'; import { SelectDropdown } from '../selectDropdown'; +import SearchInput from '../searchInput'; const quickstartTitle = 'Quickstarts' const quickstartDescription = 'dbt Core is a powerful open-source tool for data transformations and dbt Cloud is the fastest and most reliable way to deploy your dbt jobs. With the help of a sample project, learn how to quickly start using dbt and one of the most common data platforms.' @@ -17,11 +18,12 @@ function QuickstartList({ quickstartData }) { const [filteredData, setFilteredData] = useState(quickstartData); const [selectedTags, setSelectedTags] = useState([]); const [selectedLevel, setSelectedLevel] = useState([]); + const [searchInput, setSearchInput] = useState(''); // Build meta title from quickstartTitle and docusaurus config site title const metaTitle = `${quickstartTitle}${siteConfig?.title ? ` | ${siteConfig.title}` : ''}` - // Create an options array for the tag select dropdown + // Array for the tag select dropdown const tagOptions = []; quickstartData?.forEach((guide) => { if (guide?.data?.tags) { @@ -34,7 +36,7 @@ function QuickstartList({ quickstartData }) { } }); - // Create an options array for the level select dropdown + // Array for the level select dropdown const levelOptions = [] quickstartData?.forEach((guide) => { if (guide?.data?.level) { @@ -45,7 +47,8 @@ function QuickstartList({ quickstartData }) { } }); - const handleFilterChange = () => { + // Handle all filters + const handleDataFilter = () => { const filteredGuides = quickstartData.filter((guide) => { const tagsMatch = selectedTags.length === 0 || (Array.isArray(guide?.data?.tags) && selectedTags.every((tag) => guide?.data?.tags.includes(tag.value) @@ -53,15 +56,15 @@ function QuickstartList({ quickstartData }) { const levelMatch = selectedLevel.length === 0 || (guide?.data?.level && selectedLevel.some((level) => guide?.data?.level === level.value )); - return tagsMatch && levelMatch; + const titleMatch = searchInput === '' || guide?.data?.title?.toLowerCase().includes(searchInput.toLowerCase()); + return tagsMatch && levelMatch && titleMatch; }); setFilteredData(filteredGuides); }; - useEffect(() => { - handleFilterChange(); - }, [selectedTags, selectedLevel]); + handleDataFilter(); + }, [selectedTags, selectedLevel, searchInput]); return ( @@ -81,6 +84,8 @@ function QuickstartList({ quickstartData }) {
+ setSearchInput(value)} placeholder='Search Quickstarts' /> +
{filteredData && filteredData.length > 0 ? ( diff --git a/website/src/components/searchInput/index.js b/website/src/components/searchInput/index.js new file mode 100644 index 00000000000..04d1ded7661 --- /dev/null +++ b/website/src/components/searchInput/index.js @@ -0,0 +1,15 @@ +import React from 'react'; + +const SearchInput = ({ value, onChange, placeholder = "Search...", ...props }) => { + return ( + onChange && onChange(e.target.value)} + placeholder={placeholder} + {...props} + /> + ); +}; + +export default SearchInput; From 71c382c7f1a151c0b14a3f0501b839507d5b0364 Mon Sep 17 00:00:00 2001 From: john-rock Date: Fri, 29 Sep 2023 16:33:22 -0400 Subject: [PATCH 005/305] small performance refactors --- .../components/quickstartGuideList/index.js | 78 +++++++++---------- 1 file changed, 35 insertions(+), 43 deletions(-) diff --git a/website/src/components/quickstartGuideList/index.js b/website/src/components/quickstartGuideList/index.js index 638eec0ae55..a37ec23966a 100644 --- a/website/src/components/quickstartGuideList/index.js +++ b/website/src/components/quickstartGuideList/index.js @@ -1,5 +1,5 @@ import React from 'react'; -import { useState, useEffect } from 'react'; +import { useState, useEffect, useMemo } from 'react'; import Head from '@docusaurus/Head'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import Layout from '@theme/Layout'; @@ -14,38 +14,31 @@ const quickstartDescription = 'dbt Core is a powerful open-source tool for data function QuickstartList({ quickstartData }) { - const { siteConfig } = useDocusaurusContext() - const [filteredData, setFilteredData] = useState(quickstartData); + const { siteConfig } = useDocusaurusContext(); + const [filteredData, setFilteredData] = useState(() => quickstartData); const [selectedTags, setSelectedTags] = useState([]); const [selectedLevel, setSelectedLevel] = useState([]); - const [searchInput, setSearchInput] = useState(''); - + const [searchInput, setSearchInput] = useState(''); + // Build meta title from quickstartTitle and docusaurus config site title - const metaTitle = `${quickstartTitle}${siteConfig?.title ? ` | ${siteConfig.title}` : ''}` + const metaTitle = `${quickstartTitle}${siteConfig?.title ? ` | ${siteConfig.title}` : ''}`; - // Array for the tag select dropdown - const tagOptions = []; - quickstartData?.forEach((guide) => { - if (guide?.data?.tags) { - guide?.data?.tags?.forEach((tag) => { - const tagOption = { value: tag, label: tag }; - if (!tagOptions.find((option) => option?.value === tag)) { - tagOptions.push(tagOption); - } - }); - } - }); + // Memoized computation of tag and level options + const tagOptions = useMemo(() => { + const tags = new Set(); + quickstartData.forEach(guide => + guide?.data?.tags?.forEach(tag => tags.add(tag)) + ); + return Array.from(tags).map(tag => ({ value: tag, label: tag })); + }, [quickstartData]); - // Array for the level select dropdown - const levelOptions = [] - quickstartData?.forEach((guide) => { - if (guide?.data?.level) { - const levelOption = { value: guide?.data?.level, label: guide?.data?.level }; - if (!levelOptions.find((option) => option?.value === guide?.data?.level)) { - levelOptions.push(levelOption); - } - } - }); + const levelOptions = useMemo(() => { + const levels = new Set(); + quickstartData.forEach(guide => + guide?.data?.level && levels.add(guide.data.level) + ); + return Array.from(levels).map(level => ({ value: level, label: level })); + }, [quickstartData]); // Handle all filters const handleDataFilter = () => { @@ -61,7 +54,7 @@ function QuickstartList({ quickstartData }) { }); setFilteredData(filteredGuides); }; - + useEffect(() => { handleDataFilter(); }, [selectedTags, selectedLevel, searchInput]); @@ -73,28 +66,27 @@ function QuickstartList({ quickstartData }) { -
- - - setSearchInput(value)} placeholder='Search Quickstarts' /> - + + + setSearchInput(value)} placeholder='Search Quickstarts' />
-
+
{filteredData && filteredData.length > 0 ? ( <> - {filteredData.map((guide, i) => ( - + {filteredData.map((guide) => ( + ))} - ) : + ) :

No quickstarts are available with the selected filters.

}
@@ -103,4 +95,4 @@ function QuickstartList({ quickstartData }) { ) } -export default QuickstartList +export default QuickstartList; From 61690ad93097c04b69bac8e50dfe908dfb1f7dd4 Mon Sep 17 00:00:00 2001 From: john-rock Date: Mon, 2 Oct 2023 10:23:16 -0400 Subject: [PATCH 006/305] test prod build with styles --- website/src/components/searchInput/index.js | 2 ++ .../src/components/selectDropdown/index.js | 7 +++++++ .../selectDropdown/styles.module.css | 21 +++++++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/website/src/components/searchInput/index.js b/website/src/components/searchInput/index.js index 04d1ded7661..905c2b4131f 100644 --- a/website/src/components/searchInput/index.js +++ b/website/src/components/searchInput/index.js @@ -1,4 +1,5 @@ import React from 'react'; +import styles from './styles.module.css'; const SearchInput = ({ value, onChange, placeholder = "Search...", ...props }) => { return ( @@ -8,6 +9,7 @@ const SearchInput = ({ value, onChange, placeholder = "Search...", ...props }) = onChange={(e) => onChange && onChange(e.target.value)} placeholder={placeholder} {...props} + className={styles.inputContainer} /> ); }; diff --git a/website/src/components/selectDropdown/index.js b/website/src/components/selectDropdown/index.js index 7169d214160..f42e1b1b3f6 100644 --- a/website/src/components/selectDropdown/index.js +++ b/website/src/components/selectDropdown/index.js @@ -3,16 +3,23 @@ import Select from "react-select"; import styles from "./styles.module.css"; export const SelectDropdown = ({ options, value, onChange, isMulti, placeHolder }) => { + + return ( Date: Tue, 3 Oct 2023 10:39:39 -0400 Subject: [PATCH 014/305] more style wips --- website/docs/quickstarts/redshift-qs.md | 1 + website/src/components/searchInput/styles.module.css | 7 +++++++ website/src/components/selectDropdown/styles.module.css | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/website/docs/quickstarts/redshift-qs.md b/website/docs/quickstarts/redshift-qs.md index 82c865ae123..04b21cf8d57 100644 --- a/website/docs/quickstarts/redshift-qs.md +++ b/website/docs/quickstarts/redshift-qs.md @@ -5,6 +5,7 @@ platform: 'dbt-cloud' icon: 'redshift' hide_table_of_contents: true tags: ['Redshift', 'dbt Cloud'] +level: 'Expert' --- ## Introduction diff --git a/website/src/components/searchInput/styles.module.css b/website/src/components/searchInput/styles.module.css index e16c1ced26c..df7d6509524 100644 --- a/website/src/components/searchInput/styles.module.css +++ b/website/src/components/searchInput/styles.module.css @@ -3,9 +3,16 @@ border-radius: 0.3125rem; border: 2px solid var(--navy-200-c-6-ccd-4, #C6CCD4); min-height: 38px; + font-size: .875rem; + font-family: var(--ifm-font-family-base); } .inputContainer:active, .inputContainer:focus { border: 2px solid #4f5d75; outline: none; } + +.inputContainer::placeholder { + all: unset; + -webkit-text-security: initial; +} diff --git a/website/src/components/selectDropdown/styles.module.css b/website/src/components/selectDropdown/styles.module.css index 84484a1e79e..7b9a82094d7 100644 --- a/website/src/components/selectDropdown/styles.module.css +++ b/website/src/components/selectDropdown/styles.module.css @@ -8,6 +8,10 @@ border: 2px solid #4f5d75; } +.selectContainer [class$="-palceholder"] { + font-size: .875rem; +} + .selectContainer [class$="-control"] { padding: 0rem 1rem } From 0934921769b80f5a2e3c63b3d5abf64fc74ad090 Mon Sep 17 00:00:00 2001 From: Ben Cassell <98852248+benc-db@users.noreply.github.com> Date: Thu, 5 Oct 2023 12:44:04 -0700 Subject: [PATCH 015/305] Update databricks-configs.md for tblproperties --- .../resource-configs/databricks-configs.md | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/website/docs/reference/resource-configs/databricks-configs.md b/website/docs/reference/resource-configs/databricks-configs.md index e57e1efc04a..29c027fc2c1 100644 --- a/website/docs/reference/resource-configs/databricks-configs.md +++ b/website/docs/reference/resource-configs/databricks-configs.md @@ -437,3 +437,27 @@ Additionally, if you change the model definition of your materialized view or st We plan to address these limitations during the 1.7.x timeframe. + +## Setting Table Properties +[Table properties](https://docs.databricks.com/en/sql/language-manual/sql-ref-syntax-ddl-tblproperties.html) can be set with your configuration for tables or views using `tblproperties`: + + + +```sql +{{ config( + tblproperties={ + 'delta.autoOptimize.optimizeWrite' : 'true', + 'delta.autoOptimize.autoCompact' : 'true' + } + ) }} +``` + + + +:::caution + +These properties are sent directly to Databricks without validation in dbt, so be thoughtful with how you use this feature. Yu will need to do a full refresh of incremental materializations if you change their `tblproperties`. + +::: + +One application of this feature is making `delta` tables compatible with `iceberg` readers using the [Universal Format](https://docs.databricks.com/en/delta/uniform.html). From c723c06f153a08cae6da5dfa6554fca89d9ede09 Mon Sep 17 00:00:00 2001 From: Ben Cassell <98852248+benc-db@users.noreply.github.com> Date: Thu, 5 Oct 2023 12:57:27 -0700 Subject: [PATCH 016/305] Update databricks-configs.md --- website/docs/reference/resource-configs/databricks-configs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/reference/resource-configs/databricks-configs.md b/website/docs/reference/resource-configs/databricks-configs.md index 29c027fc2c1..b09435770fe 100644 --- a/website/docs/reference/resource-configs/databricks-configs.md +++ b/website/docs/reference/resource-configs/databricks-configs.md @@ -456,7 +456,7 @@ We plan to address these limitations during the 1.7.x timeframe. :::caution -These properties are sent directly to Databricks without validation in dbt, so be thoughtful with how you use this feature. Yu will need to do a full refresh of incremental materializations if you change their `tblproperties`. +These properties are sent directly to Databricks without validation in dbt, so be thoughtful with how you use this feature. You will need to do a full refresh of incremental materializations if you change their `tblproperties`. ::: From b8ec1c9d639378a58b5b0a40c787391e2a98ea05 Mon Sep 17 00:00:00 2001 From: Doug Beatty <44704949+dbeatty10@users.noreply.github.com> Date: Sat, 7 Oct 2023 13:45:27 -0600 Subject: [PATCH 017/305] Exposures tab for `meta` config --- website/docs/reference/resource-configs/meta.md | 1 + 1 file changed, 1 insertion(+) diff --git a/website/docs/reference/resource-configs/meta.md b/website/docs/reference/resource-configs/meta.md index d24c5fbaee1..a82836c7d8f 100644 --- a/website/docs/reference/resource-configs/meta.md +++ b/website/docs/reference/resource-configs/meta.md @@ -14,6 +14,7 @@ default_value: {} { label: 'Tests', value: 'tests', }, { label: 'Analyses', value: 'analyses', }, { label: 'Macros', value: 'macros', }, + { label: 'Exposures', value: 'exposures', }, ] }> From 7b74bc932c503546be03846b921adb64a3787975 Mon Sep 17 00:00:00 2001 From: Doug Beatty <44704949+dbeatty10@users.noreply.github.com> Date: Sat, 7 Oct 2023 13:53:57 -0600 Subject: [PATCH 018/305] Tab for `semantic_models` --- .../docs/reference/resource-configs/meta.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/website/docs/reference/resource-configs/meta.md b/website/docs/reference/resource-configs/meta.md index a82836c7d8f..7e9d7208e74 100644 --- a/website/docs/reference/resource-configs/meta.md +++ b/website/docs/reference/resource-configs/meta.md @@ -15,6 +15,7 @@ default_value: {} { label: 'Analyses', value: 'analyses', }, { label: 'Macros', value: 'macros', }, { label: 'Exposures', value: 'exposures', }, + { label: 'Semantic models', value: 'semantic_models', }, ] }> @@ -173,6 +174,24 @@ exposures: + + + + +```yml +version: 2 + +semantic_models: + - name: semantic_model_name + config: + meta: {} + +``` + + + + + ## Definition From f14db1bf902dd29fe0a9825a03b11c254a37b68a Mon Sep 17 00:00:00 2001 From: Doug Beatty <44704949+dbeatty10@users.noreply.github.com> Date: Sat, 7 Oct 2023 14:06:48 -0600 Subject: [PATCH 019/305] `enabled` config for semantic models --- .../reference/resource-configs/enabled.md | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/website/docs/reference/resource-configs/enabled.md b/website/docs/reference/resource-configs/enabled.md index b6d0961ee60..233c1d2e8af 100644 --- a/website/docs/reference/resource-configs/enabled.md +++ b/website/docs/reference/resource-configs/enabled.md @@ -15,6 +15,7 @@ default_value: true { label: 'Sources', value: 'sources', }, { label: 'Metrics', value: 'metrics', }, { label: 'Exposures', value: 'exposures', }, + { label: 'Semantic models', value: 'semantic_models', }, ] }> @@ -250,6 +251,45 @@ exposures: + + + + +Support for disabling semantic models was added in dbt Core v1.7 + + + + + + + +```yaml +semantic_models: + [](/reference/resource-configs/resource-path): + [+](/reference/resource-configs/plus-prefix)enabled: true | false + +``` + + + + + +```yaml +version: 2 + +semantic_models: + - name: [] + [config](/reference/resource-properties/config): + enabled: true | false + +``` + + + + + + + ## Definition From 2e28ca0bfee02f5a566b0c5d49bb24a6cce265eb Mon Sep 17 00:00:00 2001 From: Doug Beatty <44704949+dbeatty10@users.noreply.github.com> Date: Sat, 7 Oct 2023 14:32:04 -0600 Subject: [PATCH 020/305] `group` config for semantic models --- .../docs/reference/resource-configs/group.md | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/website/docs/reference/resource-configs/group.md b/website/docs/reference/resource-configs/group.md index dd73d99edff..acd5a878d6b 100644 --- a/website/docs/reference/resource-configs/group.md +++ b/website/docs/reference/resource-configs/group.md @@ -16,6 +16,7 @@ This functionality is new in v1.5. { label: 'Tests', value: 'tests', }, { label: 'Analyses', value: 'analyses', }, { label: 'Metrics', value: 'metrics', }, + { label: 'Semantic models', value: 'semantic_models', }, ] }> @@ -265,6 +266,44 @@ metrics: + + + + + +Support for grouping semantic models was added in dbt Core v1.7 + + + + + + + +```yaml +semantic_models: + [](resource-path): + [+](plus-prefix)group: finance +``` + + + + + +```yaml +version: 2 + +semantic_models: + - name: [] + group: finance + +``` + + + + + + + ## Definition From abfd0b2c7fb56c5ace29f109549b6dd1044afc48 Mon Sep 17 00:00:00 2001 From: Doug Beatty <44704949+dbeatty10@users.noreply.github.com> Date: Sat, 7 Oct 2023 14:44:19 -0600 Subject: [PATCH 021/305] Add version blocks for `meta` for semantic models --- website/docs/reference/resource-configs/meta.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/website/docs/reference/resource-configs/meta.md b/website/docs/reference/resource-configs/meta.md index 7e9d7208e74..5f63323bed2 100644 --- a/website/docs/reference/resource-configs/meta.md +++ b/website/docs/reference/resource-configs/meta.md @@ -176,6 +176,14 @@ exposures: + + +Support for grouping semantic models was added in dbt Core v1.7 + + + + + ```yml @@ -190,6 +198,8 @@ semantic_models: + + From e6fc24f0901329250dc21672340222b5a7863a1e Mon Sep 17 00:00:00 2001 From: Doug Beatty <44704949+dbeatty10@users.noreply.github.com> Date: Sat, 7 Oct 2023 14:53:00 -0600 Subject: [PATCH 022/305] Fix version blocks across multiple resource types --- .../docs/reference/resource-configs/group.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/website/docs/reference/resource-configs/group.md b/website/docs/reference/resource-configs/group.md index acd5a878d6b..f04c08556b9 100644 --- a/website/docs/reference/resource-configs/group.md +++ b/website/docs/reference/resource-configs/group.md @@ -29,8 +29,6 @@ Support for grouping models was added in dbt Core v1.5 - - ```yml @@ -66,6 +64,8 @@ select ... ``` + + @@ -80,8 +80,6 @@ Support for grouping seeds was added in dbt Core v1.5 - - ```yml @@ -102,6 +100,8 @@ seeds: + + @@ -115,8 +115,6 @@ Support for grouping snapshots was added in dbt Core v1.5 - - ```yml @@ -143,6 +141,8 @@ select ... + + @@ -156,8 +156,6 @@ Support for grouping tests was added in dbt Core v1.5 - - ```yml @@ -210,6 +208,8 @@ select ... + + @@ -239,8 +239,6 @@ Support for grouping metrics was added in dbt Core v1.5 - - ```yaml @@ -264,6 +262,8 @@ metrics: + + From 871a01f5923c087e7274cd5d6f4ede329e26f607 Mon Sep 17 00:00:00 2001 From: Doug Beatty <44704949+dbeatty10@users.noreply.github.com> Date: Sat, 7 Oct 2023 15:01:39 -0600 Subject: [PATCH 023/305] Fix placement of closing tag for VersionBlock --- website/docs/reference/resource-configs/group.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docs/reference/resource-configs/group.md b/website/docs/reference/resource-configs/group.md index f04c08556b9..7e4df42597f 100644 --- a/website/docs/reference/resource-configs/group.md +++ b/website/docs/reference/resource-configs/group.md @@ -64,10 +64,10 @@ select ... ``` - - + + From bee4a9bcd2d0d419b18e099947553ab74cac4960 Mon Sep 17 00:00:00 2001 From: Doug Beatty <44704949+dbeatty10@users.noreply.github.com> Date: Sat, 7 Oct 2023 15:26:06 -0600 Subject: [PATCH 024/305] Clarify that `meta` is no longer "always" available as a top-level key --- website/docs/reference/resource-configs/meta.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/reference/resource-configs/meta.md b/website/docs/reference/resource-configs/meta.md index 5f63323bed2..e5ea037c331 100644 --- a/website/docs/reference/resource-configs/meta.md +++ b/website/docs/reference/resource-configs/meta.md @@ -207,7 +207,7 @@ semantic_models: ## Definition The `meta` field can be used to set metadata for a resource. This metadata is compiled into the `manifest.json` file generated by dbt, and is viewable in the auto-generated documentation. -Depending on the resource you're configuring, `meta` may be available within the `config` property, or as a top-level key. (For backwards compatibility, `meta` is always supported as a top-level key, though without the capabilities of config inheritance.) +Depending on the resource you're configuring, `meta` may be available within the config property, and/or as a top-level key. (For backwards compatibility, `meta` is often (but not always) supported as a top-level key, though without the capabilities of `config` inheritance.) ## Examples From bc43d6dc41b6c250fd67f968fb54c9528c9eb0d7 Mon Sep 17 00:00:00 2001 From: Doug Beatty <44704949+dbeatty10@users.noreply.github.com> Date: Sat, 7 Oct 2023 15:38:06 -0600 Subject: [PATCH 025/305] Clarify the definition --- website/docs/reference/resource-configs/enabled.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/reference/resource-configs/enabled.md b/website/docs/reference/resource-configs/enabled.md index 233c1d2e8af..98648fbf032 100644 --- a/website/docs/reference/resource-configs/enabled.md +++ b/website/docs/reference/resource-configs/enabled.md @@ -293,7 +293,7 @@ semantic_models: ## Definition -An optional configuration for disabling models, seeds, snapshots, and tests. +An optional configuration for enabling or disabling a resource. * Default: true From d57c911ddda85ce72c42d48447fe749d6077653d Mon Sep 17 00:00:00 2001 From: Doug Beatty <44704949+dbeatty10@users.noreply.github.com> Date: Sat, 7 Oct 2023 15:39:10 -0600 Subject: [PATCH 026/305] Clarify the definition --- website/docs/reference/resource-configs/group.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/reference/resource-configs/group.md b/website/docs/reference/resource-configs/group.md index 7e4df42597f..0700f2d9bb3 100644 --- a/website/docs/reference/resource-configs/group.md +++ b/website/docs/reference/resource-configs/group.md @@ -307,7 +307,7 @@ semantic_models: ## Definition -An optional configuration for grouping models, analysis, snapshots, tests, and metrics. When a resource is grouped, dbt will allow it to reference private models within the same group. +An optional configuration for assigning a group to a resource. When a resource is grouped, dbt will allow it to reference private models within the same group. For more details on reference access between resources in groups, check out [model access](/docs/collaborate/govern/model-access#groups). From d11be7dd2a49b05c52050fdae8c679de3de65270 Mon Sep 17 00:00:00 2001 From: john-rock Date: Mon, 23 Oct 2023 10:48:53 -0400 Subject: [PATCH 027/305] update selectors --- website/src/components/selectDropdown/styles.module.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/src/components/selectDropdown/styles.module.css b/website/src/components/selectDropdown/styles.module.css index 7b9a82094d7..afe8b8d742f 100644 --- a/website/src/components/selectDropdown/styles.module.css +++ b/website/src/components/selectDropdown/styles.module.css @@ -49,7 +49,7 @@ } -.selectContainer [class$="-MultiValueRemove"] { +.selectContainer [aria-label^="Remove"] { padding: .5rem; border-radius: 0 0.3125rem 0.3125rem 0; padding-left: 4px; @@ -57,7 +57,7 @@ margin-left: .2rem; } -.selectContainer [class$="-MultiValueRemove"]:hover { +.selectContainer [aria-label^="Remove"]:hover { background-color: rgb(255, 189, 173); color: rgb(222, 53, 11); } From 8e9da30118b23226e1df12a2cdad249719a50df9 Mon Sep 17 00:00:00 2001 From: john-rock Date: Mon, 23 Oct 2023 11:18:22 -0400 Subject: [PATCH 028/305] get data on individual pages --- .../components/quickstartGuideCard/index.js | 33 +++++++++++++++++-- .../quickstartGuideCard/styles.module.css | 4 +++ .../quickstartTOC/styles.module.css | 2 +- website/src/theme/DocItem/Content/index.js | 7 ++++ 4 files changed, 42 insertions(+), 4 deletions(-) diff --git a/website/src/components/quickstartGuideCard/index.js b/website/src/components/quickstartGuideCard/index.js index a019022d079..97bc936923d 100644 --- a/website/src/components/quickstartGuideCard/index.js +++ b/website/src/components/quickstartGuideCard/index.js @@ -3,8 +3,9 @@ import Link from "@docusaurus/Link"; import styles from "./styles.module.css"; import getIconType from "../../utils/get-icon-type"; -function QuickstartGuideCard({ frontMatter }) { - const { id, title, time_to_complete, icon, tags, level, recently_updated } = frontMatter; +export default function QuickstartGuideCard({ frontMatter }) { + const { id, title, time_to_complete, icon, tags, level, recently_updated } = + frontMatter; return ( @@ -38,4 +39,30 @@ function QuickstartGuideCard({ frontMatter }) { ); } -export default QuickstartGuideCard; +export function QuickstartGuideTitle({ frontMatter }) { + const { id, title, time_to_complete, icon, tags, level, recently_updated } = + frontMatter; + + return ( +
+ {recently_updated && ( + Updated + )} + {time_to_complete && ( + {time_to_complete} + )} + + {(tags || level) && ( +
+ {tags && + tags.map((tag, i) => ( +
+ {tag} +
+ ))} + {level &&
{level}
} +
+ )} +
+ ); +} diff --git a/website/src/components/quickstartGuideCard/styles.module.css b/website/src/components/quickstartGuideCard/styles.module.css index d8f60cb3a73..5d517d951ef 100644 --- a/website/src/components/quickstartGuideCard/styles.module.css +++ b/website/src/components/quickstartGuideCard/styles.module.css @@ -82,3 +82,7 @@ color:#262A38; padding: 0rem 0.75rem; } + +.quickstartTitle { + +} diff --git a/website/src/components/quickstartTOC/styles.module.css b/website/src/components/quickstartTOC/styles.module.css index edfd0380098..20a4846cf3c 100644 --- a/website/src/components/quickstartTOC/styles.module.css +++ b/website/src/components/quickstartTOC/styles.module.css @@ -1,5 +1,5 @@ .quickstartTitle { - padding: 1rem 0 2rem; + } .tocList { diff --git a/website/src/theme/DocItem/Content/index.js b/website/src/theme/DocItem/Content/index.js index faca59ee2f3..5a5a9df9a76 100644 --- a/website/src/theme/DocItem/Content/index.js +++ b/website/src/theme/DocItem/Content/index.js @@ -23,8 +23,10 @@ import MDXContent from "@theme/MDXContent"; */ import CommunitySpotlightCard from "@site/src/components/communitySpotlightCard"; import QuickstartTOC from "@site/src/components/quickstartTOC"; +import {QuickstartGuideTitle} from "../../../components/quickstartGuideCard"; import styles from "./styles.module.css"; + function useSyntheticTitle() { const { metadata, frontMatter, contentTitle } = useDoc(); const shouldRender = @@ -60,12 +62,17 @@ export default function DocItemContent({ children }) { {children}
) : isQuickstartGuide ? ( + <> +
+
{children}
+ + ) : ( {children} )} From 31132db2efc54e77a6f88a5d3ff2c3fd57bd03e7 Mon Sep 17 00:00:00 2001 From: john-rock Date: Mon, 23 Oct 2023 15:13:00 -0400 Subject: [PATCH 029/305] styles wip --- website/docs/quickstarts/bigquery-qs.md | 1 + .../components/quickstartGuideCard/index.js | 7 +-- .../quickstartGuideCard/styles.module.css | 43 ++++++++++++++++++- 3 files changed, 47 insertions(+), 4 deletions(-) diff --git a/website/docs/quickstarts/bigquery-qs.md b/website/docs/quickstarts/bigquery-qs.md index 01b2cf7ba7e..ee88dc93402 100644 --- a/website/docs/quickstarts/bigquery-qs.md +++ b/website/docs/quickstarts/bigquery-qs.md @@ -7,6 +7,7 @@ icon: 'bigquery' hide_table_of_contents: true tags: ['BigQuery', 'dbt Cloud'] level: 'Beginner' +recently_updated: true --- ## Introduction diff --git a/website/src/components/quickstartGuideCard/index.js b/website/src/components/quickstartGuideCard/index.js index 97bc936923d..7c3faa3613e 100644 --- a/website/src/components/quickstartGuideCard/index.js +++ b/website/src/components/quickstartGuideCard/index.js @@ -39,17 +39,18 @@ export default function QuickstartGuideCard({ frontMatter }) { ); } +// Component that handles the information under the title on the quickstart guide page export function QuickstartGuideTitle({ frontMatter }) { - const { id, title, time_to_complete, icon, tags, level, recently_updated } = + const { time_to_complete, tags, level, recently_updated } = frontMatter; return ( -
+
{recently_updated && ( Updated )} {time_to_complete && ( - {time_to_complete} + {time_to_complete} )} {(tags || level) && ( diff --git a/website/src/components/quickstartGuideCard/styles.module.css b/website/src/components/quickstartGuideCard/styles.module.css index 5d517d951ef..93667fae75c 100644 --- a/website/src/components/quickstartGuideCard/styles.module.css +++ b/website/src/components/quickstartGuideCard/styles.module.css @@ -83,6 +83,47 @@ padding: 0rem 0.75rem; } -.quickstartTitle { +.infoContainer { + display: flex; + gap: 1rem; + margin-bottom: 4rem; +} + +.infoContainer > *:not(:first-child):not(:last-child) { + border-right: solid #262A38 3px; + border-left: solid #262A38 3px; + padding: 0 1rem 0 1rem; +} + +.infoContainer .tag_container { + display: flex; + flex-wrap: wrap; + gap: 0.375rem; + align-items: center; +} + +.infoContainer .tag_container .tag { + background: #E5E7EB; + border-radius: 1.5rem; + color:#262A38; + padding: 0rem 0.75rem; +} + +.infoContainer .time_to_complete { + font-weight: 700; + +} + +.infoContainer .recently_updated { + color: var(--color-green-blue); +} +@media (max-width: 996px) { + .infoContainer { + flex-direction: column; + } + .infoContainer > *:not(:first-child):not(:last-child) { + border: none; + padding: 0; + } } From c737d80dbb94c5d4e5ee6f99b4639eea63430366 Mon Sep 17 00:00:00 2001 From: john-rock Date: Mon, 23 Oct 2023 15:33:19 -0400 Subject: [PATCH 030/305] continue styling --- website/src/components/quickstartTOC/styles.module.css | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/website/src/components/quickstartTOC/styles.module.css b/website/src/components/quickstartTOC/styles.module.css index 20a4846cf3c..57c6c79b670 100644 --- a/website/src/components/quickstartTOC/styles.module.css +++ b/website/src/components/quickstartTOC/styles.module.css @@ -8,14 +8,16 @@ margin: 0; width: 370px; flex-shrink: 0; - padding-right: 3rem; + padding-right: 4rem; + margin-right: 4rem; + border-right: solid 5px #E0E3E8; } .tocList li { padding: 1rem; display: block; border: 1px solid #EFF2F3; - box-shadow: 0px 11px 24px rgba(138, 138, 138, 0.1), 0px 0px 0px rgba(138, 138, 138, 0.1); + box-shadow: 0px 10px 16px 0px rgba(31, 41, 55, 0.20); border-radius: 10px; margin-bottom: 1rem; display: grid; From fb3d89c07ade30205107b61a38d564398f7e395c Mon Sep 17 00:00:00 2001 From: john-rock Date: Mon, 23 Oct 2023 15:56:10 -0400 Subject: [PATCH 031/305] cleanup mobile styles --- .../quickstartGuideCard/styles.module.css | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/website/src/components/quickstartGuideCard/styles.module.css b/website/src/components/quickstartGuideCard/styles.module.css index 93667fae75c..f475ce03bc1 100644 --- a/website/src/components/quickstartGuideCard/styles.module.css +++ b/website/src/components/quickstartGuideCard/styles.module.css @@ -85,16 +85,19 @@ .infoContainer { display: flex; - gap: 1rem; margin-bottom: 4rem; } -.infoContainer > *:not(:first-child):not(:last-child) { - border-right: solid #262A38 3px; - border-left: solid #262A38 3px; +.infoContainer > * { + border-left: solid #e0e3e8 3px; padding: 0 1rem 0 1rem; } +.infoContainer > *:first-child { + border: none; + padding-left: 0; +} + .infoContainer .tag_container { display: flex; flex-wrap: wrap; @@ -120,9 +123,10 @@ @media (max-width: 996px) { .infoContainer { + gap: 1rem; flex-direction: column; } - .infoContainer > *:not(:first-child):not(:last-child) { + .infoContainer > * { border: none; padding: 0; } From 930f400513d2a83481fcca9775c8ca767c4f483a Mon Sep 17 00:00:00 2001 From: john-rock Date: Mon, 23 Oct 2023 16:03:26 -0400 Subject: [PATCH 032/305] add arrows to nav buttons --- website/src/components/quickstartTOC/index.js | 6 ++++++ website/src/components/quickstartTOC/styles.module.css | 10 ++++++++++ 2 files changed, 16 insertions(+) diff --git a/website/src/components/quickstartTOC/index.js b/website/src/components/quickstartTOC/index.js index 8c9b8fba910..34727d40c79 100644 --- a/website/src/components/quickstartTOC/index.js +++ b/website/src/components/quickstartTOC/index.js @@ -81,13 +81,19 @@ function QuickstartTOC() { buttonContainer.classList.add(style.buttonContainer); const prevButton = document.createElement("a"); const nextButton = document.createElement("a"); + const nextButtonIcon = document.createElement("i"); + const prevButtonIcon = document.createElement("i"); + prevButtonIcon.classList.add("fa-regular", "fa-arrow-left"); prevButton.textContent = "Back"; + prevButton.prepend(prevButtonIcon); prevButton.classList.add(clsx(style.button, style.prevButton)); prevButton.disabled = index === 0; prevButton.addEventListener("click", () => handlePrev(index + 1)); + nextButtonIcon.classList.add("fa-regular", "fa-arrow-right"); nextButton.textContent = "Next"; + nextButton.appendChild(nextButtonIcon); nextButton.classList.add(clsx(style.button, style.nextButton)); nextButton.disabled = index === stepWrappers.length - 1; nextButton.addEventListener("click", () => handleNext(index + 1)); diff --git a/website/src/components/quickstartTOC/styles.module.css b/website/src/components/quickstartTOC/styles.module.css index 57c6c79b670..292bd4c0f43 100644 --- a/website/src/components/quickstartTOC/styles.module.css +++ b/website/src/components/quickstartTOC/styles.module.css @@ -90,10 +90,20 @@ html[data-theme="dark"] .tocList .active span { margin-right: auto; } +.buttonContainer .prevButton i { + font-size: .8rem; + margin-right: .4rem; +} + .buttonContainer .nextButton { margin-left: auto; } +.buttonContainer .nextButton i { + font-size: .8rem; + margin-left: .4rem; +} + .stepWrapper[data-step="1"] .nextButton { background: var(--color-light-teal); color: var(--color-white) From 2da30795103595b69983b74cacf87efaa7096bcc Mon Sep 17 00:00:00 2001 From: john-rock Date: Mon, 23 Oct 2023 16:17:19 -0400 Subject: [PATCH 033/305] style cleanup --- .../quickstartGuideCard/styles.module.css | 13 +++++++++++++ .../src/components/searchInput/styles.module.css | 7 ++++++- .../src/components/selectDropdown/styles.module.css | 7 ++++++- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/website/src/components/quickstartGuideCard/styles.module.css b/website/src/components/quickstartGuideCard/styles.module.css index f475ce03bc1..3397629377a 100644 --- a/website/src/components/quickstartGuideCard/styles.module.css +++ b/website/src/components/quickstartGuideCard/styles.module.css @@ -44,6 +44,10 @@ color:var(--ifm-menu-color) } +[data-theme='dark'] .quickstartCard .recently_updated { + color: #fff; +} + .quickstartCard .start { font-size: 1.125rem; margin-top: auto; @@ -83,6 +87,11 @@ padding: 0rem 0.75rem; } +[data-theme='dark'] .quickstartCard .tag_container .tag { + background: #374151; + color: #fff; +} + .infoContainer { display: flex; margin-bottom: 4rem; @@ -121,6 +130,10 @@ color: var(--color-green-blue); } +[data-theme='dark'] .infoContainer .recently_updated { + color: #fff; +} + @media (max-width: 996px) { .infoContainer { gap: 1rem; diff --git a/website/src/components/searchInput/styles.module.css b/website/src/components/searchInput/styles.module.css index df7d6509524..1e3e6d617fa 100644 --- a/website/src/components/searchInput/styles.module.css +++ b/website/src/components/searchInput/styles.module.css @@ -3,7 +3,7 @@ border-radius: 0.3125rem; border: 2px solid var(--navy-200-c-6-ccd-4, #C6CCD4); min-height: 38px; - font-size: .875rem; + font-size: .975rem; font-family: var(--ifm-font-family-base); } @@ -16,3 +16,8 @@ all: unset; -webkit-text-security: initial; } + +[data-theme='dark'] .inputContainer { + background: #1b1b1d; + color: #e3e3e3; +} diff --git a/website/src/components/selectDropdown/styles.module.css b/website/src/components/selectDropdown/styles.module.css index afe8b8d742f..66cc1f4b837 100644 --- a/website/src/components/selectDropdown/styles.module.css +++ b/website/src/components/selectDropdown/styles.module.css @@ -45,8 +45,13 @@ padding: 0 0 0 .5rem; } +[data-theme='dark'] .selectContainer [class$="-multiValue"] { + background: var(--color-green-blue); + color: #fff; +} + [data-theme='dark'] .selectContainer [class$="-option"]:hover { - + background: var(--color-green-blue); } .selectContainer [aria-label^="Remove"] { From 5a6ce5fb24b14f9876c32050c75a40b1d5691715 Mon Sep 17 00:00:00 2001 From: john-rock Date: Mon, 23 Oct 2023 16:46:42 -0400 Subject: [PATCH 034/305] build mobile functionality --- website/src/components/quickstartTOC/index.js | 18 ++++++++++++++++++ .../components/quickstartTOC/styles.module.css | 18 ++++++++++++++++-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/website/src/components/quickstartTOC/index.js b/website/src/components/quickstartTOC/index.js index 34727d40c79..3ff5e027208 100644 --- a/website/src/components/quickstartTOC/index.js +++ b/website/src/components/quickstartTOC/index.js @@ -196,7 +196,24 @@ function QuickstartTOC() { updateStep(activeStep, stepNumber); }; + // Handle TOC menu click + const handleTocMenuClick = () => { + const tocList = document.querySelector(`.${style.tocList}`); + const tocMenuBtn = document.querySelector(`.${style.toc_menu_btn}`); + const tocListStyles = window.getComputedStyle(tocList); + + if (tocListStyles.display === "none") { + tocList.style.display = "block"; + tocMenuBtn.querySelector("i").style.transform = "rotate(0deg)"; + } else { + tocList.style.display = "none"; + tocMenuBtn.querySelector("i").style.transform = "rotate(-90deg)"; + } + }; + return ( + <> + Menu
    {tocData.map((step) => (
  • ))}
+ ); } diff --git a/website/src/components/quickstartTOC/styles.module.css b/website/src/components/quickstartTOC/styles.module.css index 292bd4c0f43..cf044ce2e6a 100644 --- a/website/src/components/quickstartTOC/styles.module.css +++ b/website/src/components/quickstartTOC/styles.module.css @@ -117,12 +117,26 @@ html[data-theme="dark"] .tocList .active span { display: none; } +.toc_menu_btn { + display: none; +} + +.toc_menu_btn i { + transform: rotate(-90deg); + vertical-align: middle; +} + @media (max-width: 996px) { .tocList { width: 100%; padding-right: 0; margin-bottom: 2rem; - height: 160px; - overflow-y: auto; + display: none; + } + + .toc_menu_btn { + display: inline-block; + margin-bottom: 2rem; + cursor: pointer; } } From b248e7c6a8c430a4c534b36cdd8f913f2d35fffe Mon Sep 17 00:00:00 2001 From: john-rock Date: Tue, 24 Oct 2023 09:00:11 -0400 Subject: [PATCH 035/305] add some checks --- website/src/components/quickstartGuideList/index.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/website/src/components/quickstartGuideList/index.js b/website/src/components/quickstartGuideList/index.js index a37ec23966a..695cebfc62c 100644 --- a/website/src/components/quickstartGuideList/index.js +++ b/website/src/components/quickstartGuideList/index.js @@ -23,7 +23,8 @@ function QuickstartList({ quickstartData }) { // Build meta title from quickstartTitle and docusaurus config site title const metaTitle = `${quickstartTitle}${siteConfig?.title ? ` | ${siteConfig.title}` : ''}`; - // Memoized computation of tag and level options + // UseMemo to prevent re-rendering on every filter change + // Get tag options const tagOptions = useMemo(() => { const tags = new Set(); quickstartData.forEach(guide => @@ -32,6 +33,7 @@ function QuickstartList({ quickstartData }) { return Array.from(tags).map(tag => ({ value: tag, label: tag })); }, [quickstartData]); + // Get level options const levelOptions = useMemo(() => { const levels = new Set(); quickstartData.forEach(guide => @@ -75,8 +77,12 @@ function QuickstartList({ quickstartData }) { />
- - + {tagOptions && tagOptions.length > 0 && ( + + )} + {levelOptions && levelOptions.length > 0 && ( + + )} setSearchInput(value)} placeholder='Search Quickstarts' />
From e3f512698c440408696b6361f944f33581a67bb6 Mon Sep 17 00:00:00 2001 From: john-rock Date: Tue, 24 Oct 2023 09:27:15 -0400 Subject: [PATCH 036/305] add search icon --- website/src/components/searchInput/index.js | 31 ++++++++++++------- .../components/searchInput/styles.module.css | 17 +++++++--- 2 files changed, 32 insertions(+), 16 deletions(-) diff --git a/website/src/components/searchInput/index.js b/website/src/components/searchInput/index.js index 905c2b4131f..a70175742c1 100644 --- a/website/src/components/searchInput/index.js +++ b/website/src/components/searchInput/index.js @@ -1,16 +1,25 @@ -import React from 'react'; -import styles from './styles.module.css'; +import React from "react"; +import styles from "./styles.module.css"; -const SearchInput = ({ value, onChange, placeholder = "Search...", ...props }) => { +const SearchInput = ({ + value, + onChange, + placeholder = "Search...", + ...props +}) => { return ( - onChange && onChange(e.target.value)} - placeholder={placeholder} - {...props} - className={styles.inputContainer} - /> + ); }; diff --git a/website/src/components/searchInput/styles.module.css b/website/src/components/searchInput/styles.module.css index 1e3e6d617fa..1171b045106 100644 --- a/website/src/components/searchInput/styles.module.css +++ b/website/src/components/searchInput/styles.module.css @@ -2,21 +2,28 @@ padding: 0 1rem; border-radius: 0.3125rem; border: 2px solid var(--navy-200-c-6-ccd-4, #C6CCD4); - min-height: 38px; - font-size: .975rem; - font-family: var(--ifm-font-family-base); + + } -.inputContainer:active, .inputContainer:focus { +.inputContainer:active, .input:focus { border: 2px solid #4f5d75; outline: none; } -.inputContainer::placeholder { +.input::placeholder { all: unset; -webkit-text-security: initial; } +.inputContainer .input { + border: none; + min-height: 38px; + font-size: .975rem; + color: var(--ifm-font-color-base); + font-family: var(--ifm-font-family-base); +} + [data-theme='dark'] .inputContainer { background: #1b1b1d; color: #e3e3e3; From b743a9307304f37f790ca6359064b0731ac55a11 Mon Sep 17 00:00:00 2001 From: john-rock Date: Tue, 24 Oct 2023 09:33:04 -0400 Subject: [PATCH 037/305] update dark mode styles --- .../src/components/quickstartGuideCard/styles.module.css | 6 ++++++ website/src/components/quickstartTOC/styles.module.css | 2 +- website/src/components/searchInput/styles.module.css | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/website/src/components/quickstartGuideCard/styles.module.css b/website/src/components/quickstartGuideCard/styles.module.css index 3397629377a..4c6f17bff79 100644 --- a/website/src/components/quickstartGuideCard/styles.module.css +++ b/website/src/components/quickstartGuideCard/styles.module.css @@ -121,6 +121,12 @@ padding: 0rem 0.75rem; } +[data-theme='dark'] .infoContainer .tag_container .tag { + background: #374151; + color: #fff; +} + + .infoContainer .time_to_complete { font-weight: 700; diff --git a/website/src/components/quickstartTOC/styles.module.css b/website/src/components/quickstartTOC/styles.module.css index cf044ce2e6a..1979f2d4c04 100644 --- a/website/src/components/quickstartTOC/styles.module.css +++ b/website/src/components/quickstartTOC/styles.module.css @@ -16,7 +16,7 @@ .tocList li { padding: 1rem; display: block; - border: 1px solid #EFF2F3; + border: 2px solid #EFF2F3; box-shadow: 0px 10px 16px 0px rgba(31, 41, 55, 0.20); border-radius: 10px; margin-bottom: 1rem; diff --git a/website/src/components/searchInput/styles.module.css b/website/src/components/searchInput/styles.module.css index 1171b045106..ae19a3bb81b 100644 --- a/website/src/components/searchInput/styles.module.css +++ b/website/src/components/searchInput/styles.module.css @@ -24,7 +24,7 @@ font-family: var(--ifm-font-family-base); } -[data-theme='dark'] .inputContainer { +[data-theme='dark'] .input{ background: #1b1b1d; color: #e3e3e3; } From fd262007228ae5ffc60d6602b5155748a01d3a7a Mon Sep 17 00:00:00 2001 From: john-rock Date: Tue, 24 Oct 2023 09:34:19 -0400 Subject: [PATCH 038/305] add some comments --- website/src/components/quickstartGuideList/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/website/src/components/quickstartGuideList/index.js b/website/src/components/quickstartGuideList/index.js index 695cebfc62c..98a1eef1d1b 100644 --- a/website/src/components/quickstartGuideList/index.js +++ b/website/src/components/quickstartGuideList/index.js @@ -25,6 +25,7 @@ function QuickstartList({ quickstartData }) { // UseMemo to prevent re-rendering on every filter change // Get tag options + // Populated from the tags frontmatter array const tagOptions = useMemo(() => { const tags = new Set(); quickstartData.forEach(guide => @@ -34,6 +35,7 @@ function QuickstartList({ quickstartData }) { }, [quickstartData]); // Get level options + // Populated by the level frontmatter string const levelOptions = useMemo(() => { const levels = new Set(); quickstartData.forEach(guide => From 247e94a6391c888b096e6c9c5e28b99d8364297b Mon Sep 17 00:00:00 2001 From: john-rock Date: Tue, 24 Oct 2023 09:41:59 -0400 Subject: [PATCH 039/305] sort by alphabetically --- website/src/components/quickstartGuideList/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/website/src/components/quickstartGuideList/index.js b/website/src/components/quickstartGuideList/index.js index 98a1eef1d1b..55d0b24176e 100644 --- a/website/src/components/quickstartGuideList/index.js +++ b/website/src/components/quickstartGuideList/index.js @@ -31,7 +31,8 @@ function QuickstartList({ quickstartData }) { quickstartData.forEach(guide => guide?.data?.tags?.forEach(tag => tags.add(tag)) ); - return Array.from(tags).map(tag => ({ value: tag, label: tag })); + // Sort alphabetically + return Array.from(tags).sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase())).map(tag => ({ value: tag, label: tag })); }, [quickstartData]); // Get level options From 8d74fccbaca0dee4b6295e247ae58e59e0a34f1c Mon Sep 17 00:00:00 2001 From: john-rock Date: Tue, 24 Oct 2023 10:14:42 -0400 Subject: [PATCH 040/305] update package json --- website/package-lock.json | 534 -------------------------------------- website/package.json | 1 - 2 files changed, 535 deletions(-) diff --git a/website/package-lock.json b/website/package-lock.json index 0e907bfd99f..282056e5922 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -74,7 +74,6 @@ "stream-http": "^3.2.0", "style-loader": "^1.1.3", "svg-inline-loader": "^0.8.2", - "tailwindcss": "^3.3.3", "tty-browserify": "0.0.1", "webpack": "^5.75.0", "webpack-dev-server": "^4.11.1" @@ -234,18 +233,6 @@ "@algolia/requester-common": "4.16.0" } }, - "node_modules/@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@ampproject/remapping": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", @@ -7801,12 +7788,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true - }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -10720,12 +10701,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true - }, "node_modules/diff-sequences": { "version": "29.4.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", @@ -10761,12 +10736,6 @@ "node": ">=8" } }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true - }, "node_modules/dns-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", @@ -16254,15 +16223,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/jiti": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.20.0.tgz", - "integrity": "sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==", - "dev": true, - "bin": { - "jiti": "bin/jiti.js" - } - }, "node_modules/joi": { "version": "17.8.3", "resolved": "https://registry.npmjs.org/joi/-/joi-17.8.3.tgz", @@ -18100,17 +18060,6 @@ "multicast-dns": "cli.js" } }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, "node_modules/nano-memoize": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/nano-memoize/-/nano-memoize-1.3.1.tgz", @@ -18568,15 +18517,6 @@ "node": ">=0.10.0" } }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, "node_modules/object-inspect": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", @@ -19404,80 +19344,6 @@ "postcss": "^8.2.15" } }, - "node_modules/postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dev": true, - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.4.21" - } - }, - "node_modules/postcss-load-config": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", - "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", - "dev": true, - "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^2.1.1" - }, - "engines": { - "node": ">= 14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-load-config/node_modules/yaml": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz", - "integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==", - "dev": true, - "engines": { - "node": ">= 14" - } - }, "node_modules/postcss-loader": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.2.tgz", @@ -19748,25 +19614,6 @@ "url": "https://opencollective.com/postcss/" } }, - "node_modules/postcss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", - "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.11" - }, - "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, "node_modules/postcss-normalize-charset": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", @@ -21102,15 +20949,6 @@ "react": "^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, - "dependencies": { - "pify": "^2.3.0" - } - }, "node_modules/readable-stream": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.1.tgz", @@ -23262,71 +23100,6 @@ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" }, - "node_modules/sucrase": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", - "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "7.1.6", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sucrase/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/sucrase/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/sucrase/node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -23622,64 +23395,6 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, - "node_modules/tailwindcss": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz", - "integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==", - "dev": true, - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.2.12", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.18.2", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tailwindcss/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/tailwindcss/node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -23848,27 +23563,6 @@ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, "node_modules/throat": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", @@ -24041,12 +23735,6 @@ "resolved": "https://registry.npmjs.org/ts-easing/-/ts-easing-0.2.0.tgz", "integrity": "sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==" }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true - }, "node_modules/ts-keycode-enum": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/ts-keycode-enum/-/ts-keycode-enum-1.0.6.tgz", @@ -25946,12 +25634,6 @@ "@algolia/requester-common": "4.16.0" } }, - "@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "dev": true - }, "@ampproject/remapping": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", @@ -31658,12 +31340,6 @@ "color-convert": "^2.0.1" } }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true - }, "anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -33864,12 +33540,6 @@ } } }, - "didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true - }, "diff-sequences": { "version": "29.4.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", @@ -33901,12 +33571,6 @@ "path-type": "^4.0.0" } }, - "dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true - }, "dns-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", @@ -38024,12 +37688,6 @@ } } }, - "jiti": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.20.0.tgz", - "integrity": "sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==", - "dev": true - }, "joi": { "version": "17.8.3", "resolved": "https://registry.npmjs.org/joi/-/joi-17.8.3.tgz", @@ -39327,17 +38985,6 @@ "thunky": "^1.0.2" } }, - "mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "requires": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, "nano-memoize": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/nano-memoize/-/nano-memoize-1.3.1.tgz", @@ -39679,12 +39326,6 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, - "object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true - }, "object-inspect": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", @@ -40278,44 +39919,6 @@ "postcss-selector-parser": "^6.0.5" } }, - "postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - } - }, - "postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dev": true, - "requires": { - "camelcase-css": "^2.0.1" - } - }, - "postcss-load-config": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", - "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", - "dev": true, - "requires": { - "lilconfig": "^2.0.5", - "yaml": "^2.1.1" - }, - "dependencies": { - "yaml": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz", - "integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==", - "dev": true - } - } - }, "postcss-loader": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.2.tgz", @@ -40504,15 +40107,6 @@ } } }, - "postcss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", - "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.11" - } - }, "postcss-normalize-charset": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", @@ -41469,15 +41063,6 @@ "react-is": "^17.0.1 || ^18.0.0" } }, - "read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, - "requires": { - "pify": "^2.3.0" - } - }, "readable-stream": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.1.tgz", @@ -43101,54 +42686,6 @@ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" }, - "sucrase": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", - "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "7.1.6", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -43365,53 +42902,6 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, - "tailwindcss": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz", - "integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==", - "dev": true, - "requires": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.2.12", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.18.2", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.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" - } - }, - "lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true - } - } - }, "tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -43526,24 +43016,6 @@ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, - "thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "requires": { - "any-promise": "^1.0.0" - } - }, - "thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, - "requires": { - "thenify": ">= 3.1.0 < 4" - } - }, "throat": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", @@ -43677,12 +43149,6 @@ "resolved": "https://registry.npmjs.org/ts-easing/-/ts-easing-0.2.0.tgz", "integrity": "sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==" }, - "ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true - }, "ts-keycode-enum": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/ts-keycode-enum/-/ts-keycode-enum-1.0.6.tgz", diff --git a/website/package.json b/website/package.json index 5dee165966f..b0105102359 100644 --- a/website/package.json +++ b/website/package.json @@ -80,7 +80,6 @@ "stream-http": "^3.2.0", "style-loader": "^1.1.3", "svg-inline-loader": "^0.8.2", - "tailwindcss": "^3.3.3", "tty-browserify": "0.0.1", "webpack": "^5.75.0", "webpack-dev-server": "^4.11.1" From 769905b940eff51fdd686301c36336524b827793 Mon Sep 17 00:00:00 2001 From: john-rock Date: Fri, 27 Oct 2023 10:21:01 -0400 Subject: [PATCH 041/305] change quickstart dir to guides --- website/docs/{quickstarts => guides}/bigquery-qs.md | 0 website/docs/{quickstarts => guides}/codespace-qs.md | 0 website/docs/{quickstarts => guides}/databricks-qs.md | 0 .../docs/{quickstarts => guides}/manual-install-qs.md | 0 website/docs/{quickstarts => guides}/redshift-qs.md | 0 website/docs/{quickstarts => guides}/snowflake-qs.md | 0 .../docs/{quickstarts => guides}/starburst-galaxy-qs.md | 0 website/plugins/buildQuickstartIndexPage/index.js | 9 ++++++--- 8 files changed, 6 insertions(+), 3 deletions(-) rename website/docs/{quickstarts => guides}/bigquery-qs.md (100%) rename website/docs/{quickstarts => guides}/codespace-qs.md (100%) rename website/docs/{quickstarts => guides}/databricks-qs.md (100%) rename website/docs/{quickstarts => guides}/manual-install-qs.md (100%) rename website/docs/{quickstarts => guides}/redshift-qs.md (100%) rename website/docs/{quickstarts => guides}/snowflake-qs.md (100%) rename website/docs/{quickstarts => guides}/starburst-galaxy-qs.md (100%) diff --git a/website/docs/quickstarts/bigquery-qs.md b/website/docs/guides/bigquery-qs.md similarity index 100% rename from website/docs/quickstarts/bigquery-qs.md rename to website/docs/guides/bigquery-qs.md diff --git a/website/docs/quickstarts/codespace-qs.md b/website/docs/guides/codespace-qs.md similarity index 100% rename from website/docs/quickstarts/codespace-qs.md rename to website/docs/guides/codespace-qs.md diff --git a/website/docs/quickstarts/databricks-qs.md b/website/docs/guides/databricks-qs.md similarity index 100% rename from website/docs/quickstarts/databricks-qs.md rename to website/docs/guides/databricks-qs.md diff --git a/website/docs/quickstarts/manual-install-qs.md b/website/docs/guides/manual-install-qs.md similarity index 100% rename from website/docs/quickstarts/manual-install-qs.md rename to website/docs/guides/manual-install-qs.md diff --git a/website/docs/quickstarts/redshift-qs.md b/website/docs/guides/redshift-qs.md similarity index 100% rename from website/docs/quickstarts/redshift-qs.md rename to website/docs/guides/redshift-qs.md diff --git a/website/docs/quickstarts/snowflake-qs.md b/website/docs/guides/snowflake-qs.md similarity index 100% rename from website/docs/quickstarts/snowflake-qs.md rename to website/docs/guides/snowflake-qs.md diff --git a/website/docs/quickstarts/starburst-galaxy-qs.md b/website/docs/guides/starburst-galaxy-qs.md similarity index 100% rename from website/docs/quickstarts/starburst-galaxy-qs.md rename to website/docs/guides/starburst-galaxy-qs.md diff --git a/website/plugins/buildQuickstartIndexPage/index.js b/website/plugins/buildQuickstartIndexPage/index.js index 4724478883a..da50e230dca 100644 --- a/website/plugins/buildQuickstartIndexPage/index.js +++ b/website/plugins/buildQuickstartIndexPage/index.js @@ -6,10 +6,13 @@ module.exports = function buildQuickstartIndexPage() { name: 'docusaurus-build-quickstart-index-page-plugin', async loadContent() { // Quickstart files directory - const quickstartDirectory = 'docs/quickstarts' + const quickstartDirectory = 'docs/guides' // Get all Quickstart files and content - const quickstartFiles = fs.readdirSync(quickstartDirectory) + const quickstartFiles = fs.readdirSync(quickstartDirectory, { withFileTypes: true }) + .filter(dirent => dirent.isFile()) + .map(dirent => dirent.name) + const quickstartData = quickstartFiles.reduce((arr, quickstartFile) => { const fileData = fs.readFileSync( @@ -53,7 +56,7 @@ module.exports = function buildQuickstartIndexPage() { // Build the quickstart index page addRoute({ - path: `/quickstarts`, + path: `/guides`, component: '@site/src/components/quickstartGuideList/index.js', modules: { // propName -> JSON file path From c9f85daedc808f5fe81d1ea3188c546415b2ec63 Mon Sep 17 00:00:00 2001 From: john-rock Date: Fri, 27 Oct 2023 10:35:13 -0400 Subject: [PATCH 042/305] migration work for guides --- website/plugins/buildQuickstartIndexPage/index.js | 6 +++++- website/src/components/quickstartGuideCard/index.js | 4 ++-- website/src/components/searchInput/index.js | 4 ++-- website/src/theme/DocItem/Content/index.js | 2 +- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/website/plugins/buildQuickstartIndexPage/index.js b/website/plugins/buildQuickstartIndexPage/index.js index da50e230dca..5139ca3bcd7 100644 --- a/website/plugins/buildQuickstartIndexPage/index.js +++ b/website/plugins/buildQuickstartIndexPage/index.js @@ -22,8 +22,12 @@ module.exports = function buildQuickstartIndexPage() { if(!fileData) return null - // convert frontmatter to json + // Convert frontmatter to json const fileJson = matter(fileData) + + // Add the original directory to build links + fileJson.data.original_directory = quickstartDirectory.replace('docs/', '') + if(!fileJson) return null diff --git a/website/src/components/quickstartGuideCard/index.js b/website/src/components/quickstartGuideCard/index.js index 7c3faa3613e..a8760bcc883 100644 --- a/website/src/components/quickstartGuideCard/index.js +++ b/website/src/components/quickstartGuideCard/index.js @@ -8,7 +8,7 @@ export default function QuickstartGuideCard({ frontMatter }) { frontMatter; return ( - + {recently_updated && ( Updated )} @@ -20,7 +20,7 @@ export default function QuickstartGuideCard({ frontMatter }) { {time_to_complete} )} - + Start diff --git a/website/src/components/searchInput/index.js b/website/src/components/searchInput/index.js index a70175742c1..e0a5faf4a82 100644 --- a/website/src/components/searchInput/index.js +++ b/website/src/components/searchInput/index.js @@ -8,8 +8,8 @@ const SearchInput = ({ ...props }) => { return ( -
From e2c7f487b83f883ee4d87596f8fa182138f9fe01 Mon Sep 17 00:00:00 2001 From: john-rock Date: Fri, 27 Oct 2023 11:00:47 -0400 Subject: [PATCH 045/305] try fixing merge conflict --- website/docs/quickstarts/bigquery-qs.md | 301 ++++++++++++++++++++++++ 1 file changed, 301 insertions(+) create mode 100644 website/docs/quickstarts/bigquery-qs.md diff --git a/website/docs/quickstarts/bigquery-qs.md b/website/docs/quickstarts/bigquery-qs.md new file mode 100644 index 00000000000..5f0b641875f --- /dev/null +++ b/website/docs/quickstarts/bigquery-qs.md @@ -0,0 +1,301 @@ +--- +title: "Quickstart for dbt Cloud and BigQuery" +id: "bigquery" +time_to_complete: '30 minutes' +platform: 'dbt-cloud' +icon: 'bigquery' +hide_table_of_contents: true +tags: ['BigQuery', 'dbt Cloud'] +level: 'Beginner' +recently_updated: true +--- + +## Introduction + +In this quickstart guide, you'll learn how to use dbt Cloud with BigQuery. It will show you how to: + +- Create a Google Cloud Platform (GCP) project. +- Access sample data in a public dataset. +- Connect dbt Cloud to BigQuery. +- Take a sample query and turn it into a model in your dbt project. A model in dbt is a select statement. +- Add tests to your models. +- Document your models. +- Schedule a job to run. + +:::tip Videos for you +You can check out [dbt Fundamentals](https://courses.getdbt.com/courses/fundamentals) for free if you're interested in course learning with videos. + +::: + +### Prerequisites​ + +- You have a [dbt Cloud account](https://www.getdbt.com/signup/). +- You have a [Google account](https://support.google.com/accounts/answer/27441?hl=en). +- You can use a personal or work account to set up BigQuery through [Google Cloud Platform (GCP)](https://cloud.google.com/free). + +### Related content + +- Learn more with [dbt Courses](https://courses.getdbt.com/collections) +- [CI jobs](/docs/deploy/continuous-integration) +- [Deploy jobs](/docs/deploy/deploy-jobs) +- [Job notifications](/docs/deploy/job-notifications) +- [Source freshness](/docs/deploy/source-freshness) + +## Create a new GCP project​ + +1. Go to the [BigQuery Console](https://console.cloud.google.com/bigquery) after you log in to your Google account. If you have multiple Google accounts, make sure you’re using the correct one. +2. Create a new project from the [Manage resources page](https://console.cloud.google.com/projectcreate?previousPage=%2Fcloud-resource-manager%3Fwalkthrough_id%3Dresource-manager--create-project%26project%3D%26folder%3D%26organizationId%3D%23step_index%3D1&walkthrough_id=resource-manager--create-project). For more information, refer to [Creating a project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#creating_a_project) in the Google Cloud docs. GCP automatically populates the Project name field for you. You can change it to be more descriptive for your use. For example, `dbt Learn - BigQuery Setup`. + +## Create BigQuery datasets + +1. From the [BigQuery Console](https://console.cloud.google.com/bigquery), click **Editor**. Make sure to select your newly created project, which is available at the top of the page. +1. Verify that you can run SQL queries. Copy and paste these queries into the Query Editor: + ```sql + select * from `dbt-tutorial.jaffle_shop.customers`; + select * from `dbt-tutorial.jaffle_shop.orders`; + select * from `dbt-tutorial.stripe.payment`; + ``` + + Click **Run**, then check for results from the queries. For example: +
+ +
+2. Create new datasets from the [BigQuery Console](https://console.cloud.google.com/bigquery). For more information, refer to [Create datasets](https://cloud.google.com/bigquery/docs/datasets#create-dataset) in the Google Cloud docs. Datasets in BigQuery are equivalent to schemas in a traditional database. On the **Create dataset** page: + - **Dataset ID** — Enter a name that fits the purpose. This name is used like schema in fully qualified references to your database objects such as `database.schema.table`. As an example for this guide, create one for `jaffle_shop` and another one for `stripe` afterward. + - **Data location** — Leave it blank (the default). It determines the GCP location of where your data is stored. The current default location is the US multi-region. All tables within this dataset will share this location. + - **Enable table expiration** — Leave it unselected (the default). The default for the billing table expiration is 60 days. Because billing isn’t enabled for this project, GCP defaults to deprecating tables. + - **Google-managed encryption key** — This option is available under **Advanced options**. Allow Google to manage encryption (the default). +
+ +
+3. After you create the `jaffle_shop` dataset, create one for `stripe` with all the same values except for **Dataset ID**. + +## Generate BigQuery credentials {#generate-bigquery-credentials} +In order to let dbt connect to your warehouse, you'll need to generate a keyfile. This is analogous to using a database username and password with most other data warehouses. + +1. Start the [GCP credentials wizard](https://console.cloud.google.com/apis/credentials/wizard). Make sure your new project is selected in the header. If you do not see your account or project, click your profile picture to the right and verify you are using the correct email account. For **Credential Type**: + - From the **Select an API** dropdown, choose **BigQuery API** + - Select **Application data** for the type of data you will be accessing + - Click **Next** to create a new service account. +2. Create a service account for your new project from the [Service accounts page](https://console.cloud.google.com/projectselector2/iam-admin/serviceaccounts?supportedpurview=project). For more information, refer to [Create a service account](https://developers.google.com/workspace/guides/create-credentials#create_a_service_account) in the Google Cloud docs. As an example for this guide, you can: + - Type `dbt-user` as the **Service account name** + - From the **Select a role** dropdown, choose **BigQuery Admin** and click **Continue** + - Leave the **Grant users access to this service account** fields blank + - Click **Done** +3. Create a service account key for your new project from the [Service accounts page](https://console.cloud.google.com/iam-admin/serviceaccounts?walkthrough_id=iam--create-service-account-keys&start_index=1#step_index=1). For more information, refer to [Create a service account key](https://cloud.google.com/iam/docs/creating-managing-service-account-keys#creating) in the Google Cloud docs. When downloading the JSON file, make sure to use a filename you can easily remember. For example, `dbt-user-creds.json`. For security reasons, dbt Labs recommends that you protect this JSON file like you would your identity credentials; for example, don't check the JSON file into your version control software. + +## Connect dbt Cloud to BigQuery​ +1. Create a new project in [dbt Cloud](https://cloud.getdbt.com/). From **Account settings** (using the gear menu in the top right corner), click **+ New Project**. +2. Enter a project name and click **Continue**. +3. For the warehouse, click **BigQuery** then **Next** to set up your connection. +4. Click **Upload a Service Account JSON File** in settings. +5. Select the JSON file you downloaded in [Generate BigQuery credentials](#generate-bigquery-credentials) and dbt Cloud will fill in all the necessary fields. +6. Click **Test Connection**. This verifies that dbt Cloud can access your BigQuery account. +7. Click **Next** if the test succeeded. If it failed, you might need to go back and regenerate your BigQuery credentials. + + +## Set up a dbt Cloud managed repository + + + +## Initialize your dbt project​ and start developing +Now that you have a repository configured, you can initialize your project and start development in dbt Cloud: + +1. Click **Start developing in the IDE**. It might take a few minutes for your project to spin up for the first time as it establishes your git connection, clones your repo, and tests the connection to the warehouse. +2. Above the file tree to the left, click **Initialize dbt project**. This builds out your folder structure with example models. +3. Make your initial commit by clicking **Commit and sync**. Use the commit message `initial commit` and click **Commit**. This creates the first commit to your managed repo and allows you to open a branch where you can add new dbt code. +4. You can now directly query data from your warehouse and execute `dbt run`. You can try this out now: + - Click **+ Create new file**, add this query to the new file, and click **Save as** to save the new file: + ```sql + select * from `dbt-tutorial.jaffle_shop.customers` + ``` + - In the command line bar at the bottom, enter `dbt run` and click **Enter**. You should see a `dbt run succeeded` message. + +## Build your first model +1. Under **Version Control** on the left, click **Create branch**. You can name it `add-customers-model`. You need to create a new branch since the main branch is set to read-only mode. +3. Click the **...** next to the `models` directory, then select **Create file**. +4. Name the file `customers.sql`, then click **Create**. +5. Copy the following query into the file and click **Save**. + +```sql +with customers as ( + + select + id as customer_id, + first_name, + last_name + + from `dbt-tutorial`.jaffle_shop.customers + +), + +orders as ( + + select + id as order_id, + user_id as customer_id, + order_date, + status + + from `dbt-tutorial`.jaffle_shop.orders + +), + +customer_orders as ( + + select + customer_id, + + min(order_date) as first_order_date, + max(order_date) as most_recent_order_date, + count(order_id) as number_of_orders + + from orders + + group by 1 + +), + +final as ( + + select + customers.customer_id, + customers.first_name, + customers.last_name, + customer_orders.first_order_date, + customer_orders.most_recent_order_date, + coalesce(customer_orders.number_of_orders, 0) as number_of_orders + + from customers + + left join customer_orders using (customer_id) + +) + +select * from final +``` + +6. Enter `dbt run` in the command prompt at the bottom of the screen. You should get a successful run and see the three models. + +Later, you can connect your business intelligence (BI) tools to these views and tables so they only read cleaned up data rather than raw data in your BI tool. + +#### FAQs + + + + + + + +## Change the way your model is materialized + + + +## Delete the example models + + + +## Build models on top of other models + + + +1. Create a new SQL file, `models/stg_customers.sql`, with the SQL from the `customers` CTE in our original query. +2. Create a second new SQL file, `models/stg_orders.sql`, with the SQL from the `orders` CTE in our original query. + + + + ```sql + select + id as customer_id, + first_name, + last_name + + from `dbt-tutorial`.jaffle_shop.customers + ``` + + + + + + ```sql + select + id as order_id, + user_id as customer_id, + order_date, + status + + from `dbt-tutorial`.jaffle_shop.orders + ``` + + + +3. Edit the SQL in your `models/customers.sql` file as follows: + + + + ```sql + with customers as ( + + select * from {{ ref('stg_customers') }} + + ), + + orders as ( + + select * from {{ ref('stg_orders') }} + + ), + + customer_orders as ( + + select + customer_id, + + min(order_date) as first_order_date, + max(order_date) as most_recent_order_date, + count(order_id) as number_of_orders + + from orders + + group by 1 + + ), + + final as ( + + select + customers.customer_id, + customers.first_name, + customers.last_name, + customer_orders.first_order_date, + customer_orders.most_recent_order_date, + coalesce(customer_orders.number_of_orders, 0) as number_of_orders + + from customers + + left join customer_orders using (customer_id) + + ) + + select * from final + + ``` + + + +4. Execute `dbt run`. + + This time, when you performed a `dbt run`, separate views/tables were created for `stg_customers`, `stg_orders` and `customers`. dbt inferred the order to run these models. Because `customers` depends on `stg_customers` and `stg_orders`, dbt builds `customers` last. You do not need to explicitly define these dependencies. + +#### FAQs {#faq-2} + + + + + + + + + + + From 4da2077edf25c0875fefd1a574844d6d5e34d659 Mon Sep 17 00:00:00 2001 From: john-rock Date: Fri, 27 Oct 2023 11:02:46 -0400 Subject: [PATCH 046/305] update broken markdown links --- website/docs/docs/build/projects.md | 2 +- .../release-notes/03-Oct-2023/product-docs-sept-rn.md | 2 +- .../release-notes/09-April-2023/product-docs.md | 2 +- .../10-Mar-2023/public-preview-trino-in-dbt-cloud.md | 2 +- website/docs/docs/introduction.md | 2 +- .../materializations-guide-6-examining-builds.md | 2 +- website/docs/guides/codespace-qs.md | 8 ++++---- .../how-to-set-up-your-databricks-dbt-project.md | 8 ++++---- .../productionizing-your-dbt-databricks-project.md | 2 +- website/docs/guides/manual-install-qs.md | 2 +- .../migrating-from-stored-procedures/2-mapping-inserts.md | 2 +- .../2-setting-up-airflow-and-dbt-cloud.md | 2 +- 12 files changed, 18 insertions(+), 18 deletions(-) diff --git a/website/docs/docs/build/projects.md b/website/docs/docs/build/projects.md index b4b04e3334d..150879da4be 100644 --- a/website/docs/docs/build/projects.md +++ b/website/docs/docs/build/projects.md @@ -93,4 +93,4 @@ If you want to see what a mature, production project looks like, check out the [ ## Related docs * [Best practices: How we structure our dbt projects](/guides/best-practices/how-we-structure/1-guide-overview) * [Quickstarts for dbt Cloud](/quickstarts) -* [Quickstart for dbt Core](/quickstarts/manual-install) +* [Quickstart for dbt Core](/guides/manual-install) diff --git a/website/docs/docs/dbt-versions/release-notes/03-Oct-2023/product-docs-sept-rn.md b/website/docs/docs/dbt-versions/release-notes/03-Oct-2023/product-docs-sept-rn.md index e669b037d17..42a2c8daba1 100644 --- a/website/docs/docs/dbt-versions/release-notes/03-Oct-2023/product-docs-sept-rn.md +++ b/website/docs/docs/dbt-versions/release-notes/03-Oct-2023/product-docs-sept-rn.md @@ -27,7 +27,7 @@ Here's what's new to [docs.getdbt.com](http://docs.getdbt.com/): - Deprecated dbt Core v1.0 and v1.1 from the docs. - Added configuration instructions for the [AWS Glue](/docs/core/connect-data-platform/glue-setup) community plugin. -- Revised the dbt Core quickstart, making it easier to follow. Divided this guide into steps that align with the [other guides](/quickstarts/manual-install?step=1). +- Revised the dbt Core quickstart, making it easier to follow. Divided this guide into steps that align with the [other guides](/guides/manual-install?step=1). ## New 📚 Guides, ✏️ blog posts, and FAQs diff --git a/website/docs/docs/dbt-versions/release-notes/09-April-2023/product-docs.md b/website/docs/docs/dbt-versions/release-notes/09-April-2023/product-docs.md index d30bcf85b99..faa8517cfbd 100644 --- a/website/docs/docs/dbt-versions/release-notes/09-April-2023/product-docs.md +++ b/website/docs/docs/dbt-versions/release-notes/09-April-2023/product-docs.md @@ -17,7 +17,7 @@ Hello from the dbt Docs team: @mirnawong1, @matthewshaver, @nghi-ly, and @runleo ## ☁ Cloud projects - Added Starburst/Trino adapter docs, including: - * [dbt Cloud quickstart guide](/quickstarts/starburst-galaxy),  + * [dbt Cloud quickstart guide](/guides/starburst-galaxy),  * [connection page](/docs/cloud/connect-data-platform/connect-starburst-trino),  * [set up page](/docs/core/connect-data-platform/trino-setup), and [config page](/reference/resource-configs/trino-configs). - Enhanced [dbt Cloud jobs page](/docs/deploy/jobs) and section to include conceptual info on the queue time, improvements made around it, and about failed jobs. diff --git a/website/docs/docs/dbt-versions/release-notes/10-Mar-2023/public-preview-trino-in-dbt-cloud.md b/website/docs/docs/dbt-versions/release-notes/10-Mar-2023/public-preview-trino-in-dbt-cloud.md index bf3840a8b02..06abf178b8a 100644 --- a/website/docs/docs/dbt-versions/release-notes/10-Mar-2023/public-preview-trino-in-dbt-cloud.md +++ b/website/docs/docs/dbt-versions/release-notes/10-Mar-2023/public-preview-trino-in-dbt-cloud.md @@ -8,7 +8,7 @@ tags: [Mar-2023] dbt Labs is introducing the newest connection option in dbt Cloud: the `dbt-trino` adapter is now available in Public Preview. This allows you to connect to Starburst Galaxy, Starburst Enterprise, and self-hosted Trino from dbt Cloud. -Check out our [Quickstart for dbt Cloud and Starburst Galaxy](/quickstarts/starburst-galaxy) to explore more. +Check out our [Quickstart for dbt Cloud and Starburst Galaxy](/guides/starburst-galaxy) to explore more. ## What’s the reason users should be excited about this? diff --git a/website/docs/docs/introduction.md b/website/docs/docs/introduction.md index 0aeef0201cb..efe050d3205 100644 --- a/website/docs/docs/introduction.md +++ b/website/docs/docs/introduction.md @@ -43,7 +43,7 @@ Learn more about [dbt Cloud features](/docs/cloud/about-cloud/dbt-cloud-features ### dbt Core -dbt Core is an open-source tool that enables data teams to transform data using analytics engineering best practices. You can install and use dbt Core on the command line. Learn more with the [quickstart for dbt Core](/quickstarts/codespace). +dbt Core is an open-source tool that enables data teams to transform data using analytics engineering best practices. You can install and use dbt Core on the command line. Learn more with the [quickstart for dbt Core](/guides/codespace). ## The power of dbt diff --git a/website/docs/guides/best-practices/materializations/materializations-guide-6-examining-builds.md b/website/docs/guides/best-practices/materializations/materializations-guide-6-examining-builds.md index 07811b42594..ee160d2a7ad 100644 --- a/website/docs/guides/best-practices/materializations/materializations-guide-6-examining-builds.md +++ b/website/docs/guides/best-practices/materializations/materializations-guide-6-examining-builds.md @@ -16,7 +16,7 @@ hoverSnippet: Read this guide to understand how to examine your builds in dbt. ### Model Timing -That’s where dbt Cloud’s Model Timing visualization comes in extremely handy. If we’ve set up a [Job](/quickstarts/bigquery) in dbt Cloud to run our models, we can use the Model Timing tab to pinpoint our longest-running models. +That’s where dbt Cloud’s Model Timing visualization comes in extremely handy. If we’ve set up a [Job](/guides/bigquery) in dbt Cloud to run our models, we can use the Model Timing tab to pinpoint our longest-running models. ![dbt Cloud's Model Timing diagram](/img/guides/best-practices/materializations/model-timing-diagram.png) diff --git a/website/docs/guides/codespace-qs.md b/website/docs/guides/codespace-qs.md index f2671335ddc..f30d82457a8 100644 --- a/website/docs/guides/codespace-qs.md +++ b/website/docs/guides/codespace-qs.md @@ -20,10 +20,10 @@ dbt Labs provides a [GitHub Codespace](https://docs.github.com/en/codespaces/ove ## Related content -- [Create a GitHub repository](/quickstarts/manual-install?step=2) -- [Build your first models](/quickstarts/manual-install?step=3) -- [Test and document your project](/quickstarts/manual-install?step=4) -- [Schedule a job](/quickstarts/manual-install?step=5) +- [Create a GitHub repository](/guides/manual-install?step=2) +- [Build your first models](/guides/manual-install?step=3) +- [Test and document your project](/guides/manual-install?step=4) +- [Schedule a job](/guides/manual-install?step=5) - Learn more with [dbt Courses](https://courses.getdbt.com/collections) ## Create a codespace diff --git a/website/docs/guides/dbt-ecosystem/databricks-guides/how-to-set-up-your-databricks-dbt-project.md b/website/docs/guides/dbt-ecosystem/databricks-guides/how-to-set-up-your-databricks-dbt-project.md index b0be39a4273..ba66bba60d1 100644 --- a/website/docs/guides/dbt-ecosystem/databricks-guides/how-to-set-up-your-databricks-dbt-project.md +++ b/website/docs/guides/dbt-ecosystem/databricks-guides/how-to-set-up-your-databricks-dbt-project.md @@ -57,11 +57,11 @@ Now that the Databricks components are in place, we can configure our dbt projec If you are migrating an existing dbt project from the dbt-spark adapter to dbt-databricks, follow this [migration guide](https://docs.getdbt.com/guides/migration/tools/migrating-from-spark-to-databricks#migration) to switch adapters without needing to update developer credentials and other existing configs. -If you’re starting a new dbt project, follow the steps below. For a more detailed setup flow, check out our [quickstart guide.](/quickstarts/databricks) +If you’re starting a new dbt project, follow the steps below. For a more detailed setup flow, check out our [quickstart guide.](/guides/databricks) ### Connect dbt to Databricks -First, you’ll need to connect your dbt project to Databricks so it can send transformation instructions and build objects in Unity Catalog. Follow the instructions for [dbt Cloud](/quickstarts/databricks?step=4) or [Core](https://docs.getdbt.com/reference/warehouse-setups/databricks-setup) to configure your project’s connection credentials. +First, you’ll need to connect your dbt project to Databricks so it can send transformation instructions and build objects in Unity Catalog. Follow the instructions for [dbt Cloud](/guides/databricks?step=4) or [Core](https://docs.getdbt.com/reference/warehouse-setups/databricks-setup) to configure your project’s connection credentials. Each developer must generate their Databricks PAT and use the token in their development credentials. They will also specify a unique developer schema that will store the tables and views generated by dbt runs executed from their IDE. This provides isolated developer environments and ensures data access is fit for purpose. @@ -84,7 +84,7 @@ During your first invocation of `dbt run`, dbt will create the developer schema Last, we need to give dbt a way to deploy code outside of development environments. To do so, we’ll use dbt [environments](https://docs.getdbt.com/docs/collaborate/environments) to define the production targets that end users will interact with. -Core projects can use [targets in profiles](https://docs.getdbt.com/docs/core/connection-profiles#understanding-targets-in-profiles) to separate environments. [dbt Cloud environments](https://docs.getdbt.com/docs/cloud/develop-in-the-cloud#set-up-and-access-the-cloud-ide) allow you to define environments via the UI and [schedule jobs](/quickstarts/databricks#create-and-run-a-job) for specific environments. +Core projects can use [targets in profiles](https://docs.getdbt.com/docs/core/connection-profiles#understanding-targets-in-profiles) to separate environments. [dbt Cloud environments](https://docs.getdbt.com/docs/cloud/develop-in-the-cloud#set-up-and-access-the-cloud-ide) allow you to define environments via the UI and [schedule jobs](/guides/databricks#create-and-run-a-job) for specific environments. Let’s set up our deployment environment: @@ -96,7 +96,7 @@ Let’s set up our deployment environment: ### Connect dbt to your git repository -Next, you’ll need somewhere to store and version control your code that allows you to collaborate with teammates. Connect your dbt project to a git repository with [dbt Cloud](/quickstarts/databricks#set-up-a-dbt-cloud-managed-repository). [Core](/quickstarts/manual-install#create-a-repository) projects will use the git CLI. +Next, you’ll need somewhere to store and version control your code that allows you to collaborate with teammates. Connect your dbt project to a git repository with [dbt Cloud](/guides/databricks#set-up-a-dbt-cloud-managed-repository). [Core](/guides/manual-install#create-a-repository) projects will use the git CLI. ## Next steps diff --git a/website/docs/guides/dbt-ecosystem/databricks-guides/productionizing-your-dbt-databricks-project.md b/website/docs/guides/dbt-ecosystem/databricks-guides/productionizing-your-dbt-databricks-project.md index a3b4be5a051..35c5d852d74 100644 --- a/website/docs/guides/dbt-ecosystem/databricks-guides/productionizing-your-dbt-databricks-project.md +++ b/website/docs/guides/dbt-ecosystem/databricks-guides/productionizing-your-dbt-databricks-project.md @@ -184,5 +184,5 @@ To get the most out of both tools, you can use the [persist docs config](/refere - [Advanced deployments course](https://courses.getdbt.com/courses/advanced-deployment) if you want a deeper dive into these topics - [Autoscaling CI: The intelligent Slim CI](https://docs.getdbt.com/blog/intelligent-slim-ci) - [Trigger a dbt Cloud Job in your automated workflow with Python](https://discourse.getdbt.com/t/triggering-a-dbt-cloud-job-in-your-automated-workflow-with-python/2573) -- [Databricks + dbt Cloud Quickstart Guide](/quickstarts/databricks) +- [Databricks + dbt Cloud Quickstart Guide](/guides/databricks) - Reach out to your Databricks account team to get access to preview features on Databricks. diff --git a/website/docs/guides/manual-install-qs.md b/website/docs/guides/manual-install-qs.md index 2444cf29d7e..ee07bc846c2 100644 --- a/website/docs/guides/manual-install-qs.md +++ b/website/docs/guides/manual-install-qs.md @@ -15,7 +15,7 @@ When you use dbt Core to work with dbt, you will be editing files locally using * To use dbt Core, it's important that you know some basics of the Terminal. In particular, you should understand `cd`, `ls` and `pwd` to navigate through the directory structure of your computer easily. * Install dbt Core using the [installation instructions](/docs/core/installation) for your operating system. -* Complete [Setting up (in BigQuery)](/quickstarts/bigquery?step=2) and [Loading data (BigQuery)](/quickstarts/bigquery?step=3). +* Complete [Setting up (in BigQuery)](/guides/bigquery?step=2) and [Loading data (BigQuery)](/guides/bigquery?step=3). * [Create a GitHub account](https://github.com/join) if you don't already have one. ### Create a starter project diff --git a/website/docs/guides/migration/tools/migrating-from-stored-procedures/2-mapping-inserts.md b/website/docs/guides/migration/tools/migrating-from-stored-procedures/2-mapping-inserts.md index d8f31a0f14a..44e01784f04 100644 --- a/website/docs/guides/migration/tools/migrating-from-stored-procedures/2-mapping-inserts.md +++ b/website/docs/guides/migration/tools/migrating-from-stored-procedures/2-mapping-inserts.md @@ -13,7 +13,7 @@ INSERT INTO returned_orders (order_id, order_date, total_return) SELECT order_id, order_date, total FROM orders WHERE type = 'return' ``` -Converting this with a first pass to a [dbt model](/quickstarts/bigquery?step=8) (in a file called returned_orders.sql) might look something like: +Converting this with a first pass to a [dbt model](/guides/bigquery?step=8) (in a file called returned_orders.sql) might look something like: ```sql SELECT diff --git a/website/docs/guides/orchestration/airflow-and-dbt-cloud/2-setting-up-airflow-and-dbt-cloud.md b/website/docs/guides/orchestration/airflow-and-dbt-cloud/2-setting-up-airflow-and-dbt-cloud.md index 9c3b8eb7f1b..01b15440920 100644 --- a/website/docs/guides/orchestration/airflow-and-dbt-cloud/2-setting-up-airflow-and-dbt-cloud.md +++ b/website/docs/guides/orchestration/airflow-and-dbt-cloud/2-setting-up-airflow-and-dbt-cloud.md @@ -77,7 +77,7 @@ Create a service token from within dbt Cloud using the instructions [found here] ## 6. Create a dbt Cloud job -In your dbt Cloud account create a job, paying special attention to the information in the bullets below. Additional information for creating a dbt Cloud job can be found [here](/quickstarts/bigquery). +In your dbt Cloud account create a job, paying special attention to the information in the bullets below. Additional information for creating a dbt Cloud job can be found [here](/guides/bigquery). - Configure the job with the commands that you want to include when this job kicks off, as Airflow will be referring to the job’s configurations for this rather than being explicitly coded in the Airflow DAG. This job will run a set of commands rather than a single command. - Ensure that the schedule is turned **off** since we’ll be using Airflow to kick things off. From baf15a0ef351c9ba3fe432177532e0dbec94b1e2 Mon Sep 17 00:00:00 2001 From: john-rock Date: Fri, 27 Oct 2023 11:09:00 -0400 Subject: [PATCH 047/305] update another md link --- contributing/adding-page-components.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contributing/adding-page-components.md b/contributing/adding-page-components.md index 751f7c1f6c1..a07d0ff02e4 100644 --- a/contributing/adding-page-components.md +++ b/contributing/adding-page-components.md @@ -1,6 +1,6 @@ ## Using warehouse components -You can use the following components to provide code snippets for each supported warehouse. You can see a real-life example in the docs page [Initialize your project](/quickstarts/databricks?step=6). +You can use the following components to provide code snippets for each supported warehouse. You can see a real-life example in the docs page [Initialize your project](/guides/databricks?step=6). Identify code by labeling with the warehouse names: From 7698abfe122024673eaf32250b61f71de246c8f3 Mon Sep 17 00:00:00 2001 From: john-rock Date: Fri, 27 Oct 2023 11:11:23 -0400 Subject: [PATCH 048/305] update more md links --- website/blog/2022-02-07-customer-360-view-census-playbook.md | 2 +- website/docs/community/resources/getting-help.md | 4 ++-- website/docs/docs/build/models.md | 2 +- website/docs/docs/build/projects.md | 4 ++-- website/docs/docs/build/sql-models.md | 2 +- website/docs/docs/build/tests.md | 2 +- website/docs/docs/cloud/about-cloud-develop.md | 2 +- website/docs/docs/cloud/about-cloud-setup.md | 2 +- website/docs/docs/cloud/about-cloud/about-dbt-cloud.md | 2 +- website/docs/docs/cloud/dbt-cloud-ide/dbt-cloud-tips.md | 2 +- website/docs/docs/collaborate/documentation.md | 2 +- .../release-notes/08-May-2023/product-docs-may.md | 2 +- website/docs/docs/deploy/deployment-tools.md | 2 +- website/docs/docs/introduction.md | 4 ++-- website/docs/docs/use-dbt-semantic-layer/dbt-sl.md | 2 +- website/docs/docs/use-dbt-semantic-layer/quickstart-sl.md | 2 +- website/docs/faqs/Models/create-dependencies.md | 2 +- website/docs/faqs/Project/example-projects.md | 2 +- .../how-we-build-our-metrics/semantic-layer-2-setup.md | 2 +- .../materializations-guide-1-guide-overview.md | 2 +- website/docs/guides/manual-install-qs.md | 2 +- website/docs/guides/migration/tools/refactoring-legacy-sql.md | 2 +- 22 files changed, 25 insertions(+), 25 deletions(-) diff --git a/website/blog/2022-02-07-customer-360-view-census-playbook.md b/website/blog/2022-02-07-customer-360-view-census-playbook.md index 01bea4b09c5..71acb32fe94 100644 --- a/website/blog/2022-02-07-customer-360-view-census-playbook.md +++ b/website/blog/2022-02-07-customer-360-view-census-playbook.md @@ -30,7 +30,7 @@ In short, a jaffle is: *See above: Tasty, tasty jaffles.* -Jaffle Shop is a demo repo referenced in [dbt’s Getting Started Guide](/quickstarts), and its jaffles hold a special place in the dbt community’s hearts, as well as on Data Twitter™. +Jaffle Shop is a demo repo referenced in [dbt’s Getting Started Guide](/guides), and its jaffles hold a special place in the dbt community’s hearts, as well as on Data Twitter™. ![jaffles on data twitter](/img/blog/2022-02-08-customer-360-view/image_1.png) diff --git a/website/docs/community/resources/getting-help.md b/website/docs/community/resources/getting-help.md index 5f423683014..953d04434c4 100644 --- a/website/docs/community/resources/getting-help.md +++ b/website/docs/community/resources/getting-help.md @@ -7,7 +7,7 @@ dbt is open source, and has a generous community behind it. Asking questions wel ### 1. Try to solve your problem first before asking for help #### Search the existing documentation -The docs site you're on is highly searchable, make sure to explore for the answer here as a first step. If you're new to dbt, try working through the [quickstart guide](/quickstarts) first to get a firm foundation on the essential concepts. +The docs site you're on is highly searchable, make sure to explore for the answer here as a first step. If you're new to dbt, try working through the [quickstart guide](/guides) first to get a firm foundation on the essential concepts. #### Try to debug the issue yourself We have a handy guide on [debugging errors](/guides/best-practices/debugging-errors) to help out! This guide also helps explain why errors occur, and which docs you might need to search for help. @@ -60,4 +60,4 @@ If you want to receive dbt training, check out our [dbt Learn](https://learn.get - Billing - Bug reports related to the web interface -As a rule of thumb, if you are using dbt Cloud, but your problem is related to code within your dbt project, then please follow the above process rather than reaching out to support. \ No newline at end of file +As a rule of thumb, if you are using dbt Cloud, but your problem is related to code within your dbt project, then please follow the above process rather than reaching out to support. diff --git a/website/docs/docs/build/models.md b/website/docs/docs/build/models.md index d10eb5ed01a..1cf2fbafeda 100644 --- a/website/docs/docs/build/models.md +++ b/website/docs/docs/build/models.md @@ -20,4 +20,4 @@ The top level of a dbt workflow is the project. A project is a directory of a `. Your organization may need only a few models, but more likely you’ll need a complex structure of nested models to transform the required data. A model is a single file containing a final `select` statement, and a project can have multiple models, and models can even reference each other. Add to that, numerous projects and the level of effort required for transforming complex data sets can improve drastically compared to older methods. -Learn more about models in [SQL models](/docs/build/sql-models) and [Python models](/docs/build/python-models) pages. If you'd like to begin with a bit of practice, visit our [Getting Started Guide](/quickstarts) for instructions on setting up the Jaffle_Shop sample data so you can get hands-on with the power of dbt. +Learn more about models in [SQL models](/docs/build/sql-models) and [Python models](/docs/build/python-models) pages. If you'd like to begin with a bit of practice, visit our [Getting Started Guide](/guides) for instructions on setting up the Jaffle_Shop sample data so you can get hands-on with the power of dbt. diff --git a/website/docs/docs/build/projects.md b/website/docs/docs/build/projects.md index 150879da4be..eeed8e52f90 100644 --- a/website/docs/docs/build/projects.md +++ b/website/docs/docs/build/projects.md @@ -79,7 +79,7 @@ After configuring the Project subdirectory option, dbt Cloud will use it as the You can create new projects and [share them](/docs/collaborate/git-version-control) with other people by making them available on a hosted git repository like GitHub, GitLab, and BitBucket. -After you set up a connection with your data platform, you can [initialize your new project in dbt Cloud](/quickstarts) and start developing. Or, run [dbt init from the command line](/reference/commands/init) to set up your new project. +After you set up a connection with your data platform, you can [initialize your new project in dbt Cloud](/guides) and start developing. Or, run [dbt init from the command line](/reference/commands/init) to set up your new project. During project initialization, dbt creates sample model files in your project directory to help you start developing quickly. @@ -92,5 +92,5 @@ If you want to see what a mature, production project looks like, check out the [ ## Related docs * [Best practices: How we structure our dbt projects](/guides/best-practices/how-we-structure/1-guide-overview) -* [Quickstarts for dbt Cloud](/quickstarts) +* [Quickstarts for dbt Cloud](/guides) * [Quickstart for dbt Core](/guides/manual-install) diff --git a/website/docs/docs/build/sql-models.md b/website/docs/docs/build/sql-models.md index 65fdd58adf0..237ac84c0c2 100644 --- a/website/docs/docs/build/sql-models.md +++ b/website/docs/docs/build/sql-models.md @@ -14,7 +14,7 @@ id: "sql-models" :::info Building your first models -If you're new to dbt, we recommend that you read a [quickstart guide](/quickstarts) to build your first dbt project with models. +If you're new to dbt, we recommend that you read a [quickstart guide](/guides) to build your first dbt project with models. ::: diff --git a/website/docs/docs/build/tests.md b/website/docs/docs/build/tests.md index 75ee5992a76..6de5bcdc471 100644 --- a/website/docs/docs/build/tests.md +++ b/website/docs/docs/build/tests.md @@ -30,7 +30,7 @@ There are two ways of defining tests in dbt: Defining tests is a great way to confirm that your code is working correctly, and helps prevent regressions when your code changes. Because you can use them over and over again, making similar assertions with minor variations, generic tests tend to be much more common—they should make up the bulk of your dbt testing suite. That said, both ways of defining tests have their time and place. :::tip Creating your first tests -If you're new to dbt, we recommend that you check out our [quickstart guide](/quickstarts) to build your first dbt project with models and tests. +If you're new to dbt, we recommend that you check out our [quickstart guide](/guides) to build your first dbt project with models and tests. ::: ## Singular tests diff --git a/website/docs/docs/cloud/about-cloud-develop.md b/website/docs/docs/cloud/about-cloud-develop.md index 9f864ede5ca..90abbb98bf4 100644 --- a/website/docs/docs/cloud/about-cloud-develop.md +++ b/website/docs/docs/cloud/about-cloud-develop.md @@ -25,7 +25,7 @@ dbt Cloud offers a fast and reliable way to work on your dbt project. It runs db

-The following sections provide detailed instructions on setting up the dbt Cloud CLI and dbt Cloud IDE. To get started with dbt development, you'll need a [developer](/docs/cloud/manage-access/seats-and-users) account. For a more comprehensive guide about developing in dbt, refer to our [quickstart guides](/quickstarts). +The following sections provide detailed instructions on setting up the dbt Cloud CLI and dbt Cloud IDE. To get started with dbt development, you'll need a [developer](/docs/cloud/manage-access/seats-and-users) account. For a more comprehensive guide about developing in dbt, refer to our [quickstart guides](/guides). --------- diff --git a/website/docs/docs/cloud/about-cloud-setup.md b/website/docs/docs/cloud/about-cloud-setup.md index 7b68b52a45a..5c8e5525bf1 100644 --- a/website/docs/docs/cloud/about-cloud-setup.md +++ b/website/docs/docs/cloud/about-cloud-setup.md @@ -16,7 +16,7 @@ dbt Cloud is the fastest and most reliable way to deploy your dbt jobs. It conta - Configuring the [dbt Cloud IDE](/docs/cloud/about-cloud-develop) - Installing and configuring the [dbt Cloud CLI](/docs/cloud/cloud-cli-installation) -These settings are intended for dbt Cloud administrators. If you need a more detailed first-time setup guide for specific data platforms, read our [quickstart guides](/quickstarts). +These settings are intended for dbt Cloud administrators. If you need a more detailed first-time setup guide for specific data platforms, read our [quickstart guides](/guides). If you want a more in-depth learning experience, we recommend taking the dbt Fundamentals on our [dbt Learn online courses site](https://courses.getdbt.com/). diff --git a/website/docs/docs/cloud/about-cloud/about-dbt-cloud.md b/website/docs/docs/cloud/about-cloud/about-dbt-cloud.md index 71f3175a108..518efe56a8b 100644 --- a/website/docs/docs/cloud/about-cloud/about-dbt-cloud.md +++ b/website/docs/docs/cloud/about-cloud/about-dbt-cloud.md @@ -99,6 +99,6 @@ dbt Cloud's [flexible plans](https://www.getdbt.com/pricing/) and features make ## Related docs - [dbt Cloud plans and pricing](https://www.getdbt.com/pricing/) -- [Quickstart guides](/quickstarts) +- [Quickstart guides](/guides) - [dbt Cloud IDE](/docs/cloud/dbt-cloud-ide/develop-in-the-cloud) diff --git a/website/docs/docs/cloud/dbt-cloud-ide/dbt-cloud-tips.md b/website/docs/docs/cloud/dbt-cloud-ide/dbt-cloud-tips.md index 39db7832d79..ad0d5466714 100644 --- a/website/docs/docs/cloud/dbt-cloud-ide/dbt-cloud-tips.md +++ b/website/docs/docs/cloud/dbt-cloud-ide/dbt-cloud-tips.md @@ -59,6 +59,6 @@ There are default keyboard shortcuts that can help make development more product ## Related docs -- [Quickstart guide](/quickstarts) +- [Quickstart guide](/guides) - [About dbt Cloud](/docs/cloud/about-cloud/dbt-cloud-features) - [Develop in the Cloud](/docs/cloud/dbt-cloud-ide/develop-in-the-cloud) diff --git a/website/docs/docs/collaborate/documentation.md b/website/docs/docs/collaborate/documentation.md index 0fa00c7cca2..16a4e610c70 100644 --- a/website/docs/docs/collaborate/documentation.md +++ b/website/docs/docs/collaborate/documentation.md @@ -11,7 +11,7 @@ pagination_prev: null * [Declaring properties](/reference/configs-and-properties) * [`dbt docs` command](/reference/commands/cmd-docs) * [`doc` Jinja function](/reference/dbt-jinja-functions) -* If you're new to dbt, we recommend that you check out our [quickstart guide](/quickstarts) to build your first dbt project, complete with documentation. +* If you're new to dbt, we recommend that you check out our [quickstart guide](/guides) to build your first dbt project, complete with documentation. ## Assumed knowledge diff --git a/website/docs/docs/dbt-versions/release-notes/08-May-2023/product-docs-may.md b/website/docs/docs/dbt-versions/release-notes/08-May-2023/product-docs-may.md index 762a6a723f8..a692c901a80 100644 --- a/website/docs/docs/dbt-versions/release-notes/08-May-2023/product-docs-may.md +++ b/website/docs/docs/dbt-versions/release-notes/08-May-2023/product-docs-may.md @@ -16,7 +16,7 @@ Here's what's new to [docs.getdbt.com](http://docs.getdbt.com/) in May: - We made sure everyone knows that Cloud-users don’t need a [profiles.yml file](/docs/core/connect-data-platform/profiles.yml) by adding a callout on several key pages. - Fleshed out the [model jinja variable page](/reference/dbt-jinja-functions/model), which originally lacked conceptual info and didn’t link to the schema page. -- Added a new [Quickstarts landing page](/quickstarts). This new format sets up for future iterations that will include filtering! But for now, we are excited you can step through quickstarts in a focused way. +- Added a new [Quickstarts landing page](/guides). This new format sets up for future iterations that will include filtering! But for now, we are excited you can step through quickstarts in a focused way. ## ☁ Cloud projects diff --git a/website/docs/docs/deploy/deployment-tools.md b/website/docs/docs/deploy/deployment-tools.md index 6fba9caf6e8..9769a2d24a8 100644 --- a/website/docs/docs/deploy/deployment-tools.md +++ b/website/docs/docs/deploy/deployment-tools.md @@ -133,7 +133,7 @@ For more info, refer to the guide on [Databricks workflows and dbt Cloud jobs](/ ## Related docs - [dbt Cloud plans and pricing](https://www.getdbt.com/pricing/) -- [Quickstart guides](/quickstarts) +- [Quickstart guides](/guides) - [Webhooks for your jobs](/docs/deploy/webhooks) - [Orchestration guides](https://docs.getdbt.com/guides/orchestration) - [Commands for your production deployment](https://discourse.getdbt.com/t/what-are-the-dbt-commands-you-run-in-your-production-deployment-of-dbt/366) diff --git a/website/docs/docs/introduction.md b/website/docs/docs/introduction.md index efe050d3205..5eeec43c0d5 100644 --- a/website/docs/docs/introduction.md +++ b/website/docs/docs/introduction.md @@ -39,7 +39,7 @@ You can learn about plans and pricing on [www.getdbt.com](https://www.getdbt.com ### dbt Cloud dbt Cloud is the fastest and most reliable way to deploy dbt. Develop, test, schedule, and investigate data models all in one web-based UI. It also natively supports developing using a command line with the [dbt Cloud CLI](/docs/cloud/cloud-cli-installation). -Learn more about [dbt Cloud features](/docs/cloud/about-cloud/dbt-cloud-features) and try one of the [dbt Cloud quickstarts](/quickstarts). +Learn more about [dbt Cloud features](/docs/cloud/about-cloud/dbt-cloud-features) and try one of the [dbt Cloud quickstarts](/guides). ### dbt Core @@ -62,7 +62,7 @@ As a dbt user, your main focus will be on writing models (i.e. select queries) t ### Related docs -- [Quickstarts for dbt](/quickstarts) +- [Quickstarts for dbt](/guides) - [Best practice guides](/guides/best-practices) - [What is a dbt Project?](/docs/build/projects) - [dbt run](/docs/running-a-dbt-project/run-your-dbt-projects) diff --git a/website/docs/docs/use-dbt-semantic-layer/dbt-sl.md b/website/docs/docs/use-dbt-semantic-layer/dbt-sl.md index 8868c68ed20..bc1cf3e05be 100644 --- a/website/docs/docs/use-dbt-semantic-layer/dbt-sl.md +++ b/website/docs/docs/use-dbt-semantic-layer/dbt-sl.md @@ -99,7 +99,7 @@ The dbt Semantic Layer reduces code duplication and inconsistency regarding your :::info 📌 -New to dbt or metrics? Check out our [quickstart guide](/quickstarts) to build your first dbt project! If you'd like to define your first metrics, try our [Jaffle Shop](https://github.com/dbt-labs/jaffle_shop_metrics) example project. +New to dbt or metrics? Check out our [quickstart guide](/guides) to build your first dbt project! If you'd like to define your first metrics, try our [Jaffle Shop](https://github.com/dbt-labs/jaffle_shop_metrics) example project. ::: diff --git a/website/docs/docs/use-dbt-semantic-layer/quickstart-sl.md b/website/docs/docs/use-dbt-semantic-layer/quickstart-sl.md index d0e5df18d94..5177685dffd 100644 --- a/website/docs/docs/use-dbt-semantic-layer/quickstart-sl.md +++ b/website/docs/docs/use-dbt-semantic-layer/quickstart-sl.md @@ -136,7 +136,7 @@ To use the dbt Semantic Layer, you’ll need to meet the following: :::info 📌 -New to dbt or metrics? Check out our [quickstart guide](/quickstarts) to build your first dbt project! If you'd like to define your first metrics, try our [Jaffle Shop](https://github.com/dbt-labs/jaffle_shop_metrics) example project. +New to dbt or metrics? Check out our [quickstart guide](/guides) to build your first dbt project! If you'd like to define your first metrics, try our [Jaffle Shop](https://github.com/dbt-labs/jaffle_shop_metrics) example project. ::: diff --git a/website/docs/faqs/Models/create-dependencies.md b/website/docs/faqs/Models/create-dependencies.md index 6a01aa18dca..e902d93b018 100644 --- a/website/docs/faqs/Models/create-dependencies.md +++ b/website/docs/faqs/Models/create-dependencies.md @@ -44,4 +44,4 @@ Found 2 models, 28 tests, 0 snapshots, 0 analyses, 130 macros, 0 operations, 0 s Done. PASS=2 WARN=0 ERROR=0 SKIP=0 TOTAL=2 ``` -To learn more about building a dbt project, we recommend you complete the [quickstart guide](/quickstarts). +To learn more about building a dbt project, we recommend you complete the [quickstart guide](/guides). diff --git a/website/docs/faqs/Project/example-projects.md b/website/docs/faqs/Project/example-projects.md index f59d6e56e78..cd58c8832e2 100644 --- a/website/docs/faqs/Project/example-projects.md +++ b/website/docs/faqs/Project/example-projects.md @@ -8,7 +8,7 @@ id: example-projects Yes! -* **Quickstart Tutorial:** You can build your own example dbt project in the [quickstart guide](/quickstarts) +* **Quickstart Tutorial:** You can build your own example dbt project in the [quickstart guide](/guides) * **Jaffle Shop:** A demonstration project (closely related to the tutorial) for a fictional ecommerce store ([source code](https://github.com/dbt-labs/jaffle_shop)) * **MRR Playbook:** A demonstration project that models subscription revenue ([source code](https://github.com/dbt-labs/mrr-playbook), [docs](https://www.getdbt.com/mrr-playbook/#!/overview)) * **Attribution Playbook:** A demonstration project that models marketing attribution ([source code](https://github.com/dbt-labs/attribution-playbook), [docs](https://www.getdbt.com/attribution-playbook/#!/overview)) diff --git a/website/docs/guides/best-practices/how-we-build-our-metrics/semantic-layer-2-setup.md b/website/docs/guides/best-practices/how-we-build-our-metrics/semantic-layer-2-setup.md index 801227924dd..ffbd78b939c 100644 --- a/website/docs/guides/best-practices/how-we-build-our-metrics/semantic-layer-2-setup.md +++ b/website/docs/guides/best-practices/how-we-build-our-metrics/semantic-layer-2-setup.md @@ -33,7 +33,7 @@ Lastly, to get to the pre-Semantic Layer starting state, checkout the `start-her git checkout start-here ``` -For more information, refer to the [MetricFlow commands](/docs/build/metricflow-commands) or a [quickstart](/quickstarts) to get more familiar with setting up a dbt project. +For more information, refer to the [MetricFlow commands](/docs/build/metricflow-commands) or a [quickstart](/guides) to get more familiar with setting up a dbt project. ## Basic commands diff --git a/website/docs/guides/best-practices/materializations/materializations-guide-1-guide-overview.md b/website/docs/guides/best-practices/materializations/materializations-guide-1-guide-overview.md index 209041b1df5..467d58ce4a9 100644 --- a/website/docs/guides/best-practices/materializations/materializations-guide-1-guide-overview.md +++ b/website/docs/guides/best-practices/materializations/materializations-guide-1-guide-overview.md @@ -26,7 +26,7 @@ By the end of this guide you should have a solid understanding of: ### Prerequisites -- 📒 You’ll want to have worked through the [quickstart guide](/quickstarts) and have a project setup to work through these concepts. +- 📒 You’ll want to have worked through the [quickstart guide](/guides) and have a project setup to work through these concepts. - 🏃🏻‍♀️ Concepts like dbt runs, `ref()` statements, and models should be familiar to you. - 🔧 [**Optional**] Reading through the [How we structure our dbt projects](guides/best-practices/how-we-structure/1-guide-overview) Guide will be beneficial for the last section of this guide, when we review best practices for materializations using the dbt project approach of staging models and marts. diff --git a/website/docs/guides/manual-install-qs.md b/website/docs/guides/manual-install-qs.md index ee07bc846c2..fb91d4678f0 100644 --- a/website/docs/guides/manual-install-qs.md +++ b/website/docs/guides/manual-install-qs.md @@ -9,7 +9,7 @@ hide_table_of_contents: true --- ## Introduction -When you use dbt Core to work with dbt, you will be editing files locally using a code editor, and running projects using a command line interface (CLI). If you'd rather edit files and run projects using the web-based Integrated Development Environment (IDE), you should refer to the [dbt Cloud quickstarts](/quickstarts). You can also develop and run dbt commands using the [dbt Cloud CLI](/docs/cloud/cloud-cli-installation) — a dbt Cloud powered command line. +When you use dbt Core to work with dbt, you will be editing files locally using a code editor, and running projects using a command line interface (CLI). If you'd rather edit files and run projects using the web-based Integrated Development Environment (IDE), you should refer to the [dbt Cloud quickstarts](/guides). You can also develop and run dbt commands using the [dbt Cloud CLI](/docs/cloud/cloud-cli-installation) — a dbt Cloud powered command line. ### Prerequisites diff --git a/website/docs/guides/migration/tools/refactoring-legacy-sql.md b/website/docs/guides/migration/tools/refactoring-legacy-sql.md index d9acfea6dab..7026e4e14aa 100644 --- a/website/docs/guides/migration/tools/refactoring-legacy-sql.md +++ b/website/docs/guides/migration/tools/refactoring-legacy-sql.md @@ -38,7 +38,7 @@ To get going, you'll copy your legacy SQL query into your dbt project, by saving Once you've copied it over, you'll want to `dbt run` to execute the query and populate the in your warehouse. -If this is your first time running dbt, you may want to start with the [Introduction to dbt](/docs/introduction) and the earlier sections of the [quickstart guide](/quickstarts) before diving into refactoring. +If this is your first time running dbt, you may want to start with the [Introduction to dbt](/docs/introduction) and the earlier sections of the [quickstart guide](/guides) before diving into refactoring. This step may sound simple, but if you're porting over an existing set of SQL transformations to a new SQL dialect, you will need to consider how your legacy SQL dialect differs from your new SQL flavor, and you may need to modify your legacy code to get it to run at all. From b769c30851fd64b6ed163bb89acbe801f0c77390 Mon Sep 17 00:00:00 2001 From: john-rock Date: Fri, 27 Oct 2023 11:17:42 -0400 Subject: [PATCH 049/305] updating more broken links --- ...023-04-18-building-a-kimball-dimensional-model-with-dbt.md | 2 +- .../docs/cloud/connect-data-platform/about-connections.md | 2 +- website/docs/docs/core/about-core-setup.md | 2 +- .../docs/core/connect-data-platform/about-core-connections.md | 2 +- .../release-notes/09-April-2023/starburst-trino-ga.md | 2 +- website/sidebars.js | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/website/blog/2023-04-18-building-a-kimball-dimensional-model-with-dbt.md b/website/blog/2023-04-18-building-a-kimball-dimensional-model-with-dbt.md index ffc0369a908..3ca1f6ac2a9 100644 --- a/website/blog/2023-04-18-building-a-kimball-dimensional-model-with-dbt.md +++ b/website/blog/2023-04-18-building-a-kimball-dimensional-model-with-dbt.md @@ -62,7 +62,7 @@ Before you can get started: - You must have Python 3.8 or above installed - You must have dbt version 1.3.0 or above installed - You should have a basic understanding of [SQL](https://www.sqltutorial.org/) -- You should have a basic understanding of [dbt](https://docs.getdbt.com/quickstarts) +- You should have a basic understanding of [dbt](https://docs.getdbt.com/guides) ### Step 2: Clone the repository diff --git a/website/docs/docs/cloud/connect-data-platform/about-connections.md b/website/docs/docs/cloud/connect-data-platform/about-connections.md index 1fe89c7273c..1329d179900 100644 --- a/website/docs/docs/cloud/connect-data-platform/about-connections.md +++ b/website/docs/docs/cloud/connect-data-platform/about-connections.md @@ -23,7 +23,7 @@ You can connect to your database in dbt Cloud by clicking the gear in the top ri -These connection instructions provide the basic fields required for configuring a data platform connection in dbt Cloud. For more detailed guides, which include demo project data, read our [Quickstart guides](https://docs.getdbt.com/quickstarts) +These connection instructions provide the basic fields required for configuring a data platform connection in dbt Cloud. For more detailed guides, which include demo project data, read our [Quickstart guides](https://docs.getdbt.com/guides) ## IP Restrictions diff --git a/website/docs/docs/core/about-core-setup.md b/website/docs/docs/core/about-core-setup.md index a4d5ff09ee3..64e7694b793 100644 --- a/website/docs/docs/core/about-core-setup.md +++ b/website/docs/docs/core/about-core-setup.md @@ -16,4 +16,4 @@ dbt Core is an [open-source](https://github.com/dbt-labs/dbt-core) tool that ena - [Connecting to a data platform](/docs/core/connect-data-platform/profiles.yml) - [How to run your dbt projects](/docs/running-a-dbt-project/run-your-dbt-projects) -If you need a more detailed first-time setup guide for specific data platforms, read our [quickstart guides](https://docs.getdbt.com/quickstarts). +If you need a more detailed first-time setup guide for specific data platforms, read our [quickstart guides](https://docs.getdbt.com/guides). diff --git a/website/docs/docs/core/connect-data-platform/about-core-connections.md b/website/docs/docs/core/connect-data-platform/about-core-connections.md index a85a32cc031..492e5ae878a 100644 --- a/website/docs/docs/core/connect-data-platform/about-core-connections.md +++ b/website/docs/docs/core/connect-data-platform/about-core-connections.md @@ -22,7 +22,7 @@ dbt communicates with a number of different data platforms by using a dedicated Data platforms supported in dbt Core may be verified or unverified, and maintained by dbt Labs, partners, or community members. -These connection instructions provide the basic fields required for configuring a data platform connection in dbt Cloud. For more detailed guides, which include demo project data, read our [Quickstart guides](https://docs.getdbt.com/docs/quickstarts/overview) +These connection instructions provide the basic fields required for configuring a data platform connection in dbt Cloud. For more detailed guides, which include demo project data, read our [Quickstart guides](https://docs.getdbt.com/docs/guides) ## Connection profiles diff --git a/website/docs/docs/dbt-versions/release-notes/09-April-2023/starburst-trino-ga.md b/website/docs/docs/dbt-versions/release-notes/09-April-2023/starburst-trino-ga.md index 613a0c02432..708d51f0a44 100644 --- a/website/docs/docs/dbt-versions/release-notes/09-April-2023/starburst-trino-ga.md +++ b/website/docs/docs/dbt-versions/release-notes/09-April-2023/starburst-trino-ga.md @@ -8,5 +8,5 @@ tags: [Apr-2023] The Starburst (Trino compatible) connection is now generally available in dbt Cloud. This means you can now use dbt Cloud to connect with Starburst Galaxy, Starburst Enterprise, and self-hosted Trino. This feature is powered by the [`dbt-trino`](https://github.com/starburstdata/dbt-trino) adapter. -To learn more, check out our Quickstart guide for [dbt Cloud and Starburst Galaxy](https://docs.getdbt.com/quickstarts/starburst-galaxy). +To learn more, check out our Quickstart guide for [dbt Cloud and Starburst Galaxy](https://docs.getdbt.com/guides/starburst-galaxy). diff --git a/website/sidebars.js b/website/sidebars.js index fc87c1142c7..84cddaebbfa 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -29,8 +29,8 @@ const sidebarSettings = { }, // About dbt Cloud directory { type: "link", - label: "Quickstarts", - href: `/quickstarts`, + label: "Guides", + href: `/guides`, }, { type: "category", From 5b6fd92b1a1a95d4069df19efa0b60c91a0a9241 Mon Sep 17 00:00:00 2001 From: john-rock Date: Fri, 27 Oct 2023 11:18:43 -0400 Subject: [PATCH 050/305] more more more --- contributing/content-style-guide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contributing/content-style-guide.md b/contributing/content-style-guide.md index eaa090a00b6..e17575cc234 100644 --- a/contributing/content-style-guide.md +++ b/contributing/content-style-guide.md @@ -360,7 +360,7 @@ Otherwise, the text will appear squished and provide users with a bad experience - ``: creates 5 columns cards (use sparingly) - You can't create cards with 6 or more columns as that would provide users a poor experience. -Refer to [dbt Cloud features](/docs/cloud/about-cloud/dbt-cloud-features) and [Quickstarts](/docs/quickstarts/overview) as examples. +Refer to [dbt Cloud features](/docs/cloud/about-cloud/dbt-cloud-features) and [Quickstarts](/docs/guides) as examples. ### Create cards From 8002ac16d696f944ea337d45208e7672bcaa6f96 Mon Sep 17 00:00:00 2001 From: john-rock Date: Fri, 27 Oct 2023 11:25:59 -0400 Subject: [PATCH 051/305] update links on the cards --- website/src/components/quickstartGuideCard/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/src/components/quickstartGuideCard/index.js b/website/src/components/quickstartGuideCard/index.js index a8760bcc883..1d29dcefa51 100644 --- a/website/src/components/quickstartGuideCard/index.js +++ b/website/src/components/quickstartGuideCard/index.js @@ -8,7 +8,7 @@ export default function QuickstartGuideCard({ frontMatter }) { frontMatter; return ( - + {recently_updated && ( Updated )} @@ -20,7 +20,7 @@ export default function QuickstartGuideCard({ frontMatter }) { {time_to_complete} )} - + Start From 9e5b6adc2870f1332d5a4dfd579ae9f0d882ec53 Mon Sep 17 00:00:00 2001 From: john-rock Date: Fri, 27 Oct 2023 12:05:30 -0400 Subject: [PATCH 052/305] update button color --- website/src/components/quickstartTOC/styles.module.css | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/website/src/components/quickstartTOC/styles.module.css b/website/src/components/quickstartTOC/styles.module.css index 492f919f662..8a3885c34ad 100644 --- a/website/src/components/quickstartTOC/styles.module.css +++ b/website/src/components/quickstartTOC/styles.module.css @@ -83,6 +83,10 @@ html[data-theme="dark"] .tocList .active span { .stepWrapper .buttonContainer a:hover { background: var(--color-light-teal); + color: var(--color-white); +} + +html[data-theme="dark"] .stepWrapper .buttonContainer a:hover { color: var(--color-white) !important; } @@ -104,8 +108,12 @@ html[data-theme="dark"] .tocList .active span { margin-left: .4rem; } -.stepWrapper[data-step="1"] .nextButton { +.stepWrapper[data-step="1"] a.nextButton { background: var(--color-light-teal); + color: var(--color-white); +} + +html[data-theme="dark"] .stepWrapper[data-step="1"] a.nextButton { color: var(--color-white) !important; } From 17da4a02d8c0a441cb634818ece3846f1120b4ea Mon Sep 17 00:00:00 2001 From: john-rock Date: Fri, 27 Oct 2023 13:10:21 -0400 Subject: [PATCH 053/305] update redirects --- website/vercel.json | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/website/vercel.json b/website/vercel.json index 14b3a0a6af0..314f7471158 100644 --- a/website/vercel.json +++ b/website/vercel.json @@ -4021,6 +4021,41 @@ "source": "/reference/resource-properties/access", "destination": "/reference/resource-configs/access", "permanent": true + }, + { + "source": "/quickstarts/bigquery", + "destination": "/guides/bigquery", + "permanent": true + }, + { + "source": "/quickstarts/databricks", + "destination": "/guides/databricks", + "permanent": true + }, + { + "source": "/quickstarts/redshift", + "destination": "/guides/redshift", + "permanent": true + }, + { + "source": "/quickstarts/snowflake", + "destination": "/guides/snowflake", + "permanent": true + }, + { + "source": "/quickstarts/starburst-galaxy", + "destination": "/guides/starburst-galaxy", + "permanent": true + }, + { + "source": "/quickstarts/codespace", + "destination": "/guides/codespace", + "permanent": true + }, + { + "source": "/quickstarts/manual-install", + "destination": "/guides/manual-install", + "permanent": true } ] } From 493c47afecbf1a0008d710ad06a931769ed178e6 Mon Sep 17 00:00:00 2001 From: john-rock Date: Fri, 27 Oct 2023 13:23:32 -0400 Subject: [PATCH 054/305] add another redirect --- website/vercel.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/website/vercel.json b/website/vercel.json index 314f7471158..990794d5ee7 100644 --- a/website/vercel.json +++ b/website/vercel.json @@ -4022,6 +4022,11 @@ "destination": "/reference/resource-configs/access", "permanent": true }, + { + "source": "/quickstarts", + "destination": "/guides", + "permanent": true + }, { "source": "/quickstarts/bigquery", "destination": "/guides/bigquery", From 493198c7d605f15254bce239211d54f6cedeed9d Mon Sep 17 00:00:00 2001 From: john-rock Date: Fri, 27 Oct 2023 14:36:52 -0400 Subject: [PATCH 055/305] remove old quickstart --- website/docs/quickstarts/bigquery-qs.md | 298 ------------------------ 1 file changed, 298 deletions(-) delete mode 100644 website/docs/quickstarts/bigquery-qs.md diff --git a/website/docs/quickstarts/bigquery-qs.md b/website/docs/quickstarts/bigquery-qs.md deleted file mode 100644 index 7960e6819de..00000000000 --- a/website/docs/quickstarts/bigquery-qs.md +++ /dev/null @@ -1,298 +0,0 @@ ---- -title: "Quickstart for dbt Cloud and BigQuery" -id: "bigquery" -time_to_complete: '30 minutes' -platform: 'dbt-cloud' -icon: 'bigquery' -hide_table_of_contents: true -tags: ['BigQuery', 'dbt Cloud'] -level: 'Beginner' -recently_updated: true ---- - -## Introduction - -In this quickstart guide, you'll learn how to use dbt Cloud with BigQuery. It will show you how to: - -- Create a Google Cloud Platform (GCP) project. -- Access sample data in a public dataset. -- Connect dbt Cloud to BigQuery. -- Take a sample query and turn it into a model in your dbt project. A model in dbt is a select statement. -- Add tests to your models. -- Document your models. -- Schedule a job to run. - -:::tip Videos for you -You can check out [dbt Fundamentals](https://courses.getdbt.com/courses/fundamentals) for free if you're interested in course learning with videos. - -::: - -### Prerequisites​ - -- You have a [dbt Cloud account](https://www.getdbt.com/signup/). -- You have a [Google account](https://support.google.com/accounts/answer/27441?hl=en). -- You can use a personal or work account to set up BigQuery through [Google Cloud Platform (GCP)](https://cloud.google.com/free). - -### Related content - -- Learn more with [dbt Courses](https://courses.getdbt.com/collections) -- [CI jobs](/docs/deploy/continuous-integration) -- [Deploy jobs](/docs/deploy/deploy-jobs) -- [Job notifications](/docs/deploy/job-notifications) -- [Source freshness](/docs/deploy/source-freshness) - -## Create a new GCP project​ - -1. Go to the [BigQuery Console](https://console.cloud.google.com/bigquery) after you log in to your Google account. If you have multiple Google accounts, make sure you’re using the correct one. -2. Create a new project from the [Manage resources page](https://console.cloud.google.com/projectcreate?previousPage=%2Fcloud-resource-manager%3Fwalkthrough_id%3Dresource-manager--create-project%26project%3D%26folder%3D%26organizationId%3D%23step_index%3D1&walkthrough_id=resource-manager--create-project). For more information, refer to [Creating a project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#creating_a_project) in the Google Cloud docs. GCP automatically populates the Project name field for you. You can change it to be more descriptive for your use. For example, `dbt Learn - BigQuery Setup`. - -## Create BigQuery datasets - -1. From the [BigQuery Console](https://console.cloud.google.com/bigquery), click **Editor**. Make sure to select your newly created project, which is available at the top of the page. -1. Verify that you can run SQL queries. Copy and paste these queries into the Query Editor: - ```sql - select * from `dbt-tutorial.jaffle_shop.customers`; - select * from `dbt-tutorial.jaffle_shop.orders`; - select * from `dbt-tutorial.stripe.payment`; - ``` - - Click **Run**, then check for results from the queries. For example: -
- -
-2. Create new datasets from the [BigQuery Console](https://console.cloud.google.com/bigquery). For more information, refer to [Create datasets](https://cloud.google.com/bigquery/docs/datasets#create-dataset) in the Google Cloud docs. Datasets in BigQuery are equivalent to schemas in a traditional database. On the **Create dataset** page: - - **Dataset ID** — Enter a name that fits the purpose. This name is used like schema in fully qualified references to your database objects such as `database.schema.table`. As an example for this guide, create one for `jaffle_shop` and another one for `stripe` afterward. - - **Data location** — Leave it blank (the default). It determines the GCP location of where your data is stored. The current default location is the US multi-region. All tables within this dataset will share this location. - - **Enable table expiration** — Leave it unselected (the default). The default for the billing table expiration is 60 days. Because billing isn’t enabled for this project, GCP defaults to deprecating tables. - - **Google-managed encryption key** — This option is available under **Advanced options**. Allow Google to manage encryption (the default). -
- -
-3. After you create the `jaffle_shop` dataset, create one for `stripe` with all the same values except for **Dataset ID**. - -## Generate BigQuery credentials {#generate-bigquery-credentials} -In order to let dbt connect to your warehouse, you'll need to generate a keyfile. This is analogous to using a database username and password with most other data warehouses. - -1. Start the [GCP credentials wizard](https://console.cloud.google.com/apis/credentials/wizard). Make sure your new project is selected in the header. If you do not see your account or project, click your profile picture to the right and verify you are using the correct email account. For **Credential Type**: - - From the **Select an API** dropdown, choose **BigQuery API** - - Select **Application data** for the type of data you will be accessing - - Click **Next** to create a new service account. -2. Create a service account for your new project from the [Service accounts page](https://console.cloud.google.com/projectselector2/iam-admin/serviceaccounts?supportedpurview=project). For more information, refer to [Create a service account](https://developers.google.com/workspace/guides/create-credentials#create_a_service_account) in the Google Cloud docs. As an example for this guide, you can: - - Type `dbt-user` as the **Service account name** - - From the **Select a role** dropdown, choose **BigQuery Admin** and click **Continue** - - Leave the **Grant users access to this service account** fields blank - - Click **Done** -3. Create a service account key for your new project from the [Service accounts page](https://console.cloud.google.com/iam-admin/serviceaccounts?walkthrough_id=iam--create-service-account-keys&start_index=1#step_index=1). For more information, refer to [Create a service account key](https://cloud.google.com/iam/docs/creating-managing-service-account-keys#creating) in the Google Cloud docs. When downloading the JSON file, make sure to use a filename you can easily remember. For example, `dbt-user-creds.json`. For security reasons, dbt Labs recommends that you protect this JSON file like you would your identity credentials; for example, don't check the JSON file into your version control software. - -## Connect dbt Cloud to BigQuery​ -1. Create a new project in [dbt Cloud](https://cloud.getdbt.com/). From **Account settings** (using the gear menu in the top right corner), click **+ New Project**. -2. Enter a project name and click **Continue**. -3. For the warehouse, click **BigQuery** then **Next** to set up your connection. -4. Click **Upload a Service Account JSON File** in settings. -5. Select the JSON file you downloaded in [Generate BigQuery credentials](#generate-bigquery-credentials) and dbt Cloud will fill in all the necessary fields. -6. Click **Test Connection**. This verifies that dbt Cloud can access your BigQuery account. -7. Click **Next** if the test succeeds. If it fails, you might need to go back and regenerate your BigQuery credentials. - - -## Set up a dbt Cloud managed repository - - - -## Initialize your dbt project -Now that you have a repository configured, you can initialize your project and start development in dbt Cloud: - -1. Click **Start developing in the IDE**. It might take a few minutes for your project to spin up for the first time as it establishes your git connection, clones your repo, and tests the connection to the warehouse. -2. Above the file tree to the left, click **Initialize dbt project**. This builds out your folder structure with example models. -3. Make your initial commit by clicking **Commit and sync**. Use the commit message `initial commit` and click **Commit**. This creates the first commit to your managed repo and allows you to open a branch where you can add new dbt code. -4. You can now directly query data from your warehouse and execute `dbt run`. You can try this out now: - - In the command line bar at the bottom, enter `dbt run` and click **Enter**. You should see a `dbt run succeeded` message. - - To confirm the success of the above command, navigate to the BigQuery Console and discover the newly created models. - -## Build your first model -1. Under **Version Control** on the left, click **Create branch**. You can name it `add-customers-model`. You need to create a new branch since the main branch is set to read-only mode. -3. Click the **...** next to the `models` directory, then select **Create file**. -4. Name the file `customers.sql`, then click **Create**. -5. Copy the following query into the file and click **Save**. - -```sql -with customers as ( - - select - id as customer_id, - first_name, - last_name - - from `dbt-tutorial`.jaffle_shop.customers - -), - -orders as ( - - select - id as order_id, - user_id as customer_id, - order_date, - status - - from `dbt-tutorial`.jaffle_shop.orders - -), - -customer_orders as ( - - select - customer_id, - - min(order_date) as first_order_date, - max(order_date) as most_recent_order_date, - count(order_id) as number_of_orders - - from orders - - group by 1 - -), - -final as ( - - select - customers.customer_id, - customers.first_name, - customers.last_name, - customer_orders.first_order_date, - customer_orders.most_recent_order_date, - coalesce(customer_orders.number_of_orders, 0) as number_of_orders - - from customers - - left join customer_orders using (customer_id) - -) - -select * from final -``` - -6. Enter `dbt run` in the command prompt at the bottom of the screen. You should get a successful run and see the three models. - -Later, you can connect your business intelligence (BI) tools to these views and tables so they only read cleaned-up data rather than raw data in your BI tool. - -#### FAQs - - - - - - - -## Change the way your model is materialized - - - -## Delete the example models - - - -## Build models on top of other models - - - -1. Create a new SQL file, `models/stg_customers.sql`, with the SQL from the `customers` CTE in our original query. -2. Create a second new SQL file, `models/stg_orders.sql`, with the SQL from the `orders` CTE in our original query. - - - - ```sql - select - id as customer_id, - first_name, - last_name - - from `dbt-tutorial`.jaffle_shop.customers - ``` - - - - - - ```sql - select - id as order_id, - user_id as customer_id, - order_date, - status - - from `dbt-tutorial`.jaffle_shop.orders - ``` - - - -3. Edit the SQL in your `models/customers.sql` file as follows: - - - - ```sql - with customers as ( - - select * from {{ ref('stg_customers') }} - - ), - - orders as ( - - select * from {{ ref('stg_orders') }} - - ), - - customer_orders as ( - - select - customer_id, - - min(order_date) as first_order_date, - max(order_date) as most_recent_order_date, - count(order_id) as number_of_orders - - from orders - - group by 1 - - ), - - final as ( - - select - customers.customer_id, - customers.first_name, - customers.last_name, - customer_orders.first_order_date, - customer_orders.most_recent_order_date, - coalesce(customer_orders.number_of_orders, 0) as number_of_orders - - from customers - - left join customer_orders using (customer_id) - - ) - - select * from final - - ``` - - - -4. Execute `dbt run`. - - This time, when you performed a `dbt run`, separate views/tables were created for `stg_customers`, `stg_orders`, and `customers`. dbt inferred the order to run these models. Because `customers` depends on `stg_customers` and `stg_orders`, dbt builds `customers` last. You do not need to explicitly define these dependencies. - -#### FAQs {#faq-2} - - - - - - - - - - - From dac2480d1ff16ac4f04a54a703eb99e3fcee6ea9 Mon Sep 17 00:00:00 2001 From: john-rock Date: Fri, 27 Oct 2023 16:12:12 -0400 Subject: [PATCH 056/305] update styles --- .../components/quickstartGuideCard/index.js | 2 +- .../quickstartGuideCard/styles.module.css | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/website/src/components/quickstartGuideCard/index.js b/website/src/components/quickstartGuideCard/index.js index 1d29dcefa51..104bb5cb35b 100644 --- a/website/src/components/quickstartGuideCard/index.js +++ b/website/src/components/quickstartGuideCard/index.js @@ -21,7 +21,7 @@ export default function QuickstartGuideCard({ frontMatter }) { )} - Start + Start {(tags || level) && ( diff --git a/website/src/components/quickstartGuideCard/styles.module.css b/website/src/components/quickstartGuideCard/styles.module.css index 4c6f17bff79..aa1538cdeaa 100644 --- a/website/src/components/quickstartGuideCard/styles.module.css +++ b/website/src/components/quickstartGuideCard/styles.module.css @@ -1,5 +1,5 @@ .quickstartCard { - border: 1px solid #EFF2F3; + outline: 1px solid #EFF2F3; border-radius: var(--border-radius); box-shadow: 0px 11px 24px rgba(138, 138, 138, .1); padding: 2.5rem 2.5rem 1.5rem 2.5rem; @@ -13,6 +13,11 @@ .quickstartCard:hover { transform: translateY(-7px); + outline: 2px solid var( --color-green-blue); +} + +.quickstartCard:hover > .start { + text-decoration: underline; } .quickstartCard .icon { @@ -52,19 +57,16 @@ font-size: 1.125rem; margin-top: auto; padding-top: 2rem; + font-weight: 600; } [data-theme='dark'] .quickstartCard .start { color: #fff; } -[data-theme='dark'] .quickstartCard:hover .start { - text-decoration: underline; -} - -.quickstartCard .start:after { - content: " →"; - margin-left: 5px; +.quickstartCard .start i { + margin-left: 4px; + font-size: .9rem; } .quickstartCard .recently_updated { From badaed7d57b74d8cb5dfa725bf0f5ab6c1969e39 Mon Sep 17 00:00:00 2001 From: john-rock Date: Fri, 27 Oct 2023 16:14:12 -0400 Subject: [PATCH 057/305] update best practice link in nav --- website/docusaurus.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index ddb419ac4f7..546aaeb2e53 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -130,7 +130,7 @@ var siteSettings = { href: 'https://courses.getdbt.com', }, { - label: 'Guides', + label: 'Best Practices', to: '/guides/best-practices', }, { From c39e9cb2d0c2b0d716221f88915f12082bd6b238 Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Fri, 27 Oct 2023 17:32:19 -0700 Subject: [PATCH 058/305] adding guides to cool new section --- .../best-practices.md | 3 +- .../best-practices/custom-generic-tests.md | 0 .../best-practices/debugging-errors.md | 0 .../semantic-layer-1-intro.md | 0 .../semantic-layer-2-setup.md | 0 .../semantic-layer-3-build-semantic-models.md | 0 .../semantic-layer-4-build-metrics.md | 0 .../semantic-layer-5-refactor-a-mart.md | 0 .../semantic-layer-6-advanced-metrics.md | 0 .../semantic-layer-7-conclusion.md | 0 .../how-we-mesh/mesh-1-intro.md | 0 .../how-we-mesh/mesh-2-structures.md | 0 .../how-we-mesh/mesh-3-implementation.md | 0 .../how-we-structure/1-guide-overview.md | 0 .../how-we-structure/2-staging.md | 0 .../how-we-structure/3-intermediate.md | 0 .../how-we-structure/4-marts.md | 0 .../5-semantic-layer-marts.md | 0 .../6-the-rest-of-the-project.md | 0 .../0-how-we-style-our-dbt-projects.md | 0 .../1-how-we-style-our-dbt-models.md | 0 .../how-we-style/2-how-we-style-our-sql.md | 0 .../how-we-style/3-how-we-style-our-python.md | 0 .../how-we-style/4-how-we-style-our-jinja.md | 0 .../how-we-style/5-how-we-style-our-yaml.md | 0 .../how-we-style/6-how-we-style-conclusion.md | 0 ...materializations-guide-1-guide-overview.md | 0 ...ions-guide-2-available-materializations.md | 0 ...ns-guide-3-configuring-materializations.md | 0 ...rializations-guide-4-incremental-models.md | 0 ...materializations-guide-5-best-practices.md | 0 ...terializations-guide-6-examining-builds.md | 0 .../materializations-guide-7-conclusion.md | 0 website/docs/guides/airflow-and-dbt-cloud.md | 295 ++++++++++++++++++ .../creating-new-materializations.md | 14 +- .../1-airflow-and-dbt-cloud.md | 55 ---- .../2-setting-up-airflow-and-dbt-cloud.md | 90 ------ .../3-running-airflow-and-dbt-cloud.md | 104 ------ .../4-airflow-and-dbt-cloud-faqs.md | 50 --- website/docs/guides/redshift-qs.md | 2 +- .../docs/guides/{advanced => }/using-jinja.md | 7 + website/docusaurus.config.js | 2 +- website/sidebars.js | 277 ++-------------- 43 files changed, 346 insertions(+), 553 deletions(-) rename website/docs/{guides/legacy => best-practices}/best-practices.md (99%) rename website/docs/{guides => }/best-practices/custom-generic-tests.md (100%) rename website/docs/{guides => }/best-practices/debugging-errors.md (100%) rename website/docs/{guides => }/best-practices/how-we-build-our-metrics/semantic-layer-1-intro.md (100%) rename website/docs/{guides => }/best-practices/how-we-build-our-metrics/semantic-layer-2-setup.md (100%) rename website/docs/{guides => }/best-practices/how-we-build-our-metrics/semantic-layer-3-build-semantic-models.md (100%) rename website/docs/{guides => }/best-practices/how-we-build-our-metrics/semantic-layer-4-build-metrics.md (100%) rename website/docs/{guides => }/best-practices/how-we-build-our-metrics/semantic-layer-5-refactor-a-mart.md (100%) rename website/docs/{guides => }/best-practices/how-we-build-our-metrics/semantic-layer-6-advanced-metrics.md (100%) rename website/docs/{guides => }/best-practices/how-we-build-our-metrics/semantic-layer-7-conclusion.md (100%) rename website/docs/{guides => }/best-practices/how-we-mesh/mesh-1-intro.md (100%) rename website/docs/{guides => }/best-practices/how-we-mesh/mesh-2-structures.md (100%) rename website/docs/{guides => }/best-practices/how-we-mesh/mesh-3-implementation.md (100%) rename website/docs/{guides => }/best-practices/how-we-structure/1-guide-overview.md (100%) rename website/docs/{guides => }/best-practices/how-we-structure/2-staging.md (100%) rename website/docs/{guides => }/best-practices/how-we-structure/3-intermediate.md (100%) rename website/docs/{guides => }/best-practices/how-we-structure/4-marts.md (100%) rename website/docs/{guides => }/best-practices/how-we-structure/5-semantic-layer-marts.md (100%) rename website/docs/{guides => }/best-practices/how-we-structure/6-the-rest-of-the-project.md (100%) rename website/docs/{guides => }/best-practices/how-we-style/0-how-we-style-our-dbt-projects.md (100%) rename website/docs/{guides => }/best-practices/how-we-style/1-how-we-style-our-dbt-models.md (100%) rename website/docs/{guides => }/best-practices/how-we-style/2-how-we-style-our-sql.md (100%) rename website/docs/{guides => }/best-practices/how-we-style/3-how-we-style-our-python.md (100%) rename website/docs/{guides => }/best-practices/how-we-style/4-how-we-style-our-jinja.md (100%) rename website/docs/{guides => }/best-practices/how-we-style/5-how-we-style-our-yaml.md (100%) rename website/docs/{guides => }/best-practices/how-we-style/6-how-we-style-conclusion.md (100%) rename website/docs/{guides => }/best-practices/materializations/materializations-guide-1-guide-overview.md (100%) rename website/docs/{guides => }/best-practices/materializations/materializations-guide-2-available-materializations.md (100%) rename website/docs/{guides => }/best-practices/materializations/materializations-guide-3-configuring-materializations.md (100%) rename website/docs/{guides => }/best-practices/materializations/materializations-guide-4-incremental-models.md (100%) rename website/docs/{guides => }/best-practices/materializations/materializations-guide-5-best-practices.md (100%) rename website/docs/{guides => }/best-practices/materializations/materializations-guide-6-examining-builds.md (100%) rename website/docs/{guides => }/best-practices/materializations/materializations-guide-7-conclusion.md (100%) create mode 100644 website/docs/guides/airflow-and-dbt-cloud.md rename website/docs/guides/{advanced => }/creating-new-materializations.md (98%) delete mode 100644 website/docs/guides/orchestration/airflow-and-dbt-cloud/1-airflow-and-dbt-cloud.md delete mode 100644 website/docs/guides/orchestration/airflow-and-dbt-cloud/2-setting-up-airflow-and-dbt-cloud.md delete mode 100644 website/docs/guides/orchestration/airflow-and-dbt-cloud/3-running-airflow-and-dbt-cloud.md delete mode 100644 website/docs/guides/orchestration/airflow-and-dbt-cloud/4-airflow-and-dbt-cloud-faqs.md rename website/docs/guides/{advanced => }/using-jinja.md (98%) diff --git a/website/docs/guides/legacy/best-practices.md b/website/docs/best-practices/best-practices.md similarity index 99% rename from website/docs/guides/legacy/best-practices.md rename to website/docs/best-practices/best-practices.md index 1fbcbc72cc1..70300a5974f 100644 --- a/website/docs/guides/legacy/best-practices.md +++ b/website/docs/best-practices/best-practices.md @@ -1,11 +1,12 @@ --- -title: "Best practices" +title: "Best practices for workflows" id: "best-practices" --- This page contains the collective wisdom of experienced users of dbt on how to best use it in your analytics work. Observing these best practices will help your analytics team work as effectively as possible, while implementing the pro-tips will add some polish to your dbt projects! ## Best practice workflows + ### Version control your dbt project All dbt projects should be managed in version control. Git branches should be created to manage development of new features and bug fixes. All code changes should be reviewed by a colleague (or yourself) in a Pull Request prior to merging into `master`. diff --git a/website/docs/guides/best-practices/custom-generic-tests.md b/website/docs/best-practices/custom-generic-tests.md similarity index 100% rename from website/docs/guides/best-practices/custom-generic-tests.md rename to website/docs/best-practices/custom-generic-tests.md diff --git a/website/docs/guides/best-practices/debugging-errors.md b/website/docs/best-practices/debugging-errors.md similarity index 100% rename from website/docs/guides/best-practices/debugging-errors.md rename to website/docs/best-practices/debugging-errors.md diff --git a/website/docs/guides/best-practices/how-we-build-our-metrics/semantic-layer-1-intro.md b/website/docs/best-practices/how-we-build-our-metrics/semantic-layer-1-intro.md similarity index 100% rename from website/docs/guides/best-practices/how-we-build-our-metrics/semantic-layer-1-intro.md rename to website/docs/best-practices/how-we-build-our-metrics/semantic-layer-1-intro.md diff --git a/website/docs/guides/best-practices/how-we-build-our-metrics/semantic-layer-2-setup.md b/website/docs/best-practices/how-we-build-our-metrics/semantic-layer-2-setup.md similarity index 100% rename from website/docs/guides/best-practices/how-we-build-our-metrics/semantic-layer-2-setup.md rename to website/docs/best-practices/how-we-build-our-metrics/semantic-layer-2-setup.md diff --git a/website/docs/guides/best-practices/how-we-build-our-metrics/semantic-layer-3-build-semantic-models.md b/website/docs/best-practices/how-we-build-our-metrics/semantic-layer-3-build-semantic-models.md similarity index 100% rename from website/docs/guides/best-practices/how-we-build-our-metrics/semantic-layer-3-build-semantic-models.md rename to website/docs/best-practices/how-we-build-our-metrics/semantic-layer-3-build-semantic-models.md diff --git a/website/docs/guides/best-practices/how-we-build-our-metrics/semantic-layer-4-build-metrics.md b/website/docs/best-practices/how-we-build-our-metrics/semantic-layer-4-build-metrics.md similarity index 100% rename from website/docs/guides/best-practices/how-we-build-our-metrics/semantic-layer-4-build-metrics.md rename to website/docs/best-practices/how-we-build-our-metrics/semantic-layer-4-build-metrics.md diff --git a/website/docs/guides/best-practices/how-we-build-our-metrics/semantic-layer-5-refactor-a-mart.md b/website/docs/best-practices/how-we-build-our-metrics/semantic-layer-5-refactor-a-mart.md similarity index 100% rename from website/docs/guides/best-practices/how-we-build-our-metrics/semantic-layer-5-refactor-a-mart.md rename to website/docs/best-practices/how-we-build-our-metrics/semantic-layer-5-refactor-a-mart.md diff --git a/website/docs/guides/best-practices/how-we-build-our-metrics/semantic-layer-6-advanced-metrics.md b/website/docs/best-practices/how-we-build-our-metrics/semantic-layer-6-advanced-metrics.md similarity index 100% rename from website/docs/guides/best-practices/how-we-build-our-metrics/semantic-layer-6-advanced-metrics.md rename to website/docs/best-practices/how-we-build-our-metrics/semantic-layer-6-advanced-metrics.md diff --git a/website/docs/guides/best-practices/how-we-build-our-metrics/semantic-layer-7-conclusion.md b/website/docs/best-practices/how-we-build-our-metrics/semantic-layer-7-conclusion.md similarity index 100% rename from website/docs/guides/best-practices/how-we-build-our-metrics/semantic-layer-7-conclusion.md rename to website/docs/best-practices/how-we-build-our-metrics/semantic-layer-7-conclusion.md diff --git a/website/docs/guides/best-practices/how-we-mesh/mesh-1-intro.md b/website/docs/best-practices/how-we-mesh/mesh-1-intro.md similarity index 100% rename from website/docs/guides/best-practices/how-we-mesh/mesh-1-intro.md rename to website/docs/best-practices/how-we-mesh/mesh-1-intro.md diff --git a/website/docs/guides/best-practices/how-we-mesh/mesh-2-structures.md b/website/docs/best-practices/how-we-mesh/mesh-2-structures.md similarity index 100% rename from website/docs/guides/best-practices/how-we-mesh/mesh-2-structures.md rename to website/docs/best-practices/how-we-mesh/mesh-2-structures.md diff --git a/website/docs/guides/best-practices/how-we-mesh/mesh-3-implementation.md b/website/docs/best-practices/how-we-mesh/mesh-3-implementation.md similarity index 100% rename from website/docs/guides/best-practices/how-we-mesh/mesh-3-implementation.md rename to website/docs/best-practices/how-we-mesh/mesh-3-implementation.md diff --git a/website/docs/guides/best-practices/how-we-structure/1-guide-overview.md b/website/docs/best-practices/how-we-structure/1-guide-overview.md similarity index 100% rename from website/docs/guides/best-practices/how-we-structure/1-guide-overview.md rename to website/docs/best-practices/how-we-structure/1-guide-overview.md diff --git a/website/docs/guides/best-practices/how-we-structure/2-staging.md b/website/docs/best-practices/how-we-structure/2-staging.md similarity index 100% rename from website/docs/guides/best-practices/how-we-structure/2-staging.md rename to website/docs/best-practices/how-we-structure/2-staging.md diff --git a/website/docs/guides/best-practices/how-we-structure/3-intermediate.md b/website/docs/best-practices/how-we-structure/3-intermediate.md similarity index 100% rename from website/docs/guides/best-practices/how-we-structure/3-intermediate.md rename to website/docs/best-practices/how-we-structure/3-intermediate.md diff --git a/website/docs/guides/best-practices/how-we-structure/4-marts.md b/website/docs/best-practices/how-we-structure/4-marts.md similarity index 100% rename from website/docs/guides/best-practices/how-we-structure/4-marts.md rename to website/docs/best-practices/how-we-structure/4-marts.md diff --git a/website/docs/guides/best-practices/how-we-structure/5-semantic-layer-marts.md b/website/docs/best-practices/how-we-structure/5-semantic-layer-marts.md similarity index 100% rename from website/docs/guides/best-practices/how-we-structure/5-semantic-layer-marts.md rename to website/docs/best-practices/how-we-structure/5-semantic-layer-marts.md diff --git a/website/docs/guides/best-practices/how-we-structure/6-the-rest-of-the-project.md b/website/docs/best-practices/how-we-structure/6-the-rest-of-the-project.md similarity index 100% rename from website/docs/guides/best-practices/how-we-structure/6-the-rest-of-the-project.md rename to website/docs/best-practices/how-we-structure/6-the-rest-of-the-project.md diff --git a/website/docs/guides/best-practices/how-we-style/0-how-we-style-our-dbt-projects.md b/website/docs/best-practices/how-we-style/0-how-we-style-our-dbt-projects.md similarity index 100% rename from website/docs/guides/best-practices/how-we-style/0-how-we-style-our-dbt-projects.md rename to website/docs/best-practices/how-we-style/0-how-we-style-our-dbt-projects.md diff --git a/website/docs/guides/best-practices/how-we-style/1-how-we-style-our-dbt-models.md b/website/docs/best-practices/how-we-style/1-how-we-style-our-dbt-models.md similarity index 100% rename from website/docs/guides/best-practices/how-we-style/1-how-we-style-our-dbt-models.md rename to website/docs/best-practices/how-we-style/1-how-we-style-our-dbt-models.md diff --git a/website/docs/guides/best-practices/how-we-style/2-how-we-style-our-sql.md b/website/docs/best-practices/how-we-style/2-how-we-style-our-sql.md similarity index 100% rename from website/docs/guides/best-practices/how-we-style/2-how-we-style-our-sql.md rename to website/docs/best-practices/how-we-style/2-how-we-style-our-sql.md diff --git a/website/docs/guides/best-practices/how-we-style/3-how-we-style-our-python.md b/website/docs/best-practices/how-we-style/3-how-we-style-our-python.md similarity index 100% rename from website/docs/guides/best-practices/how-we-style/3-how-we-style-our-python.md rename to website/docs/best-practices/how-we-style/3-how-we-style-our-python.md diff --git a/website/docs/guides/best-practices/how-we-style/4-how-we-style-our-jinja.md b/website/docs/best-practices/how-we-style/4-how-we-style-our-jinja.md similarity index 100% rename from website/docs/guides/best-practices/how-we-style/4-how-we-style-our-jinja.md rename to website/docs/best-practices/how-we-style/4-how-we-style-our-jinja.md diff --git a/website/docs/guides/best-practices/how-we-style/5-how-we-style-our-yaml.md b/website/docs/best-practices/how-we-style/5-how-we-style-our-yaml.md similarity index 100% rename from website/docs/guides/best-practices/how-we-style/5-how-we-style-our-yaml.md rename to website/docs/best-practices/how-we-style/5-how-we-style-our-yaml.md diff --git a/website/docs/guides/best-practices/how-we-style/6-how-we-style-conclusion.md b/website/docs/best-practices/how-we-style/6-how-we-style-conclusion.md similarity index 100% rename from website/docs/guides/best-practices/how-we-style/6-how-we-style-conclusion.md rename to website/docs/best-practices/how-we-style/6-how-we-style-conclusion.md diff --git a/website/docs/guides/best-practices/materializations/materializations-guide-1-guide-overview.md b/website/docs/best-practices/materializations/materializations-guide-1-guide-overview.md similarity index 100% rename from website/docs/guides/best-practices/materializations/materializations-guide-1-guide-overview.md rename to website/docs/best-practices/materializations/materializations-guide-1-guide-overview.md diff --git a/website/docs/guides/best-practices/materializations/materializations-guide-2-available-materializations.md b/website/docs/best-practices/materializations/materializations-guide-2-available-materializations.md similarity index 100% rename from website/docs/guides/best-practices/materializations/materializations-guide-2-available-materializations.md rename to website/docs/best-practices/materializations/materializations-guide-2-available-materializations.md diff --git a/website/docs/guides/best-practices/materializations/materializations-guide-3-configuring-materializations.md b/website/docs/best-practices/materializations/materializations-guide-3-configuring-materializations.md similarity index 100% rename from website/docs/guides/best-practices/materializations/materializations-guide-3-configuring-materializations.md rename to website/docs/best-practices/materializations/materializations-guide-3-configuring-materializations.md diff --git a/website/docs/guides/best-practices/materializations/materializations-guide-4-incremental-models.md b/website/docs/best-practices/materializations/materializations-guide-4-incremental-models.md similarity index 100% rename from website/docs/guides/best-practices/materializations/materializations-guide-4-incremental-models.md rename to website/docs/best-practices/materializations/materializations-guide-4-incremental-models.md diff --git a/website/docs/guides/best-practices/materializations/materializations-guide-5-best-practices.md b/website/docs/best-practices/materializations/materializations-guide-5-best-practices.md similarity index 100% rename from website/docs/guides/best-practices/materializations/materializations-guide-5-best-practices.md rename to website/docs/best-practices/materializations/materializations-guide-5-best-practices.md diff --git a/website/docs/guides/best-practices/materializations/materializations-guide-6-examining-builds.md b/website/docs/best-practices/materializations/materializations-guide-6-examining-builds.md similarity index 100% rename from website/docs/guides/best-practices/materializations/materializations-guide-6-examining-builds.md rename to website/docs/best-practices/materializations/materializations-guide-6-examining-builds.md diff --git a/website/docs/guides/best-practices/materializations/materializations-guide-7-conclusion.md b/website/docs/best-practices/materializations/materializations-guide-7-conclusion.md similarity index 100% rename from website/docs/guides/best-practices/materializations/materializations-guide-7-conclusion.md rename to website/docs/best-practices/materializations/materializations-guide-7-conclusion.md diff --git a/website/docs/guides/airflow-and-dbt-cloud.md b/website/docs/guides/airflow-and-dbt-cloud.md new file mode 100644 index 00000000000..92c97fb2fd3 --- /dev/null +++ b/website/docs/guides/airflow-and-dbt-cloud.md @@ -0,0 +1,295 @@ +--- +title: Airflow and dbt Cloud +id: airflow-and-dbt-cloud +time_to_complete: '30 minutes' +platform: 'dbt-cloud' +icon: 'guides' +hide_table_of_contents: true +tags: ['airflow', 'dbt Cloud', 'orchestration'] +level: 'Intermediate' +recently_updated: true +--- + +## Introduction + +In some cases, [Airflow](https://airflow.apache.org/) may be the preferred orchestrator for your organization over working fully within dbt Cloud. There are a few reasons your team might be considering using Airflow to orchestrate your dbt jobs: + +- Your team is already using Airflow to orchestrate other processes +- Your team needs to ensure that a [dbt job](https://docs.getdbt.com/docs/dbt-cloud/cloud-overview#schedule-and-run-dbt-jobs-in-production) kicks off before or after another process outside of dbt Cloud +- Your team needs flexibility to manage more complex scheduling, such as kicking off one dbt job only after another has completed +- Your team wants to own their own orchestration solution +- You need code to work right now without starting from scratch + +### Prerequisites + +- [dbt Cloud Teams or Enterprise account](https://www.getdbt.com/pricing/) (with [admin access](https://docs.getdbt.com/docs/cloud/manage-access/enterprise-permissions)) in order to create a service token. Permissions for service tokens can be found [here](https://docs.getdbt.com/docs/dbt-cloud-apis/service-tokens#permissions-for-service-account-tokens). +- A [free Docker account](https://hub.docker.com/signup) in order to sign in to Docker Desktop, which will be installed in the initial setup. +- A local digital scratchpad for temporarily copy-pasting API keys and URLs + +### Airflow + dbt Core + +There are [so many great examples](https://gitlab.com/gitlab-data/analytics/-/blob/master/dags/transformation/dbt_snowplow_backfill.py) from GitLab through their open source data engineering work. This is especially appropriate if you are well-versed in Kubernetes, CI/CD, and docker task management when building your airflow pipelines. If this is you and your team, you’re in good hands reading through more details [here](https://about.gitlab.com/handbook/business-technology/data-team/platform/infrastructure/#airflow) and [here](https://about.gitlab.com/handbook/business-technology/data-team/platform/dbt-guide/). + +### Airflow + dbt Cloud API w/Custom Scripts + +This has served as a bridge until the fabled Astronomer + dbt Labs-built dbt Cloud provider became generally available [here](https://registry.astronomer.io/providers/dbt%20Cloud/versions/latest). + +There are many different permutations of this over time: + +- [Custom Python Scripts](https://github.com/sungchun12/airflow-dbt-cloud/blob/main/archive/dbt_cloud_example.py): This is an airflow DAG based on [custom python API utilities](https://github.com/sungchun12/airflow-dbt-cloud/blob/main/archive/dbt_cloud_utils.py) +- [Make API requests directly through the BashOperator based on the docs](https://docs.getdbt.com/dbt-cloud/api-v2-legacy#operation/triggerRun): You can make cURL requests to invoke dbt Cloud to do what you want +- For more options, check out the [official dbt Docs](/docs/deploy/deployments#airflow) on the various ways teams are running dbt in airflow + +These solutions are great, but can be difficult to trust as your team grows and management for things like: testing, job definitions, secrets, and pipelines increase past your team’s capacity. Roles become blurry (or were never clearly defined at the start!). Both data and analytics engineers start digging through custom logging within each other’s workflows to make heads or tails of where and what the issue really is. Not to mention that when the issue is found, it can be even harder to decide on the best path forward for safely implementing fixes. This complex workflow and unclear delineation on process management results in a lot of misunderstandings and wasted time just trying to get the process to work smoothly! + + +In this guide, you'll learn how to: + +1. Creating a working local Airflow environment +2. Invoking a dbt Cloud job with Airflow (with proof!) +3. Reusing tested and trusted Airflow code for your specific use cases + +You’ll also gain a better understanding of how this will: + +- Reduce the cognitive load when building and maintaining pipelines +- Avoid dependency hell (think: `pip install` conflicts) +- Implement better recoveries from failures +- Define clearer workflows so that data and analytics engineers work better, together ♥️ + + +🙌 Let’s get started! 🙌 + +## Install the Astro CLI + +Astro is a managed software service that includes key features for teams working with Airflow. In order to use Astro, we’ll install the Astro CLI, which will give us access to useful commands for working with Airflow locally. You can read more about Astro [here](https://docs.astronomer.io/astro/). + +In this example, we’re using Homebrew to install Astro CLI. Follow the instructions to install the Astro CLI for your own operating system [here](https://docs.astronomer.io/astro/install-cli). + +```bash +brew install astro +``` + + + +## Install and start Docker Desktop + +Docker allows us to spin up an environment with all the apps and dependencies we need for the example. + +Follow the instructions [here](https://docs.docker.com/desktop/) to install Docker desktop for your own operating system. Once Docker is installed, ensure you have it up and running for the next steps. + + + +## Clone the airflow-dbt-cloud repository + +Open your terminal and clone the [airflow-dbt-cloud repository](https://github.com/sungchun12/airflow-dbt-cloud.git). This contains example Airflow DAGs that you’ll use to orchestrate your dbt Cloud job. Once cloned, navigate into the `airflow-dbt-cloud` project. + +```bash +git clone https://github.com/sungchun12/airflow-dbt-cloud.git +cd airflow-dbt-cloud +``` + + + +## Start the Docker container + +You can initialize an Astronomer project in an empty local directory using a Docker container, and then run your project locally using the `start` command. + +1. Run the following commands to initialize your project and start your local Airflow deployment: + + ```bash + astro dev init + astro dev start + ``` + + When this finishes, you should see a message similar to the following: + + ```bash + Airflow is starting up! This might take a few minutes… + + Project is running! All components are now available. + + Airflow Webserver: http://localhost:8080 + Postgres Database: localhost:5432/postgres + The default Airflow UI credentials are: admin:admin + The default Postrgres DB credentials are: postgres:postgres + ``` + +2. Open the Airflow interface. Launch your web browser and navigate to the address for the **Airflow Webserver** from your output in Step 1. + + This will take you to your local instance of Airflow. You’ll need to log in with the **default credentials**: + + - Username: admin + - Password: admin + + ![Airflow login screen](/img/guides/orchestration/airflow-and-dbt-cloud/airflow-login.png) + + + +## Create a dbt Cloud service token + +Create a service token from within dbt Cloud using the instructions [found here](https://docs.getdbt.com/docs/dbt-cloud-apis/service-tokens). Ensure that you save a copy of the token, as you won’t be able to access this later. In this example we use `Account Admin`, but you can also use `Job Admin` instead for token permissions. + + + +## Create a dbt Cloud job + +In your dbt Cloud account create a job, paying special attention to the information in the bullets below. Additional information for creating a dbt Cloud job can be found [here](/guides/bigquery). + +- Configure the job with the commands that you want to include when this job kicks off, as Airflow will be referring to the job’s configurations for this rather than being explicitly coded in the Airflow DAG. This job will run a set of commands rather than a single command. +- Ensure that the schedule is turned **off** since we’ll be using Airflow to kick things off. +- Once you hit `save` on the job, make sure you copy the URL and save it for referencing later. The url will look similar to this: + +```html +https://cloud.getdbt.com/#/accounts/{account_id}/projects/{project_id}/jobs/{job_id}/ +``` + + + +## Add your dbt Cloud API token as a secure connection + + + +Now you have all the working pieces to get up and running with Airflow + dbt Cloud. Let’s dive into make this all work together. We will **set up a connection** and **run a DAG in Airflow** that kicks off a dbt Cloud job. + +1. Navigate to Admin and click on **Connections** + + ![Airflow connections menu](/img/guides/orchestration/airflow-and-dbt-cloud/airflow-connections-menu.png) + +2. Click on the `+` sign to add a new connection, then click on the drop down to search for the dbt Cloud Connection Type + + ![Create connection](/img/guides/orchestration/airflow-and-dbt-cloud/create-connection.png) + + ![Connection type](/img/guides/orchestration/airflow-and-dbt-cloud/connection-type.png) + +3. Add in your connection details and your default dbt Cloud account id. This is found in your dbt Cloud URL after the accounts route section (`/accounts/{YOUR_ACCOUNT_ID}`), for example the account with id 16173 would see this in their URL: `https://cloud.getdbt.com/#/accounts/16173/projects/36467/jobs/65767/` + +![https://lh3.googleusercontent.com/sRxe5xbv_LYhIKblc7eiY7AmByr1OibOac2_fIe54rpU3TBGwjMpdi_j0EPEFzM1_gNQXry7Jsm8aVw9wQBSNs1I6Cyzpvijaj0VGwSnmVf3OEV8Hv5EPOQHrwQgK2RhNBdyBxN2](https://lh3.googleusercontent.com/sRxe5xbv_LYhIKblc7eiY7AmByr1OibOac2_fIe54rpU3TBGwjMpdi_j0EPEFzM1_gNQXry7Jsm8aVw9wQBSNs1I6Cyzpvijaj0VGwSnmVf3OEV8Hv5EPOQHrwQgK2RhNBdyBxN2) + +## Add your `job_id` and `account_id` config details to the python file: [dbt_cloud_provider_eltml.py](https://github.com/sungchun12/airflow-dbt-cloud/blob/main/dags/dbt_cloud_provider_eltml.py) + +1. You’ll find these details within the dbt Cloud job URL, see the comments in the code snippet below for an example. + + ```python + # dbt Cloud Job URL: https://cloud.getdbt.com/#/accounts/16173/projects/36467/jobs/65767/ + # account_id: 16173 + #job_id: 65767 + + # line 28 + default_args={"dbt_cloud_conn_id": "dbt_cloud", "account_id": 16173}, + + trigger_dbt_cloud_job_run = DbtCloudRunJobOperator( + task_id="trigger_dbt_cloud_job_run", + job_id=65767, # line 39 + check_interval=10, + timeout=300, + ) + ``` + +2. Turn on the DAG and verify the job succeeded after running. Note: screenshots taken from different job runs, but the user experience is consistent. + + ![https://lh6.googleusercontent.com/p8AqQRy0UGVLjDGPmcuGYmQ_BRodyL0Zis-eQgSmp69EHbKW51o4S-bCl1fXHlOmwpYEBxD0A-O1Q1hwt-VDVMO1wWH-AIeaoelBx06JXRJ0m1OcHaPpFKH0xDiduIhNlQhhbLiy](https://lh6.googleusercontent.com/p8AqQRy0UGVLjDGPmcuGYmQ_BRodyL0Zis-eQgSmp69EHbKW51o4S-bCl1fXHlOmwpYEBxD0A-O1Q1hwt-VDVMO1wWH-AIeaoelBx06JXRJ0m1OcHaPpFKH0xDiduIhNlQhhbLiy) + + ![Airflow DAG](/img/guides/orchestration/airflow-and-dbt-cloud/airflow-dag.png) + + ![Task run instance](/img/guides/orchestration/airflow-and-dbt-cloud/task-run-instance.png) + + ![https://lh6.googleusercontent.com/S9QdGhLAdioZ3x634CChugsJRiSVtTTd5CTXbRL8ADA6nSbAlNn4zV0jb3aC946c8SGi9FRTfyTFXqjcM-EBrJNK5hQ0HHAsR5Fj7NbdGoUfBI7xFmgeoPqnoYpjyZzRZlXkjtxS](https://lh6.googleusercontent.com/S9QdGhLAdioZ3x634CChugsJRiSVtTTd5CTXbRL8ADA6nSbAlNn4zV0jb3aC946c8SGi9FRTfyTFXqjcM-EBrJNK5hQ0HHAsR5Fj7NbdGoUfBI7xFmgeoPqnoYpjyZzRZlXkjtxS) + +## How do I rerun the dbt Cloud job and downstream tasks in my pipeline? + +If you have worked with dbt Cloud before, you have likely encountered cases where a job fails. In those cases, you have likely logged into dbt Cloud, investigated the error, and then manually restarted the job. + +This section of the guide will show you how to restart the job directly from Airflow. This will specifically run *just* the `trigger_dbt_cloud_job_run` and downstream tasks of the Airflow DAG and not the entire DAG. If only the transformation step fails, you don’t need to re-run the extract and load processes. Let’s jump into how to do that in Airflow. + +1. Click on the task + + ![Task DAG view](/img/guides/orchestration/airflow-and-dbt-cloud/task-dag-view.png) + +2. Clear the task instance + + ![Clear task instance](/img/guides/orchestration/airflow-and-dbt-cloud/clear-task-instance.png) + + ![Approve clearing](/img/guides/orchestration/airflow-and-dbt-cloud/approve-clearing.png) + +3. Watch it rerun in real time + + ![Re-run](/img/guides/orchestration/airflow-and-dbt-cloud/re-run.png) + +## Cleaning up + +At the end of this guide, make sure you shut down your docker container. When you’re done using Airflow, use the following command to stop the container: + +```bash +$ astrocloud dev stop + +[+] Running 3/3 + ⠿ Container airflow-dbt-cloud_e3fe3c-webserver-1 Stopped 7.5s + ⠿ Container airflow-dbt-cloud_e3fe3c-scheduler-1 Stopped 3.3s + ⠿ Container airflow-dbt-cloud_e3fe3c-postgres-1 Stopped 0.3s +``` + +To verify that the deployment has stopped, use the following command: + +```bash +astrocloud dev ps +``` + +This should give you an output like this: + +```bash +Name State Ports +airflow-dbt-cloud_e3fe3c-webserver-1 exited +airflow-dbt-cloud_e3fe3c-scheduler-1 exited +airflow-dbt-cloud_e3fe3c-postgres-1 exited +``` + + + +## Frequently asked questions + +### How can we run specific subsections of the dbt DAG in Airflow? + +Because of the way we configured the dbt Cloud job to run in Airflow, you can leave this job to your analytics engineers to define in the job configurations from dbt Cloud. If, for example, we need to run hourly-tagged models every hour and daily-tagged models daily, we can create jobs like `Hourly Run` or `Daily Run` and utilize the commands `dbt run -s tag:hourly` and `dbt run -s tag:daily` within each, respectively. We only need to grab our dbt Cloud `account` and `job id`, configure it in an Airflow DAG with the code provided, and then we can be on your way. See more node selection options: [here](/reference/node-selection/syntax) + +### How can I re-run models from the point of failure? + +You may want to parse the dbt DAG in Airflow to get the benefit of re-running from the point of failure. However, when you have hundreds of models in your DAG expanded out, it becomes useless for diagnosis and rerunning due to the overhead that comes along with creating an expansive Airflow DAG. + +You can’t re-run from failure natively in dbt Cloud today (feature coming!), but you can use a custom rerun parser. + +Using a simple python script coupled with the dbt Cloud provider, you can: + +- Avoid managing artifacts in a separate storage bucket(dbt Cloud does this for you) +- Avoid building your own parsing logic +- Get clear logs on what models you're rerunning in dbt Cloud (without hard coding step override commands) + +Watch the video below to see how it works! + + + +### Should Airflow run one big dbt job or many dbt jobs? + +Overall we recommend being as purposeful and minimalistic as you can. This is because dbt manages all of the dependencies between models and the orchestration of running those dependencies in order, which in turn has benefits in terms of warehouse processing efforts. + +### We want to kick off our dbt jobs after our ingestion tool (such as Fivetran) / data pipelines are done loading data. Any best practices around that? + +Our friends at Astronomer answer this question with this example: [here](https://registry.astronomer.io/dags/fivetran-dbt-cloud-census) + +### How do you set up a CI/CD workflow with Airflow? + +Check out these two resources for accomplishing your own CI/CD pipeline: + +- [Continuous Integration with dbt Cloud](/docs/deploy/continuous-integration) +- [Astronomer's CI/CD Example](https://docs.astronomer.io/software/ci-cd/#example-cicd-workflow) + +### Can dbt dynamically create tasks in the DAG like Airflow can? + +We prefer to keep models bundled vs. unbundled. You can go this route, but if you have hundreds of dbt models, it’s more effective to let the dbt Cloud job handle the models and dependencies. Bundling provides the solution to clear observability when things go wrong - we've seen more success in having the ability to clearly see issues in a bundled dbt Cloud job than combing through the nodes of an expansive Airflow DAG. If you still have a use case for this level of control though, our friends at Astronomer answer this question [here](https://www.astronomer.io/blog/airflow-dbt-1/)! + +### Can you trigger notifications if a dbt job fails with Airflow? Is there any way to access the status of the dbt Job to do that? + +Yes, either through [Airflow's email/slack](https://www.astronomer.io/guides/error-notifications-in-airflow/) functionality by itself or combined with [dbt Cloud's notifications](/docs/deploy/job-notifications), which support email and slack notifications. + +### Are there decision criteria for how to best work with dbt Cloud and airflow? + +Check out this deep dive into planning your dbt Cloud + Airflow implementation [here](https://www.youtube.com/watch?v=n7IIThR8hGk)! diff --git a/website/docs/guides/advanced/creating-new-materializations.md b/website/docs/guides/creating-new-materializations.md similarity index 98% rename from website/docs/guides/advanced/creating-new-materializations.md rename to website/docs/guides/creating-new-materializations.md index d3081ea8e20..42466c843cc 100644 --- a/website/docs/guides/advanced/creating-new-materializations.md +++ b/website/docs/guides/creating-new-materializations.md @@ -4,6 +4,13 @@ id: "creating-new-materializations" description: Learn how to create your own materializations. displayText: Creating new materializations hoverSnippet: Learn how to create your own materializations. +time_to_complete: '30 minutes' +platform: 'dbt-core' +icon: 'guides' +hide_table_of_contents: true +tags: ['materializations', 'dbt Core'] +level: 'Advanced' +recently_updated: true --- ## Overview @@ -110,13 +117,6 @@ Be sure to `commit` the transaction in the `cleanup` phase of the materializatio ### Update the Relation cache - -:::info New in 0.15.0 - -The ability to synchronize the Relation cache is new in dbt v0.15.0 - -::: - Materializations should [return](/reference/dbt-jinja-functions/return) the list of Relations that they have created at the end of execution. dbt will use this list of Relations to update the relation cache in order to reduce the number of queries executed against the database's `information_schema`. If a list of Relations is not returned, then dbt will raise a Deprecation Warning and infer the created relation from the model's configured database, schema, and alias. diff --git a/website/docs/guides/orchestration/airflow-and-dbt-cloud/1-airflow-and-dbt-cloud.md b/website/docs/guides/orchestration/airflow-and-dbt-cloud/1-airflow-and-dbt-cloud.md deleted file mode 100644 index d6760771b79..00000000000 --- a/website/docs/guides/orchestration/airflow-and-dbt-cloud/1-airflow-and-dbt-cloud.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: Airflow and dbt Cloud -id: 1-airflow-and-dbt-cloud ---- - -In some cases, [Airflow](https://airflow.apache.org/) may be the preferred orchestrator for your organization over working fully within dbt Cloud. There are a few reasons your team might be considering using Airflow to orchestrate your dbt jobs: - -- Your team is already using Airflow to orchestrate other processes -- Your team needs to ensure that a [dbt job](https://docs.getdbt.com/docs/dbt-cloud/cloud-overview#schedule-and-run-dbt-jobs-in-production) kicks off before or after another process outside of dbt Cloud -- Your team needs flexibility to manage more complex scheduling, such as kicking off one dbt job only after another has completed -- Your team wants to own their own orchestration solution -- You need code to work right now without starting from scratch - -## How are people using Airflow + dbt today? - -### Airflow + dbt Core - -There are [so many great examples](https://gitlab.com/gitlab-data/analytics/-/blob/master/dags/transformation/dbt_snowplow_backfill.py) from GitLab through their open source data engineering work. This is especially appropriate if you are well-versed in Kubernetes, CI/CD, and docker task management when building your airflow pipelines. If this is you and your team, you’re in good hands reading through more details [here](https://about.gitlab.com/handbook/business-technology/data-team/platform/infrastructure/#airflow) and [here](https://about.gitlab.com/handbook/business-technology/data-team/platform/dbt-guide/). - -### Airflow + dbt Cloud API w/Custom Scripts - -This has served as a bridge until the fabled Astronomer + dbt Labs-built dbt Cloud provider became generally available [here](https://registry.astronomer.io/providers/dbt%20Cloud/versions/latest). - -There are many different permutations of this over time: - -- [Custom Python Scripts](https://github.com/sungchun12/airflow-dbt-cloud/blob/main/archive/dbt_cloud_example.py): This is an airflow DAG based on [custom python API utilities](https://github.com/sungchun12/airflow-dbt-cloud/blob/main/archive/dbt_cloud_utils.py) -- [Make API requests directly through the BashOperator based on the docs](https://docs.getdbt.com/dbt-cloud/api-v2-legacy#operation/triggerRun): You can make cURL requests to invoke dbt Cloud to do what you want -- For more options, check out the [official dbt Docs](/docs/deploy/deployments#airflow) on the various ways teams are running dbt in airflow - -## This guide's process - -These solutions are great, but can be difficult to trust as your team grows and management for things like: testing, job definitions, secrets, and pipelines increase past your team’s capacity. Roles become blurry (or were never clearly defined at the start!). Both data and analytics engineers start digging through custom logging within each other’s workflows to make heads or tails of where and what the issue really is. Not to mention that when the issue is found, it can be even harder to decide on the best path forward for safely implementing fixes. This complex workflow and unclear delineation on process management results in a lot of misunderstandings and wasted time just trying to get the process to work smoothly! - -### A better way - -After today’s walkthrough, you’ll get hands-on experience: - -1. Creating a working local Airflow environment -2. Invoking a dbt Cloud job with Airflow (with proof!) -3. Reusing tested and trusted Airflow code for your specific use cases - -While you’re learning the ropes, you’ll also gain a better understanding of how this helps to: - -- Reduce the cognitive load when building and maintaining pipelines -- Avoid dependency hell (think: `pip install` conflicts) -- Implement better recoveries from failures -- Define clearer workflows so that data and analytics engineers work better, together ♥️ - -### Prerequisites - -- [dbt Cloud Teams or Enterprise account](https://www.getdbt.com/pricing/) (with [admin access](https://docs.getdbt.com/docs/cloud/manage-access/enterprise-permissions)) in order to create a service token. Permissions for service tokens can be found [here](https://docs.getdbt.com/docs/dbt-cloud-apis/service-tokens#permissions-for-service-account-tokens). -- A [free Docker account](https://hub.docker.com/signup) in order to sign in to Docker Desktop, which will be installed in the initial setup. -- A local digital scratchpad for temporarily copy-pasting API keys and URLs - -🙌 Let’s get started! 🙌 diff --git a/website/docs/guides/orchestration/airflow-and-dbt-cloud/2-setting-up-airflow-and-dbt-cloud.md b/website/docs/guides/orchestration/airflow-and-dbt-cloud/2-setting-up-airflow-and-dbt-cloud.md deleted file mode 100644 index 01b15440920..00000000000 --- a/website/docs/guides/orchestration/airflow-and-dbt-cloud/2-setting-up-airflow-and-dbt-cloud.md +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: Setting up Airflow and dbt Cloud -id: 2-setting-up-airflow-and-dbt-cloud ---- - -## 1. Install the Astro CLI - -Astro is a managed software service that includes key features for teams working with Airflow. In order to use Astro, we’ll install the Astro CLI, which will give us access to useful commands for working with Airflow locally. You can read more about Astro [here](https://docs.astronomer.io/astro/). - -In this example, we’re using Homebrew to install Astro CLI. Follow the instructions to install the Astro CLI for your own operating system [here](https://docs.astronomer.io/astro/install-cli). - -```bash -brew install astro -``` - - - -## 2. Install and start Docker Desktop - -Docker allows us to spin up an environment with all the apps and dependencies we need for the example. - -Follow the instructions [here](https://docs.docker.com/desktop/) to install Docker desktop for your own operating system. Once Docker is installed, ensure you have it up and running for the next steps. - - - -## 3. Clone the airflow-dbt-cloud repository - -Open your terminal and clone the [airflow-dbt-cloud repository](https://github.com/sungchun12/airflow-dbt-cloud.git). This contains example Airflow DAGs that you’ll use to orchestrate your dbt Cloud job. Once cloned, navigate into the `airflow-dbt-cloud` project. - -```bash -git clone https://github.com/sungchun12/airflow-dbt-cloud.git -cd airflow-dbt-cloud -``` - - - -## 4. Start the Docker container - -You can initialize an Astronomer project in an empty local directory using a Docker container, and then run your project locally using the `start` command. - -1. Run the following commands to initialize your project and start your local Airflow deployment: - - ```bash - astro dev init - astro dev start - ``` - - When this finishes, you should see a message similar to the following: - - ```bash - Airflow is starting up! This might take a few minutes… - - Project is running! All components are now available. - - Airflow Webserver: http://localhost:8080 - Postgres Database: localhost:5432/postgres - The default Airflow UI credentials are: admin:admin - The default Postrgres DB credentials are: postgres:postgres - ``` - -2. Open the Airflow interface. Launch your web browser and navigate to the address for the **Airflow Webserver** from your output in Step 1. - - This will take you to your local instance of Airflow. You’ll need to log in with the **default credentials**: - - - Username: admin - - Password: admin - - ![Airflow login screen](/img/guides/orchestration/airflow-and-dbt-cloud/airflow-login.png) - - - -## 5. Create a dbt Cloud service token - -Create a service token from within dbt Cloud using the instructions [found here](https://docs.getdbt.com/docs/dbt-cloud-apis/service-tokens). Ensure that you save a copy of the token, as you won’t be able to access this later. In this example we use `Account Admin`, but you can also use `Job Admin` instead for token permissions. - - - -## 6. Create a dbt Cloud job - -In your dbt Cloud account create a job, paying special attention to the information in the bullets below. Additional information for creating a dbt Cloud job can be found [here](/guides/bigquery). - -- Configure the job with the commands that you want to include when this job kicks off, as Airflow will be referring to the job’s configurations for this rather than being explicitly coded in the Airflow DAG. This job will run a set of commands rather than a single command. -- Ensure that the schedule is turned **off** since we’ll be using Airflow to kick things off. -- Once you hit `save` on the job, make sure you copy the URL and save it for referencing later. The url will look similar to this: - -```html -https://cloud.getdbt.com/#/accounts/{account_id}/projects/{project_id}/jobs/{job_id}/ -``` - - diff --git a/website/docs/guides/orchestration/airflow-and-dbt-cloud/3-running-airflow-and-dbt-cloud.md b/website/docs/guides/orchestration/airflow-and-dbt-cloud/3-running-airflow-and-dbt-cloud.md deleted file mode 100644 index d6fd32bdba9..00000000000 --- a/website/docs/guides/orchestration/airflow-and-dbt-cloud/3-running-airflow-and-dbt-cloud.md +++ /dev/null @@ -1,104 +0,0 @@ ---- -title: Running Airflow and dbt Cloud -id: 3-running-airflow-and-dbt-cloud ---- - - - -Now you have all the working pieces to get up and running with Airflow + dbt Cloud. Let’s dive into make this all work together. We will **set up a connection** and **run a DAG in Airflow** that kicks off a dbt Cloud job. - -## 1. Add your dbt Cloud API token as a secure connection - -1. Navigate to Admin and click on **Connections** - - ![Airflow connections menu](/img/guides/orchestration/airflow-and-dbt-cloud/airflow-connections-menu.png) - -2. Click on the `+` sign to add a new connection, then click on the drop down to search for the dbt Cloud Connection Type - - ![Create connection](/img/guides/orchestration/airflow-and-dbt-cloud/create-connection.png) - - ![Connection type](/img/guides/orchestration/airflow-and-dbt-cloud/connection-type.png) - -3. Add in your connection details and your default dbt Cloud account id. This is found in your dbt Cloud URL after the accounts route section (`/accounts/{YOUR_ACCOUNT_ID}`), for example the account with id 16173 would see this in their URL: `https://cloud.getdbt.com/#/accounts/16173/projects/36467/jobs/65767/` - -![https://lh3.googleusercontent.com/sRxe5xbv_LYhIKblc7eiY7AmByr1OibOac2_fIe54rpU3TBGwjMpdi_j0EPEFzM1_gNQXry7Jsm8aVw9wQBSNs1I6Cyzpvijaj0VGwSnmVf3OEV8Hv5EPOQHrwQgK2RhNBdyBxN2](https://lh3.googleusercontent.com/sRxe5xbv_LYhIKblc7eiY7AmByr1OibOac2_fIe54rpU3TBGwjMpdi_j0EPEFzM1_gNQXry7Jsm8aVw9wQBSNs1I6Cyzpvijaj0VGwSnmVf3OEV8Hv5EPOQHrwQgK2RhNBdyBxN2) - -## 2. Add your `job_id` and `account_id` config details to the python file: [dbt_cloud_provider_eltml.py](https://github.com/sungchun12/airflow-dbt-cloud/blob/main/dags/dbt_cloud_provider_eltml.py) - -1. You’ll find these details within the dbt Cloud job URL, see the comments in the code snippet below for an example. - - ```python - # dbt Cloud Job URL: https://cloud.getdbt.com/#/accounts/16173/projects/36467/jobs/65767/ - # account_id: 16173 - #job_id: 65767 - - # line 28 - default_args={"dbt_cloud_conn_id": "dbt_cloud", "account_id": 16173}, - - trigger_dbt_cloud_job_run = DbtCloudRunJobOperator( - task_id="trigger_dbt_cloud_job_run", - job_id=65767, # line 39 - check_interval=10, - timeout=300, - ) - ``` - -2. Turn on the DAG and verify the job succeeded after running. Note: screenshots taken from different job runs, but the user experience is consistent. - - ![https://lh6.googleusercontent.com/p8AqQRy0UGVLjDGPmcuGYmQ_BRodyL0Zis-eQgSmp69EHbKW51o4S-bCl1fXHlOmwpYEBxD0A-O1Q1hwt-VDVMO1wWH-AIeaoelBx06JXRJ0m1OcHaPpFKH0xDiduIhNlQhhbLiy](https://lh6.googleusercontent.com/p8AqQRy0UGVLjDGPmcuGYmQ_BRodyL0Zis-eQgSmp69EHbKW51o4S-bCl1fXHlOmwpYEBxD0A-O1Q1hwt-VDVMO1wWH-AIeaoelBx06JXRJ0m1OcHaPpFKH0xDiduIhNlQhhbLiy) - - ![Airflow DAG](/img/guides/orchestration/airflow-and-dbt-cloud/airflow-dag.png) - - ![Task run instance](/img/guides/orchestration/airflow-and-dbt-cloud/task-run-instance.png) - - ![https://lh6.googleusercontent.com/S9QdGhLAdioZ3x634CChugsJRiSVtTTd5CTXbRL8ADA6nSbAlNn4zV0jb3aC946c8SGi9FRTfyTFXqjcM-EBrJNK5hQ0HHAsR5Fj7NbdGoUfBI7xFmgeoPqnoYpjyZzRZlXkjtxS](https://lh6.googleusercontent.com/S9QdGhLAdioZ3x634CChugsJRiSVtTTd5CTXbRL8ADA6nSbAlNn4zV0jb3aC946c8SGi9FRTfyTFXqjcM-EBrJNK5hQ0HHAsR5Fj7NbdGoUfBI7xFmgeoPqnoYpjyZzRZlXkjtxS) - -## How do I rerun the dbt Cloud job and downstream tasks in my pipeline? - -If you have worked with dbt Cloud before, you have likely encountered cases where a job fails. In those cases, you have likely logged into dbt Cloud, investigated the error, and then manually restarted the job. - -This section of the guide will show you how to restart the job directly from Airflow. This will specifically run *just* the `trigger_dbt_cloud_job_run` and downstream tasks of the Airflow DAG and not the entire DAG. If only the transformation step fails, you don’t need to re-run the extract and load processes. Let’s jump into how to do that in Airflow. - -1. Click on the task - - ![Task DAG view](/img/guides/orchestration/airflow-and-dbt-cloud/task-dag-view.png) - -2. Clear the task instance - - ![Clear task instance](/img/guides/orchestration/airflow-and-dbt-cloud/clear-task-instance.png) - - ![Approve clearing](/img/guides/orchestration/airflow-and-dbt-cloud/approve-clearing.png) - -3. Watch it rerun in real time - - ![Re-run](/img/guides/orchestration/airflow-and-dbt-cloud/re-run.png) - -## Cleaning up - -At the end of this guide, make sure you shut down your docker container. When you’re done using Airflow, use the following command to stop the container: - -```bash -$ astrocloud dev stop - -[+] Running 3/3 - ⠿ Container airflow-dbt-cloud_e3fe3c-webserver-1 Stopped 7.5s - ⠿ Container airflow-dbt-cloud_e3fe3c-scheduler-1 Stopped 3.3s - ⠿ Container airflow-dbt-cloud_e3fe3c-postgres-1 Stopped 0.3s -``` - -To verify that the deployment has stopped, use the following command: - -```bash -astrocloud dev ps -``` - -This should give you an output like this: - -```bash -Name State Ports -airflow-dbt-cloud_e3fe3c-webserver-1 exited -airflow-dbt-cloud_e3fe3c-scheduler-1 exited -airflow-dbt-cloud_e3fe3c-postgres-1 exited -``` - - diff --git a/website/docs/guides/orchestration/airflow-and-dbt-cloud/4-airflow-and-dbt-cloud-faqs.md b/website/docs/guides/orchestration/airflow-and-dbt-cloud/4-airflow-and-dbt-cloud-faqs.md deleted file mode 100644 index 5766d8c0b79..00000000000 --- a/website/docs/guides/orchestration/airflow-and-dbt-cloud/4-airflow-and-dbt-cloud-faqs.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Airflow and dbt Cloud FAQs -id: 4-airflow-and-dbt-cloud-faqs ---- -## 1. How can we run specific subsections of the dbt DAG in Airflow? - -Because of the way we configured the dbt Cloud job to run in Airflow, you can leave this job to your analytics engineers to define in the job configurations from dbt Cloud. If, for example, we need to run hourly-tagged models every hour and daily-tagged models daily, we can create jobs like `Hourly Run` or `Daily Run` and utilize the commands `dbt run -s tag:hourly` and `dbt run -s tag:daily` within each, respectively. We only need to grab our dbt Cloud `account` and `job id`, configure it in an Airflow DAG with the code provided, and then we can be on your way. See more node selection options: [here](/reference/node-selection/syntax) - -## 2. How can I re-run models from the point of failure? - -You may want to parse the dbt DAG in Airflow to get the benefit of re-running from the point of failure. However, when you have hundreds of models in your DAG expanded out, it becomes useless for diagnosis and rerunning due to the overhead that comes along with creating an expansive Airflow DAG. - -You can’t re-run from failure natively in dbt Cloud today (feature coming!), but you can use a custom rerun parser. - -Using a simple python script coupled with the dbt Cloud provider, you can: - -- Avoid managing artifacts in a separate storage bucket(dbt Cloud does this for you) -- Avoid building your own parsing logic -- Get clear logs on what models you're rerunning in dbt Cloud (without hard coding step override commands) - -Watch the video below to see how it works! - - - -## 3. Should Airflow run one big dbt job or many dbt jobs? - -Overall we recommend being as purposeful and minimalistic as you can. This is because dbt manages all of the dependencies between models and the orchestration of running those dependencies in order, which in turn has benefits in terms of warehouse processing efforts. - -## 4. We want to kick off our dbt jobs after our ingestion tool (such as Fivetran) / data pipelines are done loading data. Any best practices around that? - -Our friends at Astronomer answer this question with this example: [here](https://registry.astronomer.io/dags/fivetran-dbt-cloud-census) - -## 5. How do you set up a CI/CD workflow with Airflow? - -Check out these two resources for accomplishing your own CI/CD pipeline: - -- [Continuous Integration with dbt Cloud](/docs/deploy/continuous-integration) -- [Astronomer's CI/CD Example](https://docs.astronomer.io/software/ci-cd/#example-cicd-workflow) - -## 6. Can dbt dynamically create tasks in the DAG like Airflow can? - -We prefer to keep models bundled vs. unbundled. You can go this route, but if you have hundreds of dbt models, it’s more effective to let the dbt Cloud job handle the models and dependencies. Bundling provides the solution to clear observability when things go wrong - we've seen more success in having the ability to clearly see issues in a bundled dbt Cloud job than combing through the nodes of an expansive Airflow DAG. If you still have a use case for this level of control though, our friends at Astronomer answer this question [here](https://www.astronomer.io/blog/airflow-dbt-1/)! - -## 7. Can you trigger notifications if a dbt job fails with Airflow? Is there any way to access the status of the dbt Job to do that? - -Yes, either through [Airflow's email/slack](https://www.astronomer.io/guides/error-notifications-in-airflow/) functionality by itself or combined with [dbt Cloud's notifications](/docs/deploy/job-notifications), which support email and slack notifications. - -## 8. Are there decision criteria for how to best work with dbt Cloud and airflow? - -Check out this deep dive into planning your dbt Cloud + Airflow implementation [here](https://www.youtube.com/watch?v=n7IIThR8hGk)! diff --git a/website/docs/guides/redshift-qs.md b/website/docs/guides/redshift-qs.md index 04b21cf8d57..b635b86a693 100644 --- a/website/docs/guides/redshift-qs.md +++ b/website/docs/guides/redshift-qs.md @@ -5,7 +5,7 @@ platform: 'dbt-cloud' icon: 'redshift' hide_table_of_contents: true tags: ['Redshift', 'dbt Cloud'] -level: 'Expert' +level: 'Advanced' --- ## Introduction diff --git a/website/docs/guides/advanced/using-jinja.md b/website/docs/guides/using-jinja.md similarity index 98% rename from website/docs/guides/advanced/using-jinja.md rename to website/docs/guides/using-jinja.md index 1cbe88dc9ca..1b2b7d7fd59 100644 --- a/website/docs/guides/advanced/using-jinja.md +++ b/website/docs/guides/using-jinja.md @@ -1,6 +1,13 @@ --- title: "Using Jinja" id: "using-jinja" +time_to_complete: '30 minutes' +platform: 'dbt-core' +icon: 'guides' +hide_table_of_contents: true +tags: ['jinja', 'dbt Core'] +level: 'Advanced' +recently_updated: true --- In this guide, we're going to take a common pattern used in SQL, and then use Jinja to improve our code. diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 546aaeb2e53..ee593e568f4 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -131,7 +131,7 @@ var siteSettings = { }, { label: 'Best Practices', - to: '/guides/best-practices', + to: '/best-practices', }, { label: "Guides", diff --git a/website/sidebars.js b/website/sidebars.js index 70339631d84..3c9dfbc6536 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -939,7 +939,7 @@ const sidebarSettings = { items: ["reference/snowflake-permissions"], }, ], - guides: [ + bestpractices: [ { type: "category", label: "Best practices", @@ -948,7 +948,7 @@ const sidebarSettings = { title: "Best practice guides", description: "Learn how dbt Labs approaches building projects through our current viewpoints on structure, style, and setup.", - slug: "/guides/best-practices", + slug: "best-practices", }, items: [ { @@ -956,14 +956,14 @@ const sidebarSettings = { label: "How we structure our dbt projects", link: { type: "doc", - id: "guides/best-practices/how-we-structure/1-guide-overview", + id: "best-practices/how-we-structure/1-guide-overview", }, items: [ - "guides/best-practices/how-we-structure/2-staging", - "guides/best-practices/how-we-structure/3-intermediate", - "guides/best-practices/how-we-structure/4-marts", - "guides/best-practices/how-we-structure/5-semantic-layer-marts", - "guides/best-practices/how-we-structure/6-the-rest-of-the-project", + "best-practices/how-we-structure/2-staging", + "best-practices/how-we-structure/3-intermediate", + "best-practices/how-we-structure/4-marts", + "best-practices/how-we-structure/5-semantic-layer-marts", + "best-practices/how-we-structure/6-the-rest-of-the-project", ], }, { @@ -971,15 +971,15 @@ const sidebarSettings = { label: "How we style our dbt projects", link: { type: "doc", - id: "guides/best-practices/how-we-style/0-how-we-style-our-dbt-projects", + id: "best-practices/how-we-style/0-how-we-style-our-dbt-projects", }, items: [ - "guides/best-practices/how-we-style/1-how-we-style-our-dbt-models", - "guides/best-practices/how-we-style/2-how-we-style-our-sql", - "guides/best-practices/how-we-style/3-how-we-style-our-python", - "guides/best-practices/how-we-style/4-how-we-style-our-jinja", - "guides/best-practices/how-we-style/5-how-we-style-our-yaml", - "guides/best-practices/how-we-style/6-how-we-style-conclusion", + "best-practices/how-we-style/1-how-we-style-our-dbt-models", + "best-practices/how-we-style/2-how-we-style-our-sql", + "best-practices/how-we-style/3-how-we-style-our-python", + "best-practices/how-we-style/4-how-we-style-our-jinja", + "best-practices/how-we-style/5-how-we-style-our-yaml", + "best-practices/how-we-style/6-how-we-style-conclusion", ], }, { @@ -987,15 +987,14 @@ const sidebarSettings = { label: "How we build our metrics", link: { type: "doc", - id: "guides/best-practices/how-we-build-our-metrics/semantic-layer-1-intro", + id: "best-practices/how-we-build-our-metrics/semantic-layer-1-intro", }, items: [ - "guides/best-practices/how-we-build-our-metrics/semantic-layer-2-setup", - "guides/best-practices/how-we-build-our-metrics/semantic-layer-3-build-semantic-models", - "guides/best-practices/how-we-build-our-metrics/semantic-layer-4-build-metrics", - "guides/best-practices/how-we-build-our-metrics/semantic-layer-5-refactor-a-mart", - "guides/best-practices/how-we-build-our-metrics/semantic-layer-6-advanced-metrics", - "guides/best-practices/how-we-build-our-metrics/semantic-layer-7-conclusion", + "best-practices/how-we-build-our-metrics/semantic-layer-3-build-semantic-models", + "best-practices/how-we-build-our-metrics/semantic-layer-4-build-metrics", + "best-practices/how-we-build-our-metrics/semantic-layer-5-refactor-a-mart", + "best-practices/how-we-build-our-metrics/semantic-layer-6-advanced-metrics", + "best-practices/how-we-build-our-metrics/semantic-layer-7-conclusion", ], }, { @@ -1003,11 +1002,11 @@ const sidebarSettings = { label: "How we build our dbt Mesh projects", link: { type: "doc", - id: "guides/best-practices/how-we-mesh/mesh-1-intro", + id: "best-practices/how-we-mesh/mesh-1-intro", }, items: [ - "guides/best-practices/how-we-mesh/mesh-2-structures", - "guides/best-practices/how-we-mesh/mesh-3-implementation", + "best-practices/how-we-mesh/mesh-2-structures", + "best-practices/how-we-mesh/mesh-3-implementation", ], }, { @@ -1015,229 +1014,19 @@ const sidebarSettings = { label: "Materialization best practices", link: { type: "doc", - id: "guides/best-practices/materializations/materializations-guide-1-guide-overview", + id: "best-practices/materializations/materializations-guide-1-guide-overview", }, items: [ - "guides/best-practices/materializations/materializations-guide-2-available-materializations", - "guides/best-practices/materializations/materializations-guide-3-configuring-materializations", - "guides/best-practices/materializations/materializations-guide-4-incremental-models", - "guides/best-practices/materializations/materializations-guide-5-best-practices", - "guides/best-practices/materializations/materializations-guide-6-examining-builds", - "guides/best-practices/materializations/materializations-guide-7-conclusion", + "best-practices/materializations/materializations-guide-2-available-materializations", + "best-practices/materializations/materializations-guide-3-configuring-materializations", + "best-practices/materializations/materializations-guide-4-incremental-models", + "best-practices/materializations/materializations-guide-5-best-practices", + "best-practices/materializations/materializations-guide-6-examining-builds", + "best-practices/materializations/materializations-guide-7-conclusion", ], }, - "guides/best-practices/debugging-errors", - "guides/best-practices/writing-custom-generic-tests", - ], - }, - { - type: "category", - label: "Orchestration", - link: { - type: "generated-index", - title: "Orchestration guides", - description: - "Learn how to orchestrate your data transformations in dbt, using dbt Cloud, a variety of popular tools, or both working together.", - slug: "/guides/orchestration", - }, - items: [ - { - type: "category", - label: "Airflow and dbt Cloud", - link: { - type: "doc", - id: "guides/orchestration/airflow-and-dbt-cloud/1-airflow-and-dbt-cloud", - }, - items: [ - "guides/orchestration/airflow-and-dbt-cloud/2-setting-up-airflow-and-dbt-cloud", - "guides/orchestration/airflow-and-dbt-cloud/3-running-airflow-and-dbt-cloud", - "guides/orchestration/airflow-and-dbt-cloud/4-airflow-and-dbt-cloud-faqs", - ], - }, - { - type: "category", - label: "Set up Continuous Integration", - link: { - type: "doc", - id: "guides/orchestration/set-up-ci/introduction", - }, - items: [ - "guides/orchestration/set-up-ci/quick-setup", - "guides/orchestration/set-up-ci/run-dbt-project-evaluator", - "guides/orchestration/set-up-ci/lint-on-push", - "guides/orchestration/set-up-ci/multiple-checks", - ], - }, - { - type: "category", - label: "Custom Continuous Deployment Workflows", - link: { - type: "doc", - id: "guides/orchestration/custom-cicd-pipelines/1-cicd-background", - }, - items: [ - "guides/orchestration/custom-cicd-pipelines/3-dbt-cloud-job-on-merge", - "guides/orchestration/custom-cicd-pipelines/4-dbt-cloud-job-on-pr", - "guides/orchestration/custom-cicd-pipelines/5-something-to-consider", - ], - }, - { - type: "category", - label: "Webhooks with dbt Cloud and SaaS apps", - link: { - type: "generated-index", - title: "Use dbt Cloud's webhooks with other SaaS apps", - description: - "Learn how to use webhooks to trigger actions in other tools by using Zapier or a serverless platform.", - slug: "/guides/orchestration/webhooks", - }, - items: [ - { - type: "autogenerated", - dirName: "guides/orchestration/webhooks", - }, - ], - }, - "guides/orchestration/how-to-use-databricks-workflows-to-run-dbt-cloud-jobs", - ], - }, - { - type: "category", - label: "Migration", - items: [ - "guides/migration/sl-migration", - { - type: "category", - label: "Versions", - link: { - type: "generated-index", - title: "Version migration guides", - description: - "Learn how to upgrade to the latest version of dbt Core.", - slug: "/guides/migration/versions", - }, - items: [ - { - type: "autogenerated", - dirName: "guides/migration/versions", - }, - ], - }, - { - type: "category", - label: "Tools", - link: { - type: "generated-index", - title: "Tool migration guides", - description: - "Learn how to migrate to dbt from other tools and platforms.", - slug: "/guides/migration/tools", - }, - items: [ - { - type: "category", - label: "Migrating from stored procedures", - link: { - type: "doc", - id: "guides/migration/tools/migrating-from-stored-procedures/1-migrating-from-stored-procedures", - }, - items: [ - "guides/migration/tools/migrating-from-stored-procedures/2-inserts", - "guides/migration/tools/migrating-from-stored-procedures/3-updates", - "guides/migration/tools/migrating-from-stored-procedures/4-deletes", - "guides/migration/tools/migrating-from-stored-procedures/5-merges", - "guides/migration/tools/migrating-from-stored-procedures/6-migrating-from-stored-procedures-conclusion", - ], - }, - "guides/migration/tools/migrating-from-spark-to-databricks", - "guides/migration/tools/refactoring-legacy-sql", - ], - }, - ], - }, - { - type: "category", - label: "dbt Ecosystem", - link: { - type: "generated-index", - title: "dbt Ecosystem guides", - description: "Learn about the dbt ecosystem and how to build with dbt.", - slug: "/guides/dbt-ecosystem/", - }, - items: [ - { - type: "category", - label: "Adapter development", - link: { - type: "doc", - id: "guides/dbt-ecosystem/adapter-development/1-what-are-adapters", - }, - items: [ - "guides/dbt-ecosystem/adapter-development/2-prerequisites-for-a-new-adapter", - "guides/dbt-ecosystem/adapter-development/3-building-a-new-adapter", - "guides/dbt-ecosystem/adapter-development/4-testing-a-new-adapter", - "guides/dbt-ecosystem/adapter-development/5-documenting-a-new-adapter", - "guides/dbt-ecosystem/adapter-development/6-promoting-a-new-adapter", - "guides/dbt-ecosystem/adapter-development/7-verifying-a-new-adapter", - "guides/dbt-ecosystem/adapter-development/8-building-a-trusted-adapter", - ], - }, - { - type: "category", - label: "dbt Python Snowpark", - link: { - type: "doc", - id: "guides/dbt-ecosystem/dbt-python-snowpark/1-overview-dbt-python-snowpark", - }, - items: [ - "guides/dbt-ecosystem/dbt-python-snowpark/2-snowflake-configuration", - "guides/dbt-ecosystem/dbt-python-snowpark/3-connect-to-data-source", - "guides/dbt-ecosystem/dbt-python-snowpark/4-configure-dbt", - "guides/dbt-ecosystem/dbt-python-snowpark/5-development-schema-name", - "guides/dbt-ecosystem/dbt-python-snowpark/6-foundational-structure", - "guides/dbt-ecosystem/dbt-python-snowpark/7-folder-structure", - "guides/dbt-ecosystem/dbt-python-snowpark/8-sources-and-staging", - "guides/dbt-ecosystem/dbt-python-snowpark/9-sql-transformations", - "guides/dbt-ecosystem/dbt-python-snowpark/10-python-transformations", - "guides/dbt-ecosystem/dbt-python-snowpark/11-machine-learning-prep", - "guides/dbt-ecosystem/dbt-python-snowpark/12-machine-learning-training-prediction", - "guides/dbt-ecosystem/dbt-python-snowpark/13-testing", - "guides/dbt-ecosystem/dbt-python-snowpark/14-documentation", - "guides/dbt-ecosystem/dbt-python-snowpark/15-deployment", - ], - }, - { - type: "category", - label: "Databricks and dbt", - link: { - type: "doc", - id: "guides/dbt-ecosystem/databricks-guides/how-to-set-up-your-databricks-dbt-project", - }, - items: [ - "guides/dbt-ecosystem/databricks-guides/dbt-unity-catalog-best-practices", - "guides/dbt-ecosystem/databricks-guides/how_to_optimize_dbt_models_on_databricks", - "guides/dbt-ecosystem/databricks-guides/productionizing-your-dbt-databricks-project", - ], - }, - "guides/dbt-ecosystem/sl-partner-integration-guide", - ], - }, - { - type: "category", - label: "Advanced", - items: [ - "guides/advanced/creating-new-materializations", - "guides/advanced/using-jinja", - ], - }, - { - type: "category", - label: "Legacy", - items: [ - "guides/legacy/debugging-schema-names", - "guides/legacy/best-practices", - "guides/legacy/building-packages", - "guides/legacy/videos", + "best-practices/debugging-errors", + "best-practices/writing-custom-generic-tests", ], }, ], From 7cd0cf91b7b8eb13bd256ff44dd9600791117d62 Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Fri, 27 Oct 2023 17:43:49 -0700 Subject: [PATCH 059/305] fixing best-practice links --- website/blog/2021-02-05-dbt-project-checklist.md | 2 +- ...2-08-12-how-we-shaved-90-minutes-off-long-running-model.md | 2 +- .../docs/guides/migration/versions/08-upgrading-to-v1.0.md | 2 +- website/docs/reference/node-selection/syntax.md | 4 ++-- website/docs/sql-reference/clauses/sql-limit.md | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/website/blog/2021-02-05-dbt-project-checklist.md b/website/blog/2021-02-05-dbt-project-checklist.md index dbe2c10f408..afca49af4b4 100644 --- a/website/blog/2021-02-05-dbt-project-checklist.md +++ b/website/blog/2021-02-05-dbt-project-checklist.md @@ -156,7 +156,7 @@ This post is the checklist I created to guide our internal work, and I’m shari **Useful links** -* [Version control](/guides/legacy/best-practices#version-control-your-dbt-project) +* [Version control](/best-practices/best-practices#version-control-your-dbt-project) * [dbt Labs' PR Template](/blog/analytics-pull-request-template) ## ✅ Documentation diff --git a/website/blog/2022-08-12-how-we-shaved-90-minutes-off-long-running-model.md b/website/blog/2022-08-12-how-we-shaved-90-minutes-off-long-running-model.md index 020a48c763f..4e4b667dc9d 100644 --- a/website/blog/2022-08-12-how-we-shaved-90-minutes-off-long-running-model.md +++ b/website/blog/2022-08-12-how-we-shaved-90-minutes-off-long-running-model.md @@ -286,7 +286,7 @@ Developing an analytic code base is an ever-evolving process. What worked well w 4. **Test on representative data** - Testing on a [subset of data](https://docs.getdbt.com/guides/legacy/best-practices#limit-the-data-processed-when-in-development) is a great general practice. It allows you to iterate quickly, and doesn’t waste resources. However, there are times when you need to test on a larger dataset for problems like disk spillage to come to the fore. Testing on large data is hard and expensive, so make sure you have a good idea of the solution before you commit to this step. + Testing on a [subset of data](https://docs.getdbt.com/best-practices/best-practices#limit-the-data-processed-when-in-development) is a great general practice. It allows you to iterate quickly, and doesn’t waste resources. However, there are times when you need to test on a larger dataset for problems like disk spillage to come to the fore. Testing on large data is hard and expensive, so make sure you have a good idea of the solution before you commit to this step. 5. **Repeat** diff --git a/website/docs/guides/migration/versions/08-upgrading-to-v1.0.md b/website/docs/guides/migration/versions/08-upgrading-to-v1.0.md index 9fc7991c087..0ef9b8029d6 100644 --- a/website/docs/guides/migration/versions/08-upgrading-to-v1.0.md +++ b/website/docs/guides/migration/versions/08-upgrading-to-v1.0.md @@ -68,5 +68,5 @@ Several under-the-hood changes from past minor versions, tagged with deprecation - [Parsing](/reference/parsing): partial parsing and static parsing have been turned on by default. - [Global configs](/reference/global-configs/about-global-configs) have been standardized. Related updates to [global CLI flags](/reference/global-cli-flags) and [`profiles.yml`](/docs/core/connect-data-platform/profiles.yml). - [The `init` command](/reference/commands/init) has a whole new look and feel. It's no longer just for first-time users. -- Add `result:` subselectors for smarter reruns when dbt models have errors and tests fail. See examples: [Pro-tips for Workflows](/guides/legacy/best-practices#pro-tips-for-workflows) +- Add `result:` subselectors for smarter reruns when dbt models have errors and tests fail. See examples: [Pro-tips for Workflows](/best-practices/best-practices#pro-tips-for-workflows) - Secret-prefixed [env vars](/reference/dbt-jinja-functions/env_var) are now allowed only in `profiles.yml` + `packages.yml` diff --git a/website/docs/reference/node-selection/syntax.md b/website/docs/reference/node-selection/syntax.md index bb2aeefd742..34085d339e6 100644 --- a/website/docs/reference/node-selection/syntax.md +++ b/website/docs/reference/node-selection/syntax.md @@ -96,7 +96,7 @@ by comparing code in the current project against the state manifest. - [Deferring](/reference/node-selection/defer) to another environment, whereby dbt can identify upstream, unselected resources that don't exist in your current environment and instead "defer" their references to the environment provided by the state manifest. - The [`dbt clone` command](/reference/commands/clone), whereby dbt can clone nodes based on their location in the manifest provided to the `--state` flag. -Together, the `state:` selector and deferral enable ["slim CI"](/guides/legacy/best-practices#run-only-modified-models-to-test-changes-slim-ci). We expect to add more features in future releases that can leverage artifacts passed to the `--state` flag. +Together, the `state:` selector and deferral enable ["slim CI"](/best-practices/best-practices#run-only-modified-models-to-test-changes-slim-ci). We expect to add more features in future releases that can leverage artifacts passed to the `--state` flag. ### Establishing state @@ -190,7 +190,7 @@ dbt build --select "source_status:fresher+" ``` -For more example commands, refer to [Pro-tips for workflows](/guides/legacy/best-practices.md#pro-tips-for-workflows). +For more example commands, refer to [Pro-tips for workflows](/best-practices/best-practices.md#pro-tips-for-workflows). ### The "source_status" status diff --git a/website/docs/sql-reference/clauses/sql-limit.md b/website/docs/sql-reference/clauses/sql-limit.md index 74cc2e12123..d17affdef45 100644 --- a/website/docs/sql-reference/clauses/sql-limit.md +++ b/website/docs/sql-reference/clauses/sql-limit.md @@ -51,7 +51,7 @@ This simple query using the [Jaffle Shop’s](https://github.com/dbt-labs/jaffle After ensuring that this is the result you want from this query, you can omit the LIMIT in your final data model. :::tip Save money and time by limiting data in development -You could limit your data used for development by manually adding a LIMIT statement, a WHERE clause to your query, or by using a [dbt macro to automatically limit data based](https://docs.getdbt.com/guides/legacy/best-practices#limit-the-data-processed-when-in-development) on your development environment to help reduce your warehouse usage during dev periods. +You could limit your data used for development by manually adding a LIMIT statement, a WHERE clause to your query, or by using a [dbt macro to automatically limit data based](https://docs.getdbt.com/best-practices/best-practices#limit-the-data-processed-when-in-development) on your development environment to help reduce your warehouse usage during dev periods. ::: ## LIMIT syntax in Snowflake, Databricks, BigQuery, and Redshift From 8274381e6483cdca0e22fd244270f60c6aea928a Mon Sep 17 00:00:00 2001 From: john-rock Date: Mon, 30 Oct 2023 11:19:42 -0400 Subject: [PATCH 060/305] update colors --- .../components/quickstartTOC/styles.module.css | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/website/src/components/quickstartTOC/styles.module.css b/website/src/components/quickstartTOC/styles.module.css index 8a3885c34ad..04d62188e95 100644 --- a/website/src/components/quickstartTOC/styles.module.css +++ b/website/src/components/quickstartTOC/styles.module.css @@ -34,13 +34,13 @@ height: 30px; text-align: center; line-height: 27px; - color: var(--color-light-teal); - border: solid 1px var(--color-light-teal); + color: var(--color-green-blue); + border: solid 1px var(--color-green-blue); margin-bottom: auto; } .tocList .active span { - background: var(--color-light-teal); + background: var( --color-green-blue); color: var(--color-white); } @@ -54,7 +54,7 @@ html[data-theme="dark"] .tocList li span { } html[data-theme="dark"] .tocList .active span { - border-color: var(--color-light-teal); + border-color: var(--color-green-blue); } .tocItem { @@ -75,14 +75,15 @@ html[data-theme="dark"] .tocList .active span { transition-property: color, background, border-color; transition-duration: var(--ifm-button-transition-duration); transition-timing-function: var(--ifm-transition-timing-default); - border: 2px solid var(--color-light-teal); + border: 2px solid var(--color-green-blue); + color: var(--color-green-blue); border-radius: 5px; width: 125px; text-align: center; } .stepWrapper .buttonContainer a:hover { - background: var(--color-light-teal); + background: var(--color-green-blue); color: var(--color-white); } @@ -109,7 +110,7 @@ html[data-theme="dark"] .stepWrapper .buttonContainer a:hover { } .stepWrapper[data-step="1"] a.nextButton { - background: var(--color-light-teal); + background: var(--color-green-blue); color: var(--color-white); } From 42689310b6088dad97bd9ae7c7f93de17b2e4df8 Mon Sep 17 00:00:00 2001 From: john-rock Date: Mon, 30 Oct 2023 11:44:54 -0400 Subject: [PATCH 061/305] update styles --- .../src/components/quickstartGuideCard/styles.module.css | 2 +- website/src/components/quickstartTOC/styles.module.css | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/website/src/components/quickstartGuideCard/styles.module.css b/website/src/components/quickstartGuideCard/styles.module.css index aa1538cdeaa..5df40c8479e 100644 --- a/website/src/components/quickstartGuideCard/styles.module.css +++ b/website/src/components/quickstartGuideCard/styles.module.css @@ -1,6 +1,6 @@ .quickstartCard { outline: 1px solid #EFF2F3; - border-radius: var(--border-radius); + border-radius: 10px; box-shadow: 0px 11px 24px rgba(138, 138, 138, .1); padding: 2.5rem 2.5rem 1.5rem 2.5rem; flex: 0 0 30%; diff --git a/website/src/components/quickstartTOC/styles.module.css b/website/src/components/quickstartTOC/styles.module.css index 04d62188e95..892e6f73be6 100644 --- a/website/src/components/quickstartTOC/styles.module.css +++ b/website/src/components/quickstartTOC/styles.module.css @@ -10,15 +10,14 @@ flex-shrink: 0; padding-right: 4rem; margin-right: 4rem; - border-right: solid 5px #E0E3E8; + border-right: solid 4px #EFF2F3; } .tocList li { padding: 1rem; display: block; - border: 2px solid #EFF2F3; - box-shadow: 0px 10px 16px 0px rgba(31, 41, 55, 0.20); - border-radius: 10px; + box-shadow: 0px 10px 16px 0px rgba(31, 41, 55, 0.10); + border-radius: 8px; margin-bottom: 1rem; display: grid; grid-template-columns: 1fr 5fr; From 98a5c3b21adfd89994fd4f5ca440df17b47f6fca Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Mon, 30 Oct 2023 17:45:55 -0700 Subject: [PATCH 062/305] moving more guides --- .../blog/2021-02-05-dbt-project-checklist.md | 6 +- ...nfigure-your-dbt-repository-one-or-many.md | 2 +- .../2021-11-23-how-to-upgrade-dbt-versions.md | 2 +- ...11-26-welcome-to-the-dbt-developer-blog.md | 2 +- ...1-11-29-dbt-airflow-spiritual-alignment.md | 4 +- ...-05-17-stakeholder-friendly-model-names.md | 2 +- website/blog/2022-06-30-lower-sql-function.md | 2 +- .../2022-07-19-migrating-from-stored-procs.md | 2 +- website/blog/2022-07-26-pre-commit-dbt.md | 2 +- ...haved-90-minutes-off-long-running-model.md | 2 +- website/blog/2022-08-22-narrative-modeling.md | 2 +- ...2022-09-08-konmari-your-query-migration.md | 2 +- ...022-11-22-move-spreadsheets-to-your-dwh.md | 4 +- .../blog/2022-11-30-dbt-project-evaluator.md | 6 +- ...ractices.md => best-practice-workflows.md} | 4 +- .../semantic-layer-5-refactor-a-mart.md | 2 +- .../how-we-structure/2-staging.md | 4 +- .../5-semantic-layer-marts.md | 4 +- .../how-we-style/6-how-we-style-conclusion.md | 2 +- ...ions-guide-2-available-materializations.md | 2 +- ...rializations-guide-4-incremental-models.md | 2 +- ...materializations-guide-5-best-practices.md | 2 +- ...terializations-guide-6-examining-builds.md | 4 +- .../materializations-guide-7-conclusion.md | 2 +- .../docs/community/resources/getting-help.md | 2 +- website/docs/docs/build/jinja-macros.md | 2 +- website/docs/docs/build/projects.md | 2 +- website/docs/docs/build/python-models.md | 4 +- website/docs/docs/build/tests.md | 2 +- .../cloud/dbt-cloud-ide/dbt-cloud-tips.md | 2 +- .../docs/cloud/dbt-cloud-ide/lint-format.md | 2 +- .../docs/collaborate/govern/model-access.md | 2 +- .../govern/project-dependencies.md | 4 +- website/docs/docs/dbt-cloud-environments.md | 2 +- .../03-Oct-2023/product-docs-sept-rn.md | 2 +- .../04-Sept-2023/product-docs-summer-rn.md | 2 +- .../docs/docs/deploy/deploy-environments.md | 4 +- website/docs/docs/environments-in-dbt.md | 2 +- website/docs/docs/introduction.md | 2 +- website/docs/faqs/Jinja/jinja-whitespace.md | 2 +- .../faqs/Models/available-materializations.md | 2 +- .../Project/multiple-resource-yml-files.md | 2 +- .../docs/faqs/Project/resource-yml-name.md | 2 +- .../docs/faqs/Project/structure-a-project.md | 2 +- .../docs/faqs/Project/why-not-write-dml.md | 2 +- .../docs/faqs/Tests/custom-test-thresholds.md | 2 +- .../Warehouse/db-connection-dbt-compile.md | 2 +- website/docs/guides/airflow-and-dbt-cloud.md | 2 +- .../guides/{legacy => }/building-packages.md | 48 ++++--- .../guides/creating-new-materializations.md | 2 +- .../dbt-unity-catalog-best-practices.md | 8 +- ...w-to-set-up-your-databricks-dbt-project.md | 2 +- ...ow_to_optimize_dbt_models_on_databricks.md | 4 +- ...uctionizing-your-dbt-databricks-project.md | 2 +- .../dbt-python-snowpark/7-folder-structure.md | 4 +- .../8-sources-and-staging.md | 2 +- .../{legacy => }/debugging-schema-names.md | 29 +++-- .../creating-date-partitioned-tables.md | 117 ------------------ website/docs/guides/legacy/videos.md | 13 -- .../1-migrating-from-stored-procedures.md | 2 +- .../migration/tools/refactoring-legacy-sql.md | 2 +- .../versions/08-upgrading-to-v1.0.md | 4 +- .../versions/10-upgrading-to-v0.20.md | 2 +- .../11-Older versions/upgrading-to-0-15-0.md | 2 +- .../orchestration/set-up-ci/2-quick-setup.md | 2 +- .../orchestration/set-up-ci/4-lint-on-push.md | 2 +- .../set-up-ci/5-multiple-checks.md | 2 +- .../dbt-jinja-functions/run_query.md | 2 +- website/docs/reference/events-logging.md | 2 +- .../docs/reference/node-selection/syntax.md | 4 +- .../reference/resource-configs/contract.md | 2 +- .../reference/resource-properties/tests.md | 2 +- .../aggregate-functions/sql-array-agg.md | 2 +- .../aggregate-functions/sql-avg.md | 2 +- .../aggregate-functions/sql-round.md | 2 +- .../docs/sql-reference/clauses/sql-limit.md | 2 +- .../sql-reference/clauses/sql-order-by.md | 2 +- .../sql-reference/joins/sql-inner-join.md | 2 +- .../docs/sql-reference/joins/sql-left-join.md | 2 +- .../docs/sql-reference/joins/sql-self-join.md | 4 +- .../docs/sql-reference/operators/sql-not.md | 2 +- website/docs/sql-reference/other/sql-cast.md | 4 +- .../docs/sql-reference/other/sql-comments.md | 2 +- .../sql-reference/statements/sql-select.md | 4 +- .../string-functions/sql-lower.md | 2 +- .../string-functions/sql-trim.md | 2 +- .../string-functions/sql-upper.md | 2 +- website/docs/terms/dag.md | 4 +- website/docs/terms/data-lineage.md | 4 +- website/docs/terms/data-wrangling.md | 4 +- website/docs/terms/dimensional-modeling.md | 6 +- website/docs/terms/dry.md | 2 +- website/docs/terms/idempotent.md | 2 +- website/docs/terms/view.md | 2 +- website/sidebars.js | 1 + .../environment-setup/many-branch-git.png | Bin .../many-deployments-table.png | Bin .../environment-setup/one-branch-git.png | Bin .../one-deployment-table.png | Bin .../how-we-structure/narrowing-dag.png | Bin .../how-we-structure/widening-dag.png | Bin .../materializations/dbt-build-output.png | Bin .../materializations/incremental-diagram.png | Bin .../materializations/model-timing-diagram.png | Bin .../snowflake-query-timing.png | Bin .../materializations/tables-and-views.png | Bin .../semantic-layer/orders_erd.png | Bin website/vercel.json | 5 + 108 files changed, 176 insertions(+), 273 deletions(-) rename website/docs/best-practices/{best-practices.md => best-practice-workflows.md} (99%) rename website/docs/guides/{legacy => }/building-packages.md (88%) rename website/docs/guides/{legacy => }/debugging-schema-names.md (84%) delete mode 100644 website/docs/guides/legacy/creating-date-partitioned-tables.md delete mode 100644 website/docs/guides/legacy/videos.md rename website/static/img/{guides => }/best-practices/environment-setup/many-branch-git.png (100%) rename website/static/img/{guides => }/best-practices/environment-setup/many-deployments-table.png (100%) rename website/static/img/{guides => }/best-practices/environment-setup/one-branch-git.png (100%) rename website/static/img/{guides => }/best-practices/environment-setup/one-deployment-table.png (100%) rename website/static/img/{guides => }/best-practices/how-we-structure/narrowing-dag.png (100%) rename website/static/img/{guides => }/best-practices/how-we-structure/widening-dag.png (100%) rename website/static/img/{guides => }/best-practices/materializations/dbt-build-output.png (100%) rename website/static/img/{guides => }/best-practices/materializations/incremental-diagram.png (100%) rename website/static/img/{guides => }/best-practices/materializations/model-timing-diagram.png (100%) rename website/static/img/{guides => }/best-practices/materializations/snowflake-query-timing.png (100%) rename website/static/img/{guides => }/best-practices/materializations/tables-and-views.png (100%) rename website/static/img/{guides => }/best-practices/semantic-layer/orders_erd.png (100%) diff --git a/website/blog/2021-02-05-dbt-project-checklist.md b/website/blog/2021-02-05-dbt-project-checklist.md index afca49af4b4..9820c279b0f 100644 --- a/website/blog/2021-02-05-dbt-project-checklist.md +++ b/website/blog/2021-02-05-dbt-project-checklist.md @@ -139,7 +139,7 @@ This post is the checklist I created to guide our internal work, and I’m shari * [Sources](/docs/build/sources/) * [Refs](/reference/dbt-jinja-functions/ref/) * [tags](/reference/resource-configs/tags/) -* [Jinja docs](/guides/advanced/using-jinja) +* [Jinja docs](/guides/using-jinja) ## ✅ Testing & Continuous Integration ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -156,7 +156,7 @@ This post is the checklist I created to guide our internal work, and I’m shari **Useful links** -* [Version control](/best-practices/best-practices#version-control-your-dbt-project) +* [Version control](/best-practices/best-practice-workflows#version-control-your-dbt-project) * [dbt Labs' PR Template](/blog/analytics-pull-request-template) ## ✅ Documentation @@ -252,7 +252,7 @@ Thanks to Christine Berger for her DAG diagrams! **Useful links** -* [How we structure our dbt Project](/guides/best-practices/how-we-structure/1-guide-overview) +* [How we structure our dbt Project](/best-practices/how-we-structure/1-guide-overview) * [Coalesce DAG Audit Talk](https://www.youtube.com/watch?v=5W6VrnHVkCA&t=2s) * [Modular Data Modeling Technique](https://getdbt.com/analytics-engineering/modular-data-modeling-technique/) * [Understanding Threads](/docs/running-a-dbt-project/using-threads) diff --git a/website/blog/2021-02-09-how-to-configure-your-dbt-repository-one-or-many.md b/website/blog/2021-02-09-how-to-configure-your-dbt-repository-one-or-many.md index 50d09625436..8a986a12f27 100644 --- a/website/blog/2021-02-09-how-to-configure-your-dbt-repository-one-or-many.md +++ b/website/blog/2021-02-09-how-to-configure-your-dbt-repository-one-or-many.md @@ -159,4 +159,4 @@ All of the above configurations “work”. And as detailed, they each solve for 2. Figure out what may be a pain point in the future and try to plan for it from the beginning. 3. Don’t over-complicate things until you have the right reason. As I said in my Coalesce talk: **don’t drag your skeletons from one closet to another** 💀! -**Note:** Our attempt in writing guides like this and [How we structure our dbt projects](/guides/best-practices/how-we-structure/1-guide-overview) aren’t to try to convince you that our way is right; it is to hopefully save you the hundreds of hours it has taken us to form those opinions! +**Note:** Our attempt in writing guides like this and [How we structure our dbt projects](/best-practices/how-we-structure/1-guide-overview) aren’t to try to convince you that our way is right; it is to hopefully save you the hundreds of hours it has taken us to form those opinions! diff --git a/website/blog/2021-11-23-how-to-upgrade-dbt-versions.md b/website/blog/2021-11-23-how-to-upgrade-dbt-versions.md index 87b3ea7bd1e..ac7946c59bc 100644 --- a/website/blog/2021-11-23-how-to-upgrade-dbt-versions.md +++ b/website/blog/2021-11-23-how-to-upgrade-dbt-versions.md @@ -156,7 +156,7 @@ Once your compilation issues are resolved, it's time to run your job for real, t After that, make sure that your CI environment in dbt Cloud or your orchestrator is on the right dbt version, then open a PR. -If you're using [Slim CI](https://docs.getdbt.com/docs/guides/best-practices#run-only-modified-models-to-test-changes-slim-ci), keep in mind that artifacts aren't necessarily compatible from one version to another, so you won't be able to use it until the job you defer to has completed a run with the upgraded dbt version. This doesn't impact our example because support for Slim CI didn't come out until 0.18.0. +If you're using [Slim CI](https://docs.getdbt.com/docs/best-practices#run-only-modified-models-to-test-changes-slim-ci), keep in mind that artifacts aren't necessarily compatible from one version to another, so you won't be able to use it until the job you defer to has completed a run with the upgraded dbt version. This doesn't impact our example because support for Slim CI didn't come out until 0.18.0. ## Step 7. Merge and communicate diff --git a/website/blog/2021-11-26-welcome-to-the-dbt-developer-blog.md b/website/blog/2021-11-26-welcome-to-the-dbt-developer-blog.md index c6fff54b465..8db2407afdb 100644 --- a/website/blog/2021-11-26-welcome-to-the-dbt-developer-blog.md +++ b/website/blog/2021-11-26-welcome-to-the-dbt-developer-blog.md @@ -26,7 +26,7 @@ So let’s all commit to sharing our hard won knowledge with each other—and in The purpose of this blog is to double down on our long running commitment to contributing to the knowledge loop. -From early posts like ‘[The Startup Founders Guide to Analytics’](https://thinkgrowth.org/the-startup-founders-guide-to-analytics-1d2176f20ac1) to foundational guides like [‘How We Structure Our dbt Projects](/guides/best-practices/how-we-structure/1-guide-overview)’, we’ve had a long standing goal of working with the community to create practical, hands-on tutorials and guides which distill the knowledge we’ve been able to collectively gather. +From early posts like ‘[The Startup Founders Guide to Analytics’](https://thinkgrowth.org/the-startup-founders-guide-to-analytics-1d2176f20ac1) to foundational guides like [‘How We Structure Our dbt Projects](/best-practices/how-we-structure/1-guide-overview)’, we’ve had a long standing goal of working with the community to create practical, hands-on tutorials and guides which distill the knowledge we’ve been able to collectively gather. dbt as a product is based around the philosophy that even the most complicated problems can be broken down into modular, reusable components, then mixed and matched to create something novel. diff --git a/website/blog/2021-11-29-dbt-airflow-spiritual-alignment.md b/website/blog/2021-11-29-dbt-airflow-spiritual-alignment.md index fd1a11c41cf..b179c0f5c7c 100644 --- a/website/blog/2021-11-29-dbt-airflow-spiritual-alignment.md +++ b/website/blog/2021-11-29-dbt-airflow-spiritual-alignment.md @@ -91,7 +91,7 @@ The common skills needed for implementing any flavor of dbt (Core or Cloud) are: * SQL: ‘nuff said * YAML: required to generate config files for [writing tests on data models](/docs/build/tests) -* [Jinja](/guides/advanced/using-jinja): allows you to write DRY code (using [macros](/docs/build/jinja-macros), for loops, if statements, etc) +* [Jinja](/guides/using-jinja): allows you to write DRY code (using [macros](/docs/build/jinja-macros), for loops, if statements, etc) YAML + Jinja can be learned pretty quickly, but SQL is the non-negotiable you’ll need to get started. @@ -176,7 +176,7 @@ Instead you can now use the following command: `dbt build –select result:error+ –defer –state ` … and that’s it! -You can see more examples [here](https://docs.getdbt.com/docs/guides/best-practices#run-only-modified-models-to-test-changes-slim-ci). +You can see more examples [here](https://docs.getdbt.com/docs/best-practices#run-only-modified-models-to-test-changes-slim-ci). This means that whether you’re actively developing or you simply want to rerun a scheduled job (because of, say, permission errors or timeouts in your database), you now have a unified approach to doing both. diff --git a/website/blog/2022-05-17-stakeholder-friendly-model-names.md b/website/blog/2022-05-17-stakeholder-friendly-model-names.md index 0e0ccad5c96..39107035465 100644 --- a/website/blog/2022-05-17-stakeholder-friendly-model-names.md +++ b/website/blog/2022-05-17-stakeholder-friendly-model-names.md @@ -157,7 +157,7 @@ These 3 parts go from least granular (general) to most granular (specific) so yo ### Coming up... -In this part of the series, we talked about why the model name is the center of understanding for the purpose and content within a model. In the in the upcoming ["How We Structure Our dbt Projects"](https://docs.getdbt.com/guides/best-practices/how-we-structure/1-guide-overview) guide, you can explore how to use this naming pattern with more specific examples in different parts of your dbt DAG that cover regular use cases: +In this part of the series, we talked about why the model name is the center of understanding for the purpose and content within a model. In the in the upcoming ["How We Structure Our dbt Projects"](https://docs.getdbt.com/best-practices/how-we-structure/1-guide-overview) guide, you can explore how to use this naming pattern with more specific examples in different parts of your dbt DAG that cover regular use cases: - How would you name a model that is filtered on some columns - Do we recommend naming snapshots in a specific way diff --git a/website/blog/2022-06-30-lower-sql-function.md b/website/blog/2022-06-30-lower-sql-function.md index c50af5f3fb3..3f7cff44ccb 100644 --- a/website/blog/2022-06-30-lower-sql-function.md +++ b/website/blog/2022-06-30-lower-sql-function.md @@ -75,7 +75,7 @@ After running this query, the `customers` table will look a little something lik Now, all characters in the `first_name` and `last_name` columns are lowercase. > **Where do you lower?** -> Changing all string columns to lowercase to create uniformity across data sources typically happens in our dbt project’s [staging models](https://docs.getdbt.com/guides/best-practices/how-we-structure/2-staging). There are a few reasons for that: data cleanup and standardization, such as aliasing, casting, and lowercasing, should ideally happen in staging models to create downstream uniformity. It’s also more performant in downstream models that join on string values to join on strings that are of all the same casing versus having to join and perform lowercasing at the same time. +> Changing all string columns to lowercase to create uniformity across data sources typically happens in our dbt project’s [staging models](https://docs.getdbt.com/best-practices/how-we-structure/2-staging). There are a few reasons for that: data cleanup and standardization, such as aliasing, casting, and lowercasing, should ideally happen in staging models to create downstream uniformity. It’s also more performant in downstream models that join on string values to join on strings that are of all the same casing versus having to join and perform lowercasing at the same time. ## Why we love it diff --git a/website/blog/2022-07-19-migrating-from-stored-procs.md b/website/blog/2022-07-19-migrating-from-stored-procs.md index 691284a49e9..e2afdbfcd66 100644 --- a/website/blog/2022-07-19-migrating-from-stored-procs.md +++ b/website/blog/2022-07-19-migrating-from-stored-procs.md @@ -54,7 +54,7 @@ With dbt, we work towards creating simpler, more transparent data pipelines like ![Diagram of what data flows look like with dbt. It's easier to trace lineage in this setup.](/img/blog/2022-07-19-migrating-from-stored-procs/dbt-diagram.png) -Tight [version control integration](https://docs.getdbt.com/docs/guides/best-practices#version-control-your-dbt-project) is an added benefit of working with dbt. By leveraging the power of git-based tools, dbt enables you to integrate and test changes to transformation pipelines much faster than you can with other approaches. We often see teams who work in stored procedures making changes to their code without any notion of tracking those changes over time. While that’s more of an issue with the team’s chosen workflow than a problem with stored procedures per se, it does reflect how legacy tooling makes analytics work harder than necessary. +Tight [version control integration](https://docs.getdbt.com/docs/best-practices#version-control-your-dbt-project) is an added benefit of working with dbt. By leveraging the power of git-based tools, dbt enables you to integrate and test changes to transformation pipelines much faster than you can with other approaches. We often see teams who work in stored procedures making changes to their code without any notion of tracking those changes over time. While that’s more of an issue with the team’s chosen workflow than a problem with stored procedures per se, it does reflect how legacy tooling makes analytics work harder than necessary. ## Methodologies for migrating from stored procedures to dbt diff --git a/website/blog/2022-07-26-pre-commit-dbt.md b/website/blog/2022-07-26-pre-commit-dbt.md index fc100897ff0..e75bd622293 100644 --- a/website/blog/2022-07-26-pre-commit-dbt.md +++ b/website/blog/2022-07-26-pre-commit-dbt.md @@ -12,7 +12,7 @@ is_featured: true *Editor's note — since the creation of this post, the package pre-commit-dbt's ownership has moved to another team and it has been renamed to [dbt-checkpoint](https://github.com/dbt-checkpoint/dbt-checkpoint). A redirect has been set up, meaning that the code example below will still work. It is also possible to replace `repo: https://github.com/offbi/pre-commit-dbt` with `repo: https://github.com/dbt-checkpoint/dbt-checkpoint` in your `.pre-commit-config.yaml` file.* -At dbt Labs, we have [best practices](https://docs.getdbt.com/docs/guides/best-practices) we like to follow for the development of dbt projects. One of them, for example, is that all models should have at least `unique` and `not_null` tests on their primary key. But how can we enforce rules like this? +At dbt Labs, we have [best practices](https://docs.getdbt.com/docs/best-practices) we like to follow for the development of dbt projects. One of them, for example, is that all models should have at least `unique` and `not_null` tests on their primary key. But how can we enforce rules like this? That question becomes difficult to answer in large dbt projects. Developers might not follow the same conventions. They might not be aware of past decisions, and reviewing pull requests in git can become more complex. When dbt projects have hundreds of models, it's hard to know which models do not have any tests defined and aren't enforcing your conventions. diff --git a/website/blog/2022-08-12-how-we-shaved-90-minutes-off-long-running-model.md b/website/blog/2022-08-12-how-we-shaved-90-minutes-off-long-running-model.md index 4e4b667dc9d..e6a8b943051 100644 --- a/website/blog/2022-08-12-how-we-shaved-90-minutes-off-long-running-model.md +++ b/website/blog/2022-08-12-how-we-shaved-90-minutes-off-long-running-model.md @@ -286,7 +286,7 @@ Developing an analytic code base is an ever-evolving process. What worked well w 4. **Test on representative data** - Testing on a [subset of data](https://docs.getdbt.com/best-practices/best-practices#limit-the-data-processed-when-in-development) is a great general practice. It allows you to iterate quickly, and doesn’t waste resources. However, there are times when you need to test on a larger dataset for problems like disk spillage to come to the fore. Testing on large data is hard and expensive, so make sure you have a good idea of the solution before you commit to this step. + Testing on a [subset of data](https://docs.getdbt.com/best-practices/best-practice-workflows#limit-the-data-processed-when-in-development) is a great general practice. It allows you to iterate quickly, and doesn’t waste resources. However, there are times when you need to test on a larger dataset for problems like disk spillage to come to the fore. Testing on large data is hard and expensive, so make sure you have a good idea of the solution before you commit to this step. 5. **Repeat** diff --git a/website/blog/2022-08-22-narrative-modeling.md b/website/blog/2022-08-22-narrative-modeling.md index a5418ccded1..a74c73fdbd1 100644 --- a/website/blog/2022-08-22-narrative-modeling.md +++ b/website/blog/2022-08-22-narrative-modeling.md @@ -177,7 +177,7 @@ To that final point, if presented with the DAG from the narrative modeling appro ### Users can tie business concepts to source data -- While the schema structure above is focused on business entities, there are still ample use cases for [staging and intermediate tables](https://docs.getdbt.com/guides/best-practices/how-we-structure/1-guide-overview). +- While the schema structure above is focused on business entities, there are still ample use cases for [staging and intermediate tables](https://docs.getdbt.com/best-practices/how-we-structure/1-guide-overview). - After cleaning up source data with staging tables, use the same “what happened” approach to more technical events, creating a three-node dependency from `stg_snowplow_events` to `int_page_click_captured` to `user_refreshed_cart` and thus answering the question “where do we get online user behavior information?” in a quick visit to the DAG in dbt docs. # Should your team use it? diff --git a/website/blog/2022-09-08-konmari-your-query-migration.md b/website/blog/2022-09-08-konmari-your-query-migration.md index f7d7cc74ead..c1472058150 100644 --- a/website/blog/2022-09-08-konmari-your-query-migration.md +++ b/website/blog/2022-09-08-konmari-your-query-migration.md @@ -108,7 +108,7 @@ Here are a few things to look for: ## Steps 4 & 5: Tidy by category and follow the right order—upstream to downstream -We are ready to unpack our kitchen. Use your design as a guideline for [modularization](/guides/best-practices/how-we-structure/1-guide-overview). +We are ready to unpack our kitchen. Use your design as a guideline for [modularization](/best-practices/how-we-structure/1-guide-overview). - Build your staging tables first, and then your intermediate tables in your pre-planned buckets. - Important, reusable joins that are performed in the final query should be moved upstream into their own modular models, as well as any joins that are repeated in your query. diff --git a/website/blog/2022-11-22-move-spreadsheets-to-your-dwh.md b/website/blog/2022-11-22-move-spreadsheets-to-your-dwh.md index ba5dddcae19..93cf91efeed 100644 --- a/website/blog/2022-11-22-move-spreadsheets-to-your-dwh.md +++ b/website/blog/2022-11-22-move-spreadsheets-to-your-dwh.md @@ -102,7 +102,7 @@ Instead of syncing all cells in a sheet, you create a [named range](https://five -Beware of inconsistent data types though—if someone types text into a column that was originally numeric, Fivetran will automatically convert the column to a string type which might cause issues in your downstream transformations. [The recommended workaround](https://fivetran.com/docs/files/google-sheets#typetransformationsandmapping) is to explicitly cast your types in [staging models](https://docs.getdbt.com/guides/best-practices/how-we-structure/2-staging) to ensure that any undesirable records are converted to null. +Beware of inconsistent data types though—if someone types text into a column that was originally numeric, Fivetran will automatically convert the column to a string type which might cause issues in your downstream transformations. [The recommended workaround](https://fivetran.com/docs/files/google-sheets#typetransformationsandmapping) is to explicitly cast your types in [staging models](https://docs.getdbt.com/best-practices/how-we-structure/2-staging) to ensure that any undesirable records are converted to null. #### Good fit for: @@ -192,4 +192,4 @@ Databricks also supports [pulling in data, such as spreadsheets, from external c Beyond the options we’ve already covered, there’s an entire world of other tools that can load data from your spreadsheets into your data warehouse. This is a living document, so if your preferred method isn't listed then please [open a PR](https://github.com/dbt-labs/docs.getdbt.com) and I'll check it out. -The most important things to consider are your files’ origins and formats—if you need your colleagues to upload files on a regular basis then try to provide them with a more user-friendly process; but if you just need two computers to talk to each other, or it’s a one-off file that will hardly ever change, then a more technical integration is totally appropriate. \ No newline at end of file +The most important things to consider are your files’ origins and formats—if you need your colleagues to upload files on a regular basis then try to provide them with a more user-friendly process; but if you just need two computers to talk to each other, or it’s a one-off file that will hardly ever change, then a more technical integration is totally appropriate. diff --git a/website/blog/2022-11-30-dbt-project-evaluator.md b/website/blog/2022-11-30-dbt-project-evaluator.md index 558d8877d72..3ea7a459c35 100644 --- a/website/blog/2022-11-30-dbt-project-evaluator.md +++ b/website/blog/2022-11-30-dbt-project-evaluator.md @@ -34,7 +34,7 @@ Throughout these engagements, we began to take note of the common issues many an Maybe your team is facing some of these issues right now 👀 And that’s okay! We know that building an effective, scalable dbt project takes a lot of effort and brain power. Maybe you’ve inherited a legacy dbt project with a mountain of tech debt. Maybe you’re starting from scratch. Either way it can be difficult to know the best way to set your team up for success. Don’t worry, you’re in the right place! -Through solving these problems over and over, the Professional Services team began to hone our best practices for working with dbt and how analytics engineers could improve their dbt project. We added “solutions reviews'' to our list of service offerings — client engagements in which we evaluate a given dbt project and provide specific recommendations to improve performance, save developer time, and prevent misuse of dbt’s features. And in an effort to share these best practices with the wider dbt community, we developed a *lot* of content. We wrote articles on the Developer Blog (see [1](https://docs.getdbt.com/blog/on-the-importance-of-naming), [2](https://discourse.getdbt.com/t/your-essential-dbt-project-checklist/1377), and [3](https://docs.getdbt.com/guides/best-practices/how-we-structure/1-guide-overview)), gave [Coalesce talks](https://www.getdbt.com/coalesce-2020/auditing-model-layers-and-modularity-with-your-dag/), and created [training courses](https://courses.getdbt.com/courses/refactoring-sql-for-modularity). +Through solving these problems over and over, the Professional Services team began to hone our best practices for working with dbt and how analytics engineers could improve their dbt project. We added “solutions reviews'' to our list of service offerings — client engagements in which we evaluate a given dbt project and provide specific recommendations to improve performance, save developer time, and prevent misuse of dbt’s features. And in an effort to share these best practices with the wider dbt community, we developed a *lot* of content. We wrote articles on the Developer Blog (see [1](https://docs.getdbt.com/blog/on-the-importance-of-naming), [2](https://discourse.getdbt.com/t/your-essential-dbt-project-checklist/1377), and [3](https://docs.getdbt.com/best-practices/how-we-structure/1-guide-overview)), gave [Coalesce talks](https://www.getdbt.com/coalesce-2020/auditing-model-layers-and-modularity-with-your-dag/), and created [training courses](https://courses.getdbt.com/courses/refactoring-sql-for-modularity). TIme and time again, we found that when teams are aligned with these best practices, their projects are more: @@ -63,10 +63,10 @@ Currently, the dbt_project_evaluator package covers five main categories: | Category | Example Best Practices | | --- | --- | -| Modeling | - Every [raw source](https://docs.getdbt.com/docs/build/sources) has a one-to-one relationship with a [staging model](https://docs.getdbt.com/guides/best-practices/how-we-structure/1-guide-overview) to centralize data cleanup.
- Every model can be traced back to a declared source in the dbt project (i.e. no "root" models).
- End-of-DAG fanout remains under a specified threshold. | +| Modeling | - Every [raw source](https://docs.getdbt.com/docs/build/sources) has a one-to-one relationship with a [staging model](https://docs.getdbt.com/best-practices/how-we-structure/1-guide-overview) to centralize data cleanup.
- Every model can be traced back to a declared source in the dbt project (i.e. no "root" models).
- End-of-DAG fanout remains under a specified threshold. | | Testing | - Every model has a that is appropriately tested.
- The percentage of models that have minimum 1 test applied is greater than or equal to a specified threshold. | | Documentation | - Every model has a [description](https://docs.getdbt.com/reference/resource-properties/description).
- The percentage of models that have a description is greater than or equal to a specified threshold. | -| Structure | - All models are named with the appropriate prefix aligned according to their model types (e.g. staging models are prefixed with `stg_`).
- The sql file for each model is in the subdirectory aligned with the model type (e.g. intermediate models are in an [intermediate subdirectory](https://docs.getdbt.com/guides/best-practices/how-we-structure/3-intermediate)).
- Each models subdirectory contains one .yml file that includes tests and documentation for all models within the given subdirectory. | +| Structure | - All models are named with the appropriate prefix aligned according to their model types (e.g. staging models are prefixed with `stg_`).
- The sql file for each model is in the subdirectory aligned with the model type (e.g. intermediate models are in an [intermediate subdirectory](https://docs.getdbt.com/best-practices/how-we-structure/3-intermediate)).
- Each models subdirectory contains one .yml file that includes tests and documentation for all models within the given subdirectory. | | Performance | - Every model that directly feeds into an [exposure](https://docs.getdbt.com/docs/build/exposures) is materialized as a .
- No models are dependent on chains of "non-physically-materialized" models greater than a specified threshold. | For the full up-to-date list of covered rules, check out the package’s [README](https://github.com/dbt-labs/dbt-project-evaluator#rules-1), which outlines for each misalignment of a best practice: diff --git a/website/docs/best-practices/best-practices.md b/website/docs/best-practices/best-practice-workflows.md similarity index 99% rename from website/docs/best-practices/best-practices.md rename to website/docs/best-practices/best-practice-workflows.md index 70300a5974f..4760aeff782 100644 --- a/website/docs/best-practices/best-practices.md +++ b/website/docs/best-practices/best-practice-workflows.md @@ -1,6 +1,6 @@ --- title: "Best practices for workflows" -id: "best-practices" +id: "best-practice-workflows" --- This page contains the collective wisdom of experienced users of dbt on how to best use it in your analytics work. Observing these best practices will help your analytics team work as effectively as possible, while implementing the pro-tips will add some polish to your dbt projects! @@ -58,7 +58,7 @@ All subsequent data models should be built on top of these models, reducing the Earlier versions of this documentation recommended implementing “base models” as the first layer of transformation, and gave advice on the SQL within these models. We realized that while the reasons behind this convention were valid, the specific advice around "base models" represented an opinion, so we moved it out of the official documentation. -You can instead find our opinions on [how we structure our dbt projects](https://docs.getdbt.com/guides/best-practices/how-we-structure/1-guide-overview). +You can instead find our opinions on [how we structure our dbt projects](https://docs.getdbt.com/best-practices/how-we-structure/1-guide-overview). ::: diff --git a/website/docs/best-practices/how-we-build-our-metrics/semantic-layer-5-refactor-a-mart.md b/website/docs/best-practices/how-we-build-our-metrics/semantic-layer-5-refactor-a-mart.md index b2efb39e9fc..dfdba2941e9 100644 --- a/website/docs/best-practices/how-we-build-our-metrics/semantic-layer-5-refactor-a-mart.md +++ b/website/docs/best-practices/how-we-build-our-metrics/semantic-layer-5-refactor-a-mart.md @@ -72,7 +72,7 @@ So far we've been working in new pointing at a staging model to simplify things Now, let's tackle a thornier situation. Products and supplies both have dimensions and measures but no time dimension. Products has a one-to-one relationship with `order_items`, enriching that table, which is itself just a mapping table of products to orders. Additionally, products have a one-to-many relationship with supplies. The high-level ERD looks like the diagram below. - + So to calculate, for instance, the cost of ingredients and supplies for a given order, we'll need to do some joining and aggregating, but again we **lack a time dimension for products and supplies**. This is the signal to us that we'll **need to build a logical mart** and point our semantic model at that. diff --git a/website/docs/best-practices/how-we-structure/2-staging.md b/website/docs/best-practices/how-we-structure/2-staging.md index bcb589508e5..8eb91ff5b7b 100644 --- a/website/docs/best-practices/how-we-structure/2-staging.md +++ b/website/docs/best-practices/how-we-structure/2-staging.md @@ -12,7 +12,7 @@ We'll use an analogy for working with dbt throughout this guide: thinking modula ### Staging: Files and folders -Let's zoom into the staging directory from our `models` file tree [in the overview](/guides/best-practices/how-we-structure/1-guide-overview) and walk through what's going on here. +Let's zoom into the staging directory from our `models` file tree [in the overview](/best-practices/how-we-structure/1-guide-overview) and walk through what's going on here. ```shell models/staging @@ -106,7 +106,7 @@ select * from renamed - ❌ **Aggregations** — aggregations entail grouping, and we're not doing that at this stage. Remember - staging models are your place to create the building blocks you’ll use all throughout the rest of your project — if we start changing the grain of our tables by grouping in this layer, we’ll lose access to source data that we’ll likely need at some point. We just want to get our individual concepts cleaned and ready for use, and will handle aggregating values downstream. - ✅ **Materialized as views.** Looking at a partial view of our `dbt_project.yml` below, we can see that we’ve configured the entire staging directory to be materialized as views. As they’re not intended to be final artifacts themselves, but rather building blocks for later models, staging models should typically be materialized as views for two key reasons: - - Any downstream model (discussed more in [marts](/guides/best-practices/how-we-structure/4-marts)) referencing our staging models will always get the freshest data possible from all of the component views it’s pulling together and materializing + - Any downstream model (discussed more in [marts](/best-practices/how-we-structure/4-marts)) referencing our staging models will always get the freshest data possible from all of the component views it’s pulling together and materializing - It avoids wasting space in the warehouse on models that are not intended to be queried by data consumers, and thus do not need to perform as quickly or efficiently ```yaml diff --git a/website/docs/best-practices/how-we-structure/5-semantic-layer-marts.md b/website/docs/best-practices/how-we-structure/5-semantic-layer-marts.md index adebc4a63c7..aca0ca3f283 100644 --- a/website/docs/best-practices/how-we-structure/5-semantic-layer-marts.md +++ b/website/docs/best-practices/how-we-structure/5-semantic-layer-marts.md @@ -3,7 +3,7 @@ title: "Marts for the Semantic Layer" id: "5-semantic-layer-marts" --- -The Semantic Layer alters some fundamental principles of how you organize your project. Using dbt without the Semantic Layer necessitates creating the most useful combinations of your building block components into wide, denormalized marts. On the other hand, the Semantic Layer leverages MetricFlow to denormalize every possible combination of components we've encoded dynamically. As such we're better served to bring more normalized models through from the logical layer into the Semantic Layer to maximize flexibility. This section will assume familiarity with the best practices laid out in the [How we build our metrics](https://docs.getdbt.com/guides/best-practices/how-we-build-our-metrics/semantic-layer-1-intro) guide, so check that out first for a more hands-on introduction to the Semantic Layer. +The Semantic Layer alters some fundamental principles of how you organize your project. Using dbt without the Semantic Layer necessitates creating the most useful combinations of your building block components into wide, denormalized marts. On the other hand, the Semantic Layer leverages MetricFlow to denormalize every possible combination of components we've encoded dynamically. As such we're better served to bring more normalized models through from the logical layer into the Semantic Layer to maximize flexibility. This section will assume familiarity with the best practices laid out in the [How we build our metrics](https://docs.getdbt.com/best-practices/how-we-build-our-metrics/semantic-layer-1-intro) guide, so check that out first for a more hands-on introduction to the Semantic Layer. ## Semantic Layer: Files and folders @@ -39,7 +39,7 @@ models ## When to make a mart - ❓ If we can go directly to staging models and it's better to serve normalized models to the Semantic Layer, then when, where, and why would we make a mart? - - 🕰️ We have models that have measures but no time dimension to aggregate against. The details of this are laid out in the [Semantic Layer guide](https://docs.getdbt.com/guides/best-practices/how-we-build-our-metrics/semantic-layer-1-intro) but in short, we need a time dimension to aggregate against in MetricFlow. Dimensional tables that + - 🕰️ We have models that have measures but no time dimension to aggregate against. The details of this are laid out in the [Semantic Layer guide](https://docs.getdbt.com/best-practices/how-we-build-our-metrics/semantic-layer-1-intro) but in short, we need a time dimension to aggregate against in MetricFlow. Dimensional tables that - 🧱 We want to **materialize** our model in various ways. - 👯 We want to **version** our model. - 🛒 We have various related models that make more sense as **one wider component**. diff --git a/website/docs/best-practices/how-we-style/6-how-we-style-conclusion.md b/website/docs/best-practices/how-we-style/6-how-we-style-conclusion.md index a6402e46870..75551f095d3 100644 --- a/website/docs/best-practices/how-we-style/6-how-we-style-conclusion.md +++ b/website/docs/best-practices/how-we-style/6-how-we-style-conclusion.md @@ -31,7 +31,7 @@ Our models (typically) fit into two main categories:\ Things to note: - There are different types of models that typically exist in each of the above categories. See [Model Layers](#model-layers) for more information. -- Read [How we structure our dbt projects](https://docs.getdbt.com/guides/best-practices/how-we-structure/1-guide-overview) for an example and more details around organization. +- Read [How we structure our dbt projects](https://docs.getdbt.com/best-practices/how-we-structure/1-guide-overview) for an example and more details around organization. ## Model Layers diff --git a/website/docs/best-practices/materializations/materializations-guide-2-available-materializations.md b/website/docs/best-practices/materializations/materializations-guide-2-available-materializations.md index 54110b46385..9910e5f8269 100644 --- a/website/docs/best-practices/materializations/materializations-guide-2-available-materializations.md +++ b/website/docs/best-practices/materializations/materializations-guide-2-available-materializations.md @@ -19,7 +19,7 @@ Views and tables and incremental models, oh my! In this section we’ll start ge **Views and Tables are the two basic categories** of object that we can create across warehouses. They exist natively as types of objects in the warehouse, as you can see from this screenshot of Snowflake (depending on your warehouse the interface will look a little different). **Incremental models** and other materializations types are a little bit different. They tell dbt to **construct tables in a special way**. -![Tables and views in the browser on Snowflake.](/img/guides/best-practices/materializations/tables-and-views.png) +![Tables and views in the browser on Snowflake.](/img/best-practices/materializations/tables-and-views.png) ### Views diff --git a/website/docs/best-practices/materializations/materializations-guide-4-incremental-models.md b/website/docs/best-practices/materializations/materializations-guide-4-incremental-models.md index 603cbc8cda1..ec613e39997 100644 --- a/website/docs/best-practices/materializations/materializations-guide-4-incremental-models.md +++ b/website/docs/best-practices/materializations/materializations-guide-4-incremental-models.md @@ -76,7 +76,7 @@ So we’ve found a way to isolate the new rows we need to process. How then do w - 🌍  Lastly, if we’re building into a new environment and there’s **no previous run to reference**, or we need to **build the model from scratch.** Put another way, we’ll want a means to skip the incremental logic and transform all of our input data like a regular table if needed. - 😎 **Visualized below**, we’ve figured out how to get the red ‘new records’ portion selected, but we need to sort out the step to the right, where we stick those on to our model. -![Diagram visualizing how incremental models work](/img/guides/best-practices/materializations/incremental-diagram.png) +![Diagram visualizing how incremental models work](/img/best-practices/materializations/incremental-diagram.png) :::info 😌 Incremental models can be confusing at first, **take your time reviewing** this visual and the previous steps until you have a **clear mental model.** Be patient with yourself. This materialization will become second nature soon, but it’s tough at first. If you’re feeling confused the [dbt Community is here for you on the Forum and Slack](community/join). diff --git a/website/docs/best-practices/materializations/materializations-guide-5-best-practices.md b/website/docs/best-practices/materializations/materializations-guide-5-best-practices.md index a2cb22d5755..268a326eed0 100644 --- a/website/docs/best-practices/materializations/materializations-guide-5-best-practices.md +++ b/website/docs/best-practices/materializations/materializations-guide-5-best-practices.md @@ -58,7 +58,7 @@ models: As we’ve learned, views store only the logic of the transformation in the warehouse, so our runs take only a couple seconds per model (or less). What happens when we go to query the data though? -![Long query time from Snowflake](/img/guides/best-practices/materializations/snowflake-query-timing.png) +![Long query time from Snowflake](/img/best-practices/materializations/snowflake-query-timing.png) Our marts are slow to query! diff --git a/website/docs/best-practices/materializations/materializations-guide-6-examining-builds.md b/website/docs/best-practices/materializations/materializations-guide-6-examining-builds.md index 8c936bfcf52..0b18518d0bd 100644 --- a/website/docs/best-practices/materializations/materializations-guide-6-examining-builds.md +++ b/website/docs/best-practices/materializations/materializations-guide-6-examining-builds.md @@ -18,7 +18,7 @@ hoverSnippet: Read this guide to understand how to examine your builds in dbt. That’s where dbt Cloud’s Model Timing visualization comes in extremely handy. If we’ve set up a [Job](/guides/bigquery) in dbt Cloud to run our models, we can use the Model Timing tab to pinpoint our longest-running models. -![dbt Cloud's Model Timing diagram](/img/guides/best-practices/materializations/model-timing-diagram.png) +![dbt Cloud's Model Timing diagram](/img/best-practices/materializations/model-timing-diagram.png) - 🧵 This view lets us see our **mapped out in threads** (up to 64 threads, we’re currently running with 4, so we get 4 tracks) over time. You can think of **each thread as a lane on a highway**. - ⌛ We can see above that `customer_status_histories` is **taking by far the most time**, so we may want to go ahead and **make that incremental**. @@ -29,7 +29,7 @@ If you aren’t using dbt Cloud, that’s okay! We don’t get a fancy visualiza If you’ve ever run dbt, whether `build`, `test`, `run` or something else, you’ve seen some output like below. Let’s take a closer look at how to read this. -![CLI output from a dbt build command](/img/guides/best-practices/materializations/dbt-build-output.png) +![CLI output from a dbt build command](/img/best-practices/materializations/dbt-build-output.png) - There are two entries per model, the **start** of a model’s build and the **completion**, which will include **how long** the model took to run. The **type** of model is included as well. For example: diff --git a/website/docs/best-practices/materializations/materializations-guide-7-conclusion.md b/website/docs/best-practices/materializations/materializations-guide-7-conclusion.md index 119563b9a50..c0c4e023a55 100644 --- a/website/docs/best-practices/materializations/materializations-guide-7-conclusion.md +++ b/website/docs/best-practices/materializations/materializations-guide-7-conclusion.md @@ -9,6 +9,6 @@ hoverSnippet: Read this conclusion to our guide on using materializations in dbt You're now following best practices in your project, and have optimized the materializations of your DAG. You’re equipped with the 3 main materializations that cover almost any analytics engineering situation! -There are more configs and materializations available, as well as specific materializations for certain platforms and adapters — and like everything with dbt, materializations are extensible, meaning you can create your own [custom materializations](/guides/advanced/creating-new-materializations) for your needs. So this is just the beginning of what you can do with these powerful configurations. +There are more configs and materializations available, as well as specific materializations for certain platforms and adapters — and like everything with dbt, materializations are extensible, meaning you can create your own [custom materializations](/guides/creating-new-materializations) for your needs. So this is just the beginning of what you can do with these powerful configurations. For the vast majority of users and companies though, tables, views, and incremental models will handle everything you can throw at them. Develop your intuition and expertise for these materializations, and you’ll be well on your way to tackling advanced analytics engineering problems. diff --git a/website/docs/community/resources/getting-help.md b/website/docs/community/resources/getting-help.md index 953d04434c4..658f7d154db 100644 --- a/website/docs/community/resources/getting-help.md +++ b/website/docs/community/resources/getting-help.md @@ -9,7 +9,7 @@ dbt is open source, and has a generous community behind it. Asking questions wel #### Search the existing documentation The docs site you're on is highly searchable, make sure to explore for the answer here as a first step. If you're new to dbt, try working through the [quickstart guide](/guides) first to get a firm foundation on the essential concepts. #### Try to debug the issue yourself -We have a handy guide on [debugging errors](/guides/best-practices/debugging-errors) to help out! This guide also helps explain why errors occur, and which docs you might need to search for help. +We have a handy guide on [debugging errors](/best-practices/debugging-errors) to help out! This guide also helps explain why errors occur, and which docs you might need to search for help. #### Search for answers using your favorite search engine We're committed to making more errors searchable, so it's worth checking if there's a solution already out there! Further, some errors related to installing dbt, the SQL in your models, or getting YAML right, are errors that are not-specific to dbt, so there may be other resources to check. diff --git a/website/docs/docs/build/jinja-macros.md b/website/docs/docs/build/jinja-macros.md index c5fd6b2e111..135db740f75 100644 --- a/website/docs/docs/build/jinja-macros.md +++ b/website/docs/docs/build/jinja-macros.md @@ -27,7 +27,7 @@ Jinja can be used in any SQL in a dbt project, including [models](/docs/build/sq :::info Ready to get started with Jinja and macros? -Check out the [tutorial on using Jinja](/guides/advanced/using-jinja) for a step-by-step example of using Jinja in a model, and turning it into a macro! +Check out the [tutorial on using Jinja](/guides/using-jinja) for a step-by-step example of using Jinja in a model, and turning it into a macro! ::: diff --git a/website/docs/docs/build/projects.md b/website/docs/docs/build/projects.md index eeed8e52f90..a54f6042cce 100644 --- a/website/docs/docs/build/projects.md +++ b/website/docs/docs/build/projects.md @@ -91,6 +91,6 @@ If you want to see what a mature, production project looks like, check out the [ ## Related docs -* [Best practices: How we structure our dbt projects](/guides/best-practices/how-we-structure/1-guide-overview) +* [Best practices: How we structure our dbt projects](/best-practices/how-we-structure/1-guide-overview) * [Quickstarts for dbt Cloud](/guides) * [Quickstart for dbt Core](/guides/manual-install) diff --git a/website/docs/docs/build/python-models.md b/website/docs/docs/build/python-models.md index bff65362d06..3fe194a4cb7 100644 --- a/website/docs/docs/build/python-models.md +++ b/website/docs/docs/build/python-models.md @@ -67,7 +67,7 @@ models: - not_null tests: # Write your own validation logic (in SQL) for Python results - - [custom_generic_test](/guides/best-practices/writing-custom-generic-tests) + - [custom_generic_test](/best-practices/writing-custom-generic-tests) ```
@@ -716,4 +716,4 @@ You can also install packages at cluster creation time by [defining cluster prop - \ No newline at end of file + diff --git a/website/docs/docs/build/tests.md b/website/docs/docs/build/tests.md index 266f302f7df..3d86dc6a81b 100644 --- a/website/docs/docs/build/tests.md +++ b/website/docs/docs/build/tests.md @@ -112,7 +112,7 @@ You can find more information about these tests, and additional configurations ( ### More generic tests -Those four tests are enough to get you started. You'll quickly find you want to use a wider variety of tests—a good thing! You can also install generic tests from a package, or write your own, to use (and reuse) across your dbt project. Check out the [guide on custom generic tests](/guides/best-practices/writing-custom-generic-tests) for more information. +Those four tests are enough to get you started. You'll quickly find you want to use a wider variety of tests—a good thing! You can also install generic tests from a package, or write your own, to use (and reuse) across your dbt project. Check out the [guide on custom generic tests](/best-practices/writing-custom-generic-tests) for more information. :::info There are generic tests defined in some open source packages, such as [dbt-utils](https://hub.getdbt.com/dbt-labs/dbt_utils/latest/) and [dbt-expectations](https://hub.getdbt.com/calogica/dbt_expectations/latest/) — skip ahead to the docs on [packages](/docs/build/packages) to learn more! diff --git a/website/docs/docs/cloud/dbt-cloud-ide/dbt-cloud-tips.md b/website/docs/docs/cloud/dbt-cloud-ide/dbt-cloud-tips.md index ad0d5466714..b90ac1bce01 100644 --- a/website/docs/docs/cloud/dbt-cloud-ide/dbt-cloud-tips.md +++ b/website/docs/docs/cloud/dbt-cloud-ide/dbt-cloud-tips.md @@ -46,7 +46,7 @@ There are default keyboard shortcuts that can help make development more product - Use [severity](/reference/resource-configs/severity) thresholds to set an acceptable number of failures for a test. - Use [incremental_strategy](/docs/build/incremental-models#about-incremental_strategy) in your incremental model config to implement the most effective behavior depending on the volume of your data and reliability of your unique keys. - Set `vars` in your `dbt_project.yml` to define global defaults for certain conditions, which you can then override using the `--vars` flag in your commands. -- Use [for loops](/guides/advanced/using-jinja#use-a-for-loop-in-models-for-repeated-sql) in Jinja to [DRY](https://docs.getdbt.com/terms/dry) up repetitive logic, such as selecting a series of columns that all require the same transformations and naming patterns to be applied. +- Use [for loops](/guides/using-jinja#use-a-for-loop-in-models-for-repeated-sql) in Jinja to [DRY](https://docs.getdbt.com/terms/dry) up repetitive logic, such as selecting a series of columns that all require the same transformations and naming patterns to be applied. - Instead of relying on post-hooks, use the [grants config](/reference/resource-configs/grants) to apply permission grants in the warehouse resiliently. - Define [source-freshness](/docs/build/sources#snapshotting-source-data-freshness) thresholds on your sources to avoid running transformations on data that has already been processed. - Use the `+` operator on the left of a model `dbt build --select +model_name` to run a model and all of its upstream dependencies. Use the `+` operator on the right of the model `dbt build --select model_name+` to run a model and everything downstream that depends on it. diff --git a/website/docs/docs/cloud/dbt-cloud-ide/lint-format.md b/website/docs/docs/cloud/dbt-cloud-ide/lint-format.md index 6a86f1aa14b..f145e76df11 100644 --- a/website/docs/docs/cloud/dbt-cloud-ide/lint-format.md +++ b/website/docs/docs/cloud/dbt-cloud-ide/lint-format.md @@ -127,7 +127,7 @@ group_by_and_order_by_style = implicit ``` -For more info on styling best practices, refer to [How we style our SQL](/guides/best-practices/how-we-style/2-how-we-style-our-sql). +For more info on styling best practices, refer to [How we style our SQL](/best-practices/how-we-style/2-how-we-style-our-sql). ::: diff --git a/website/docs/docs/collaborate/govern/model-access.md b/website/docs/docs/collaborate/govern/model-access.md index 765e833ac0c..76eb8bd6f6d 100644 --- a/website/docs/docs/collaborate/govern/model-access.md +++ b/website/docs/docs/collaborate/govern/model-access.md @@ -35,7 +35,7 @@ Why define model `groups`? There are two reasons: - It turns implicit relationships into an explicit grouping, with a defined owner. By thinking about the interface boundaries _between_ groups, you can have a cleaner (less entangled) DAG. In the future, those interface boundaries could be appropriate as the interfaces between separate projects. - It enables you to designate certain models as having "private" access—for use exclusively within that group. Other models will be restricted from referencing (taking a dependency on) those models. In the future, they won't be visible to other teams taking a dependency on your project—only "public" models will be. -If you follow our [best practices for structuring a dbt project](/guides/best-practices/how-we-structure/1-guide-overview), you're probably already using subdirectories to organize your dbt project. It's easy to apply a `group` label to an entire subdirectory at once: +If you follow our [best practices for structuring a dbt project](/best-practices/how-we-structure/1-guide-overview), you're probably already using subdirectories to organize your dbt project. It's easy to apply a `group` label to an entire subdirectory at once: diff --git a/website/docs/docs/collaborate/govern/project-dependencies.md b/website/docs/docs/collaborate/govern/project-dependencies.md index 9a1d8b59b68..bafc9bb04cf 100644 --- a/website/docs/docs/collaborate/govern/project-dependencies.md +++ b/website/docs/docs/collaborate/govern/project-dependencies.md @@ -113,7 +113,7 @@ with monthly_revenue as ( **Cycle detection:** Currently, "project" dependencies can only go in one direction, meaning that the `jaffle_finance` project could not add a new model that depends, in turn, on `jaffle_marketing.roi_by_channel`. dbt will check for cycles across projects and raise errors if any are detected. We are considering support for this pattern in the future, whereby dbt would still check for node-level cycles while allowing cycles at the project level. -For more guidance on how to use dbt Mesh, refer to the dedicated [dbt Mesh guide](/guides/best-practices/how-we-mesh/mesh-1-intro). +For more guidance on how to use dbt Mesh, refer to the dedicated [dbt Mesh guide](/best-practices/how-we-mesh/mesh-1-intro). ### Comparison @@ -139,4 +139,4 @@ If you're using private packages with the [git token method](/docs/build/package ## Related docs -- Refer to the [dbt Mesh](/guides/best-practices/how-we-mesh/mesh-1-intro) guide for more guidance on how to use dbt Mesh. +- Refer to the [dbt Mesh](/best-practices/how-we-mesh/mesh-1-intro) guide for more guidance on how to use dbt Mesh. diff --git a/website/docs/docs/dbt-cloud-environments.md b/website/docs/docs/dbt-cloud-environments.md index 8fa4522d47c..ac51a953cb7 100644 --- a/website/docs/docs/dbt-cloud-environments.md +++ b/website/docs/docs/dbt-cloud-environments.md @@ -45,4 +45,4 @@ To use the dbt Cloud IDE or dbt Cloud CLI, each developer will need to set up [p Deployment environments in dbt Cloud are necessary to execute scheduled jobs and use other features. A dbt Cloud project can have multiple deployment environments, allowing for flexibility and customization. However, a dbt Cloud project can only have one deployment environment that represents the production source of truth. -To learn more about dbt Cloud deployment environments and how to configure them, visit the [Deployment environments](/docs/deploy/deploy-environments) page. For our best practices guide, read [dbt Cloud environment best practices](https://docs.getdbt.com/guides/best-practices/environment-setup/1-env-guide-overview) for more info. +To learn more about dbt Cloud deployment environments and how to configure them, visit the [Deployment environments](/docs/deploy/deploy-environments) page. For our best practices guide, read [dbt Cloud environment best practices](https://docs.getdbt.com/best-practices/environment-setup/1-env-guide-overview) for more info. diff --git a/website/docs/docs/dbt-versions/release-notes/03-Oct-2023/product-docs-sept-rn.md b/website/docs/docs/dbt-versions/release-notes/03-Oct-2023/product-docs-sept-rn.md index 42a2c8daba1..3fdaa0eafe8 100644 --- a/website/docs/docs/dbt-versions/release-notes/03-Oct-2023/product-docs-sept-rn.md +++ b/website/docs/docs/dbt-versions/release-notes/03-Oct-2023/product-docs-sept-rn.md @@ -31,7 +31,7 @@ Here's what's new to [docs.getdbt.com](http://docs.getdbt.com/): ## New 📚 Guides, ✏️ blog posts, and FAQs -Added a [style guide template](/guides/best-practices/how-we-style/6-how-we-style-conclusion#style-guide-template) that you can copy & paste to make sure you adhere to best practices when styling dbt projects! +Added a [style guide template](/best-practices/how-we-style/6-how-we-style-conclusion#style-guide-template) that you can copy & paste to make sure you adhere to best practices when styling dbt projects! ## Upcoming changes diff --git a/website/docs/docs/dbt-versions/release-notes/04-Sept-2023/product-docs-summer-rn.md b/website/docs/docs/dbt-versions/release-notes/04-Sept-2023/product-docs-summer-rn.md index a647bb5f585..15891975e1d 100644 --- a/website/docs/docs/dbt-versions/release-notes/04-Sept-2023/product-docs-summer-rn.md +++ b/website/docs/docs/dbt-versions/release-notes/04-Sept-2023/product-docs-summer-rn.md @@ -40,4 +40,4 @@ You can provide feedback by opening a pull request or issue in [our repo](https: ## New 📚 Guides, ✏️ blog posts, and FAQs * Check out how these community members use the dbt community in the [Community spotlight](/community/spotlight). * Blog posts published this summer include [Optimizing Materialized Views with dbt](/blog/announcing-materialized-views), [Data Vault 2.0 with dbt Cloud](/blog/data-vault-with-dbt-cloud), and [Create dbt Documentation and Tests 10x faster with ChatGPT](/blog/create-dbt-documentation-10x-faster-with-chatgpt) -* We now have two new best practice guides: [How we build our metrics](/guides/best-practices/how-we-build-our-metrics/semantic-layer-1-intro) and [Set up Continuous Integration](/guides/orchestration/set-up-ci/overview). +* We now have two new best practice guides: [How we build our metrics](/best-practices/how-we-build-our-metrics/semantic-layer-1-intro) and [Set up Continuous Integration](/guides/orchestration/set-up-ci/overview). diff --git a/website/docs/docs/deploy/deploy-environments.md b/website/docs/docs/deploy/deploy-environments.md index bdcf36b7a30..00d5c071444 100644 --- a/website/docs/docs/deploy/deploy-environments.md +++ b/website/docs/docs/deploy/deploy-environments.md @@ -13,7 +13,7 @@ Deployment environments in dbt Cloud are crucial for deploying dbt jobs in produ A dbt Cloud project can have multiple deployment environments, providing you the flexibility and customization to tailor the execution of dbt jobs. You can use deployment environments to [create and schedule jobs](/docs/deploy/deploy-jobs#create-and-schedule-jobs), [enable continuous integration](/docs/deploy/continuous-integration), or more based on your specific needs or requirements. :::tip Learn how to manage dbt Cloud environments -To learn different approaches to managing dbt Cloud environments and recommendations for your organization's unique needs, read [dbt Cloud environment best practices](https://docs.getdbt.com/guides/best-practices/environment-setup/1-env-guide-overview). +To learn different approaches to managing dbt Cloud environments and recommendations for your organization's unique needs, read [dbt Cloud environment best practices](https://docs.getdbt.com/best-practices/environment-setup/1-env-guide-overview). ::: This page reviews the different types of environments and how to configure your deployment environment in dbt Cloud. @@ -190,7 +190,7 @@ This section allows you to determine the credentials that should be used when co ## Related docs -- [dbt Cloud environment best practices](https://docs.getdbt.com/guides/best-practices/environment-setup/1-env-guide-overview) +- [dbt Cloud environment best practices](https://docs.getdbt.com/best-practices/environment-setup/1-env-guide-overview) - [Deploy jobs](/docs/deploy/deploy-jobs) - [CI jobs](/docs/deploy/continuous-integration) - [Delete a job or environment in dbt Cloud](/faqs/Environments/delete-environment-job) diff --git a/website/docs/docs/environments-in-dbt.md b/website/docs/docs/environments-in-dbt.md index 70bc096cf4f..0361a272c4f 100644 --- a/website/docs/docs/environments-in-dbt.md +++ b/website/docs/docs/environments-in-dbt.md @@ -33,7 +33,7 @@ Configure environments to tell dbt Cloud or dbt Core how to build and execute yo ## Related docs -- [dbt Cloud environment best practices](https://docs.getdbt.com/guides/best-practices/environment-setup/1-env-guide-overview) +- [dbt Cloud environment best practices](https://docs.getdbt.com/best-practices/environment-setup/1-env-guide-overview) - [Deployment environments](/docs/deploy/deploy-environments) - [About dbt Core versions](/docs/dbt-versions/core) - [Set Environment variables in dbt Cloud](/docs/build/environment-variables#special-environment-variables) diff --git a/website/docs/docs/introduction.md b/website/docs/docs/introduction.md index 5eeec43c0d5..61cda6e1d3e 100644 --- a/website/docs/docs/introduction.md +++ b/website/docs/docs/introduction.md @@ -63,6 +63,6 @@ As a dbt user, your main focus will be on writing models (i.e. select queries) t ### Related docs - [Quickstarts for dbt](/guides) -- [Best practice guides](/guides/best-practices) +- [Best practice guides](/best-practices) - [What is a dbt Project?](/docs/build/projects) - [dbt run](/docs/running-a-dbt-project/run-your-dbt-projects) diff --git a/website/docs/faqs/Jinja/jinja-whitespace.md b/website/docs/faqs/Jinja/jinja-whitespace.md index 49ced7183b7..5e1ec3dc7ac 100644 --- a/website/docs/faqs/Jinja/jinja-whitespace.md +++ b/website/docs/faqs/Jinja/jinja-whitespace.md @@ -7,6 +7,6 @@ id: jinja-whitespace This is known as "whitespace control". -Use a minus sign (`-`, e.g. `{{- ... -}}`, `{%- ... %}`, `{#- ... -#}`) at the start or end of a block to strip whitespace before or after the block (more docs [here](https://jinja.palletsprojects.com/page/templates/#whitespace-control)). Check out the [tutorial on using Jinja](/guides/advanced/using-jinja#use-whitespace-control-to-tidy-up-compiled-code) for an example. +Use a minus sign (`-`, e.g. `{{- ... -}}`, `{%- ... %}`, `{#- ... -#}`) at the start or end of a block to strip whitespace before or after the block (more docs [here](https://jinja.palletsprojects.com/page/templates/#whitespace-control)). Check out the [tutorial on using Jinja](/guides/using-jinja#use-whitespace-control-to-tidy-up-compiled-code) for an example. Take caution: it's easy to fall down a rabbit hole when it comes to whitespace control! diff --git a/website/docs/faqs/Models/available-materializations.md b/website/docs/faqs/Models/available-materializations.md index 011d3ba3fb0..fcb3e3a9d26 100644 --- a/website/docs/faqs/Models/available-materializations.md +++ b/website/docs/faqs/Models/available-materializations.md @@ -8,4 +8,4 @@ id: available-materializations dbt ships with five materializations: `view`, `table`, `incremental`, `ephemeral` and `materialized_view`. Check out the documentation on [materializations](/docs/build/materializations) for more information on each of these options. -You can also create your own [custom materializations](/guides/advanced/creating-new-materializations), if required however this is an advanced feature of dbt. +You can also create your own [custom materializations](/guides/creating-new-materializations), if required however this is an advanced feature of dbt. diff --git a/website/docs/faqs/Project/multiple-resource-yml-files.md b/website/docs/faqs/Project/multiple-resource-yml-files.md index 422b7beb702..a60c198de5d 100644 --- a/website/docs/faqs/Project/multiple-resource-yml-files.md +++ b/website/docs/faqs/Project/multiple-resource-yml-files.md @@ -9,4 +9,4 @@ It's up to you: - Some folks find it useful to have one file per model (or source / snapshot / seed etc) - Some find it useful to have one per directory, documenting and testing multiple models in one file -Choose what works for your team. We have more recommendations in our guide on [structuring dbt projects](https://docs.getdbt.com/guides/best-practices/how-we-structure/1-guide-overview). +Choose what works for your team. We have more recommendations in our guide on [structuring dbt projects](https://docs.getdbt.com/best-practices/how-we-structure/1-guide-overview). diff --git a/website/docs/faqs/Project/resource-yml-name.md b/website/docs/faqs/Project/resource-yml-name.md index 8a6ebe96134..78d541cbd54 100644 --- a/website/docs/faqs/Project/resource-yml-name.md +++ b/website/docs/faqs/Project/resource-yml-name.md @@ -10,4 +10,4 @@ It's up to you! Here's a few options: - Use the same name as your directory (assuming you're using sensible names for your directories) - If you test and document one model (or seed, snapshot, macro etc.) per file, you can give it the same name as the model (or seed, snapshot, macro etc.) -Choose what works for your team. We have more recommendations in our guide on [structuring dbt projects](https://docs.getdbt.com/guides/best-practices/how-we-structure/1-guide-overview). +Choose what works for your team. We have more recommendations in our guide on [structuring dbt projects](https://docs.getdbt.com/best-practices/how-we-structure/1-guide-overview). diff --git a/website/docs/faqs/Project/structure-a-project.md b/website/docs/faqs/Project/structure-a-project.md index 5d73f9f25ba..136c5b188bf 100644 --- a/website/docs/faqs/Project/structure-a-project.md +++ b/website/docs/faqs/Project/structure-a-project.md @@ -8,4 +8,4 @@ id: structure-a-project There's no one best way to structure a project! Every organization is unique. -If you're just getting started, check out how we (dbt Labs) [structure our dbt projects](https://docs.getdbt.com/guides/best-practices/how-we-structure/1-guide-overview). +If you're just getting started, check out how we (dbt Labs) [structure our dbt projects](https://docs.getdbt.com/best-practices/how-we-structure/1-guide-overview). diff --git a/website/docs/faqs/Project/why-not-write-dml.md b/website/docs/faqs/Project/why-not-write-dml.md index fd2cea7d3ad..349fc2c5c74 100644 --- a/website/docs/faqs/Project/why-not-write-dml.md +++ b/website/docs/faqs/Project/why-not-write-dml.md @@ -30,4 +30,4 @@ You can test your models, generate documentation, create snapshots, and more! SQL dialects tend to diverge the most in DML and DDL (rather than in `select` statements) — check out the example [here](/faqs/models/sql-dialect). By writing less SQL, it can make a migration to a new database technology easier. -If you do need to write custom DML, there are ways to do this in dbt using [custom materializations](/guides/advanced/creating-new-materializations). +If you do need to write custom DML, there are ways to do this in dbt using [custom materializations](/guides/creating-new-materializations). diff --git a/website/docs/faqs/Tests/custom-test-thresholds.md b/website/docs/faqs/Tests/custom-test-thresholds.md index 7155b39d25e..34d2eec7494 100644 --- a/website/docs/faqs/Tests/custom-test-thresholds.md +++ b/website/docs/faqs/Tests/custom-test-thresholds.md @@ -11,4 +11,4 @@ As of `v0.20.0`, you can use the `error_if` and `warn_if` configs to set custom For dbt `v0.19.0` and earlier, you could try these possible solutions: * Setting the [severity](/reference/resource-properties/tests#severity) to `warn`, or: -* Writing a [custom generic test](/guides/best-practices/writing-custom-generic-tests) that accepts a threshold argument ([example](https://discourse.getdbt.com/t/creating-an-error-threshold-for-schema-tests/966)) +* Writing a [custom generic test](/best-practices/writing-custom-generic-tests) that accepts a threshold argument ([example](https://discourse.getdbt.com/t/creating-an-error-threshold-for-schema-tests/966)) diff --git a/website/docs/faqs/Warehouse/db-connection-dbt-compile.md b/website/docs/faqs/Warehouse/db-connection-dbt-compile.md index d8e58155b10..be46f1a1d8c 100644 --- a/website/docs/faqs/Warehouse/db-connection-dbt-compile.md +++ b/website/docs/faqs/Warehouse/db-connection-dbt-compile.md @@ -22,7 +22,7 @@ To generate the compiled SQL for many models, dbt needs to run introspective que These introspective queries include: -- Populating the [relation cache](/guides/advanced/creating-new-materializations#update-the-relation-cache). Caching speeds up the metadata checks, including whether an [incremental model](/docs/build/incremental-models) already exists in the data platform. +- Populating the [relation cache](/guides/creating-new-materializations#update-the-relation-cache). Caching speeds up the metadata checks, including whether an [incremental model](/docs/build/incremental-models) already exists in the data platform. - Resolving [macros](/docs/build/jinja-macros#macros), such as `run_query` or `dbt_utils.get_column_values` that you're using to template out your SQL. This is because dbt needs to run those queries during model SQL compilation. Without a data platform connection, dbt can't perform these introspective queries and won't be able to generate the compiled SQL needed for the next steps in the dbt workflow. You can [`parse`](/reference/commands/parse) a project and use the [`list`](/reference/commands/list) resources in the project, without an internet or data platform connection. Parsing a project is enough to produce a [manifest](/reference/artifacts/manifest-json), however, keep in mind that the written-out manifest won't include compiled SQL. diff --git a/website/docs/guides/airflow-and-dbt-cloud.md b/website/docs/guides/airflow-and-dbt-cloud.md index 92c97fb2fd3..329fe729038 100644 --- a/website/docs/guides/airflow-and-dbt-cloud.md +++ b/website/docs/guides/airflow-and-dbt-cloud.md @@ -1,7 +1,7 @@ --- title: Airflow and dbt Cloud id: airflow-and-dbt-cloud -time_to_complete: '30 minutes' +time_to_complete: '60 minutes' platform: 'dbt-cloud' icon: 'guides' hide_table_of_contents: true diff --git a/website/docs/guides/legacy/building-packages.md b/website/docs/guides/building-packages.md similarity index 88% rename from website/docs/guides/legacy/building-packages.md rename to website/docs/guides/building-packages.md index 2a6803334d4..167eed47137 100644 --- a/website/docs/guides/legacy/building-packages.md +++ b/website/docs/guides/building-packages.md @@ -1,26 +1,39 @@ --- -title: "Building a dbt package" # to do: update this to creating +title: "Building dbt packages" # to do: update this to creating id: "building-packages" +description: When you have dbt code that might help others, you can create a package for dbt using a GitHub repository. +displayText: Building dbt packages +hoverSnippet: Learn how to create packages for dbt. +time_to_complete: '60 minutes' +platform: 'dbt-core' +icon: 'guides' +hide_table_of_contents: true +tags: ['packages', 'dbt Core', 'legacy'] +level: 'Advanced' +recently_updated: true --- -## Assumed knowledge -This article assumes you are familiar with: +## Introduction + +Creating packages is an **advanced use of dbt**. If you're new to the tool, we recommend that you first use the product for your own analytics before attempting to create a package for others. + +### Prerequisites + +A strong understanding of: - [packages](/docs/build/packages) - administering a repository on GitHub - [semantic versioning](https://semver.org/) -Heads up — developing a package is an **advanced use of dbt**. If you're new to the tool, we recommend that you first use the product for your own company's analytics before attempting to create a package. - -## 1. Assess whether a package is the right solution +### Assess whether a package is the right solution Packages typically contain either: - macros that solve a particular analytics engineering problem — for example, [auditing the results of a query](https://hub.getdbt.com/dbt-labs/audit_helper/latest/), [generating code](https://hub.getdbt.com/dbt-labs/codegen/latest/), or [adding additional schema tests to a dbt project](https://hub.getdbt.com/calogica/dbt_expectations/latest/). - models for a common dataset — for example a dataset for software products like [MailChimp](https://hub.getdbt.com/fivetran/mailchimp/latest/) or [Snowplow](https://hub.getdbt.com/dbt-labs/snowplow/latest/), or even models for metadata about your data stack like [Snowflake query spend](https://hub.getdbt.com/gitlabhq/snowflake_spend/latest/) and [the artifacts produced by `dbt run`](https://hub.getdbt.com/tailsdotcom/dbt_artifacts/latest/). In general, there should be a shared set of industry-standard metrics that you can model (e.g. email open rate). Packages are _not_ a good fit for sharing models that contain business-specific logic, for example, writing code for marketing attribution, or monthly recurring revenue. Instead, consider sharing a blog post and a link to a sample repo, rather than bundling this code as a package (here's our blog post on [marketing attribution](https://blog.getdbt.com/modeling-marketing-attribution/) as an example). -## 2. Create your new project -:::note Using the CLI for package development -We tend to use the CLI for package development. The development workflow often involves installing a local copy of your package in another dbt project — at present dbt Cloud is not designed for this workflow. +## Create your new project +:::note Using the command line for package development +We tend to use the command line interface for package development. The development workflow often involves installing a local copy of your package in another dbt project — at present dbt Cloud is not designed for this workflow. ::: 1. Use the [dbt init](/reference/commands/init) command to create a new dbt project, which will be your package: @@ -33,15 +46,15 @@ $ dbt init [package_name] ¹Currently, our package registry only supports packages that are hosted in GitHub. -## 3. Develop your package +## Develop your package We recommend that first-time package authors first develop macros and models for use in their own dbt project. Once your new package is created, you can get to work on moving them across, implementing some additional package-specific design patterns along the way. When working on your package, we often find it useful to install a local copy of the package in another dbt project — this workflow is described [here](https://discourse.getdbt.com/t/contributing-to-an-external-dbt-package/657). -### Follow our best practices +### Follow best practices _Modeling packages only_ -Use our [dbt coding conventions](https://github.com/dbt-labs/corp/blob/main/dbt_style_guide.md), our article on [how we structure our dbt projects](https://docs.getdbt.com/guides/best-practices/how-we-structure/1-guide-overview), and our [best practices](best-practices) for all of our advice on how to build your dbt project. +Use our [dbt coding conventions](https://github.com/dbt-labs/corp/blob/main/dbt_style_guide.md), our article on [how we structure our dbt projects](https://docs.getdbt.com/best-practices/how-we-structure/1-guide-overview), and our [best practices](best-practices) for all of our advice on how to build your dbt project. This is where it comes in especially handy to have worked on your own dbt project previously. @@ -103,7 +116,7 @@ Over time, we've developed a set of useful GitHub artifacts that make administer - Descriptions of the main models included in the package ([example](https://github.com/dbt-labs/snowplow)) - GitHub templates, including PR templates and issue templates ([example](https://github.com/dbt-labs/dbt-audit-helper/tree/master/.github)) -## 4. Add integration tests +## Add integration tests _Optional_ We recommend that you implement integration tests to confirm that the package works as expected — this is an even _more_ advanced step, so you may find that you build up to this. @@ -125,7 +138,7 @@ packages: -4. Add resources to the package (seeds, models, tests) so that you can successfully run your project, and compare the output with what you expect. The exact appraoch here will vary depending on your packages. In general you will find that you need to: +4. Add resources to the package (seeds, models, tests) so that you can successfully run your project, and compare the output with what you expect. The exact approach here will vary depending on your packages. In general you will find that you need to: - Add mock data via a [seed](/docs/build/seeds) with a few sample (anonymized) records. Configure the `integration_tests` project to point to the seeds instead of raw data tables. - Add more seeds that represent the expected output of your models, and use the [dbt_utils.equality](https://github.com/dbt-labs/dbt-utils#equality-source) test to confirm the output of your package, and the expected output matches. @@ -134,7 +147,7 @@ packages: 5. (Optional) Use a CI tool, like CircleCI or GitHub Actions, to automate running your dbt project when you open a new Pull Request. For inspiration, check out one of our [CircleCI configs](https://github.com/dbt-labs/snowplow/blob/main/.circleci/config.yml), which runs tests against our four main warehouses. Note: this is an advanced step — if you are going down this path, you may find it useful to say hi on [dbt Slack](https://community.getdbt.com/). -## 5. Deploy the docs for your package +## Deploy the docs for your package _Optional_ A dbt docs site can help a prospective user of your package understand the code you've written. As such, we recommend that you deploy the site generated by `dbt docs generate` and link to the deployed site from your package. @@ -147,12 +160,13 @@ The easiest way we've found to do this is to use [GitHub Pages](https://pages.gi 4. Enable GitHub pages on the repo in the settings tab, and point it to the “docs” subdirectory 4. GitHub should then deploy the docs at `.github.io/`, like so: [fivetran.github.io/dbt_ad_reporting](https://fivetran.github.io/dbt_ad_reporting/) -## 6. Release your package +## Release your package Create a new [release](https://docs.github.com/en/github/administering-a-repository/managing-releases-in-a-repository) once you are ready for others to use your work! Be sure to use [semantic versioning](https://semver.org/) when naming your release. In particular, if new changes will cause errors for users of earlier versions of the package, be sure to use _at least_ a minor release (e.g. go from `0.1.1` to `0.2.0`). The release notes should contain an overview of the changes introduced in the new version. Be sure to call out any changes that break the existing interface! -## 7. Add the package to hub.getdbt.com +## Add the package to hub.getdbt.com + Our package registry, [hub.getdbt.com](https://hub.getdbt.com/), gets updated by the [hubcap script](https://github.com/dbt-labs/hubcap). To add your package to hub.getdbt.com, create a PR on the [hubcap repository](https://github.com/dbt-labs/hubcap) to include it in the `hub.json` file. diff --git a/website/docs/guides/creating-new-materializations.md b/website/docs/guides/creating-new-materializations.md index 42466c843cc..963141dc335 100644 --- a/website/docs/guides/creating-new-materializations.md +++ b/website/docs/guides/creating-new-materializations.md @@ -13,7 +13,7 @@ level: 'Advanced' recently_updated: true --- -## Overview +## Introduction The model materializations you're familiar with, `table`, `view`, and `incremental` are implemented as macros in a package that's distributed along with dbt. You can check out the [source code for these materializations](https://github.com/dbt-labs/dbt-core/tree/main/core/dbt/include/global_project/macros/materializations). If you need to create your own materializations, reading these files is a good place to start. Continue reading below for a deep-dive into dbt materializations. diff --git a/website/docs/guides/dbt-ecosystem/databricks-guides/dbt-unity-catalog-best-practices.md b/website/docs/guides/dbt-ecosystem/databricks-guides/dbt-unity-catalog-best-practices.md index 8713938db86..b60e1b912c7 100644 --- a/website/docs/guides/dbt-ecosystem/databricks-guides/dbt-unity-catalog-best-practices.md +++ b/website/docs/guides/dbt-ecosystem/databricks-guides/dbt-unity-catalog-best-practices.md @@ -53,9 +53,9 @@ Ready to start transforming your Unity Catalog datasets with dbt? Check out the resources below for guides, tips, and best practices: -- [How we structure our dbt projects](https://docs.getdbt.com/guides/best-practices/how-we-structure/1-guide-overview) +- [How we structure our dbt projects](https://docs.getdbt.com/best-practices/how-we-structure/1-guide-overview) - [Self-paced dbt fundamentals training videos](https://courses.getdbt.com/courses/fundamentals) - [Customizing CI/CD](https://docs.getdbt.com/guides/orchestration/custom-cicd-pipelines/1-cicd-background) & [SQL linting](https://docs.getdbt.com/guides/orchestration/custom-cicd-pipelines/2-lint-on-push) -- [Debugging errors](https://docs.getdbt.com/guides/best-practices/debugging-errors) -- [Writing custom generic tests](https://docs.getdbt.com/guides/best-practices/writing-custom-generic-tests) -- [dbt packages hub](https://hub.getdbt.com/) \ No newline at end of file +- [Debugging errors](https://docs.getdbt.com/best-practices/debugging-errors) +- [Writing custom generic tests](https://docs.getdbt.com/best-practices/writing-custom-generic-tests) +- [dbt packages hub](https://hub.getdbt.com/) diff --git a/website/docs/guides/dbt-ecosystem/databricks-guides/how-to-set-up-your-databricks-dbt-project.md b/website/docs/guides/dbt-ecosystem/databricks-guides/how-to-set-up-your-databricks-dbt-project.md index ba66bba60d1..ad12bdca725 100644 --- a/website/docs/guides/dbt-ecosystem/databricks-guides/how-to-set-up-your-databricks-dbt-project.md +++ b/website/docs/guides/dbt-ecosystem/databricks-guides/how-to-set-up-your-databricks-dbt-project.md @@ -7,7 +7,7 @@ In this guide, we discuss how to set up your dbt project on the Databricks Lakeh ## Configuring the Databricks Environments -To get started, we will use Databricks’s Unity Catalog. Without it, we would not be able to design separate [environments](https://docs.getdbt.com/docs/collaborate/environments) for development and production per our [best practices](https://docs.getdbt.com/guides/best-practices/how-we-structure/1-guide-overview). It also allows us to ensure the proper access controls have been applied using SQL. You will need to be using the dbt-databricks adapter to use it (as opposed to the dbt-spark adapter). +To get started, we will use Databricks’s Unity Catalog. Without it, we would not be able to design separate [environments](https://docs.getdbt.com/docs/collaborate/environments) for development and production per our [best practices](https://docs.getdbt.com/best-practices/how-we-structure/1-guide-overview). It also allows us to ensure the proper access controls have been applied using SQL. You will need to be using the dbt-databricks adapter to use it (as opposed to the dbt-spark adapter). We will set up two different *catalogs* in Unity Catalog: **dev** and **prod**. A catalog is a top-level container for *schemas* (previously known as databases in Databricks), which in turn contain tables and views. diff --git a/website/docs/guides/dbt-ecosystem/databricks-guides/how_to_optimize_dbt_models_on_databricks.md b/website/docs/guides/dbt-ecosystem/databricks-guides/how_to_optimize_dbt_models_on_databricks.md index b5389645258..cb7390fa799 100644 --- a/website/docs/guides/dbt-ecosystem/databricks-guides/how_to_optimize_dbt_models_on_databricks.md +++ b/website/docs/guides/dbt-ecosystem/databricks-guides/how_to_optimize_dbt_models_on_databricks.md @@ -35,7 +35,7 @@ Because of the ability of serverless warehouses to spin up in a matter of second Now that we have a solid sense of the infrastructure components, we can shift our focus to best practices and design patterns on pipeline development.  We recommend the staging/intermediate/mart approach which is analogous to the medallion architecture bronze/silver/gold approach that’s recommended by Databricks. Let’s dissect each stage further. -dbt has guidelines on how you can [structure your dbt project](/guides/best-practices/how-we-structure/1-guide-overview) which you can learn more about. +dbt has guidelines on how you can [structure your dbt project](/best-practices/how-we-structure/1-guide-overview) which you can learn more about. ### Bronze / Staging Layer: @@ -49,7 +49,7 @@ The main benefit of leveraging `COPY INTO` is that it's an incremental operation Now that we have our bronze table taken care of, we can proceed with the silver layer. -For cost and performance reasons, many customers opt to implement an incremental pipeline approach. The main benefit with this approach is that you process a lot less data when you insert new records into the silver layer, rather than re-create the table each time with all the data from the bronze layer. However it should be noted that by default, [dbt recommends using views and tables](/guides/best-practices/materializations/1-guide-overview) to start out with and then moving to incremental as you require more performance optimization. +For cost and performance reasons, many customers opt to implement an incremental pipeline approach. The main benefit with this approach is that you process a lot less data when you insert new records into the silver layer, rather than re-create the table each time with all the data from the bronze layer. However it should be noted that by default, [dbt recommends using views and tables](/best-practices/materializations/1-guide-overview) to start out with and then moving to incremental as you require more performance optimization. dbt has an [incremental model materialization](/reference/resource-configs/spark-configs#the-merge-strategy) to facilitate this framework. How this works at a high level is that Databricks will create a temp view with a snapshot of data and then merge that snapshot into the silver table. You can customize the time range of the snapshot to suit your specific use case by configuring the `where` conditional in your `is_incremental` logic. The most straightforward implementation is to merge data using a timestamp that’s later than the current max timestamp in the silver table, but there are certainly valid use cases for increasing the temporal range of the source snapshot. diff --git a/website/docs/guides/dbt-ecosystem/databricks-guides/productionizing-your-dbt-databricks-project.md b/website/docs/guides/dbt-ecosystem/databricks-guides/productionizing-your-dbt-databricks-project.md index 35c5d852d74..9100ca8c3ce 100644 --- a/website/docs/guides/dbt-ecosystem/databricks-guides/productionizing-your-dbt-databricks-project.md +++ b/website/docs/guides/dbt-ecosystem/databricks-guides/productionizing-your-dbt-databricks-project.md @@ -122,7 +122,7 @@ The five key steps for troubleshooting dbt Cloud issues are: 3. Isolate the problem by running one model at a time in the IDE or undoing the code that caused the issue. 4. Check for problems in compiled files and logs. -Consult the [Debugging errors documentation](/guides/best-practices/debugging-errors) for a comprehensive list of error types and diagnostic methods. +Consult the [Debugging errors documentation](/best-practices/debugging-errors) for a comprehensive list of error types and diagnostic methods. To troubleshoot issues with a dbt Cloud job, navigate to the "Deploy > Run History" tab in your dbt Cloud project and select the failed run. Then, expand the run steps to view [console and debug logs](/docs/deploy/run-visibility#access-logs) to review the detailed log messages. To obtain additional information, open the Artifacts tab and download the compiled files associated with the run. diff --git a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/7-folder-structure.md b/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/7-folder-structure.md index a47a3b54d48..c4e3e94b03a 100644 --- a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/7-folder-structure.md +++ b/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/7-folder-structure.md @@ -3,7 +3,7 @@ title: "Folder structure" id: "7-folder-structure" description: "Folder structure" --- -dbt Labs has developed a [project structure guide](/guides/best-practices/how-we-structure/1-guide-overview/) that contains a number of recommendations for how to build the folder structure for your project. Do check out that guide if you want to learn more. Right now we are going to create some folders to organize our files: +dbt Labs has developed a [project structure guide](/best-practices/how-we-structure/1-guide-overview/) that contains a number of recommendations for how to build the folder structure for your project. Do check out that guide if you want to learn more. Right now we are going to create some folders to organize our files: - Sources — This is our Formula 1 dataset and it will be defined in a source YAML file. - Staging models — These models have a 1:1 with their source table. @@ -24,4 +24,4 @@ dbt Labs has developed a [project structure guide](/guides/best-practices/how-we -Remember you can always reference the entire project in [GitHub](https://github.com/dbt-labs/python-snowpark-formula1/tree/python-formula1) to view the complete folder and file strucutre. \ No newline at end of file +Remember you can always reference the entire project in [GitHub](https://github.com/dbt-labs/python-snowpark-formula1/tree/python-formula1) to view the complete folder and file strucutre. diff --git a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/8-sources-and-staging.md b/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/8-sources-and-staging.md index 22e49c8a30b..c56284f5168 100644 --- a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/8-sources-and-staging.md +++ b/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/8-sources-and-staging.md @@ -10,7 +10,7 @@ Sources allow us to create a dependency between our source database object and o Staging models are the base of our project, where we bring all the individual components we're going to use to build our more complex and useful models into the project. -Since we want to focus on dbt and Python in this workshop, check out our [sources](/docs/build/sources) and [staging](/guides/best-practices/how-we-structure/2-staging) docs if you want to learn more (or take our [dbt Fundamentals](https://courses.getdbt.com/collections) course which covers all of our core functionality). +Since we want to focus on dbt and Python in this workshop, check out our [sources](/docs/build/sources) and [staging](/best-practices/how-we-structure/2-staging) docs if you want to learn more (or take our [dbt Fundamentals](https://courses.getdbt.com/collections) course which covers all of our core functionality). ## Create sources diff --git a/website/docs/guides/legacy/debugging-schema-names.md b/website/docs/guides/debugging-schema-names.md similarity index 84% rename from website/docs/guides/legacy/debugging-schema-names.md rename to website/docs/guides/debugging-schema-names.md index dee2bc57293..1778d25d0b4 100644 --- a/website/docs/guides/legacy/debugging-schema-names.md +++ b/website/docs/guides/debugging-schema-names.md @@ -1,7 +1,20 @@ --- title: Debugging schema names +id: debugging-schema-names +description: Learn how to debug schema names when models build under unexpected schemas +displayText: Debugging schema names +hoverSnippet: Learn how to debug schema names dbt. +time_to_complete: '45 minutes' +platform: 'dbt-core' +icon: 'guides' +hide_table_of_contents: true +tags: ['schema names', 'dbt Core', 'legacy'] +level: 'Advanced' +recently_updated: true --- +## Introduction + If a model uses the [`schema` config](/reference/resource-properties/schema) but builds under an unexpected schema, here are some steps for debugging the issue. :::info @@ -12,10 +25,10 @@ You can also follow along via this video: -### 1. Search for a macro named `generate_schema_name` +## Search for a macro named `generate_schema_name` Do a file search to check if you have a macro named `generate_schema_name` in the `macros` directory of your project. -#### I do not have a macro named `generate_schema_name` in my project +### I do not have a macro named `generate_schema_name` in my project This means that you are using dbt's default implementation of the macro, as defined [here](https://github.com/dbt-labs/dbt-core/blob/main/core/dbt/include/global_project/macros/get_custom_name/get_custom_schema.sql#L47C1-L60) ```sql @@ -37,7 +50,7 @@ This means that you are using dbt's default implementation of the macro, as defi Note that this logic is designed so that two dbt users won't accidentally overwrite each other's work by writing to the same schema. -#### I have a `generate_schema_name` macro in my project that calls another macro +### I have a `generate_schema_name` macro in my project that calls another macro If your `generate_schema_name` macro looks like so: ```sql {% macro generate_schema_name(custom_schema_name, node) -%} @@ -61,22 +74,22 @@ Your project is switching out the `generate_schema_name` macro for another macro {%- endmacro %} ``` -#### I have a `generate_schema_name` macro with custom logic +### I have a `generate_schema_name` macro with custom logic If this is the case — it might be a great idea to reach out to the person who added this macro to your project, as they will have context here — you can use [GitHub's blame feature](https://docs.github.com/en/free-pro-team@latest/github/managing-files-in-a-repository/tracking-changes-in-a-file) to do this. In all cases take a moment to read through the Jinja to see if you can follow the logic. -### 2. Confirm your `schema` config +## Confirm your `schema` config Check if you are using the [`schema` config](/reference/resource-properties/schema) in your model, either via a `{{ config() }}` block, or from `dbt_project.yml`. In both cases, dbt passes this value as the `custom_schema_name` parameter of the `generate_schema_name` macro. -### 3. Confirm your target values +## Confirm your target values Most `generate_schema_name` macros incorporate logic from the [`target` variable](/reference/dbt-jinja-functions/target), in particular `target.schema` and `target.name`. Use the docs [here](/reference/dbt-jinja-functions/target) to help you find the values of each key in this dictionary. -### 4. Put the two together +## Put the two together Now, re-read through the logic of your `generate_schema_name` macro, and mentally plug in your `customer_schema_name` and `target` values. @@ -86,7 +99,7 @@ You should find that the schema dbt is constructing for your model matches the o Note that snapshots do not follow this behavior, check out the docs on [target_schema](/reference/resource-configs/target_schema) instead. ::: -### 5. Adjust as necessary +## Adjust as necessary Now that you understand how a model's schema is being generated, you can adjust as necessary: - You can adjust the logic in your `generate_schema_name` macro (or add this macro to your project if you don't yet have one and adjust from there) diff --git a/website/docs/guides/legacy/creating-date-partitioned-tables.md b/website/docs/guides/legacy/creating-date-partitioned-tables.md deleted file mode 100644 index 8c461dbe4a8..00000000000 --- a/website/docs/guides/legacy/creating-date-partitioned-tables.md +++ /dev/null @@ -1,117 +0,0 @@ ---- -title: "BigQuery: Creating date-partitioned tables" -id: "creating-date-partitioned-tables" ---- - - -:::caution Deprecated - -The functionality described below was introduced in dbt Core v0.10 (March 2018). In v1.0 (December 2021), it was deprecated in favor of [column-based partitioning](/reference/resource-configs/bigquery-configs#partition-clause) and [incremental modeling](/docs/build/incremental-models). - -::: - -dbt supports the creation of [date partitioned tables](https://cloud.google.com/bigquery/docs/partitioned-tables) in BigQuery. - -To configure a dbt model as a date partitioned , use the `materialized='table'` model configuration in conjunction with a list of `partitions`. dbt will execute your model query once for each specified partition. For example: - - - -```sql -{{ - config( - materialized='table', - partitions=[20180101, 20180102], - verbose=True - ) -}} - -/* - -dbt will interpolate each `partition` wherever it finds [DBT__PARTITION_DATE] -in your model code. This model will create a single table with two partitions: - 1. 20180101 - 2. 20180102 - -These partitions will be created by running the following query against -each of the following date-sharded tables: - - 1. `snowplow`.`events_20180101` - 2. `snowplow`.`events_20180102` - -*/ - -select * -from `snowplow`.`events_[DBT__PARTITION_DATE]` -``` - - - -To make this model more dynamic, we can use the `dbt.partition_range` macro to generate a list of 8-digit dates in a specified range. Further, dbt provides a handy macro, `date_sharded_table`, for getting a date-sharded by its prefix for a given date. Together, this looks like: - - - -```sql -{{ - config( - materialized='table', - partitions=dbt.partition_range('20180101, 20180201'), - verbose=True - ) -}} - --- This model creates a date-partitioned table. There will be one --- partition for each day between 20180101 and 20180201, inclusive. --- The `date_sharded_table` macro below is sugar around [DBT__PARTITION_DATE] - -select * -from `snowplow`.`{{ date_sharded_table('events_') }}` -``` - - - -Finally, it's frequently desirable to only update a date partitioned table for the last day of received data. This can be implemented using the above configurations in conjunction with a clever macro and some [command line variables](/docs/build/project-variables). - -First, the macro: - - - -```sql -{% macro yesterday() %} - - {% set today = modules.datetime.date.today() %} - {% set one_day = modules.datetime.timedelta(days=1) %} - {% set yesterday = (today - one_day) %} - - {{ return(yesterday.strftime("%Y%m%d")) }} - -{% endmacro %} -``` - - - -Next, use it in the model: - - - -```sql -{{ - config( - materialized='table', - partitions=dbt.partition_range(var('dates', default=yesterday())), - verbose=True - ) -}} - -select * -from `snowplow`.`{{ date_sharded_table('events_') }}` -``` - - - -If a `dates` variable is provided (eg. on the command line with `--vars`), then dbt will create the partitions for that date range. Otherwise, dbt will create a partition for `yesterday`, overwriting it if it already exists. - -Here's an example of running this model for the first 3 days of 2018 as a part of a backfill: - -``` -dbt run --select partitioned_yesterday --vars 'dates: "20180101, 20180103"' -``` diff --git a/website/docs/guides/legacy/videos.md b/website/docs/guides/legacy/videos.md deleted file mode 100644 index 863029ff6d9..00000000000 --- a/website/docs/guides/legacy/videos.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "Videos 🎥" -id: "videos" ---- - -Check out some cool videos about using and deploying dbt! - -## dbt tutorial (February, 2017) - - - -## dbt docs demo with GitLab (September, 2018) - diff --git a/website/docs/guides/migration/tools/migrating-from-stored-procedures/1-migrating-from-stored-procedures.md b/website/docs/guides/migration/tools/migrating-from-stored-procedures/1-migrating-from-stored-procedures.md index aae8b373b2c..c16df789939 100644 --- a/website/docs/guides/migration/tools/migrating-from-stored-procedures/1-migrating-from-stored-procedures.md +++ b/website/docs/guides/migration/tools/migrating-from-stored-procedures/1-migrating-from-stored-procedures.md @@ -13,7 +13,7 @@ If your supports `SHOW CREATE TABLE`, that can be a As for ensuring that you have the right column types, since models materialized by dbt generally use `CREATE TABLE AS SELECT` or `CREATE VIEW AS SELECT` as the driver for object creation, tables can end up with unintended column types if the queries aren’t explicit. For example, if you care about `INT` versus `DECIMAL` versus `NUMERIC`, it’s generally going to be best to be explicit. The good news is that this is easy with dbt: you just cast the column to the type you intend. -We also generally recommend that column renaming and type casting happen as close to the source tables as possible, typically in a layer of staging transformations, which helps ensure that future dbt modelers will know where to look for those transformations! See [How we structure our dbt projects](/guides/best-practices/how-we-structure/1-guide-overview) for more guidance on overall project structure. +We also generally recommend that column renaming and type casting happen as close to the source tables as possible, typically in a layer of staging transformations, which helps ensure that future dbt modelers will know where to look for those transformations! See [How we structure our dbt projects](/best-practices/how-we-structure/1-guide-overview) for more guidance on overall project structure. ### Operations we need to map diff --git a/website/docs/guides/migration/tools/refactoring-legacy-sql.md b/website/docs/guides/migration/tools/refactoring-legacy-sql.md index 7026e4e14aa..0c03942889c 100644 --- a/website/docs/guides/migration/tools/refactoring-legacy-sql.md +++ b/website/docs/guides/migration/tools/refactoring-legacy-sql.md @@ -206,7 +206,7 @@ This allows anyone after us to easily step through the CTEs when troubleshooting ## Port CTEs to individual data models Rather than keep our SQL code confined to one long SQL file, we'll now start splitting it into modular + reusable [dbt data models](https://docs.getdbt.com/docs/build/models). -Internally at dbt Labs, we follow roughly this [data modeling technique](https://www.getdbt.com/analytics-engineering/modular-data-modeling-technique/) and we [structure our dbt projects](https://docs.getdbt.com/guides/best-practices/how-we-structure/1-guide-overview) accordingly. +Internally at dbt Labs, we follow roughly this [data modeling technique](https://www.getdbt.com/analytics-engineering/modular-data-modeling-technique/) and we [structure our dbt projects](https://docs.getdbt.com/best-practices/how-we-structure/1-guide-overview) accordingly. We'll follow those structures in this walkthrough, but your team's conventions may of course differ from ours. diff --git a/website/docs/guides/migration/versions/08-upgrading-to-v1.0.md b/website/docs/guides/migration/versions/08-upgrading-to-v1.0.md index 0ef9b8029d6..669262dcafb 100644 --- a/website/docs/guides/migration/versions/08-upgrading-to-v1.0.md +++ b/website/docs/guides/migration/versions/08-upgrading-to-v1.0.md @@ -64,9 +64,9 @@ Several under-the-hood changes from past minor versions, tagged with deprecation ## New features and changed documentation - Add [metrics](/docs/build/metrics), a new node type -- [Generic tests](/guides/best-practices/writing-custom-generic-tests) can be defined in `tests/generic` (new), in addition to `macros/` (as before) +- [Generic tests](/best-practices/writing-custom-generic-tests) can be defined in `tests/generic` (new), in addition to `macros/` (as before) - [Parsing](/reference/parsing): partial parsing and static parsing have been turned on by default. - [Global configs](/reference/global-configs/about-global-configs) have been standardized. Related updates to [global CLI flags](/reference/global-cli-flags) and [`profiles.yml`](/docs/core/connect-data-platform/profiles.yml). - [The `init` command](/reference/commands/init) has a whole new look and feel. It's no longer just for first-time users. -- Add `result:` subselectors for smarter reruns when dbt models have errors and tests fail. See examples: [Pro-tips for Workflows](/best-practices/best-practices#pro-tips-for-workflows) +- Add `result:` subselectors for smarter reruns when dbt models have errors and tests fail. See examples: [Pro-tips for Workflows](/best-practices/best-practice-workflows#pro-tips-for-workflows) - Secret-prefixed [env vars](/reference/dbt-jinja-functions/env_var) are now allowed only in `profiles.yml` + `packages.yml` diff --git a/website/docs/guides/migration/versions/10-upgrading-to-v0.20.md b/website/docs/guides/migration/versions/10-upgrading-to-v0.20.md index 8b33bfa3879..8bd20faaadf 100644 --- a/website/docs/guides/migration/versions/10-upgrading-to-v0.20.md +++ b/website/docs/guides/migration/versions/10-upgrading-to-v0.20.md @@ -28,7 +28,7 @@ dbt Core v0.20 has reached the end of critical support. No new patch versions wi - [Test Configs](/reference/test-configs) - [Test properties](/reference/resource-properties/tests) - [Node Selection](/reference/node-selection/syntax) (with updated [test selection examples](/reference/node-selection/test-selection-examples)) -- [Writing custom generic tests](/guides/best-practices/writing-custom-generic-tests) +- [Writing custom generic tests](/best-practices/writing-custom-generic-tests) ### Elsewhere in Core - [Parsing](/reference/parsing): rework of partial parsing, introduction of experimental parser diff --git a/website/docs/guides/migration/versions/11-Older versions/upgrading-to-0-15-0.md b/website/docs/guides/migration/versions/11-Older versions/upgrading-to-0-15-0.md index 02ab297c07a..693c80ac73d 100644 --- a/website/docs/guides/migration/versions/11-Older versions/upgrading-to-0-15-0.md +++ b/website/docs/guides/migration/versions/11-Older versions/upgrading-to-0-15-0.md @@ -20,7 +20,7 @@ expect this field will now return errors. See the latest ### Custom materializations -All materializations must now [manage dbt's Relation cache](/guides/advanced/creating-new-materializations#update-the-relation-cache). +All materializations must now [manage dbt's Relation cache](/guides/creating-new-materializations#update-the-relation-cache). ### dbt Server diff --git a/website/docs/guides/orchestration/set-up-ci/2-quick-setup.md b/website/docs/guides/orchestration/set-up-ci/2-quick-setup.md index 9b6d46fe2b2..0dcfba7eb06 100644 --- a/website/docs/guides/orchestration/set-up-ci/2-quick-setup.md +++ b/website/docs/guides/orchestration/set-up-ci/2-quick-setup.md @@ -7,7 +7,7 @@ description: Find issues before they are deployed to production with dbt Cloud's In this guide, we're going to add a **CI environment**, where proposed changes can be validated in the context of the entire project without impacting production systems. We will use a single set of deployment credentials (like the Prod environment), but models are built in a separate location to avoid impacting others (like the Dev environment). Your git flow will look like this: - + ## Prerequisites diff --git a/website/docs/guides/orchestration/set-up-ci/4-lint-on-push.md b/website/docs/guides/orchestration/set-up-ci/4-lint-on-push.md index 1932ffe1019..bc080922ab5 100644 --- a/website/docs/guides/orchestration/set-up-ci/4-lint-on-push.md +++ b/website/docs/guides/orchestration/set-up-ci/4-lint-on-push.md @@ -6,7 +6,7 @@ description: Enforce your organization's SQL style guide with by running SQLFluf By [linting](/docs/cloud/dbt-cloud-ide/lint-format#lint) your project during CI, you can ensure that code styling standards are consistently enforced, without spending human time nitpicking comma placement. -The steps below create an action/pipeline which uses [SQLFluff](https://docs.sqlfluff.com/en/stable/) to scan your code and look for linting errors. If you don't already have SQLFluff rules defined, check out [our recommended config file](/guides/best-practices/how-we-style/2-how-we-style-our-sql). +The steps below create an action/pipeline which uses [SQLFluff](https://docs.sqlfluff.com/en/stable/) to scan your code and look for linting errors. If you don't already have SQLFluff rules defined, check out [our recommended config file](/best-practices/how-we-style/2-how-we-style-our-sql). ### 1. Create a YAML file to define your pipeline diff --git a/website/docs/guides/orchestration/set-up-ci/5-multiple-checks.md b/website/docs/guides/orchestration/set-up-ci/5-multiple-checks.md index 4bfe2d936d4..2c48e453c2c 100644 --- a/website/docs/guides/orchestration/set-up-ci/5-multiple-checks.md +++ b/website/docs/guides/orchestration/set-up-ci/5-multiple-checks.md @@ -15,7 +15,7 @@ The team at Sunrun maintained a SOX-compliant deployment in dbt while reducing t In this section, we will add a new **QA** environment. New features will branch off from and be merged back into the associated `qa` branch, and a member of your team (the "Release Manager") will create a PR against `main` to be validated in the CI environment before going live. The git flow will look like this: - + ## Prerequisites diff --git a/website/docs/reference/dbt-jinja-functions/run_query.md b/website/docs/reference/dbt-jinja-functions/run_query.md index cdd65a7b4dc..87970e024ed 100644 --- a/website/docs/reference/dbt-jinja-functions/run_query.md +++ b/website/docs/reference/dbt-jinja-functions/run_query.md @@ -15,7 +15,7 @@ Returns a [Table](https://agate.readthedocs.io/page/api/table.html) object with **Note:** The `run_query` macro will not begin a transaction automatically - if you wish to run your query inside of a transaction, please use `begin` and `commit ` statements as appropriate. :::info Using run_query for the first time? -Check out the section of the Getting Started guide on [using Jinja](/guides/advanced/using-jinja#dynamically-retrieve-the-list-of-payment-methods) for an example of working with the results of the `run_query` macro! +Check out the section of the Getting Started guide on [using Jinja](/guides/using-jinja#dynamically-retrieve-the-list-of-payment-methods) for an example of working with the results of the `run_query` macro! ::: **Example Usage:** diff --git a/website/docs/reference/events-logging.md b/website/docs/reference/events-logging.md index dec1dafcb8e..94b865fad0d 100644 --- a/website/docs/reference/events-logging.md +++ b/website/docs/reference/events-logging.md @@ -4,7 +4,7 @@ title: "Events and logs" As dbt runs, it generates events. The most common way to see those events is as log messages, written in real time to two places: - The command line terminal (`stdout`), to provide interactive feedback while running dbt. -- The debug log file (`logs/dbt.log`), to enable detailed [debugging of errors](/guides/best-practices/debugging-errors) when they occur. The text-formatted log messages in this file include all `DEBUG`-level events, as well as contextual information, such as log level and thread name. The location of this file can be configured via [the `log_path` config](/reference/project-configs/log-path). +- The debug log file (`logs/dbt.log`), to enable detailed [debugging of errors](/best-practices/debugging-errors) when they occur. The text-formatted log messages in this file include all `DEBUG`-level events, as well as contextual information, such as log level and thread name. The location of this file can be configured via [the `log_path` config](/reference/project-configs/log-path). diff --git a/website/docs/reference/node-selection/syntax.md b/website/docs/reference/node-selection/syntax.md index 34085d339e6..d0ea4a9acd8 100644 --- a/website/docs/reference/node-selection/syntax.md +++ b/website/docs/reference/node-selection/syntax.md @@ -96,7 +96,7 @@ by comparing code in the current project against the state manifest. - [Deferring](/reference/node-selection/defer) to another environment, whereby dbt can identify upstream, unselected resources that don't exist in your current environment and instead "defer" their references to the environment provided by the state manifest. - The [`dbt clone` command](/reference/commands/clone), whereby dbt can clone nodes based on their location in the manifest provided to the `--state` flag. -Together, the `state:` selector and deferral enable ["slim CI"](/best-practices/best-practices#run-only-modified-models-to-test-changes-slim-ci). We expect to add more features in future releases that can leverage artifacts passed to the `--state` flag. +Together, the `state:` selector and deferral enable ["slim CI"](/best-practices/best-practice-workflows#run-only-modified-models-to-test-changes-slim-ci). We expect to add more features in future releases that can leverage artifacts passed to the `--state` flag. ### Establishing state @@ -190,7 +190,7 @@ dbt build --select "source_status:fresher+" ``` -For more example commands, refer to [Pro-tips for workflows](/best-practices/best-practices.md#pro-tips-for-workflows). +For more example commands, refer to [Pro-tips for workflows](/best-practices/best-practice-workflows#pro-tips-for-workflows). ### The "source_status" status diff --git a/website/docs/reference/resource-configs/contract.md b/website/docs/reference/resource-configs/contract.md index 59cc511890b..ccc10099a12 100644 --- a/website/docs/reference/resource-configs/contract.md +++ b/website/docs/reference/resource-configs/contract.md @@ -48,7 +48,7 @@ models: -When dbt compares data types, it will not compare granular details such as size, precision, or scale. We don't think you should sweat the difference between `varchar(256)` and `varchar(257)`, because it doesn't really affect the experience of downstream queriers. You can accomplish a more-precise assertion by [writing or using a custom test](/guides/best-practices/writing-custom-generic-tests). +When dbt compares data types, it will not compare granular details such as size, precision, or scale. We don't think you should sweat the difference between `varchar(256)` and `varchar(257)`, because it doesn't really affect the experience of downstream queriers. You can accomplish a more-precise assertion by [writing or using a custom test](/best-practices/writing-custom-generic-tests). Note that you need to specify a varchar size or numeric scale, otherwise dbt relies on default values. For example, if a `numeric` type defaults to a precision of 38 and a scale of 0, then the numeric column stores 0 digits to the right of the decimal (it only stores whole numbers), which might cause it to fail contract enforcement. To avoid this implicit coercion, specify your `data_type` with a nonzero scale, like `numeric(38, 6)`. dbt Core 1.7 and higher provides a warning if you don't specify precision and scale when providing a numeric data type. diff --git a/website/docs/reference/resource-properties/tests.md b/website/docs/reference/resource-properties/tests.md index 6e2c02c6bc5..0fe86ccc57d 100644 --- a/website/docs/reference/resource-properties/tests.md +++ b/website/docs/reference/resource-properties/tests.md @@ -298,7 +298,7 @@ models: -Check out the guide on writing a [custom generic test](/guides/best-practices/writing-custom-generic-tests) for more information. +Check out the guide on writing a [custom generic test](/best-practices/writing-custom-generic-tests) for more information. ### Custom test name diff --git a/website/docs/sql-reference/aggregate-functions/sql-array-agg.md b/website/docs/sql-reference/aggregate-functions/sql-array-agg.md index 430be4b4316..9f4af7ca1fc 100644 --- a/website/docs/sql-reference/aggregate-functions/sql-array-agg.md +++ b/website/docs/sql-reference/aggregate-functions/sql-array-agg.md @@ -59,4 +59,4 @@ Looking at the query results—this makes sense! We’d expect newer orders to l There are definitely too many use cases to list out for using the ARRAY_AGG function in your dbt models, but it’s very likely that ARRAY_AGG is used pretty downstream in your since you likely don’t want your data so bundled up earlier in your DAG to improve modularity and dryness. A few downstream use cases for ARRAY_AGG: - In [`export_` models](https://www.getdbt.com/open-source-data-culture/reverse-etl-playbook) that are used to send data to platforms using a tool to pair down multiple rows into a single row. Some downstream platforms, for example, require certain values that we’d usually keep as separate rows to be one singular row per customer or user. ARRAY_AGG is handy to bring multiple column values together by a singular id, such as creating an array of all items a user has ever purchased and sending that array downstream to an email platform to create a custom email campaign. -- Similar to export models, you may see ARRAY_AGG used in [mart tables](https://docs.getdbt.com/guides/best-practices/how-we-structure/4-marts) to create final aggregate arrays per a singular dimension; performance concerns of ARRAY_AGG in these likely larger tables can potentially be bypassed with use of [incremental models in dbt](https://docs.getdbt.com/docs/build/incremental-models). +- Similar to export models, you may see ARRAY_AGG used in [mart tables](https://docs.getdbt.com/best-practices/how-we-structure/4-marts) to create final aggregate arrays per a singular dimension; performance concerns of ARRAY_AGG in these likely larger tables can potentially be bypassed with use of [incremental models in dbt](https://docs.getdbt.com/docs/build/incremental-models). diff --git a/website/docs/sql-reference/aggregate-functions/sql-avg.md b/website/docs/sql-reference/aggregate-functions/sql-avg.md index d7d2fccc3c4..afb766f12e2 100644 --- a/website/docs/sql-reference/aggregate-functions/sql-avg.md +++ b/website/docs/sql-reference/aggregate-functions/sql-avg.md @@ -48,7 +48,7 @@ Snowflake, Databricks, Google BigQuery, and Amazon Redshift all support the abil ## AVG function use cases We most commonly see the AVG function used in data work to calculate: -- The average of key metrics (ex. Average CSAT, average lead time, average order amount) in downstream [fact or dim models](https://docs.getdbt.com/guides/best-practices/how-we-structure/4-marts) +- The average of key metrics (ex. Average CSAT, average lead time, average order amount) in downstream [fact or dim models](https://docs.getdbt.com/best-practices/how-we-structure/4-marts) - Rolling or moving averages (ex. 7-day, 30-day averages for key metrics) using window functions - Averages in [dbt metrics](https://docs.getdbt.com/docs/build/metrics) diff --git a/website/docs/sql-reference/aggregate-functions/sql-round.md b/website/docs/sql-reference/aggregate-functions/sql-round.md index 053a2ebdd8e..7652c881789 100644 --- a/website/docs/sql-reference/aggregate-functions/sql-round.md +++ b/website/docs/sql-reference/aggregate-functions/sql-round.md @@ -57,7 +57,7 @@ Google BigQuery, Amazon Redshift, Snowflake, and Databricks all support the abil ## ROUND function use cases -If you find yourself rounding numeric data, either in data models or ad-hoc analyses, you’re probably rounding to improve the readability and usability of your data using downstream [intermediate](https://docs.getdbt.com/guides/best-practices/how-we-structure/3-intermediate) or [mart models](https://docs.getdbt.com/guides/best-practices/how-we-structure/4-marts). Specifically, you’ll likely use the ROUND function to: +If you find yourself rounding numeric data, either in data models or ad-hoc analyses, you’re probably rounding to improve the readability and usability of your data using downstream [intermediate](https://docs.getdbt.com/best-practices/how-we-structure/3-intermediate) or [mart models](https://docs.getdbt.com/best-practices/how-we-structure/4-marts). Specifically, you’ll likely use the ROUND function to: - Make numeric calculations using division or averages a little cleaner and easier to understand - Create concrete buckets of data for a cleaner distribution of values during ad-hoc analysis diff --git a/website/docs/sql-reference/clauses/sql-limit.md b/website/docs/sql-reference/clauses/sql-limit.md index d17affdef45..a2c49866592 100644 --- a/website/docs/sql-reference/clauses/sql-limit.md +++ b/website/docs/sql-reference/clauses/sql-limit.md @@ -51,7 +51,7 @@ This simple query using the [Jaffle Shop’s](https://github.com/dbt-labs/jaffle After ensuring that this is the result you want from this query, you can omit the LIMIT in your final data model. :::tip Save money and time by limiting data in development -You could limit your data used for development by manually adding a LIMIT statement, a WHERE clause to your query, or by using a [dbt macro to automatically limit data based](https://docs.getdbt.com/best-practices/best-practices#limit-the-data-processed-when-in-development) on your development environment to help reduce your warehouse usage during dev periods. +You could limit your data used for development by manually adding a LIMIT statement, a WHERE clause to your query, or by using a [dbt macro to automatically limit data based](https://docs.getdbt.com/best-practices/best-practice-workflows#limit-the-data-processed-when-in-development) on your development environment to help reduce your warehouse usage during dev periods. ::: ## LIMIT syntax in Snowflake, Databricks, BigQuery, and Redshift diff --git a/website/docs/sql-reference/clauses/sql-order-by.md b/website/docs/sql-reference/clauses/sql-order-by.md index 660794adc14..39337de1e48 100644 --- a/website/docs/sql-reference/clauses/sql-order-by.md +++ b/website/docs/sql-reference/clauses/sql-order-by.md @@ -57,7 +57,7 @@ Since the ORDER BY clause is a SQL fundamental, data warehouses, including Snowf ## ORDER BY use cases We most commonly see the ORDER BY clause used in data work to: -- Analyze data for both initial exploration of raw data sources and ad hoc querying of [mart datasets](https://docs.getdbt.com/guides/best-practices/how-we-structure/4-marts) +- Analyze data for both initial exploration of raw data sources and ad hoc querying of [mart datasets](https://docs.getdbt.com/best-practices/how-we-structure/4-marts) - Identify the top 5/10/50/100 of a dataset when used in pair with a [LIMIT](/sql-reference/limit) - (For Snowflake) Optimize the performance of large incremental models that use both a `cluster_by` [configuration](https://docs.getdbt.com/reference/resource-configs/snowflake-configs#using-cluster_by) and ORDER BY statement - Control the ordering of window function partitions (ex. `row_number() over (partition by user_id order by updated_at)`) diff --git a/website/docs/sql-reference/joins/sql-inner-join.md b/website/docs/sql-reference/joins/sql-inner-join.md index 0cf8a3894bd..e1c2d6151c8 100644 --- a/website/docs/sql-reference/joins/sql-inner-join.md +++ b/website/docs/sql-reference/joins/sql-inner-join.md @@ -66,5 +66,5 @@ Because there’s no `user_id` = 4 in Table A and no `user_id` = 2 in Table B, r ## SQL inner join use cases -There are probably countless scenarios where you’d want to inner join multiple tables together—perhaps you have some really nicely structured tables with the exact same primary keys that should really just be one larger, wider table or you’re joining two tables together don’t want any null or missing column values if you used a left or right join—it’s all pretty dependent on your source data and end use cases. Where you will not (and should not) see inner joins is in [staging models](https://docs.getdbt.com/guides/best-practices/how-we-structure/2-staging) that are used to clean and prep raw source data for analytics uses. Any joins in your dbt projects should happen further downstream in [intermediate](https://docs.getdbt.com/guides/best-practices/how-we-structure/3-intermediate) and [mart models](https://docs.getdbt.com/guides/best-practices/how-we-structure/4-marts) to improve modularity and DAG cleanliness. +There are probably countless scenarios where you’d want to inner join multiple tables together—perhaps you have some really nicely structured tables with the exact same primary keys that should really just be one larger, wider table or you’re joining two tables together don’t want any null or missing column values if you used a left or right join—it’s all pretty dependent on your source data and end use cases. Where you will not (and should not) see inner joins is in [staging models](https://docs.getdbt.com/best-practices/how-we-structure/2-staging) that are used to clean and prep raw source data for analytics uses. Any joins in your dbt projects should happen further downstream in [intermediate](https://docs.getdbt.com/best-practices/how-we-structure/3-intermediate) and [mart models](https://docs.getdbt.com/best-practices/how-we-structure/4-marts) to improve modularity and DAG cleanliness. diff --git a/website/docs/sql-reference/joins/sql-left-join.md b/website/docs/sql-reference/joins/sql-left-join.md index 841edc41cdd..24fbb2bfa0c 100644 --- a/website/docs/sql-reference/joins/sql-left-join.md +++ b/website/docs/sql-reference/joins/sql-left-join.md @@ -73,4 +73,4 @@ Left joins are a fundamental in data modeling and analytics engineering work—t Something to note if you use left joins: if there are multiple records for an individual key in the left join database object, be aware that duplicates can potentially be introduced in the final query result. This is where dbt tests, such as testing for uniqueness and [equal row count](https://github.com/dbt-labs/dbt-utils#equal_rowcount-source) across upstream source tables and downstream child models, can help you identify faulty data modeling logic and improve data quality. ::: -Where you will not (and should not) see left joins is in [staging models](https://docs.getdbt.com/guides/best-practices/how-we-structure/2-staging) that are used to clean and prep raw source data for analytics uses. Any joins in your dbt projects should happen further downstream in [intermediate](https://docs.getdbt.com/guides/best-practices/how-we-structure/3-intermediate) and [mart models](https://docs.getdbt.com/guides/best-practices/how-we-structure/4-marts) to improve modularity and cleanliness. \ No newline at end of file +Where you will not (and should not) see left joins is in [staging models](https://docs.getdbt.com/best-practices/how-we-structure/2-staging) that are used to clean and prep raw source data for analytics uses. Any joins in your dbt projects should happen further downstream in [intermediate](https://docs.getdbt.com/best-practices/how-we-structure/3-intermediate) and [mart models](https://docs.getdbt.com/best-practices/how-we-structure/4-marts) to improve modularity and cleanliness. diff --git a/website/docs/sql-reference/joins/sql-self-join.md b/website/docs/sql-reference/joins/sql-self-join.md index 0eef0fcab7c..bb4237319f0 100644 --- a/website/docs/sql-reference/joins/sql-self-join.md +++ b/website/docs/sql-reference/joins/sql-self-join.md @@ -66,6 +66,6 @@ This query utilizing a self join adds the `parent_name` of skus that have non-nu ## SQL self join use cases -Again, self joins are probably rare in your dbt project and will most often be utilized in tables that contain a hierarchical structure, such as consisting of a column which is a foreign key to the primary key of the same table. If you do have use cases for self joins, such as in the example above, you’ll typically want to perform that self join early upstream in your , such as in a [staging](https://docs.getdbt.com/guides/best-practices/how-we-structure/2-staging) or [intermediate](https://docs.getdbt.com/guides/best-practices/how-we-structure/3-intermediate) model; if your raw, unjoined table is going to need to be accessed further downstream sans self join, that self join should happen in a modular intermediate model. +Again, self joins are probably rare in your dbt project and will most often be utilized in tables that contain a hierarchical structure, such as consisting of a column which is a foreign key to the primary key of the same table. If you do have use cases for self joins, such as in the example above, you’ll typically want to perform that self join early upstream in your , such as in a [staging](https://docs.getdbt.com/best-practices/how-we-structure/2-staging) or [intermediate](https://docs.getdbt.com/best-practices/how-we-structure/3-intermediate) model; if your raw, unjoined table is going to need to be accessed further downstream sans self join, that self join should happen in a modular intermediate model. -You can also use self joins to create a cartesian product (aka a cross join) of a table against itself. Again, slim use cases, but still there for you if you need it 😉 \ No newline at end of file +You can also use self joins to create a cartesian product (aka a cross join) of a table against itself. Again, slim use cases, but still there for you if you need it 😉 diff --git a/website/docs/sql-reference/operators/sql-not.md b/website/docs/sql-reference/operators/sql-not.md index e9156cb9720..fcfa7627c0b 100644 --- a/website/docs/sql-reference/operators/sql-not.md +++ b/website/docs/sql-reference/operators/sql-not.md @@ -55,4 +55,4 @@ This simple query using the sample dataset [Jaffle Shop’s](https://github.com/ ## NOT operator example use cases -There are probably many scenarios where you’d want to use the NOT operators in your WHERE clauses or case statements, but we commonly see NOT operators used to remove nulls or boolean-identifed deleted rows in source data in [staging models](https://docs.getdbt.com/guides/best-practices/how-we-structure/2-staging). This removal of unnecessary rows can potentially help the performance of downstream [intermediate](https://docs.getdbt.com/guides/best-practices/how-we-structure/3-intermediate) and [mart models](https://docs.getdbt.com/guides/best-practices/how-we-structure/4-marts). \ No newline at end of file +There are probably many scenarios where you’d want to use the NOT operators in your WHERE clauses or case statements, but we commonly see NOT operators used to remove nulls or boolean-identifed deleted rows in source data in [staging models](https://docs.getdbt.com/best-practices/how-we-structure/2-staging). This removal of unnecessary rows can potentially help the performance of downstream [intermediate](https://docs.getdbt.com/best-practices/how-we-structure/3-intermediate) and [mart models](https://docs.getdbt.com/best-practices/how-we-structure/4-marts). diff --git a/website/docs/sql-reference/other/sql-cast.md b/website/docs/sql-reference/other/sql-cast.md index cf24a12706e..9d41400e825 100644 --- a/website/docs/sql-reference/other/sql-cast.md +++ b/website/docs/sql-reference/other/sql-cast.md @@ -50,7 +50,7 @@ After running this query, the `orders` table will look a little something like t Let’s be clear: the resulting data from this query looks exactly the same as the upstream `orders` model. However, the `order_id` and `customer_id` fields are now strings, meaning you could easily concat different string variables to them. -> Casting columns to their appropriate types typically happens in our dbt project’s [staging models](https://docs.getdbt.com/guides/best-practices/how-we-structure/2-staging). A few reasons for that: data cleanup and standardization, such as aliasing, casting, and lower or upper casing, should ideally happen in staging models to create downstream uniformity and improve downstream performance. +> Casting columns to their appropriate types typically happens in our dbt project’s [staging models](https://docs.getdbt.com/best-practices/how-we-structure/2-staging). A few reasons for that: data cleanup and standardization, such as aliasing, casting, and lower or upper casing, should ideally happen in staging models to create downstream uniformity and improve downstream performance. ## SQL CAST function syntax in Snowflake, Databricks, BigQuery, and Redshift @@ -66,4 +66,4 @@ You know at one point you’re going to need to cast a column to a different dat - tools [defaulting to certain data types](https://airbytehq.github.io/integrations/sources/google-sheets/) - BI tools require certain fields to be specific data types -A key thing to remember when you’re casting data is the user experience in your end BI tool: are business users expecting `customer_id` to be filtered on 1 or '1'? What is more intuitive for them? If one `id` field is an integer, all `id` fields should be integers. Just like all data modeling, consistency and standardization is key when determining when and what to cast. \ No newline at end of file +A key thing to remember when you’re casting data is the user experience in your end BI tool: are business users expecting `customer_id` to be filtered on 1 or '1'? What is more intuitive for them? If one `id` field is an integer, all `id` fields should be integers. Just like all data modeling, consistency and standardization is key when determining when and what to cast. diff --git a/website/docs/sql-reference/other/sql-comments.md b/website/docs/sql-reference/other/sql-comments.md index 811f2b4339e..7fe5e970a85 100644 --- a/website/docs/sql-reference/other/sql-comments.md +++ b/website/docs/sql-reference/other/sql-comments.md @@ -53,7 +53,7 @@ We recommend leveraging inline comments in the following situations: - Explain complex code logic that if you had to scratch your head at, someone else will have to scratch their head at - Explain niche, unique-to-your-business logic -- Separate out field types (ex. Ids, booleans, strings, dates, numerics, and timestamps) in [staging models](https://docs.getdbt.com/guides/best-practices/how-we-structure/2-staging) to create more readable, organized, and formulaic models +- Separate out field types (ex. Ids, booleans, strings, dates, numerics, and timestamps) in [staging models](https://docs.getdbt.com/best-practices/how-we-structure/2-staging) to create more readable, organized, and formulaic models - Clearly label tech debt (`-- [TODO]: TECH DEBT`) in queries or models diff --git a/website/docs/sql-reference/statements/sql-select.md b/website/docs/sql-reference/statements/sql-select.md index 49132524096..0b914d9c1da 100644 --- a/website/docs/sql-reference/statements/sql-select.md +++ b/website/docs/sql-reference/statements/sql-select.md @@ -42,8 +42,8 @@ You may also commonly see queries that `select * from table_name`. The asterisk Leverage [dbt utils’ star macro](/blog/star-sql-love-letter) to be able to both easily select many and specifically exclude certain columns. ::: -In a dbt project, analytics engineers will typically write models that contain multiple CTEs that build to one greater query. For folks that are newer to analytics engineering or dbt, we recommend they check out the [“How we structure our dbt projects” guide](/guides/best-practices/how-we-structure/1-guide-overview) to better understand why analytics folks like modular data modeling and CTEs. +In a dbt project, analytics engineers will typically write models that contain multiple CTEs that build to one greater query. For folks that are newer to analytics engineering or dbt, we recommend they check out the [“How we structure our dbt projects” guide](/best-practices/how-we-structure/1-guide-overview) to better understand why analytics folks like modular data modeling and CTEs. ## SELECT statement syntax in Snowflake, Databricks, BigQuery, and Redshift -While we know the data warehouse players like to have their own slightly different flavors and syntax for SQL, they have conferred together that the SELECT statement is sacred and unchangeable. As a result, writing the actual `select…from` statement across Snowflake, Databricks, Google BigQuery, and Amazon Redshift would look the same. However, the actual SQL manipulation of data within the SELECT statement (ex. adding dates, casting columns) might look slightly different between each data warehouse. \ No newline at end of file +While we know the data warehouse players like to have their own slightly different flavors and syntax for SQL, they have conferred together that the SELECT statement is sacred and unchangeable. As a result, writing the actual `select…from` statement across Snowflake, Databricks, Google BigQuery, and Amazon Redshift would look the same. However, the actual SQL manipulation of data within the SELECT statement (ex. adding dates, casting columns) might look slightly different between each data warehouse. diff --git a/website/docs/sql-reference/string-functions/sql-lower.md b/website/docs/sql-reference/string-functions/sql-lower.md index 8c8622bb77a..7b1a5a2c2b3 100644 --- a/website/docs/sql-reference/string-functions/sql-lower.md +++ b/website/docs/sql-reference/string-functions/sql-lower.md @@ -54,7 +54,7 @@ After running this query, the `customers` table will look a little something lik Now, all characters in the `first_name` and `last_name` columns are lowercase. -> Changing all string columns to lowercase to create uniformity across data sources typically happens in our [dbt project’s staging models](https://docs.getdbt.com/guides/best-practices/how-we-structure/2-staging). There are a few reasons for that: data cleanup and standardization, such as aliasing, casting, and lowercasing, should ideally happen in staging models to create downstream uniformity and improve downstream performance. +> Changing all string columns to lowercase to create uniformity across data sources typically happens in our [dbt project’s staging models](https://docs.getdbt.com/best-practices/how-we-structure/2-staging). There are a few reasons for that: data cleanup and standardization, such as aliasing, casting, and lowercasing, should ideally happen in staging models to create downstream uniformity and improve downstream performance. ## SQL LOWER function syntax in Snowflake, Databricks, BigQuery, and Redshift diff --git a/website/docs/sql-reference/string-functions/sql-trim.md b/website/docs/sql-reference/string-functions/sql-trim.md index ad54a015437..b9555feb630 100644 --- a/website/docs/sql-reference/string-functions/sql-trim.md +++ b/website/docs/sql-reference/string-functions/sql-trim.md @@ -50,4 +50,4 @@ In this query, you’re adding superfluous asterisks to a string using the [CONC ## TRIM function use cases -If string values in your raw data have extra white spaces or miscellaneous characters, you’ll leverage the TRIM (and subset RTRIM AND LTRIM) functions to help you quickly remove them. You’ll likely do this cleanup in [staging models](https://docs.getdbt.com/guides/best-practices/how-we-structure/2-staging), where you’re probably standardizing casing and doing other minor formatting changes to string values, so you can use a clean and consistent format across your downstream models. +If string values in your raw data have extra white spaces or miscellaneous characters, you’ll leverage the TRIM (and subset RTRIM AND LTRIM) functions to help you quickly remove them. You’ll likely do this cleanup in [staging models](https://docs.getdbt.com/best-practices/how-we-structure/2-staging), where you’re probably standardizing casing and doing other minor formatting changes to string values, so you can use a clean and consistent format across your downstream models. diff --git a/website/docs/sql-reference/string-functions/sql-upper.md b/website/docs/sql-reference/string-functions/sql-upper.md index cf7694f8e46..a505537ac5d 100644 --- a/website/docs/sql-reference/string-functions/sql-upper.md +++ b/website/docs/sql-reference/string-functions/sql-upper.md @@ -46,7 +46,7 @@ After running this query, the `customers` table will look a little something lik Now, all characters in the `first_name` are uppercase (and `last_name` are unchanged). -> Changing string columns to uppercase to create uniformity across data sources typically happens in our [dbt project’s staging models](https://docs.getdbt.com/guides/best-practices/how-we-structure/2-staging). There are a few reasons for that: data cleanup and standardization, such as aliasing, casting, and lower or upper casing, should ideally happen in staging models to create downstream uniformity and improve downstream performance. +> Changing string columns to uppercase to create uniformity across data sources typically happens in our [dbt project’s staging models](https://docs.getdbt.com/best-practices/how-we-structure/2-staging). There are a few reasons for that: data cleanup and standardization, such as aliasing, casting, and lower or upper casing, should ideally happen in staging models to create downstream uniformity and improve downstream performance. ## SQL UPPER function syntax in Snowflake, Databricks, BigQuery, and Redshift diff --git a/website/docs/terms/dag.md b/website/docs/terms/dag.md index f4247c785a4..d7ff1c44f49 100644 --- a/website/docs/terms/dag.md +++ b/website/docs/terms/dag.md @@ -65,7 +65,7 @@ See the DAG above? It follows a more traditional approach to data modeling where Instead, there are some key elements that can help you create a more streamlined DAG and [modular data models](https://www.getdbt.com/analytics-engineering/modular-data-modeling-technique/): -- Leveraging [staging, intermediate, and mart layers](https://docs.getdbt.com/guides/best-practices/how-we-structure/1-guide-overview) to create layers of distinction between sources and transformed data +- Leveraging [staging, intermediate, and mart layers](https://docs.getdbt.com/best-practices/how-we-structure/1-guide-overview) to create layers of distinction between sources and transformed data - Abstracting code that’s used across multiple models to its own model - Joining on surrogate keys versus on multiple values @@ -106,6 +106,6 @@ A Directed acyclic graph (DAG) is a visual representation of your data models an Ready to restructure (or create your first) DAG? Check out some of the resources below to better understand data modularity, data lineage, and how dbt helps bring it all together: - [Data modeling techniques for more modularity](https://www.getdbt.com/analytics-engineering/modular-data-modeling-technique/) -- [How we structure our dbt projects](https://docs.getdbt.com/guides/best-practices/how-we-structure/1-guide-overview) +- [How we structure our dbt projects](https://docs.getdbt.com/best-practices/how-we-structure/1-guide-overview) - [How to audit your DAG](https://www.youtube.com/watch?v=5W6VrnHVkCA) - [Refactoring legacy SQL to dbt](/guides/migration/tools/refactoring-legacy-sql) diff --git a/website/docs/terms/data-lineage.md b/website/docs/terms/data-lineage.md index a03687eaba3..d0162c35616 100644 --- a/website/docs/terms/data-lineage.md +++ b/website/docs/terms/data-lineage.md @@ -89,7 +89,7 @@ The biggest challenges around data lineage become more apparent as your data, sy As dbt projects scale with data and organization growth, the number of sources, models, macros, seeds, and [exposures](https://docs.getdbt.com/docs/build/exposures) invariably grow. And with an increasing number of nodes in your DAG, it can become harder to audit your DAG for WET code or inefficiencies. -Working with dbt projects with thousands of models and nodes can feel overwhelming, but remember: your DAG and data lineage are meant to help you, not be your enemy. Tackle DAG audits in chunks, document all models, and [leverage strong structure conventions](https://docs.getdbt.com/guides/best-practices/how-we-structure/1-guide-overview). +Working with dbt projects with thousands of models and nodes can feel overwhelming, but remember: your DAG and data lineage are meant to help you, not be your enemy. Tackle DAG audits in chunks, document all models, and [leverage strong structure conventions](https://docs.getdbt.com/best-practices/how-we-structure/1-guide-overview). :::tip dbt project evaluator @@ -113,4 +113,4 @@ DAGs, data lineage, and root cause analysis…tell me more! Check out some of ou - [Glossary: DRY](https://docs.getdbt.com/terms/dry) - [Data techniques for modularity](https://www.getdbt.com/analytics-engineering/modular-data-modeling-technique/) -- [How we structure our dbt projects](https://docs.getdbt.com/guides/best-practices/how-we-structure/1-guide-overview) +- [How we structure our dbt projects](https://docs.getdbt.com/best-practices/how-we-structure/1-guide-overview) diff --git a/website/docs/terms/data-wrangling.md b/website/docs/terms/data-wrangling.md index a5b4e99f312..4a26507adfd 100644 --- a/website/docs/terms/data-wrangling.md +++ b/website/docs/terms/data-wrangling.md @@ -12,7 +12,7 @@ hoverSnippet: Data wrangling describes the different processes used to transform Data wrangling describes the different processes used to transform raw data into a consistent and easily usable format. For analytics engineers, you may know this better by the name of data cleaning. In data science or machine learning, "wrangling" often refers to prepping the data for model creation. -The ultimate goal of data wrangling is to work in a way that allows you to dive right into analysis on a dataset or build upon that data in a downstream model without worrying about basic cleaning like renaming, datatype casting, etc. Data wrangling acts as preparation for the development of [intermediate, fct/dim, or mart data models](/guides/best-practices/how-we-structure/1-guide-overview) that form the base layer that other data work can be built off of. Analytics engineers tend to do data wrangling work in the staging layer as a first transformation step after loading the data. This eliminates a foundational step done by an analytics engineer or analyst when building a downstream data model or dashboard. +The ultimate goal of data wrangling is to work in a way that allows you to dive right into analysis on a dataset or build upon that data in a downstream model without worrying about basic cleaning like renaming, datatype casting, etc. Data wrangling acts as preparation for the development of [intermediate, fct/dim, or mart data models](/best-practices/how-we-structure/1-guide-overview) that form the base layer that other data work can be built off of. Analytics engineers tend to do data wrangling work in the staging layer as a first transformation step after loading the data. This eliminates a foundational step done by an analytics engineer or analyst when building a downstream data model or dashboard. ## Data wrangling steps @@ -164,4 +164,4 @@ You could argue that data wrangling is one of the most important parts of an ana - [Our favorite SQL functions](https://www.getdbt.com/sql-foundations/top-sql-functions/) - [Glossary: Data warehouse](/terms/data-warehouse) - [Glossary: Primary key](/terms/primary-key) -- [Glossary: JSON](/terms/json) \ No newline at end of file +- [Glossary: JSON](/terms/json) diff --git a/website/docs/terms/dimensional-modeling.md b/website/docs/terms/dimensional-modeling.md index d0b5e9384a5..de88f7c318d 100644 --- a/website/docs/terms/dimensional-modeling.md +++ b/website/docs/terms/dimensional-modeling.md @@ -28,7 +28,7 @@ If you run a bakery (and we’d be interested in seeing the data person + baker Just as eating raw flour isn’t that appetizing, neither is deriving insights from raw data since it rarely has a nice structure that makes it poised for analytics. There’s some considerable work that’s needed to organize data and make it usable for business users. -This is where dimensional modeling comes into play; it’s a method that can help data folks create meaningful entities (cupcakes and cookies) to live inside their [data mart](https://docs.getdbt.com/guides/best-practices/how-we-structure/4-marts) (your glass display) and eventually use for business intelligence purposes (eating said cookies). +This is where dimensional modeling comes into play; it’s a method that can help data folks create meaningful entities (cupcakes and cookies) to live inside their [data mart](https://docs.getdbt.com/best-practices/how-we-structure/4-marts) (your glass display) and eventually use for business intelligence purposes (eating said cookies). So I guess we take it back—you’re not just trying to build a bakery, you’re also trying to build a top-notch foundation for meaningful analytics. Dimensional modeling can be a method to get you part of the way there. @@ -135,7 +135,7 @@ If your end data consumers are less comfortable with SQL and your BI tool doesn The benefits and drawbacks of dimensional modeling are pretty straightforward. Generally, the main advantages can be boiled down to: -* **More accessibility**: Since the output of good dimensional modeling is a [data mart](https://docs.getdbt.com/guides/best-practices/how-we-structure/4-marts), the tables created are easier to understand and more accessible to end consumers. +* **More accessibility**: Since the output of good dimensional modeling is a [data mart](https://docs.getdbt.com/best-practices/how-we-structure/4-marts), the tables created are easier to understand and more accessible to end consumers. * **More flexibility**: Easy to slice, dice, filter, and view your data in whatever way suits your purpose. * **Performance**: Fact and dimension models are typically materialized as tables or [incremental models](https://docs.getdbt.com/docs/build/incremental-models). Since these often form the core understanding of a business, they are queried often. Materializing them as tables allows them to be more performant in downstream BI platforms. @@ -156,4 +156,4 @@ Dimensional modeling is a tough, complex, and opinionated topic in the data worl * [Modular data modeling techniques](https://www.getdbt.com/analytics-engineering/modular-data-modeling-technique/) * [Stakeholder-friendly model naming conventions](https://docs.getdbt.com/blog/stakeholder-friendly-model-names/) -* [How we structure our dbt projects guide](https://docs.getdbt.com/guides/best-practices/how-we-structure/1-guide-overview) +* [How we structure our dbt projects guide](https://docs.getdbt.com/best-practices/how-we-structure/1-guide-overview) diff --git a/website/docs/terms/dry.md b/website/docs/terms/dry.md index be3d03ed4f0..b1649278cd2 100644 --- a/website/docs/terms/dry.md +++ b/website/docs/terms/dry.md @@ -89,7 +89,7 @@ DRY code is a principle that you should always be striving for. It saves you tim ## Further reading * [Data modeling technique for more modularity](https://www.getdbt.com/analytics-engineering/modular-data-modeling-technique/) -* [Why we use so many CTEs](https://docs.getdbt.com/docs/guides/best-practices) +* [Why we use so many CTEs](https://docs.getdbt.com/docs/best-practices) * [Glossary: CTE](https://docs.getdbt.com/terms/cte) * [Glossary: Materialization](https://docs.getdbt.com/terms/materialization) * [Glossary: View](https://docs.getdbt.com/terms/view) diff --git a/website/docs/terms/idempotent.md b/website/docs/terms/idempotent.md index 8772ba58b62..ea3ef0a099b 100644 --- a/website/docs/terms/idempotent.md +++ b/website/docs/terms/idempotent.md @@ -20,4 +20,4 @@ A non-idempotent version of the "_Save_" button might do something like "Append If word processors only gave us non-idempotent "Append paragraph" / "Update paragraph" / "Delete paragraph" operations, then saving our document changes would be a lot more difficult! We'd have to keep track of which paragraphs we previously saved, and either make sure to not save them again or have a process in place to regularly clean up duplicate paragraphs. The implementation of the "_Save_" button in word processors takes the collection of low-level non-idempotent filesystem operations (read/append/overwrite/delete), and systematically runs them in a certain order so that the _user_ doesn't have to deal with the non-idempotency. The user can just focus on writing -- choosing words, editing for clarity, ensuring paragraphs aren't too long, etc. -- and the word processor deals with making sure the words get persisted properly to disk. -This word processing analogy is very similar to what dbt does for [data transformation](https://www.getdbt.com/analytics-engineering/transformation/): it takes the collection of low-level non-idempotent database operations (`SELECT`/`INSERT`/`UPDATE`/`DELETE` -- collectively known as DML statements), and systematically runs them in a certain order so that analytics engineers don't have to deal with non-idempotency. We can just focus on the data -- [choosing good model and column names](https://docs.getdbt.com/blog/on-the-importance-of-naming), [documenting them](/community/resources/viewpoint#documentation), [ensuring data consumers can understand them](https://docs.getdbt.com/docs/guides/best-practices#consider-the-information-architecture-of-your-data-warehouse), etc. -- and [`dbt run`](https://docs.getdbt.com/reference/commands/run) will make sure the database ends up in the right state. +This word processing analogy is very similar to what dbt does for [data transformation](https://www.getdbt.com/analytics-engineering/transformation/): it takes the collection of low-level non-idempotent database operations (`SELECT`/`INSERT`/`UPDATE`/`DELETE` -- collectively known as DML statements), and systematically runs them in a certain order so that analytics engineers don't have to deal with non-idempotency. We can just focus on the data -- [choosing good model and column names](https://docs.getdbt.com/blog/on-the-importance-of-naming), [documenting them](/community/resources/viewpoint#documentation), [ensuring data consumers can understand them](https://docs.getdbt.com/docs/best-practices#consider-the-information-architecture-of-your-data-warehouse), etc. -- and [`dbt run`](https://docs.getdbt.com/reference/commands/run) will make sure the database ends up in the right state. diff --git a/website/docs/terms/view.md b/website/docs/terms/view.md index 90cd5d1f36f..53c122ca9e6 100644 --- a/website/docs/terms/view.md +++ b/website/docs/terms/view.md @@ -33,4 +33,4 @@ You shouldn’t expect a view in itself to be your final destination in terms of ## Further reading -- [Best practices guide on choosing table vs view materializations](/guides/best-practices) +- [Best practices guide on choosing table vs view materializations](/best-practices) diff --git a/website/sidebars.js b/website/sidebars.js index 3c9dfbc6536..43a7b56c4d5 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -1027,6 +1027,7 @@ const sidebarSettings = { }, "best-practices/debugging-errors", "best-practices/writing-custom-generic-tests", + "best-practices/best-practice-workflows", ], }, ], diff --git a/website/static/img/guides/best-practices/environment-setup/many-branch-git.png b/website/static/img/best-practices/environment-setup/many-branch-git.png similarity index 100% rename from website/static/img/guides/best-practices/environment-setup/many-branch-git.png rename to website/static/img/best-practices/environment-setup/many-branch-git.png diff --git a/website/static/img/guides/best-practices/environment-setup/many-deployments-table.png b/website/static/img/best-practices/environment-setup/many-deployments-table.png similarity index 100% rename from website/static/img/guides/best-practices/environment-setup/many-deployments-table.png rename to website/static/img/best-practices/environment-setup/many-deployments-table.png diff --git a/website/static/img/guides/best-practices/environment-setup/one-branch-git.png b/website/static/img/best-practices/environment-setup/one-branch-git.png similarity index 100% rename from website/static/img/guides/best-practices/environment-setup/one-branch-git.png rename to website/static/img/best-practices/environment-setup/one-branch-git.png diff --git a/website/static/img/guides/best-practices/environment-setup/one-deployment-table.png b/website/static/img/best-practices/environment-setup/one-deployment-table.png similarity index 100% rename from website/static/img/guides/best-practices/environment-setup/one-deployment-table.png rename to website/static/img/best-practices/environment-setup/one-deployment-table.png diff --git a/website/static/img/guides/best-practices/how-we-structure/narrowing-dag.png b/website/static/img/best-practices/how-we-structure/narrowing-dag.png similarity index 100% rename from website/static/img/guides/best-practices/how-we-structure/narrowing-dag.png rename to website/static/img/best-practices/how-we-structure/narrowing-dag.png diff --git a/website/static/img/guides/best-practices/how-we-structure/widening-dag.png b/website/static/img/best-practices/how-we-structure/widening-dag.png similarity index 100% rename from website/static/img/guides/best-practices/how-we-structure/widening-dag.png rename to website/static/img/best-practices/how-we-structure/widening-dag.png diff --git a/website/static/img/guides/best-practices/materializations/dbt-build-output.png b/website/static/img/best-practices/materializations/dbt-build-output.png similarity index 100% rename from website/static/img/guides/best-practices/materializations/dbt-build-output.png rename to website/static/img/best-practices/materializations/dbt-build-output.png diff --git a/website/static/img/guides/best-practices/materializations/incremental-diagram.png b/website/static/img/best-practices/materializations/incremental-diagram.png similarity index 100% rename from website/static/img/guides/best-practices/materializations/incremental-diagram.png rename to website/static/img/best-practices/materializations/incremental-diagram.png diff --git a/website/static/img/guides/best-practices/materializations/model-timing-diagram.png b/website/static/img/best-practices/materializations/model-timing-diagram.png similarity index 100% rename from website/static/img/guides/best-practices/materializations/model-timing-diagram.png rename to website/static/img/best-practices/materializations/model-timing-diagram.png diff --git a/website/static/img/guides/best-practices/materializations/snowflake-query-timing.png b/website/static/img/best-practices/materializations/snowflake-query-timing.png similarity index 100% rename from website/static/img/guides/best-practices/materializations/snowflake-query-timing.png rename to website/static/img/best-practices/materializations/snowflake-query-timing.png diff --git a/website/static/img/guides/best-practices/materializations/tables-and-views.png b/website/static/img/best-practices/materializations/tables-and-views.png similarity index 100% rename from website/static/img/guides/best-practices/materializations/tables-and-views.png rename to website/static/img/best-practices/materializations/tables-and-views.png diff --git a/website/static/img/guides/best-practices/semantic-layer/orders_erd.png b/website/static/img/best-practices/semantic-layer/orders_erd.png similarity index 100% rename from website/static/img/guides/best-practices/semantic-layer/orders_erd.png rename to website/static/img/best-practices/semantic-layer/orders_erd.png diff --git a/website/vercel.json b/website/vercel.json index 990794d5ee7..c6810ea7788 100644 --- a/website/vercel.json +++ b/website/vercel.json @@ -4061,6 +4061,11 @@ "source": "/quickstarts/manual-install", "destination": "/guides/manual-install", "permanent": true + }, + { + "source": "TODO", + "destination": "TODO", + "permanent": true } ] } From 71502f16ee0cbedb51ccba9a48cfd52a14ca7514 Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Wed, 1 Nov 2023 17:50:08 -0700 Subject: [PATCH 063/305] moving a few more guides --- .../migrating-from-spark-to-databricks.md | 50 +-- .../migrating-from-stored-procedures.md | 377 ++++++++++++++++++ .../1-migrating-from-stored-procedures.md | 27 -- .../2-mapping-inserts.md | 57 --- .../3-mapping-updates.md | 55 --- .../4-mapping-deletes.md | 45 --- .../5-mapping-merges.md | 184 --------- ...ating-from-stored-procedures-conclusion.md | 6 - .../tools => }/refactoring-legacy-sql.md | 20 +- .../guides/{migration => }/sl-migration.md | 21 +- 10 files changed, 432 insertions(+), 410 deletions(-) rename website/docs/guides/{migration/tools => }/migrating-from-spark-to-databricks.md (88%) create mode 100644 website/docs/guides/migrating-from-stored-procedures.md delete mode 100644 website/docs/guides/migration/tools/migrating-from-stored-procedures/1-migrating-from-stored-procedures.md delete mode 100644 website/docs/guides/migration/tools/migrating-from-stored-procedures/2-mapping-inserts.md delete mode 100644 website/docs/guides/migration/tools/migrating-from-stored-procedures/3-mapping-updates.md delete mode 100644 website/docs/guides/migration/tools/migrating-from-stored-procedures/4-mapping-deletes.md delete mode 100644 website/docs/guides/migration/tools/migrating-from-stored-procedures/5-mapping-merges.md delete mode 100644 website/docs/guides/migration/tools/migrating-from-stored-procedures/6-migrating-from-stored-procedures-conclusion.md rename website/docs/guides/{migration/tools => }/refactoring-legacy-sql.md (95%) rename website/docs/guides/{migration => }/sl-migration.md (93%) diff --git a/website/docs/guides/migration/tools/migrating-from-spark-to-databricks.md b/website/docs/guides/migrating-from-spark-to-databricks.md similarity index 88% rename from website/docs/guides/migration/tools/migrating-from-spark-to-databricks.md rename to website/docs/guides/migrating-from-spark-to-databricks.md index cd0577c2d96..f9255c585db 100644 --- a/website/docs/guides/migration/tools/migrating-from-spark-to-databricks.md +++ b/website/docs/guides/migrating-from-spark-to-databricks.md @@ -1,18 +1,35 @@ --- title: "Migrating from dbt-spark to dbt-databricks" id: "migrating-from-spark-to-databricks" +description: Learn how to migrate from dbt-spark to dbt-databricks. +displayText: Migrating from Spark to Databricks +hoverSnippet: Learn how to migrate from dbt-spark to dbt-databricks. +time_to_complete: '30 minutes' +platform: ['dbt-core','dbt-cloud'] +icon: 'guides' +hide_table_of_contents: true +tags: ['migration', 'dbt Core','dbt Cloud'] +level: 'Intermediate' +recently_updated: true --- +## Introduction + You can [migrate your projects](#migrate-your-dbt-projects) from using the `dbt-spark` adapter to using the [dbt-databricks adapter](https://github.com/databricks/dbt-databricks). In collaboration with dbt Labs, Databricks built this adapter using dbt-spark as the foundation and added some critical improvements. With it, you get an easier set up — requiring only three inputs for authentication — and more features such as support for [Unity Catalog](https://www.databricks.com/product/unity-catalog). -## Simpler authentication +### Prerequisites + +- Your project must be compatible with dbt 1.0 or greater. Refer to [Upgrading to v1.0](/docs/dbt-versions/core-upgrade/upgrading-to-v1.0) for details. For the latest version of dbt, refer to [Upgrading to v1.3](/docs/dbt-versions/core-upgrade/upgrading-to-v1.3). +- For dbt Cloud, you need administrative (admin) privileges to migrate dbt projects. + +### Simpler authentication Previously, you had to provide a `cluster` or `endpoint` ID which was hard to parse from the `http_path` that you were given. Now, it doesn't matter if you're using a cluster or an SQL endpoint because the [dbt-databricks setup](/docs/core/connect-data-platform/databricks-setup) requires the _same_ inputs for both. All you need to provide is: - hostname of the Databricks workspace - HTTP path of the Databricks SQL warehouse or cluster - appropriate credentials -## Better defaults +### Better defaults The `dbt-databricks` adapter provides better defaults than `dbt-spark` does. The defaults help optimize your workflow so you can get the fast performance and cost-effectiveness of Databricks. They are: @@ -24,24 +41,14 @@ With dbt-spark, however, the default for `incremental_strategy` is `append`. If For more information on defaults, see [Caveats](/docs/core/connect-data-platform/databricks-setup#caveats). -## Pure Python +### Pure Python If you use dbt Core, you no longer have to download an independent driver to interact with Databricks. The connection information is all embedded in a pure-Python library called `databricks-sql-connector`. -## Migrate your dbt projects - -In both dbt Core and dbt Cloud, you can migrate your projects to the Databricks-specific adapter from the generic Apache Spark adapter. - -### Prerequisites - -- Your project must be compatible with dbt 1.0 or greater. Refer to [Upgrading to v1.0](/docs/dbt-versions/core-upgrade/upgrading-to-v1.0) for details. For the latest version of dbt, refer to [Upgrading to v1.3](/docs/dbt-versions/core-upgrade/upgrading-to-v1.3). -- For dbt Cloud, you need administrative (admin) privileges to migrate dbt projects. +## Migrate your dbt projects in dbt Cloud - - - - +You can migrate your projects to the Databricks-specific adapter from the generic Apache Spark adapter. If you're using dbt Core, then skip to Step 4. The migration to the `dbt-databricks` adapter from `dbt-spark` shouldn't cause any downtime for production jobs. dbt Labs recommends that you schedule the connection change when usage of the IDE is light to avoid disrupting your team. @@ -60,7 +67,7 @@ To update your Databricks connection in dbt Cloud: Everyone in your organization who uses dbt Cloud must refresh the IDE before starting work again. It should refresh in less than a minute. -#### About your credentials +## Configure your credentials When you update the Databricks connection in dbt Cloud, your team will not lose their credentials. This makes migrating easier since it only requires you to delete the Databricks connection and re-add the cluster or endpoint information. @@ -70,9 +77,7 @@ These credentials will not get lost when there's a successful connection to Data - The personal access tokens your team added in their dbt Cloud profile so they can develop in the IDE for a given project. - The access token you added for each deployment environment so dbt Cloud can connect to Databricks during production jobs. - - - +## Migrate dbt projects in dbt Core To migrate your dbt Core projects to the `dbt-databricks` adapter from `dbt-spark`, you: 1. Install the [dbt-databricks adapter](https://github.com/databricks/dbt-databricks) in your environment @@ -80,13 +85,8 @@ To migrate your dbt Core projects to the `dbt-databricks` adapter from `dbt-spar Anyone who's using your project must also make these changes in their environment. - - - - - -### Examples +## Try these examples You can use the following examples of the `profiles.yml` file to see the authentication setup with `dbt-spark` compared to the simpler setup with `dbt-databricks` when connecting to an SQL endpoint. A cluster example would look similar. diff --git a/website/docs/guides/migrating-from-stored-procedures.md b/website/docs/guides/migrating-from-stored-procedures.md new file mode 100644 index 00000000000..e8abff49aec --- /dev/null +++ b/website/docs/guides/migrating-from-stored-procedures.md @@ -0,0 +1,377 @@ +--- +title: Migrating from DDL, DML, and stored procedures +id: migrating-from-stored-procedures +description: Learn how to transform from a historical codebase of mixed DDL and DML statements to dbt models, including tips and patterns for the shift from a procedural to a declarative approach in defining datasets. +displayText: Migrating from DDL, DML, and stored procedures +hoverSnippet: Learn how to transform from a historical codebase of mixed DDL and DML statements to dbt models +time_to_complete: '30 minutes' +platform: 'dbt-core' +icon: 'guides' +hide_table_of_contents: true +tags: ['materializations', 'dbt Core'] +level: 'Beginner' +recently_updated: true +--- + +## Introduction + +One of the more common situations that new dbt adopters encounter is a historical codebase of transformations written as a hodgepodge of DDL and DML statements, or stored procedures. Going from DML statements to dbt models is often a challenging hump for new users to get over, because the process involves a significant paradigm shift between a procedural flow of building a dataset (e.g. a series of DDL and DML statements) to a declarative approach to defining a dataset (e.g. how dbt uses SELECT statements to express data models). This guide aims to provide tips, tricks, and common patterns for converting DML statements to dbt models. + +### Preparing to migrate + +Before getting into the meat of conversion, it’s worth noting that DML statements will not always illustrate a comprehensive set of columns and column types that an original table might contain. Without knowing the DDL to create the table, it’s impossible to know precisely if your conversion effort is apples-to-apples, but you can generally get close. + +If your supports `SHOW CREATE TABLE`, that can be a quick way to get a comprehensive set of columns you’ll want to recreate. If you don’t have the DDL, but are working on a substantial stored procedure, one approach that can work is to pull column lists out of any DML statements that modify the table, and build up a full set of the columns that appear. + +As for ensuring that you have the right column types, since models materialized by dbt generally use `CREATE TABLE AS SELECT` or `CREATE VIEW AS SELECT` as the driver for object creation, tables can end up with unintended column types if the queries aren’t explicit. For example, if you care about `INT` versus `DECIMAL` versus `NUMERIC`, it’s generally going to be best to be explicit. The good news is that this is easy with dbt: you just cast the column to the type you intend. + +We also generally recommend that column renaming and type casting happen as close to the source tables as possible, typically in a layer of staging transformations, which helps ensure that future dbt modelers will know where to look for those transformations! See [How we structure our dbt projects](/best-practices/how-we-structure/1-guide-overview) for more guidance on overall project structure. + +### Operations we need to map + +There are four primary DML statements that you are likely to have to convert to dbt operations while migrating a procedure: + +- `INSERT` +- `UPDATE` +- `DELETE` +- `MERGE` + +Each of these can be addressed using various techniques in dbt. Handling `MERGE`s is a bit more involved than the rest, but can be handled effectively via dbt. The first three, however, are fairly simple to convert. + +## Map INSERTs + +An `INSERT` statement is functionally the same as using dbt to `SELECT` from an existing source or other dbt model. If you are faced with an `INSERT`-`SELECT` statement, the easiest way to convert the statement is to just create a new dbt model, and pull the `SELECT` portion of the `INSERT` statement out of the procedure and into the model. That’s basically it! + +To really break it down, let’s consider a simple example: + +```sql +INSERT INTO returned_orders (order_id, order_date, total_return) + +SELECT order_id, order_date, total FROM orders WHERE type = 'return' +``` + +Converting this with a first pass to a [dbt model](/guides/bigquery?step=8) (in a file called returned_orders.sql) might look something like: + +```sql +SELECT + order_id as order_id, + order_date as order_date, + total as total_return + +FROM {{ ref('orders') }} + +WHERE type = 'return' +``` + +Functionally, this would create a model (which could be materialized as a table or view depending on needs) called `returned_orders` that contains three columns: `order_id`, `order_date`, `total_return`) predicated on the type column. It achieves the same end as the `INSERT`, just in a declarative fashion, using dbt. + +### **A note on `FROM` clauses** + +In dbt, using a hard-coded table or view name in a `FROM` clause is one of the most serious mistakes new users make. dbt uses the ref and source macros to discover the ordering that transformations need to execute in, and if you don’t use them, you’ll be unable to benefit from dbt’s built-in lineage generation and pipeline execution. In the sample code throughout the remainder of this article, we’ll use ref statements in the dbt-converted versions of SQL statements, but it is an exercise for the reader to ensure that those models exist in their dbt projects. + +### **Sequential `INSERT`s to an existing table can be `UNION ALL`’ed together** + +Since dbt models effectively perform a single `CREATE TABLE AS SELECT` (or if you break it down into steps, `CREATE`, then an `INSERT`), you may run into complexities if there are multiple `INSERT` statements in your transformation that all insert data into the same table. Fortunately, this is a simple thing to handle in dbt. Effectively, the logic is performing a `UNION ALL` between the `INSERT` queries. If I have a transformation flow that looks something like (ignore the contrived nature of the scenario): + +```sql +CREATE TABLE all_customers + +INSERT INTO all_customers SELECT * FROM us_customers + +INSERT INTO all_customers SELECT * FROM eu_customers +``` + +The dbt-ified version of this would end up looking something like: + +```sql +SELECT * FROM {{ ref('us_customers') }} + +UNION ALL + +SELECT * FROM {{ ref('eu_customers') }} +``` + +The logic is functionally equivalent. So if there’s another statement that `INSERT`s into a model that I’ve already created, I can just add that logic into a second `SELECT` statement that is just `UNION ALL`'ed with the first. Easy! + +## Map UPDATEs + +`UPDATE`s start to increase the complexity of your transformations, but fortunately, they’re pretty darn simple to migrate, as well. The thought process that you go through when translating an `UPDATE` is quite similar to how an `INSERT` works, but the logic for the `SELECT` list in the dbt model is primarily sourced from the content in the `SET` section of the `UPDATE` statement. Let’s look at a simple example: + +```sql +UPDATE orders + +SET type = 'return' + +WHERE total < 0 +``` + +The way to look at this is similar to an `INSERT`-`SELECT` statement. The table being updated is the model you want to modify, and since this is an `UPDATE`, that model has likely already been created, and you can either: + +- add to it with subsequent transformations +- create an intermediate model that builds off of the original model – perhaps naming it something like `int_[entity]_[verb].sql`. + +The `SELECT` list should contain all of the columns for the table, but for the specific columns being updated by the DML, you’ll use the computation on the right side of the equals sign as the `SELECT`ed value. Then, you can use the target column name on the left of the equals sign as the column alias. + +If I were building an intermediate transformation from the above query would translate to something along the lines of: + +```sql +SELECT + CASE + WHEN total < 0 THEN 'return' + ELSE type + END AS type, + + order_id, + order_date + +FROM {{ ref('stg_orders') }} +``` + +Since the `UPDATE` statement doesn’t modify every value of the type column, we use a `CASE` statement to apply the contents’ `WHERE` clause. We still want to select all of the columns that should end up in the target table. If we left one of the columns out, it wouldn’t be passed through to the target table at all due to dbt’s declarative approach. + +Sometimes, you may not be sure what all the columns are in a table, or in the situation as above, you’re only modifying a small number of columns relative to the total number of columns in the table. It can be cumbersome to list out every column in the table, but fortunately dbt contains some useful utility macros that can help list out the full column list of a table. + +Another way I could have written the model a bit more dynamically might be: + +```sql +SELECT + {{ dbt_utils.star(from=ref('stg_orders'), except=['type']) }}, + CASE + WHEN total < 0 THEN 'return' + ELSE type + END AS type, + +FROM {{ ref('stg_orders') }} +``` + +The `dbt_utils.star()` macro will print out the full list of columns in the table, but skip the ones I’ve listed in the except list, which allows me to perform the same logic while writing fewer lines of code. This is a simple example of using dbt macros to simplify and shorten your code, and dbt can get a lot more sophisticated as you learn more techniques. Read more about the [dbt_utils package](https://hub.getdbt.com/dbt-labs/dbt_utils/latest/) and the [star macro](https://github.com/dbt-labs/dbt-utils/tree/0.8.6/#star-source). + +## Map DELETEs + +One of the biggest differences between a procedural transformation and how dbt models data is that dbt, in general, will never destroy data. While there are ways to execute hard `DELETE`s in dbt that are outside of the scope of this article, the general best practice for handling deleted data is to just use soft deletes, and filter out soft-deleted data in a final transformation. + +Let’s consider a simple example query: + +```sql +DELETE FROM stg_orders WHERE order_status IS NULL +``` + +In a dbt model, you’ll need to first identify the records that should be deleted and then filter them out. There are really two primary ways you might translate this query: + +```sql +SELECT * FROM {{ ref('stg_orders') }} WHERE order_status IS NOT NULL +``` + +This first approach just inverts the logic of the DELETE to describe the set of records that should remain, instead of the set of records that should be removed. This ties back to the way dbt declaratively describes datasets. You reference the data that should be in a dataset, and the table or view gets created with that set of data. + +Another way you could achieve this is by marking the deleted records, and then filtering them out. For example: + +```sql +WITH + +soft_deletes AS ( + + SELECT + *, + CASE + WHEN order_status IS NULL THEN true + ELSE false + END AS to_delete + + FROM {{ ref('stg_orders') }} + +) + +SELECT * FROM soft_deletes WHERE to_delete = false +``` + +This approach flags all of the deleted records, and the final `SELECT` filters out any deleted data, so the resulting table contains only the remaining records. It’s a lot more verbose than just inverting the `DELETE` logic, but for complex `DELETE` logic, this ends up being a very effective way of performing the `DELETE` that retains historical context. + +It’s worth calling out that while this doesn’t enable a hard delete, hard deletes can be executed a number of ways, the most common being to execute a dbt [macros](/docs/build/jinja-macros) via as a [run-operation](https://docs.getdbt.com/reference/commands/run-operation), or by using a [post-hook](https://docs.getdbt.com/reference/resource-configs/pre-hook-post-hook/) to perform a `DELETE` statement after the records to-be-deleted have been marked. These are advanced approaches outside the scope of this guide. + + +## Map MERGEs +dbt has a concept called [materialization](/docs/build/materializations), which determines how a model is physically or logically represented in the warehouse. `INSERT`s, `UPDATE`s, and `DELETE`s will typically be accomplished using table or view materializations. For incremental workloads accomplished via commands like `MERGE` or `UPSERT`, dbt has a particular materialization called [incremental](/docs/build/incremental-models). The incremental materialization is specifically used to handle incremental loads and updates to a table without recreating the entire table from scratch on every run. + +### Step 1: Map the MERGE like an INSERT/UPDATE to start + +Before we get into the exact details of how to implement an incremental materialization, let’s talk about logic conversion. Extracting the logic of the `MERGE` and handling it as you would an `INSERT` or an `UPDATE` is the easiest way to get started migrating a `MERGE` command. . + +To see how the logic conversion works, we’ll start with an example `MERGE`. In this scenario, imagine a ride sharing app where rides are loaded into a details table daily, and tips may be updated at some later date, and need to be kept up-to-date: + +```sql +MERGE INTO ride_details USING ( + SELECT + ride_id, + subtotal, + tip + + FROM rides_to_load AS rtl + + ON ride_details.ride_id = rtl.ride_id + + WHEN MATCHED THEN UPDATE + + SET ride_details.tip = rtl.tip + + WHEN NOT MATCHED THEN INSERT (ride_id, subtotal, tip) + VALUES (rtl.ride_id, rtl.subtotal, NVL(rtl.tip, 0, rtl.tip) +); +``` + +The content of the `USING` clause is a useful piece of code because that can easily be placed in a CTE as a starting point for handling the match statement. I find that the easiest way to break this apart is to treat each match statement as a separate CTE that builds on the previous match statements. + +We can ignore the `ON` clause for now, as that will only come into play once we get to a point where we’re ready to turn this into an incremental. + +As with `UPDATE`s and `INSERT`s, you can use the `SELECT` list and aliases to name columns appropriately for the target table, and `UNION` together `INSERT` statements (taking care to use `UNION`, rather than `UNION ALL` to avoid duplicates). + +The `MERGE` would end up translating to something like this: + +```sql +WITH + +using_clause AS ( + + SELECT + ride_id, + subtotal, + tip + + FROM {{ ref('rides_to_load') }} + +), + +updates AS ( + + SELECT + ride_id, + subtotal, + tip + + FROM using_clause + +), + +inserts AS ( + + SELECT + ride_id, + subtotal, + NVL(tip, 0, tip) + + FROM using_clause + +) + +SELECT * + +FROM updates + +UNION inserts +``` + +To be clear, this transformation isn’t complete. The logic here is similar to the `MERGE`, but will not actually do the same thing, since the updates and inserts CTEs are both selecting from the same source query. We’ll need to ensure we grab the separate sets of data as we transition to the incremental materialization. + +One important caveat is that dbt does not natively support `DELETE` as a `MATCH` action. If you have a line in your `MERGE` statement that uses `WHEN MATCHED THEN DELETE`, you’ll want to treat it like an update and add a soft-delete flag, which is then filtered out in a follow-on transformation. + +### Step 2: Convert to incremental materialization + +As mentioned above, incremental materializations are a little special in that when the target table does not exist, the materialization functions in nearly the same way as a standard table materialization, and executes a `CREATE TABLE AS SELECT` statement. If the target table does exist, however, the materialization instead executes a `MERGE` statement. + +Since a `MERGE` requires a `JOIN` condition between the `USING` clause and the target table, we need a way to specify how dbt determines whether or not a record triggers a match or not. That particular piece of information is specified in the dbt model configuration. + +We can add the following `config()` block to the top of our model to specify how it should build incrementally: + +```sql +{{ + config( + materialized='incremental', + unique_key='ride_id', + incremental_strategy='merge' + ) +}} +``` + +The three configuration fields in this example are the most important ones. + +- Setting `materialized='incremental'` tells dbt to apply UPSERT logic to the target table. +- The `unique_key` should be a primary key of the target table. This is used to match records with the existing table. +- `incremental_strategy` here is set to MERGE any existing rows in the target table with a value for the `unique_key` which matches the incoming batch of data. There are [various incremental strategies](/docs/build/incremental-models#about-incremental_strategy) for different situations and warehouses. + +The bulk of the work in converting a model to an incremental materialization comes in determining how the logic should change for incremental loads versus full backfills or initial loads. dbt offers a special macro, `is_incremental()`, which evaluates false for initial loads or for backfills (called full refreshes in dbt parlance), but true for incremental loads. + +This macro can be used to augment the model code to adjust how data is loaded for subsequent loads. How that logic should be added will depend a little bit on how data is received. Some common ways might be: + +1. The source table is truncated ahead of incremental loads, and only contains the data to be loaded in that increment. +2. The source table contains all historical data, and there is a load timestamp column that identifies new data to be loaded. + +In the first case, the work is essentially done already. Since the source table always contains only the new data to be loaded, the query doesn’t have to change for incremental loads. The second case, however, requires the use of the `is_incremental()` macro to correctly handle the logic. + +Taking the converted `MERGE` statement that we’d put together previously, we’d augment it to add this additional logic: + +```sql +WITH + +using_clause AS ( + + SELECT + ride_id, + subtotal, + tip, + max(load_timestamp) as load_timestamp + + FROM {{ ref('rides_to_load') }} + + + {% if is_incremental() %} + + WHERE load_timestamp > (SELECT max(load_timestamp) FROM {{ this }}) + + {% endif %} + +), + +updates AS ( + + SELECT + ride_id, + subtotal, + tip, + load_timestamp + + FROM using_clause + + {% if is_incremental() %} + + WHERE ride_id IN (SELECT ride_id FROM {{ this }}) + + {% endif %} + +), + +inserts AS ( + + SELECT + ride_id, + subtotal, + NVL(tip, 0, tip), + load_timestamp + + FROM using_clause + + WHERE ride_id NOT IN (SELECT ride_id FROM updates) + +) + +SELECT * FROM updates UNION inserts +``` + +There are a couple important concepts to understand here: + +1. The code in the `is_incremental()` conditional block only executes for incremental executions of this model code. If the target table doesn’t exist, or if the `--full-refresh` option is used, that code will not execute. +2. `{{ this }}` is a special keyword in dbt that when used in a Jinja block, self-refers to the model for which the code is executing. So if you have a model in a file called `my_incremental_model.sql`, `{{ this }}` will refer to `my_incremental_model` (fully qualified with database and schema name if necessary). By using that keyword, we can leverage the current state of the target table to inform the source query. + + +## Migrate Stores procedures + +The techniques shared above are useful ways to get started converting the individual DML statements that are often found in stored procedures. Using these types of patterns, legacy procedural code can be rapidly transitioned to dbt models that are much more readable, maintainable, and benefit from software engineering best practices like DRY principles. Additionally, once transformations are rewritten as dbt models, it becomes much easier to test the transformations to ensure that the data being used downstream is high-quality and trustworthy. diff --git a/website/docs/guides/migration/tools/migrating-from-stored-procedures/1-migrating-from-stored-procedures.md b/website/docs/guides/migration/tools/migrating-from-stored-procedures/1-migrating-from-stored-procedures.md deleted file mode 100644 index c16df789939..00000000000 --- a/website/docs/guides/migration/tools/migrating-from-stored-procedures/1-migrating-from-stored-procedures.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Migrating from DDL, DML, and stored procedures -id: 1-migrating-from-stored-procedures ---- - -One of the more common situations that new dbt adopters encounter is a historical codebase of transformations written as a hodgepodge of DDL and DML statements, or stored procedures. Going from DML statements to dbt models is often a challenging hump for new users to get over, because the process involves a significant paradigm shift between a procedural flow of building a dataset (e.g. a series of DDL and DML statements) to a declarative approach to defining a dataset (e.g. how dbt uses SELECT statements to express data models). This guide aims to provide tips, tricks, and common patterns for converting DML statements to dbt models. - -## Preparing to migrate - -Before getting into the meat of conversion, it’s worth noting that DML statements will not always illustrate a comprehensive set of columns and column types that an original table might contain. Without knowing the DDL to create the table, it’s impossible to know precisely if your conversion effort is apples-to-apples, but you can generally get close. - -If your supports `SHOW CREATE TABLE`, that can be a quick way to get a comprehensive set of columns you’ll want to recreate. If you don’t have the DDL, but are working on a substantial stored procedure, one approach that can work is to pull column lists out of any DML statements that modify the table, and build up a full set of the columns that appear. - -As for ensuring that you have the right column types, since models materialized by dbt generally use `CREATE TABLE AS SELECT` or `CREATE VIEW AS SELECT` as the driver for object creation, tables can end up with unintended column types if the queries aren’t explicit. For example, if you care about `INT` versus `DECIMAL` versus `NUMERIC`, it’s generally going to be best to be explicit. The good news is that this is easy with dbt: you just cast the column to the type you intend. - -We also generally recommend that column renaming and type casting happen as close to the source tables as possible, typically in a layer of staging transformations, which helps ensure that future dbt modelers will know where to look for those transformations! See [How we structure our dbt projects](/best-practices/how-we-structure/1-guide-overview) for more guidance on overall project structure. - -### Operations we need to map - -There are four primary DML statements that you are likely to have to convert to dbt operations while migrating a procedure: - -- `INSERT` -- `UPDATE` -- `DELETE` -- `MERGE` - -Each of these can be addressed using various techniques in dbt. Handling `MERGE`s is a bit more involved than the rest, but can be handled effectively via dbt. The first three, however, are fairly simple to convert. diff --git a/website/docs/guides/migration/tools/migrating-from-stored-procedures/2-mapping-inserts.md b/website/docs/guides/migration/tools/migrating-from-stored-procedures/2-mapping-inserts.md deleted file mode 100644 index 44e01784f04..00000000000 --- a/website/docs/guides/migration/tools/migrating-from-stored-procedures/2-mapping-inserts.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Inserts -id: 2-inserts ---- - -An `INSERT` statement is functionally the same as using dbt to `SELECT` from an existing source or other dbt model. If you are faced with an `INSERT`-`SELECT` statement, the easiest way to convert the statement is to just create a new dbt model, and pull the `SELECT` portion of the `INSERT` statement out of the procedure and into the model. That’s basically it! - -To really break it down, let’s consider a simple example: - -```sql -INSERT INTO returned_orders (order_id, order_date, total_return) - -SELECT order_id, order_date, total FROM orders WHERE type = 'return' -``` - -Converting this with a first pass to a [dbt model](/guides/bigquery?step=8) (in a file called returned_orders.sql) might look something like: - -```sql -SELECT - order_id as order_id, - order_date as order_date, - total as total_return - -FROM {{ ref('orders') }} - -WHERE type = 'return' -``` - -Functionally, this would create a model (which could be materialized as a table or view depending on needs) called `returned_orders` that contains three columns: `order_id`, `order_date`, `total_return`) predicated on the type column. It achieves the same end as the `INSERT`, just in a declarative fashion, using dbt. - -## **A note on `FROM` clauses** - -In dbt, using a hard-coded table or view name in a `FROM` clause is one of the most serious mistakes new users make. dbt uses the ref and source macros to discover the ordering that transformations need to execute in, and if you don’t use them, you’ll be unable to benefit from dbt’s built-in lineage generation and pipeline execution. In the sample code throughout the remainder of this article, we’ll use ref statements in the dbt-converted versions of SQL statements, but it is an exercise for the reader to ensure that those models exist in their dbt projects. - -## **Sequential `INSERT`s to an existing table can be `UNION ALL`’ed together** - -Since dbt models effectively perform a single `CREATE TABLE AS SELECT` (or if you break it down into steps, `CREATE`, then an `INSERT`), you may run into complexities if there are multiple `INSERT` statements in your transformation that all insert data into the same table. Fortunately, this is a simple thing to handle in dbt. Effectively, the logic is performing a `UNION ALL` between the `INSERT` queries. If I have a transformation flow that looks something like (ignore the contrived nature of the scenario): - -```sql -CREATE TABLE all_customers - -INSERT INTO all_customers SELECT * FROM us_customers - -INSERT INTO all_customers SELECT * FROM eu_customers -``` - -The dbt-ified version of this would end up looking something like: - -```sql -SELECT * FROM {{ ref('us_customers') }} - -UNION ALL - -SELECT * FROM {{ ref('eu_customers') }} -``` - -The logic is functionally equivalent. So if there’s another statement that `INSERT`s into a model that I’ve already created, I can just add that logic into a second `SELECT` statement that is just `UNION ALL`'ed with the first. Easy! diff --git a/website/docs/guides/migration/tools/migrating-from-stored-procedures/3-mapping-updates.md b/website/docs/guides/migration/tools/migrating-from-stored-procedures/3-mapping-updates.md deleted file mode 100644 index b6f0874fb6b..00000000000 --- a/website/docs/guides/migration/tools/migrating-from-stored-procedures/3-mapping-updates.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: Updates -id: 3-updates ---- - -`UPDATE`s start to increase the complexity of your transformations, but fortunately, they’re pretty darn simple to migrate, as well. The thought process that you go through when translating an `UPDATE` is quite similar to how an `INSERT` works, but the logic for the `SELECT` list in the dbt model is primarily sourced from the content in the `SET` section of the `UPDATE` statement. Let’s look at a simple example: - -```sql -UPDATE orders - -SET type = 'return' - -WHERE total < 0 -``` - -The way to look at this is similar to an `INSERT`-`SELECT` statement. The table being updated is the model you want to modify, and since this is an `UPDATE`, that model has likely already been created, and you can either: - -- add to it with subsequent transformations -- create an intermediate model that builds off of the original model – perhaps naming it something like `int_[entity]_[verb].sql`. - -The `SELECT` list should contain all of the columns for the table, but for the specific columns being updated by the DML, you’ll use the computation on the right side of the equals sign as the `SELECT`ed value. Then, you can use the target column name on the left of the equals sign as the column alias. - -If I were building an intermediate transformation from the above query would translate to something along the lines of: - -```sql -SELECT - CASE - WHEN total < 0 THEN 'return' - ELSE type - END AS type, - - order_id, - order_date - -FROM {{ ref('stg_orders') }} -``` - -Since the `UPDATE` statement doesn’t modify every value of the type column, we use a `CASE` statement to apply the contents’ `WHERE` clause. We still want to select all of the columns that should end up in the target table. If we left one of the columns out, it wouldn’t be passed through to the target table at all due to dbt’s declarative approach. - -Sometimes, you may not be sure what all the columns are in a table, or in the situation as above, you’re only modifying a small number of columns relative to the total number of columns in the table. It can be cumbersome to list out every column in the table, but fortunately dbt contains some useful utility macros that can help list out the full column list of a table. - -Another way I could have written the model a bit more dynamically might be: - -```sql -SELECT - {{ dbt_utils.star(from=ref('stg_orders'), except=['type']) }}, - CASE - WHEN total < 0 THEN 'return' - ELSE type - END AS type, - -FROM {{ ref('stg_orders') }} -``` - -The `dbt_utils.star()` macro will print out the full list of columns in the table, but skip the ones I’ve listed in the except list, which allows me to perform the same logic while writing fewer lines of code. This is a simple example of using dbt macros to simplify and shorten your code, and dbt can get a lot more sophisticated as you learn more techniques. Read more about the [dbt_utils package](https://hub.getdbt.com/dbt-labs/dbt_utils/latest/) and the [star macro](https://github.com/dbt-labs/dbt-utils/tree/0.8.6/#star-source). diff --git a/website/docs/guides/migration/tools/migrating-from-stored-procedures/4-mapping-deletes.md b/website/docs/guides/migration/tools/migrating-from-stored-procedures/4-mapping-deletes.md deleted file mode 100644 index 1a8c6435d42..00000000000 --- a/website/docs/guides/migration/tools/migrating-from-stored-procedures/4-mapping-deletes.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: Deletes -id: 4-deletes ---- - -One of the biggest differences between a procedural transformation and how dbt models data is that dbt, in general, will never destroy data. While there are ways to execute hard `DELETE`s in dbt that are outside of the scope of this article, the general best practice for handling deleted data is to just use soft deletes, and filter out soft-deleted data in a final transformation. - -Let’s consider a simple example query: - -```sql -DELETE FROM stg_orders WHERE order_status IS NULL -``` - -In a dbt model, you’ll need to first identify the records that should be deleted and then filter them out. There are really two primary ways you might translate this query: - -```sql -SELECT * FROM {{ ref('stg_orders') }} WHERE order_status IS NOT NULL -``` - -This first approach just inverts the logic of the DELETE to describe the set of records that should remain, instead of the set of records that should be removed. This ties back to the way dbt declaratively describes datasets. You reference the data that should be in a dataset, and the table or view gets created with that set of data. - -Another way you could achieve this is by marking the deleted records, and then filtering them out. For example: - -```sql -WITH - -soft_deletes AS ( - - SELECT - *, - CASE - WHEN order_status IS NULL THEN true - ELSE false - END AS to_delete - - FROM {{ ref('stg_orders') }} - -) - -SELECT * FROM soft_deletes WHERE to_delete = false -``` - -This approach flags all of the deleted records, and the final `SELECT` filters out any deleted data, so the resulting table contains only the remaining records. It’s a lot more verbose than just inverting the `DELETE` logic, but for complex `DELETE` logic, this ends up being a very effective way of performing the `DELETE` that retains historical context. - -It’s worth calling out that while this doesn’t enable a hard delete, hard deletes can be executed a number of ways, the most common being to execute a dbt [macros](/docs/build/jinja-macros) via as a [run-operation](https://docs.getdbt.com/reference/commands/run-operation), or by using a [post-hook](https://docs.getdbt.com/reference/resource-configs/pre-hook-post-hook/) to perform a `DELETE` statement after the records to-be-deleted have been marked. These are advanced approaches outside the scope of this guide. diff --git a/website/docs/guides/migration/tools/migrating-from-stored-procedures/5-mapping-merges.md b/website/docs/guides/migration/tools/migrating-from-stored-procedures/5-mapping-merges.md deleted file mode 100644 index d059ab9a258..00000000000 --- a/website/docs/guides/migration/tools/migrating-from-stored-procedures/5-mapping-merges.md +++ /dev/null @@ -1,184 +0,0 @@ ---- -title: Merges -id: 5-merges ---- - -dbt has a concept called [materialization](/docs/build/materializations), which determines how a model is physically or logically represented in the warehouse. `INSERT`s, `UPDATE`s, and `DELETE`s will typically be accomplished using table or view materializations. For incremental workloads accomplished via commands like `MERGE` or `UPSERT`, dbt has a particular materialization called [incremental](/docs/build/incremental-models). The incremental materialization is specifically used to handle incremental loads and updates to a table without recreating the entire table from scratch on every run. - -## Step 1: Map the MERGE like an INSERT/UPDATE to start - -Before we get into the exact details of how to implement an incremental materialization, let’s talk about logic conversion. Extracting the logic of the `MERGE` and handling it as you would an `INSERT` or an `UPDATE` is the easiest way to get started migrating a `MERGE` command. . - -To see how the logic conversion works, we’ll start with an example `MERGE`. In this scenario, imagine a ride sharing app where rides are loaded into a details table daily, and tips may be updated at some later date, and need to be kept up-to-date: - -```sql -MERGE INTO ride_details USING ( - SELECT - ride_id, - subtotal, - tip - - FROM rides_to_load AS rtl - - ON ride_details.ride_id = rtl.ride_id - - WHEN MATCHED THEN UPDATE - - SET ride_details.tip = rtl.tip - - WHEN NOT MATCHED THEN INSERT (ride_id, subtotal, tip) - VALUES (rtl.ride_id, rtl.subtotal, NVL(rtl.tip, 0, rtl.tip) -); -``` - -The content of the `USING` clause is a useful piece of code because that can easily be placed in a CTE as a starting point for handling the match statement. I find that the easiest way to break this apart is to treat each match statement as a separate CTE that builds on the previous match statements. - -We can ignore the `ON` clause for now, as that will only come into play once we get to a point where we’re ready to turn this into an incremental. - -As with `UPDATE`s and `INSERT`s, you can use the `SELECT` list and aliases to name columns appropriately for the target table, and `UNION` together `INSERT` statements (taking care to use `UNION`, rather than `UNION ALL` to avoid duplicates). - -The `MERGE` would end up translating to something like this: - -```sql -WITH - -using_clause AS ( - - SELECT - ride_id, - subtotal, - tip - - FROM {{ ref('rides_to_load') }} - -), - -updates AS ( - - SELECT - ride_id, - subtotal, - tip - - FROM using_clause - -), - -inserts AS ( - - SELECT - ride_id, - subtotal, - NVL(tip, 0, tip) - - FROM using_clause - -) - -SELECT * - -FROM updates - -UNION inserts -``` - -To be clear, this transformation isn’t complete. The logic here is similar to the `MERGE`, but will not actually do the same thing, since the updates and inserts CTEs are both selecting from the same source query. We’ll need to ensure we grab the separate sets of data as we transition to the incremental materialization. - -One important caveat is that dbt does not natively support `DELETE` as a `MATCH` action. If you have a line in your `MERGE` statement that uses `WHEN MATCHED THEN DELETE`, you’ll want to treat it like an update and add a soft-delete flag, which is then filtered out in a follow-on transformation. - -### Step 2: Convert to incremental materialization - -As mentioned above, incremental materializations are a little special in that when the target table does not exist, the materialization functions in nearly the same way as a standard table materialization, and executes a `CREATE TABLE AS SELECT` statement. If the target table does exist, however, the materialization instead executes a `MERGE` statement. - -Since a `MERGE` requires a `JOIN` condition between the `USING` clause and the target table, we need a way to specify how dbt determines whether or not a record triggers a match or not. That particular piece of information is specified in the dbt model configuration. - -We can add the following `config()` block to the top of our model to specify how it should build incrementally: - -```sql -{{ - config( - materialized='incremental', - unique_key='ride_id', - incremental_strategy='merge' - ) -}} -``` - -The three configuration fields in this example are the most important ones. - -- Setting `materialized='incremental'` tells dbt to apply UPSERT logic to the target table. -- The `unique_key` should be a primary key of the target table. This is used to match records with the existing table. -- `incremental_strategy` here is set to MERGE any existing rows in the target table with a value for the `unique_key` which matches the incoming batch of data. There are [various incremental strategies](/docs/build/incremental-models#about-incremental_strategy) for different situations and warehouses. - -The bulk of the work in converting a model to an incremental materialization comes in determining how the logic should change for incremental loads versus full backfills or initial loads. dbt offers a special macro, `is_incremental()`, which evaluates false for initial loads or for backfills (called full refreshes in dbt parlance), but true for incremental loads. - -This macro can be used to augment the model code to adjust how data is loaded for subsequent loads. How that logic should be added will depend a little bit on how data is received. Some common ways might be: - -1. The source table is truncated ahead of incremental loads, and only contains the data to be loaded in that increment. -2. The source table contains all historical data, and there is a load timestamp column that identifies new data to be loaded. - -In the first case, the work is essentially done already. Since the source table always contains only the new data to be loaded, the query doesn’t have to change for incremental loads. The second case, however, requires the use of the `is_incremental()` macro to correctly handle the logic. - -Taking the converted `MERGE` statement that we’d put together previously, we’d augment it to add this additional logic: - -```sql -WITH - -using_clause AS ( - - SELECT - ride_id, - subtotal, - tip, - max(load_timestamp) as load_timestamp - - FROM {{ ref('rides_to_load') }} - - - {% if is_incremental() %} - - WHERE load_timestamp > (SELECT max(load_timestamp) FROM {{ this }}) - - {% endif %} - -), - -updates AS ( - - SELECT - ride_id, - subtotal, - tip, - load_timestamp - - FROM using_clause - - {% if is_incremental() %} - - WHERE ride_id IN (SELECT ride_id FROM {{ this }}) - - {% endif %} - -), - -inserts AS ( - - SELECT - ride_id, - subtotal, - NVL(tip, 0, tip), - load_timestamp - - FROM using_clause - - WHERE ride_id NOT IN (SELECT ride_id FROM updates) - -) - -SELECT * FROM updates UNION inserts -``` - -There are a couple important concepts to understand here: - -1. The code in the `is_incremental()` conditional block only executes for incremental executions of this model code. If the target table doesn’t exist, or if the `--full-refresh` option is used, that code will not execute. -2. `{{ this }}` is a special keyword in dbt that when used in a Jinja block, self-refers to the model for which the code is executing. So if you have a model in a file called `my_incremental_model.sql`, `{{ this }}` will refer to `my_incremental_model` (fully qualified with database and schema name if necessary). By using that keyword, we can leverage the current state of the target table to inform the source query. diff --git a/website/docs/guides/migration/tools/migrating-from-stored-procedures/6-migrating-from-stored-procedures-conclusion.md b/website/docs/guides/migration/tools/migrating-from-stored-procedures/6-migrating-from-stored-procedures-conclusion.md deleted file mode 100644 index 6fddf15c163..00000000000 --- a/website/docs/guides/migration/tools/migrating-from-stored-procedures/6-migrating-from-stored-procedures-conclusion.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Putting it all together -id: 6-migrating-from-stored-procedures-conclusion ---- - -The techniques shared above are useful ways to get started converting the individual DML statements that are often found in stored procedures. Using these types of patterns, legacy procedural code can be rapidly transitioned to dbt models that are much more readable, maintainable, and benefit from software engineering best practices like DRY principles. Additionally, once transformations are rewritten as dbt models, it becomes much easier to test the transformations to ensure that the data being used downstream is high-quality and trustworthy. diff --git a/website/docs/guides/migration/tools/refactoring-legacy-sql.md b/website/docs/guides/refactoring-legacy-sql.md similarity index 95% rename from website/docs/guides/migration/tools/refactoring-legacy-sql.md rename to website/docs/guides/refactoring-legacy-sql.md index 0c03942889c..2c1bf0ead03 100644 --- a/website/docs/guides/migration/tools/refactoring-legacy-sql.md +++ b/website/docs/guides/refactoring-legacy-sql.md @@ -2,15 +2,24 @@ title: Refactoring legacy SQL to dbt id: refactoring-legacy-sql description: This guide walks through refactoring a long SQL query (perhaps from a stored procedure) into modular dbt data models. +displayText: Creating new materializations +hoverSnippet: Learn how to refactoring a long SQL query into modular dbt data models. +time_to_complete: '30 minutes' +platform: 'dbt-cloud' +icon: 'guides' +hide_table_of_contents: true +tags: ['SQL', 'legacy'] +level: 'Advanced' +recently_updated: true --- -You may have already learned how to build dbt models from scratch. +## Introduction -But in reality, you probably already have some queries or stored procedures that power analyses and dashboards, and now you’re wondering how to port those into dbt. +You may have already learned how to build dbt models from scratch. But in reality, you probably already have some queries or stored procedures that power analyses and dashboards, and now you’re wondering how to port those into dbt. There are two parts to accomplish this: migration and refactoring. In this guide we’re going to learn a process to help us turn legacy SQL code into modular dbt models. -When migrating and refactoring code, it’s of course important to stay organized. We'll do this by following several steps (jump directly from the right sidebar): +When migrating and refactoring code, it’s of course important to stay organized. We'll do this by following several steps: 1. Migrate your code 1:1 into dbt 2. Implement dbt sources rather than referencing raw database tables @@ -21,9 +30,10 @@ When migrating and refactoring code, it’s of course important to stay organize Let's get into it! -:::info More resources. +:::info More resources This guide is excerpted from the new dbt Learn On-demand Course, "Refactoring SQL for Modularity" - if you're curious, pick up the [free refactoring course here](https://courses.getdbt.com/courses/refactoring-sql-for-modularity), which includes example and practice refactoring projects. Or for a more in-depth look at migrating DDL and DML from stored procedures check out [this guide](/guides/migration/tools/migrating-from-stored-procedures/1-migrating-from-stored-procedures). ::: + ## Migrate your existing SQL code @@ -243,7 +253,7 @@ Under the hood, it generates comparison queries between our before and after sta Sure, we could write our own query manually to audit these models, but using the dbt `audit_helper` package gives us a head start and allows us to identify variances more quickly. -## Ready for refactoring practice? +### Ready for refactoring practice? Head to the free on-demand course, [Refactoring from Procedural SQL to dbt](https://courses.getdbt.com/courses/refactoring-sql-for-modularity) for a more in-depth refactoring example + a practice refactoring problem to test your skills. Questions on this guide or the course? Drop a note in #learn-on-demand in [dbt Community Slack](https://getdbt.com/community). diff --git a/website/docs/guides/migration/sl-migration.md b/website/docs/guides/sl-migration.md similarity index 93% rename from website/docs/guides/migration/sl-migration.md rename to website/docs/guides/sl-migration.md index 56cd6dc9d80..865785133e1 100644 --- a/website/docs/guides/migration/sl-migration.md +++ b/website/docs/guides/sl-migration.md @@ -1,14 +1,23 @@ --- title: "Legacy dbt Semantic Layer migration guide" +id: "sl-migration" sidebar_label: "Legacy dbt Semantic Layer migration" description: "Learn how to migrate from the legacy dbt Semantic Layer to the latest one." +hoverSnippet: Learn how to migrate from the legacy dbt Semantic Layer to the latest one. +time_to_complete: '30 minutes' +icon: 'guides' +hide_table_of_contents: true tags: [Semantic Layer] +level: 'Intermediate' +recently_updated: true --- +## introduction + The legacy Semantic Layer will be deprecated in H2 2023. Additionally, the `dbt_metrics` package will not be supported in dbt v1.6 and later. If you are using `dbt_metrics`, you'll need to upgrade your configurations before upgrading to v1.6. This guide is for people who have the legacy dbt Semantic Layer setup and would like to migrate to the new dbt Semantic Layer. The estimated migration time is two weeks. -## Step 1: Migrate metric configs to the new spec +## Migrate metric configs to the new spec The metrics specification in dbt Core is changed in v1.6 to support the integration of MetricFlow. It's strongly recommended that you refer to [Build your metrics](/docs/build/build-metrics-intro) and before getting started so you understand the core concepts of the Semantic Layer. @@ -35,7 +44,7 @@ dbt Labs recommends completing these steps in a local dev environment (such as t **To make this process easier, dbt Labs provides a [custom migration tool](https://github.com/dbt-labs/dbt-converter) that automates these steps for you. You can find installation instructions in the [README](https://github.com/dbt-labs/dbt-converter/blob/master/README.md). Derived metrics aren’t supported in the migration tool, and will have to be migrated manually.* -## Step 2: Audit metric values after the migration +## Audit metric values after the migration You might need to audit metric values during the migration to ensure that the historical values of key business metrics are the same. @@ -58,7 +67,7 @@ You might need to audit metric values during the migration to ensure that the hi 1. Run the [dbt-audit](https://github.com/dbt-labs/dbt-audit-helper) helper on both models to compare the metric values. -## Step 3: Setup the Semantic Layer in a new environment +## Setup the Semantic Layer in a new environment This step is only relevant to users who want the legacy and new semantic layer to run in parallel for a short time. This will let you recreate content in downstream tools like Hex and Mode with minimal downtime. If you do not need to recreate assets in these tools skip to step 5. @@ -79,7 +88,7 @@ This step is only relevant to users who want the legacy and new semantic layer t At this point, both the new semantic layer and the old semantic layer will be running. The new semantic layer will be pointing at your migration branch with the updated metrics definitions. -## Step 4: Update connection in downstream integrations +## Update connection in downstream integrations Now that your Semantic Layer is set up, you will need to update any downstream integrations that used the legacy Semantic Layer. @@ -105,7 +114,7 @@ To learn more about integrating with Hex, check out their [documentation](https: 3. For specific SQL syntax details, refer to [Querying the API for metric metadata](/docs/dbt-cloud-apis/sl-jdbc#querying-the-api-for-metric-metadata) to query metrics using the API. -## Step 5: Merge your metrics migration branch to main, and upgrade your production environment to 1.6. +## Merge your metrics migration branch to main, and upgrade your production environment to 1.6. 1. Upgrade your production environment to 1.6 or higher. * **Note** — The old metrics definitions are no longer valid so your dbt jobs will not pass. @@ -118,7 +127,7 @@ If you created a new environment in [Step 3](#step-3-setup-the-semantic-layer-in 4. Delete your migration environment. Be sure to update your connection details in any downstream tools to account for the environment change. -## Related docs +### Related docs - [MetricFlow quickstart guide](/docs/build/sl-getting-started) - [Example dbt project](https://github.com/dbt-labs/jaffle-sl-template) From 1b664b19bd0fc9a937e2350d498d85224f57fe12 Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Thu, 2 Nov 2023 15:09:15 -0700 Subject: [PATCH 064/305] fixing links --- website/docs/docs/build/metrics.md | 4 ++-- website/docs/docs/build/sl-getting-started.md | 2 +- .../docs/dbt-versions/core-upgrade/01-upgrading-to-v1.6.md | 2 +- .../docs/docs/dbt-versions/release-notes/03-Oct-2023/sl-ga.md | 2 +- .../dbt-versions/release-notes/05-Aug-2023/sl-revamp-beta.md | 4 ++-- website/docs/docs/use-dbt-semantic-layer/dbt-sl.md | 2 +- website/docs/docs/use-dbt-semantic-layer/quickstart-sl.md | 2 +- website/docs/docs/use-dbt-semantic-layer/setup-sl.md | 4 ++-- website/docs/docs/use-dbt-semantic-layer/sl-architecture.md | 2 +- website/docs/terms/cte.md | 4 ++-- website/docs/terms/dag.md | 2 +- website/snippets/_legacy-sl-callout.md | 2 +- website/snippets/_new-sl-setup.md | 2 +- 13 files changed, 17 insertions(+), 17 deletions(-) diff --git a/website/docs/docs/build/metrics.md b/website/docs/docs/build/metrics.md index 7a505fdad14..b75c4bfb502 100644 --- a/website/docs/docs/build/metrics.md +++ b/website/docs/docs/build/metrics.md @@ -11,7 +11,7 @@ tags: [Metrics] The dbt_metrics package has been deprecated and replaced with [MetricFlow](/docs/build/about-metricflow?version=1.6). If you're using the dbt_metrics package or the legacy Semantic Layer (available on v1.5 or lower), we **highly** recommend [upgrading your dbt version](/docs/dbt-versions/upgrade-core-in-cloud) to dbt v1.6 or higher to access MetricFlow and the new [dbt Semantic Layer](/docs/use-dbt-semantic-layer/dbt-sl?version=1.6). -To migrate to the new Semantic Layer, refer to the dedicated [migration guide](/guides/migration/sl-migration) for more info. +To migrate to the new Semantic Layer, refer to the dedicated [migration guide](/guides/sl-migration) for more info. ::: @@ -26,7 +26,7 @@ The dbt_metrics package has been [deprecated](https://docs.getdbt.com/blog/depre Anyone who uses the dbt_metrics package or is integrated with the legacy Semantic Layer. The new Semantic Layer is available to [Team or Enterprise](https://www.getdbt.com/pricing/) multi-tenant dbt Cloud plans [hosted in North America](/docs/cloud/about-cloud/regions-ip-addresses). You must be on dbt v1.6 or higher to access it. All users can define metrics using MetricFlow. Users on dbt Cloud Developer plans or dbt Core can only use it to define and test metrics locally, but can't dynamically query them with integrated tools. **What should you do?**

-If you've defined metrics using dbt_metrics or integrated with the legacy Semantic Layer, we **highly** recommend you [upgrade your dbt version](/docs/dbt-versions/upgrade-core-in-cloud) to dbt v1.6 or higher to use MetricFlow or the new dbt Semantic Layer. To migrate to the new Semantic Layer, refer to the dedicated [migration guide](/guides/migration/sl-migration) for more info. +If you've defined metrics using dbt_metrics or integrated with the legacy Semantic Layer, we **highly** recommend you [upgrade your dbt version](/docs/dbt-versions/upgrade-core-in-cloud) to dbt v1.6 or higher to use MetricFlow or the new dbt Semantic Layer. To migrate to the new Semantic Layer, refer to the dedicated [migration guide](/guides/sl-migration) for more info. diff --git a/website/docs/docs/build/sl-getting-started.md b/website/docs/docs/build/sl-getting-started.md index 64cec11c302..1df12e86522 100644 --- a/website/docs/docs/build/sl-getting-started.md +++ b/website/docs/docs/build/sl-getting-started.md @@ -77,7 +77,7 @@ If you're encountering some issues when defining your metrics or setting up the
How do I migrate from the legacy Semantic Layer to the new one?
-
If you're using the legacy Semantic Layer, we highly recommend you upgrade your dbt version to dbt v1.6 or higher to use the new dbt Semantic Layer. Refer to the dedicated migration guide for more info.
+
If you're using the legacy Semantic Layer, we highly recommend you upgrade your dbt version to dbt v1.6 or higher to use the new dbt Semantic Layer. Refer to the dedicated migration guide for more info.
diff --git a/website/docs/docs/dbt-versions/core-upgrade/01-upgrading-to-v1.6.md b/website/docs/docs/dbt-versions/core-upgrade/01-upgrading-to-v1.6.md index db54073fd9f..4b2ff58d319 100644 --- a/website/docs/docs/dbt-versions/core-upgrade/01-upgrading-to-v1.6.md +++ b/website/docs/docs/dbt-versions/core-upgrade/01-upgrading-to-v1.6.md @@ -36,7 +36,7 @@ The [spec for metrics](https://github.com/dbt-labs/dbt-core/discussions/7456) ha If your dbt project defines metrics, you must migrate to dbt v1.6 because the YAML spec has moved from dbt_metrics to MetricFlow. Any tests you have won't compile on v1.5 or older. - dbt Core v1.6 does not support Python 3.7, which reached End Of Life on June 23. Support Python versions are 3.8, 3.9, 3.10, and 3.11. -- As part of the [dbt Semantic layer](/docs/use-dbt-semantic-layer/dbt-sl) re-launch (in beta), the spec for `metrics` has changed significantly. Refer to the [migration guide](/guides/migration/sl-migration) for more info on how to migrate to the re-launched dbt Semantic Layer. +- As part of the [dbt Semantic layer](/docs/use-dbt-semantic-layer/dbt-sl) re-launch (in beta), the spec for `metrics` has changed significantly. Refer to the [migration guide](/guides/sl-migration) for more info on how to migrate to the re-launched dbt Semantic Layer. - The manifest schema version is now v10. - dbt Labs is ending support for Homebrew installation of dbt-core and adapters. See [the discussion](https://github.com/dbt-labs/dbt-core/discussions/8277) for more details. diff --git a/website/docs/docs/dbt-versions/release-notes/03-Oct-2023/sl-ga.md b/website/docs/docs/dbt-versions/release-notes/03-Oct-2023/sl-ga.md index 5e53363f62a..e427a85a346 100644 --- a/website/docs/docs/dbt-versions/release-notes/03-Oct-2023/sl-ga.md +++ b/website/docs/docs/dbt-versions/release-notes/03-Oct-2023/sl-ga.md @@ -8,7 +8,7 @@ tags: [Oct-2023] --- :::important -If you're using the legacy Semantic Layer, we **highly** recommend you [upgrade your dbt version](/docs/dbt-versions/upgrade-core-in-cloud) to dbt v1.6 or higher and [migrate](/guides/migration/sl-migration) to the latest Semantic Layer. +If you're using the legacy Semantic Layer, we **highly** recommend you [upgrade your dbt version](/docs/dbt-versions/upgrade-core-in-cloud) to dbt v1.6 or higher and [migrate](/guides/sl-migration) to the latest Semantic Layer. ::: dbt Labs is thrilled to announce that the [dbt Semantic Layer](/docs/use-dbt-semantic-layer/dbt-sl) is now generally available. It offers consistent data organization, improved governance, reduced costs, enhanced efficiency, and accessible data for better decision-making and collaboration across organizations. diff --git a/website/docs/docs/dbt-versions/release-notes/05-Aug-2023/sl-revamp-beta.md b/website/docs/docs/dbt-versions/release-notes/05-Aug-2023/sl-revamp-beta.md index 921ed6dcd79..f44fd57aa4a 100644 --- a/website/docs/docs/dbt-versions/release-notes/05-Aug-2023/sl-revamp-beta.md +++ b/website/docs/docs/dbt-versions/release-notes/05-Aug-2023/sl-revamp-beta.md @@ -8,14 +8,14 @@ sidebar_position: 7 --- :::important -If you're using the legacy Semantic Layer, we **highly** recommend you [upgrade your dbt version](/docs/dbt-versions/upgrade-core-in-cloud) to dbt v1.6 or higher to use the new dbt Semantic Layer. To migrate to the new Semantic Layer, refer to the dedicated [migration guide](/guides/migration/sl-migration) for more info. +If you're using the legacy Semantic Layer, we **highly** recommend you [upgrade your dbt version](/docs/dbt-versions/upgrade-core-in-cloud) to dbt v1.6 or higher to use the new dbt Semantic Layer. To migrate to the new Semantic Layer, refer to the dedicated [migration guide](/guides/sl-migration) for more info. ::: dbt Labs are thrilled to announce the re-release of the [dbt Semantic Layer](/docs/use-dbt-semantic-layer/dbt-sl), now available in [public beta](#public-beta). It aims to bring the best of modeling and semantics to downstream applications by introducing: - [MetricFlow](/docs/build/about-metricflow) is a framework for constructing performant and legible SQL from an all new set of semantic constructs which include semantic models, entities, and metrics. - New Semantic Layer infrastructure that enables support for more data platforms (Snowflake, Databricks, BigQuery, Redshift, and soon more), along with improved performance. -- New and improved [developer workflows](/guides/migration/sl-migration), governance, and collaboration features. +- New and improved [developer workflows](/guides/sl-migration), governance, and collaboration features. - New [Semantic Layer API](/docs/dbt-cloud-apis/sl-api-overview) using JDBC to query metrics and build integrations. With semantics at its core, the dbt Semantic Layer marks a crucial milestone towards a new era of centralized logic and data applications. diff --git a/website/docs/docs/use-dbt-semantic-layer/dbt-sl.md b/website/docs/docs/use-dbt-semantic-layer/dbt-sl.md index b9728fc108e..4e3caa3eb21 100644 --- a/website/docs/docs/use-dbt-semantic-layer/dbt-sl.md +++ b/website/docs/docs/use-dbt-semantic-layer/dbt-sl.md @@ -130,7 +130,7 @@ You can design and define your metrics in `.yml` files nested under a metrics ke
How do I migrate from the legacy Semantic Layer to the new one?
-
If you're using the legacy Semantic Layer, we highly recommend you upgrade your dbt version to dbt v1.6 or higher to use the new dbt Semantic Layer. Refer to the dedicated migration guide for more info.
+
If you're using the legacy Semantic Layer, we highly recommend you upgrade your dbt version to dbt v1.6 or higher to use the new dbt Semantic Layer. Refer to the dedicated migration guide for more info.
diff --git a/website/docs/docs/use-dbt-semantic-layer/quickstart-sl.md b/website/docs/docs/use-dbt-semantic-layer/quickstart-sl.md index cf9217146b5..b521eaf713a 100644 --- a/website/docs/docs/use-dbt-semantic-layer/quickstart-sl.md +++ b/website/docs/docs/use-dbt-semantic-layer/quickstart-sl.md @@ -91,7 +91,7 @@ If you're encountering some issues when defining your metrics or setting up the
How do I migrate from the legacy Semantic Layer to the new one?
-
If you're using the legacy Semantic Layer, we highly recommend you upgrade your dbt version to dbt v1.6 or higher to use the new dbt Semantic Layer. Refer to the dedicated migration guide for more info.
+
If you're using the legacy Semantic Layer, we highly recommend you upgrade your dbt version to dbt v1.6 or higher to use the new dbt Semantic Layer. Refer to the dedicated migration guide for more info.
diff --git a/website/docs/docs/use-dbt-semantic-layer/setup-sl.md b/website/docs/docs/use-dbt-semantic-layer/setup-sl.md index 4c88ee50b25..5f793142bdc 100644 --- a/website/docs/docs/use-dbt-semantic-layer/setup-sl.md +++ b/website/docs/docs/use-dbt-semantic-layer/setup-sl.md @@ -53,7 +53,7 @@ With the dbt Semantic Layer, you can define business metrics, reduce code duplic ## Set up dbt Semantic Layer :::tip -If you're using the legacy Semantic Layer, dbt Labs strongly recommends that you [upgrade your dbt version](/docs/dbt-versions/upgrade-core-in-cloud) to dbt v1.6 or higher to use the latest dbt Semantic Layer. Refer to the dedicated [migration guide](/guides/migration/sl-migration) for more info. +If you're using the legacy Semantic Layer, dbt Labs strongly recommends that you [upgrade your dbt version](/docs/dbt-versions/upgrade-core-in-cloud) to dbt v1.6 or higher to use the latest dbt Semantic Layer. Refer to the dedicated [migration guide](/guides/sl-migration) for more info. ::: @@ -95,5 +95,5 @@ It is _not_ recommended that you use your dbt Cloud credentials due to elevated - [Build your metrics](/docs/build/build-metrics-intro) - [Available integrations](/docs/use-dbt-semantic-layer/avail-sl-integrations) - [Semantic Layer APIs](/docs/dbt-cloud-apis/sl-api-overview) -- [Migrate your legacy Semantic Layer](/guides/migration/sl-migration) +- [Migrate your legacy Semantic Layer](/guides/sl-migration) - [Get started with the dbt Semantic Layer](/docs/use-dbt-semantic-layer/quickstart-sl) diff --git a/website/docs/docs/use-dbt-semantic-layer/sl-architecture.md b/website/docs/docs/use-dbt-semantic-layer/sl-architecture.md index 152821b7e59..60fb460e53b 100644 --- a/website/docs/docs/use-dbt-semantic-layer/sl-architecture.md +++ b/website/docs/docs/use-dbt-semantic-layer/sl-architecture.md @@ -32,7 +32,7 @@ The dbt Semantic Layer includes the following components:
How do I migrate from the legacy Semantic Layer to the new one?
-
If you're using the legacy Semantic Layer, we highly recommend you upgrade your dbt version to dbt v1.6 or higher to use the new dbt Semantic Layer. Refer to the dedicated migration guide for more info.
+
If you're using the legacy Semantic Layer, we highly recommend you upgrade your dbt version to dbt v1.6 or higher to use the new dbt Semantic Layer. Refer to the dedicated migration guide for more info.
diff --git a/website/docs/terms/cte.md b/website/docs/terms/cte.md index d4a4bb15915..f67480325b4 100644 --- a/website/docs/terms/cte.md +++ b/website/docs/terms/cte.md @@ -66,7 +66,7 @@ When people talk about how CTEs can simplify your queries, they specifically mea #### Establish Structure -In leveraging CTEs, you can break complex code into smaller segments, ultimately helping provide structure to your code. At dbt Labs, we often like to use the [import, logical, and final structure](/guides/migration/tools/refactoring-legacy-sql#implement-cte-groupings) for CTEs which creates a predictable and organized structure to your dbt models. +In leveraging CTEs, you can break complex code into smaller segments, ultimately helping provide structure to your code. At dbt Labs, we often like to use the [import, logical, and final structure](/guides/refactoring-legacy-sql?step=5#implement-cte-groupings) for CTEs which creates a predictable and organized structure to your dbt models. #### Easily identify dependencies @@ -181,7 +181,7 @@ CTEs are essentially temporary views that can be used throughout a query. They a If you’re interested in reading more about CTE best practices, check out some of our favorite content around model refactoring and style: -- [Refactoring Legacy SQL to dbt](/guides/migration/tools/refactoring-legacy-sql#implement-cte-groupings) +- [Refactoring Legacy SQL to dbt](/guides/refactoring-legacy-sql?step=5#implement-cte-groupings) - [dbt Labs Style Guide](https://github.com/dbt-labs/corp/blob/main/dbt_style_guide.md#ctes) - [Modular Data Modeling Technique](https://www.getdbt.com/analytics-engineering/modular-data-modeling-technique/) diff --git a/website/docs/terms/dag.md b/website/docs/terms/dag.md index d7ff1c44f49..c6b91300bfc 100644 --- a/website/docs/terms/dag.md +++ b/website/docs/terms/dag.md @@ -108,4 +108,4 @@ Ready to restructure (or create your first) DAG? Check out some of the resources - [Data modeling techniques for more modularity](https://www.getdbt.com/analytics-engineering/modular-data-modeling-technique/) - [How we structure our dbt projects](https://docs.getdbt.com/best-practices/how-we-structure/1-guide-overview) - [How to audit your DAG](https://www.youtube.com/watch?v=5W6VrnHVkCA) -- [Refactoring legacy SQL to dbt](/guides/migration/tools/refactoring-legacy-sql) +- [Refactoring legacy SQL to dbt](/guides/refactoring-legacy-sql) diff --git a/website/snippets/_legacy-sl-callout.md b/website/snippets/_legacy-sl-callout.md index f45c6b68af3..97c95512332 100644 --- a/website/snippets/_legacy-sl-callout.md +++ b/website/snippets/_legacy-sl-callout.md @@ -6,6 +6,6 @@ The dbt Semantic Layer has undergone a [significant revamp](https://www.getdbt.c **What’s changed?** The dbt_metrics package has been [deprecated](https://docs.getdbt.com/blog/deprecating-dbt-metrics) and replaced with [MetricFlow](/docs/build/about-metricflow?version=1.6), a new framework for defining metrics in dbt. This means dbt_metrics is no longer supported after dbt v1.5 and won't receive any code fixes. -**What should you do?** If you're using the legacy Semantic Layer, we **highly** recommend you [upgrade your dbt version](/docs/dbt-versions/upgrade-core-in-cloud) to dbt v1.6 or higher to use the new dbt Semantic Layer. To migrate to the new Semantic Layer, refer to the dedicated [migration guide](/guides/migration/sl-migration) for more info. +**What should you do?** If you're using the legacy Semantic Layer, we **highly** recommend you [upgrade your dbt version](/docs/dbt-versions/upgrade-core-in-cloud) to dbt v1.6 or higher to use the new dbt Semantic Layer. To migrate to the new Semantic Layer, refer to the dedicated [migration guide](/guides/sl-migration) for more info. ::: diff --git a/website/snippets/_new-sl-setup.md b/website/snippets/_new-sl-setup.md index ad248bc3ca9..3cb6e09eb4c 100644 --- a/website/snippets/_new-sl-setup.md +++ b/website/snippets/_new-sl-setup.md @@ -7,7 +7,7 @@ You can set up the dbt Semantic Layer in dbt Cloud at the environment and projec - You must have a successful run in your new environment. :::tip -If you're using the legacy Semantic Layer, dbt Labs strongly recommends that you [upgrade your dbt version](/docs/dbt-versions/upgrade-core-in-cloud) to dbt version 1.6 or newer to use the latest dbt Semantic Layer. Refer to the dedicated [migration guide](/guides/migration/sl-migration) for details. +If you're using the legacy Semantic Layer, dbt Labs strongly recommends that you [upgrade your dbt version](/docs/dbt-versions/upgrade-core-in-cloud) to dbt version 1.6 or newer to use the latest dbt Semantic Layer. Refer to the dedicated [migration guide](/guides/sl-migration) for details. ::: 1. In dbt Cloud, create a new [deployment environment](/docs/deploy/deploy-environments#create-a-deployment-environment) or use an existing environment on dbt 1.6 or higher. From cb232eec2de15d8c141ed3118b36825ec75b7d7d Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Fri, 3 Nov 2023 12:10:51 +0000 Subject: [PATCH 065/305] Update pre-hook-post-hook.md clarify transactions not supported --- .../resource-configs/pre-hook-post-hook.md | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/website/docs/reference/resource-configs/pre-hook-post-hook.md b/website/docs/reference/resource-configs/pre-hook-post-hook.md index 297d6975d6f..b4c779cc7bf 100644 --- a/website/docs/reference/resource-configs/pre-hook-post-hook.md +++ b/website/docs/reference/resource-configs/pre-hook-post-hook.md @@ -175,13 +175,16 @@ If multiple instances of any hooks are defined, dbt will run each hook using the ### Transaction behavior -If you're using an adapter that makes use of transactions (namely Postgres or Redshift), it's worth noting that by default hooks are executed inside of the same transaction as your model being created. +If you're using an adapter that uses transactions (namely Postgres or Redshift), it's worth noting that by default hooks are executed inside of the same transaction as your model being created. There may be occasions where you need to run these hooks _outside_ of a transaction, for example: -* You want to run a `VACUUM` in a `post-hook`, however this cannot be executed within a transaction ([Redshift docs](https://docs.aws.amazon.com/redshift/latest/dg/r_VACUUM_command.html#r_VACUUM_usage_notes)) -* You want to insert a record into an audit at the start of a run, and do not want that statement rolled back if the model creation fails. +* You want to run a `VACUUM` in a `post-hook`, however, this cannot be executed within a transaction ([Redshift docs](https://docs.aws.amazon.com/redshift/latest/dg/r_VACUUM_command.html#r_VACUUM_usage_notes)) +* You want to insert a record into an audit at the start of a run and do not want that statement rolled back if the model creation fails. -To achieve this, you can use one of the following syntaxes. (Note: You should NOT use this syntax if using a database where dbt does not use transactions by default, including Snowflake, BigQuery, and Spark/Databricks.) +To achieve this behavior, you can use one of the following syntaxes. (Important Note: Do not use this syntax if you are using a database where dbt does not use transactions by default. This includes databases like Snowflake, BigQuery, and Spark/Databricks.) + + + #### Config block: use the `before_begin` and `after_commit` helper macros @@ -200,6 +203,9 @@ select ... ``` + + + #### Config block: use a dictionary @@ -224,6 +230,10 @@ select ... + + + + #### `dbt_project.yml`: Use a dictionary @@ -242,3 +252,4 @@ models: ``` + From d43d129bcaba903ba96612b7c2cadc4d0b6ea263 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Fri, 3 Nov 2023 12:13:06 +0000 Subject: [PATCH 066/305] Update website/docs/reference/resource-configs/pre-hook-post-hook.md --- website/docs/reference/resource-configs/pre-hook-post-hook.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/reference/resource-configs/pre-hook-post-hook.md b/website/docs/reference/resource-configs/pre-hook-post-hook.md index b4c779cc7bf..0d8df81aa24 100644 --- a/website/docs/reference/resource-configs/pre-hook-post-hook.md +++ b/website/docs/reference/resource-configs/pre-hook-post-hook.md @@ -181,7 +181,7 @@ There may be occasions where you need to run these hooks _outside_ of a transact * You want to run a `VACUUM` in a `post-hook`, however, this cannot be executed within a transaction ([Redshift docs](https://docs.aws.amazon.com/redshift/latest/dg/r_VACUUM_command.html#r_VACUUM_usage_notes)) * You want to insert a record into an audit at the start of a run and do not want that statement rolled back if the model creation fails. -To achieve this behavior, you can use one of the following syntaxes. (Important Note: Do not use this syntax if you are using a database where dbt does not use transactions by default. This includes databases like Snowflake, BigQuery, and Spark/Databricks.) +To achieve this behavior, you can use one of the following syntaxes. (Important Note: Do not use this syntax if you are using a database where dbt does not use transactions by default. This includes databases like Snowflake, BigQuery, and Spark or Databricks.) From f465eb865b96524bf857d455d0170b45f2ff30a7 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Fri, 3 Nov 2023 12:13:28 +0000 Subject: [PATCH 067/305] Update website/docs/reference/resource-configs/pre-hook-post-hook.md --- website/docs/reference/resource-configs/pre-hook-post-hook.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/website/docs/reference/resource-configs/pre-hook-post-hook.md b/website/docs/reference/resource-configs/pre-hook-post-hook.md index 0d8df81aa24..f48b65b4ad6 100644 --- a/website/docs/reference/resource-configs/pre-hook-post-hook.md +++ b/website/docs/reference/resource-configs/pre-hook-post-hook.md @@ -181,7 +181,9 @@ There may be occasions where you need to run these hooks _outside_ of a transact * You want to run a `VACUUM` in a `post-hook`, however, this cannot be executed within a transaction ([Redshift docs](https://docs.aws.amazon.com/redshift/latest/dg/r_VACUUM_command.html#r_VACUUM_usage_notes)) * You want to insert a record into an audit at the start of a run and do not want that statement rolled back if the model creation fails. -To achieve this behavior, you can use one of the following syntaxes. (Important Note: Do not use this syntax if you are using a database where dbt does not use transactions by default. This includes databases like Snowflake, BigQuery, and Spark or Databricks.) +To achieve this behavior, you can use one of the following syntaxes. + +Important note: Do not use this syntax if you are using a database where dbt does not use transactions by default. This includes databases like Snowflake, BigQuery, and Spark or Databricks. From 35318a1c438e6363af7f5db57463a3b69001f1d4 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Fri, 3 Nov 2023 12:16:33 +0000 Subject: [PATCH 068/305] Update website/docs/reference/resource-configs/pre-hook-post-hook.md --- website/docs/reference/resource-configs/pre-hook-post-hook.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/reference/resource-configs/pre-hook-post-hook.md b/website/docs/reference/resource-configs/pre-hook-post-hook.md index f48b65b4ad6..a21955e1c06 100644 --- a/website/docs/reference/resource-configs/pre-hook-post-hook.md +++ b/website/docs/reference/resource-configs/pre-hook-post-hook.md @@ -186,7 +186,7 @@ To achieve this behavior, you can use one of the following syntaxes. Important note: Do not use this syntax if you are using a database where dbt does not use transactions by default. This includes databases like Snowflake, BigQuery, and Spark or Databricks. - + #### Config block: use the `before_begin` and `after_commit` helper macros From 88f463d2d6eba7ccd687ffe8e561aa1d59f429b6 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Fri, 3 Nov 2023 12:18:01 +0000 Subject: [PATCH 069/305] Update pre-hook-post-hook.md --- website/docs/reference/resource-configs/pre-hook-post-hook.md | 1 + 1 file changed, 1 insertion(+) diff --git a/website/docs/reference/resource-configs/pre-hook-post-hook.md b/website/docs/reference/resource-configs/pre-hook-post-hook.md index a21955e1c06..e3f03223ff5 100644 --- a/website/docs/reference/resource-configs/pre-hook-post-hook.md +++ b/website/docs/reference/resource-configs/pre-hook-post-hook.md @@ -255,3 +255,4 @@ models: + From a3eec5d318f757c21da8dc89a5bb93ed0939c1c3 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Fri, 3 Nov 2023 13:21:48 +0000 Subject: [PATCH 070/305] Update pre-hook-post-hook.md --- .../docs/reference/resource-configs/pre-hook-post-hook.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/docs/reference/resource-configs/pre-hook-post-hook.md b/website/docs/reference/resource-configs/pre-hook-post-hook.md index e3f03223ff5..0c631159d56 100644 --- a/website/docs/reference/resource-configs/pre-hook-post-hook.md +++ b/website/docs/reference/resource-configs/pre-hook-post-hook.md @@ -186,7 +186,7 @@ To achieve this behavior, you can use one of the following syntaxes. Important note: Do not use this syntax if you are using a database where dbt does not use transactions by default. This includes databases like Snowflake, BigQuery, and Spark or Databricks. - + #### Config block: use the `before_begin` and `after_commit` helper macros @@ -207,7 +207,7 @@ select ... - + #### Config block: use a dictionary @@ -234,7 +234,7 @@ select ... - + #### `dbt_project.yml`: Use a dictionary From efe8670147dac5ce10adac8f6084305a83a4bab7 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Fri, 3 Nov 2023 13:31:15 +0000 Subject: [PATCH 071/305] Update website/docs/reference/resource-configs/pre-hook-post-hook.md --- website/docs/reference/resource-configs/pre-hook-post-hook.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/reference/resource-configs/pre-hook-post-hook.md b/website/docs/reference/resource-configs/pre-hook-post-hook.md index 0c631159d56..fbc3e182eae 100644 --- a/website/docs/reference/resource-configs/pre-hook-post-hook.md +++ b/website/docs/reference/resource-configs/pre-hook-post-hook.md @@ -207,7 +207,7 @@ select ... - + #### Config block: use a dictionary From 6acedeafad07b303322eee3ae601bfc29fd9da80 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Fri, 3 Nov 2023 13:31:39 +0000 Subject: [PATCH 072/305] Update pre-hook-post-hook.md --- .../docs/reference/resource-configs/pre-hook-post-hook.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/website/docs/reference/resource-configs/pre-hook-post-hook.md b/website/docs/reference/resource-configs/pre-hook-post-hook.md index fbc3e182eae..16ef2e1685c 100644 --- a/website/docs/reference/resource-configs/pre-hook-post-hook.md +++ b/website/docs/reference/resource-configs/pre-hook-post-hook.md @@ -181,9 +181,8 @@ There may be occasions where you need to run these hooks _outside_ of a transact * You want to run a `VACUUM` in a `post-hook`, however, this cannot be executed within a transaction ([Redshift docs](https://docs.aws.amazon.com/redshift/latest/dg/r_VACUUM_command.html#r_VACUUM_usage_notes)) * You want to insert a record into an audit at the start of a run and do not want that statement rolled back if the model creation fails. -To achieve this behavior, you can use one of the following syntaxes. - -Important note: Do not use this syntax if you are using a database where dbt does not use transactions by default. This includes databases like Snowflake, BigQuery, and Spark or Databricks. +To achieve this behavior, you can use one of the following syntaxes: + - Important note: Do not use this syntax if you are using a database where dbt does not use transactions by default. This includes databases like Snowflake, BigQuery, and Spark or Databricks. From c8e1cb10310ea47c00e85732331d7dff6ec01058 Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Fri, 3 Nov 2023 17:42:33 -0700 Subject: [PATCH 073/305] moving more guides --- .../dbt-unity-catalog-best-practices.md | 0 website/docs/guides/airflow-and-dbt-cloud.md | 3 +- website/docs/guides/building-packages.md | 3 +- .../guides/creating-new-materializations.md | 7 - ...b-on-merge.md => custom-cicd-pipelines.md} | 228 +++++++++-- ...abricks.md => dbt models on Databricks.md} | 21 +- website/docs/guides/debugging-schema-names.md | 2 +- ...w-to-set-up-your-databricks-dbt-project.md | 25 +- ...abricks-workflows-to-run-dbt-cloud-jobs.md | 17 +- .../migrating-from-spark-to-databricks.md | 2 +- .../migrating-from-stored-procedures.md | 2 +- .../1-cicd-background.md | 43 --- .../4-dbt-cloud-job-on-pr.md | 131 ------- .../5-something-to-consider.md | 8 - .../orchestration/set-up-ci/1-introduction.md | 10 - .../orchestration/set-up-ci/2-quick-setup.md | 50 --- .../set-up-ci/3-run-dbt-project-evaluator.md | 46 --- .../orchestration/set-up-ci/4-lint-on-push.md | 190 ---------- .../set-up-ci/5-multiple-checks.md | 62 --- ...uctionizing-your-dbt-databricks-project.md | 23 +- website/docs/guides/set-up-ci.md | 355 ++++++++++++++++++ website/docs/guides/sl-migration.md | 2 +- 22 files changed, 628 insertions(+), 602 deletions(-) rename website/docs/{guides/dbt-ecosystem/databricks-guides => best-practices}/dbt-unity-catalog-best-practices.md (100%) rename website/docs/guides/{orchestration/custom-cicd-pipelines/3-dbt-cloud-job-on-merge.md => custom-cicd-pipelines.md} (58%) rename website/docs/guides/{dbt-ecosystem/databricks-guides/how_to_optimize_dbt_models_on_databricks.md => dbt models on Databricks.md} (97%) rename website/docs/guides/{dbt-ecosystem/databricks-guides => }/how-to-set-up-your-databricks-dbt-project.md (90%) rename website/docs/guides/{orchestration => }/how-to-use-databricks-workflows-to-run-dbt-cloud-jobs.md (96%) delete mode 100644 website/docs/guides/orchestration/custom-cicd-pipelines/1-cicd-background.md delete mode 100644 website/docs/guides/orchestration/custom-cicd-pipelines/4-dbt-cloud-job-on-pr.md delete mode 100644 website/docs/guides/orchestration/custom-cicd-pipelines/5-something-to-consider.md delete mode 100644 website/docs/guides/orchestration/set-up-ci/1-introduction.md delete mode 100644 website/docs/guides/orchestration/set-up-ci/2-quick-setup.md delete mode 100644 website/docs/guides/orchestration/set-up-ci/3-run-dbt-project-evaluator.md delete mode 100644 website/docs/guides/orchestration/set-up-ci/4-lint-on-push.md delete mode 100644 website/docs/guides/orchestration/set-up-ci/5-multiple-checks.md rename website/docs/guides/{dbt-ecosystem/databricks-guides => }/productionizing-your-dbt-databricks-project.md (97%) create mode 100644 website/docs/guides/set-up-ci.md diff --git a/website/docs/guides/dbt-ecosystem/databricks-guides/dbt-unity-catalog-best-practices.md b/website/docs/best-practices/dbt-unity-catalog-best-practices.md similarity index 100% rename from website/docs/guides/dbt-ecosystem/databricks-guides/dbt-unity-catalog-best-practices.md rename to website/docs/best-practices/dbt-unity-catalog-best-practices.md diff --git a/website/docs/guides/airflow-and-dbt-cloud.md b/website/docs/guides/airflow-and-dbt-cloud.md index 329fe729038..98eb9f82d6c 100644 --- a/website/docs/guides/airflow-and-dbt-cloud.md +++ b/website/docs/guides/airflow-and-dbt-cloud.md @@ -2,10 +2,9 @@ title: Airflow and dbt Cloud id: airflow-and-dbt-cloud time_to_complete: '60 minutes' -platform: 'dbt-cloud' icon: 'guides' hide_table_of_contents: true -tags: ['airflow', 'dbt Cloud', 'orchestration'] +tags: ['dbt Cloud', 'Orchestration'] level: 'Intermediate' recently_updated: true --- diff --git a/website/docs/guides/building-packages.md b/website/docs/guides/building-packages.md index 167eed47137..9d26d7c85e4 100644 --- a/website/docs/guides/building-packages.md +++ b/website/docs/guides/building-packages.md @@ -5,10 +5,9 @@ description: When you have dbt code that might help others, you can create a pac displayText: Building dbt packages hoverSnippet: Learn how to create packages for dbt. time_to_complete: '60 minutes' -platform: 'dbt-core' icon: 'guides' hide_table_of_contents: true -tags: ['packages', 'dbt Core', 'legacy'] +tags: ['dbt Core', 'legacy'] level: 'Advanced' recently_updated: true --- diff --git a/website/docs/guides/creating-new-materializations.md b/website/docs/guides/creating-new-materializations.md index 963141dc335..12bdd0685b6 100644 --- a/website/docs/guides/creating-new-materializations.md +++ b/website/docs/guides/creating-new-materializations.md @@ -172,13 +172,6 @@ For more information on the `config` dbt Jinja function, see the [config](/refer ## Materialization precedence - -:::info New in 0.15.1 - -The materialization resolution order was poorly defined in versions of dbt prior to 0.15.1. Please use this guide for versions of dbt greater than or equal to 0.15.1. - -::: - dbt will pick the materialization macro in the following order (lower takes priority): 1. global project - default diff --git a/website/docs/guides/orchestration/custom-cicd-pipelines/3-dbt-cloud-job-on-merge.md b/website/docs/guides/custom-cicd-pipelines.md similarity index 58% rename from website/docs/guides/orchestration/custom-cicd-pipelines/3-dbt-cloud-job-on-merge.md rename to website/docs/guides/custom-cicd-pipelines.md index d22d1d14284..094a30eed31 100644 --- a/website/docs/guides/orchestration/custom-cicd-pipelines/3-dbt-cloud-job-on-merge.md +++ b/website/docs/guides/custom-cicd-pipelines.md @@ -1,13 +1,64 @@ --- -title: Run a dbt Cloud job on merge -id: 3-dbt-cloud-job-on-merge +title: Customizing CI/CD with Custom Pipelines +id: custom-cicd-pipelines +description: "Learn the benefits of version-controlled analytics code and custom pipelines in dbt for enhanced code testing and workflow automation during the development process." +displayText: Learn version-controlled code, custom pipelines, and enhanced code testing. +hoverSnippet: Learn version-controlled code, custom pipelines, and enhanced code testing. +time_to_complete: '60 minutes' +icon: 'guides' +hide_table_of_contents: true +tags: ['dbt Cloud', 'Orchestration'] +level: 'Intermediate' +recently_updated: true --- +## Introduction + +One of the core tenets of dbt is that analytic code should be version controlled. This provides a ton of benefit to your organization in terms of collaboration, code consistency, stability, and the ability to roll back to a prior version. There’s an additional benefit that is provided with your code hosting platform that is often overlooked or underutilized. Some of you may have experience using dbt Cloud’s [webhook functionality](https://docs.getdbt.com/docs/dbt-cloud/using-dbt-cloud/cloud-enabling-continuous-integration) to run a job when a PR is created. This is a fantastic capability, and meets most use cases for testing your code before merging to production. However, there are circumstances when an organization needs additional functionality, like running workflows on every commit (linting), or running workflows after a merge is complete. In this article, we will show you how to setup custom pipelines to lint your project and trigger a dbt Cloud job via the API. + +A note on parlance in this article since each code hosting platform uses different terms for similar concepts. The terms `pull request` (PR) and `merge request` (MR) are used interchangeably to mean the process of merging one branch into another branch. + + +### What are pipelines? + +Pipelines (which are known by many names, such as workflows, actions, or build steps) are a series of pre-defined jobs that are triggered by specific events in your repository (PR created, commit pushed, branch merged, etc). Those jobs can do pretty much anything your heart desires assuming you have the proper security access and coding chops. + +Jobs are executed on [runners](https://docs.github.com/en/actions/learn-github-actions/understanding-github-actions#runners), which are virtual servers. The runners come pre-configured with Ubuntu Linux, macOS, or Windows. That means the commands you execute are determined by the operating system of your runner. You’ll see how this comes into play later in the setup, but for now just remember that your code is executed on virtual servers that are, typically, hosted by the code hosting platform. + +![Diagram of how pipelines work](/img/guides/orchestration/custom-cicd-pipelines/pipeline-diagram.png) + +Please note, runners hosted by your code hosting platform provide a certain amount of free time. After that, billing charges may apply depending on how your account is setup. You also have the ability to host your own runners. That is beyond the scope of this article, but checkout the links below for more information if you’re interested in setting that up: + +- Repo-hosted runner billing information: + - [GitHub](https://docs.github.com/en/billing/managing-billing-for-github-actions/about-billing-for-github-actions) + - [GitLab](https://docs.gitlab.com/ee/ci/pipelines/cicd_minutes.html) + - [Bitbucket](https://bitbucket.org/product/features/pipelines#) +- Self-hosted runner information: + - [GitHub](https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners) + - [GitLab](https://docs.gitlab.com/runner/) + - [Bitbucket](https://support.atlassian.com/bitbucket-cloud/docs/runners/) + +Additionally, if you’re using the free tier of GitLab you can still follow this guide, but it may ask you to provide a credit card to verify your account. You’ll see something like this the first time you try to run a pipeline: + +![Warning from GitLab showing payment information is required](/img/guides/orchestration/custom-cicd-pipelines/gitlab-cicd-payment-warning.png) + + +### How to setup pipelines + +This guide provides details for multiple code hosting platforms. Where steps are unique, they are presented without a selection option. If code is specific to a platform (i.e. GitHub, GitLab, Bitbucket) you will see a selection option for each. + +Pipelines can be triggered by various events. The [dbt Cloud webhook](https://docs.getdbt.com/docs/dbt-cloud/using-dbt-cloud/cloud-enabling-continuous-integration) process already triggers a run if you want to run your jobs on a merge request, so this guide focuses on running pipelines for every push and when PRs are merged. Since pushes happen frequently in a project, we’ll keep this job super simple and fast by linting with SQLFluff. The pipeline that runs on merge requests will run less frequently, and can be used to call the dbt Cloud API to trigger a specific job. This can be helpful if you have specific requirements that need to happen when code is updated in production, like running a `--full-refresh` on all impacted incremental models. + +Here’s a quick look at what this pipeline will accomplish: + +![Diagram showing the pipelines to be created and the programs involved](/img/guides/orchestration/custom-cicd-pipelines/pipeline-programs-diagram.png) + +## Run a dbt Cloud job on merge + This job will take a bit more to setup, but is a good example of how to call the dbt Cloud API from a CI/CD pipeline. The concepts presented here can be generalized and used in whatever way best suits your use case. The setup below shows how to call the dbt Cloud API to run a job every time there's a push to your main branch (The branch where pull requests are typically merged. Commonly referred to as the main, primary, or master branch, but can be named differently). - ### 1. Get your dbt Cloud API key When running a CI/CD pipeline you’ll want to use a service token instead of any individual’s API key. There are [detailed docs](https://docs.getdbt.com/docs/dbt-cloud-apis/service-tokens) available on this, but below is a quick rundown (this must be performed by an Account Admin): @@ -28,7 +79,7 @@ Here’s a video showing the steps as well: ### 2. Put your dbt Cloud API key into your repo -This next part will happen in you code hosting platform. We need to save your API key from above into a repository secret so the job we create can access it. It is **not** recommended to ever save passwords or API keys in your code, so this step ensures that your key stays secure, but is still usable for your pipelines. +This next part will happen in you code hosting platform. We need to save your API key from above into a repository secret so the job we create can access it. It is **not** recommended to ever save passwords or API keys in your code, so this step ensures that your key stays secure, but is still usable for your pipelines. *CI/CD* - Under the *Variables* section, click *Expand,* then click *Add variable* - It will ask you for a name, so let’s call ours `DBT_API_KEY` - - **It’s very important that you copy/paste this name exactly because it’s used in the scripts below.** + - **It’s very important that you copy/paste this name exactly because it’s used in the scripts below.** - In the *Value* section, paste in the key you copied from dbt Cloud - Make sure the check box next to *Protect variable* is unchecked, and the box next to *Mask variable* is selected (see below) - - “Protected” means that the variable is only available in pipelines that run on protected branches or protected tags - that won’t work for us because we want to run this pipeline on multiple branches. “Masked” means that it will be available to your pipeline runner, but will be masked in the logs. - + - “Protected” means that the variable is only available in pipelines that run on protected branches or protected tags - that won’t work for us because we want to run this pipeline on multiple branches. “Masked” means that it will be available to your pipeline runner, but will be masked in the logs. + ![View of the GitLab window for entering DBT_API_KEY](/img/guides/orchestration/custom-cicd-pipelines/dbt-api-key-gitlab.png) - + Here’s a video showing these steps: - + - + @@ -91,7 +142,7 @@ In Azure: - Select *Starter pipeline* (this will be updated later in Step 4) - Click on *Variables* and then *New variable* - In the *Name* field, enter the `DBT_API_KEY` - - **It’s very important that you copy/paste this name exactly because it’s used in the scripts below.** + - **It’s very important that you copy/paste this name exactly because it’s used in the scripts below.** - In the *Value* section, paste in the key you copied from dbt Cloud - Make sure the check box next to *Keep this value secret* is checked. This will mask the value in logs, and you won't be able to see the value for the variable in the UI. - Click *OK* and then *Save* to save the variable @@ -99,7 +150,7 @@ In Azure: - + In Bitbucket: @@ -108,16 +159,16 @@ In Bitbucket: - In the left menu, click *Repository Settings* - Scroll to the bottom of the left menu, and select *Repository variables* - In the *Name* field, input `DBT_API_KEY` - - **It’s very important that you copy/paste this name exactly because it’s used in the scripts below.** + - **It’s very important that you copy/paste this name exactly because it’s used in the scripts below.** - In the *Value* section, paste in the key you copied from dbt Cloud - Make sure the check box next to *Secured* is checked. This will mask the value in logs, and you won't be able to see the value for the variable in the UI. - Click *Add* to save the variable - + ![View of the Bitbucket window for entering DBT_API_KEY](/img/guides/orchestration/custom-cicd-pipelines/dbt-api-key-bitbucket.png) - + Here’s a video showing these steps: - + @@ -304,13 +355,12 @@ run-dbt-cloud-job: - For this new job, open the existing Azure pipeline you created above and select the *Edit* button. We'll want to edit the corresponding Azure pipeline YAML file with the appropriate configuration, instead of the starter code, along with including a `variables` section to pass in the required variables. -Copy the below YAML file into your Azure pipeline and update the variables below to match your setup based on the comments in the file. It's worth noting that we changed the `trigger` section so that it will run **only** when there are pushes to a branch named `main` (like a PR merged to your main branch). +Copy the below YAML file into your Azure pipeline and update the variables below to match your setup based on the comments in the file. It's worth noting that we changed the `trigger` section so that it will run **only** when there are pushes to a branch named `main` (like a PR merged to your main branch). Read through [Azure's docs](https://learn.microsoft.com/en-us/azure/devops/pipelines/build/triggers?view=azure-devops) on these filters for additional use cases. @@ -406,13 +456,12 @@ pipelines: - ### 5. Test your new action -Now that you have a shiny new action, it’s time to test it out! Since this change is setup to only run on merges to your default branch, you’ll need to create and merge this change into your main branch. Once you do that, you’ll see a new pipeline job has been triggered to run the dbt Cloud job you assigned in the variables section. +Now that you have a shiny new action, it’s time to test it out! Since this change is setup to only run on merges to your default branch, you’ll need to create and merge this change into your main branch. Once you do that, you’ll see a new pipeline job has been triggered to run the dbt Cloud job you assigned in the variables section. Additionally, you’ll see the job in the run history of dbt Cloud. It should be fairly easy to spot because it will say it was triggered by the API, and the *INFO* section will have the branch you used for this guide. @@ -454,3 +503,140 @@ Additionally, you’ll see the job in the run history of dbt Cloud. It should be + +## Run a dbt Cloud job on pull request + +If your git provider is not one with a native integration with dbt Cloud, but you still want to take advantage of CI builds, you've come to the right spot! With just a bit of work it's possible to setup a job that will run a dbt Cloud job when a pull request (PR) is created. + +:::info Run on PR + +If your git provider has a native integration with dbt Cloud, you can take advantage of the setup instructions [here](/docs/deploy/ci-jobs). +This section is only for those projects that connect to their git repository using an SSH key. + +::: + +The setup for this pipeline will use the same steps as the prior page. Before moving on, **follow steps 1-5 from the [prior page](https://docs.getdbt.com/guides/orchestration/custom-cicd-pipelines/3-dbt-cloud-job-on-merge)** + +### 1. Create a pipeline job that runs when PRs are created + + + + +For this job, we'll set it up using the `bitbucket-pipelines.yml` file as in the prior step. The YAML file will look pretty similar to our earlier job, but we’ll pass in the required variables to the Python script using `export` statements. Update this section to match your setup based on the comments in the file. + +**What is this pipeline going to do?** +The setup below will trigger a dbt Cloud job to run every time a PR is opened in this repository. It will also run a fresh version of the pipeline for every commit that is made on the PR until it is merged. +For example: If you open a PR, it will run the pipeline. If you then decide additional changes are needed, and commit/push to the PR branch, a new pipeline will run with the updated code. + +The following varibles control this job: + +- `DBT_JOB_BRANCH`: Tells the dbt Cloud job to run the code in the branch that created this PR +- `DBT_JOB_SCHEMA_OVERRIDE`: Tells the dbt Cloud job to run this into a custom target schema + - The format of this will look like: `DBT_CLOUD_PR_{REPO_KEY}_{PR_NUMBER}` + +```yaml +image: python:3.11.1 + + +pipelines: + # This job will run when pull requests are created in the repository + pull-requests: + '**': + - step: + name: 'Run dbt Cloud PR Job' + script: + # Check to only build if PR destination is master (or other branch). + # Comment or remove line below if you want to run on all PR's regardless of destination branch. + - if [ "${BITBUCKET_PR_DESTINATION_BRANCH}" != "main" ]; then printf 'PR Destination is not master, exiting.'; exit; fi + - export DBT_URL="https://cloud.getdbt.com" + - export DBT_JOB_CAUSE="Bitbucket Pipeline CI Job" + - export DBT_JOB_BRANCH=$BITBUCKET_BRANCH + - export DBT_JOB_SCHEMA_OVERRIDE="DBT_CLOUD_PR_"$BITBUCKET_PROJECT_KEY"_"$BITBUCKET_PR_ID + - export DBT_ACCOUNT_ID=00000 # enter your account id here + - export DBT_PROJECT_ID=00000 # enter your project id here + - export DBT_PR_JOB_ID=00000 # enter your job id here + - python python/run_and_monitor_dbt_job.py +``` + + + + +### 2. Confirm the pipeline runs + +Now that you have a new pipeline, it's time to run it and make sure it works. Since this only triggers when a PR is created, you'll need to create a new PR on a branch that contains the code above. Once you do that, you should see a pipeline that looks like this: + + + + +Bitbucket pipeline: +![dbt run on PR job in Bitbucket](/img/guides/orchestration/custom-cicd-pipelines/bitbucket-run-on-pr.png) + +dbt Cloud job: +![dbt Cloud job showing it was triggered by Bitbucket](/img/guides/orchestration/custom-cicd-pipelines/bitbucket-dbt-cloud-pr.png) + + + + +### 3. Handle those extra schemas in your database + +As noted above, when the PR job runs it will create a new schema based on the PR. To avoid having your database overwhelmed with PR schemas, consider adding a "cleanup" job to your dbt Cloud account. This job can run on a scheduled basis to cleanup any PR schemas that haven't been updated/used recently. + +Add this as a macro to your project. It takes 2 arguments that lets you control which schema get dropped: + +- `age_in_days`: The number of days since the schema was last altered before it should be dropped (default 10 days) +- `database_to_clean`: The name of the database to remove schemas from + +```sql +{# + This macro finds PR schemas older than a set date and drops them + The macro defaults to 10 days old, but can be configured with the input argument age_in_days + Sample usage with different date: + dbt run-operation pr_schema_cleanup --args "{'database_to_clean': 'analytics','age_in_days':'15'}" +#} +{% macro pr_schema_cleanup(database_to_clean, age_in_days=10) %} + + {% set find_old_schemas %} + select + 'drop schema {{ database_to_clean }}.'||schema_name||';' + from {{ database_to_clean }}.information_schema.schemata + where + catalog_name = '{{ database_to_clean | upper }}' + and schema_name ilike 'DBT_CLOUD_PR%' + and last_altered <= (current_date() - interval '{{ age_in_days }} days') + {% endset %} + + {% if execute %} + + {{ log('Schema drop statements:' ,True) }} + + {% set schema_drop_list = run_query(find_old_schemas).columns[0].values() %} + + {% for schema_to_drop in schema_drop_list %} + {% do run_query(schema_to_drop) %} + {{ log(schema_to_drop ,True) }} + {% endfor %} + + {% endif %} + +{% endmacro %} +``` + +This macro goes into a dbt Cloud job that is run on a schedule. The command will look like this (text below for copy/paste): +![dbt Cloud job showing the run operation command for the cleanup macro](/img/guides/orchestration/custom-cicd-pipelines/dbt-macro-cleanup-pr.png) +`dbt run-operation pr_schema_cleanup --args "{ 'database_to_clean': 'development','age_in_days':15}"` + +## Consider risk of conflicts when using multiple orchestration tools + +Running dbt Cloud jobs through a CI/CD pipeline is a form of job orchestration. If you also run jobs using dbt Cloud’s built in scheduler, you now have 2 orchestration tools running jobs. The risk with this is that you could run into conflicts - you can imagine a case where you are triggering a pipeline on certain actions and running scheduled jobs in dbt Cloud, you would probably run into job clashes. The more tools you have, the more you have to make sure everything talks to each other. + +That being said, if **the only reason you want to use pipelines is for adding a lint check or run on merge**, you might decide the pros outweigh the cons, and as such you want to go with a hybrid approach. Just keep in mind that if two processes try and run the same job at the same time, dbt Cloud will queue the jobs and run one after the other. It’s a balancing act but can be accomplished with diligence to ensure you’re orchestrating jobs in a manner that does not conflict. diff --git a/website/docs/guides/dbt-ecosystem/databricks-guides/how_to_optimize_dbt_models_on_databricks.md b/website/docs/guides/dbt models on Databricks.md similarity index 97% rename from website/docs/guides/dbt-ecosystem/databricks-guides/how_to_optimize_dbt_models_on_databricks.md rename to website/docs/guides/dbt models on Databricks.md index cb7390fa799..5bb6de61e77 100644 --- a/website/docs/guides/dbt-ecosystem/databricks-guides/how_to_optimize_dbt_models_on_databricks.md +++ b/website/docs/guides/dbt models on Databricks.md @@ -1,9 +1,18 @@ --- -title: How to optimize and troubleshoot dbt models on Databricks -sidebar_label: "How to optimize and troubleshoot dbt models on Databricks" +title: Optimize and troubleshoot dbt models on Databricks +sidebar_label: "Optimize and troubleshoot dbt models on Databricks" description: "Learn more about optimizing and troubleshooting your dbt models on Databricks" +displayText: Optimizing and troubleshooting your dbt models on Databricks +hoverSnippet: Learn how to optimize and troubleshoot your dbt models on Databricks. +time_to_complete: '30 minutes' +icon: 'databricks' +hide_table_of_contents: true +tags: ['Databricks', 'dbt Core','dbt Cloud'] +level: 'Intermediate' +recently_updated: true --- +## Introduction Continuing our Databricks and dbt guide series from the last [guide](/guides/dbt-ecosystem/databricks-guides/how-to-set-up-your-databricks-dbt-project), it’s time to talk about performance optimization. In this follow-up post,  we outline simple strategies to optimize for cost, performance, and simplicity when architecting your data pipelines. We’ve encapsulated these strategies in this acronym-framework: @@ -11,7 +20,7 @@ Continuing our Databricks and dbt guide series from the last [guide](/guides/dbt - Patterns & Best Practices - Performance Troubleshooting -## 1. Platform Components +## Platform Components As you start to develop your dbt projects, one of the first decisions you will make is what kind of backend infrastructure to run your models against. Databricks offers SQL warehouses, All-Purpose Compute, and Jobs Compute, each optimized to workloads they are catered to. Our recommendation is to use Databricks SQL warehouses for all your SQL workloads. SQL warehouses are optimized for SQL workloads when compared to other compute options, additionally, they can scale both vertically to support larger workloads and horizontally to support concurrency. Also, SQL warehouses are easier to manage and provide out-of-the-box features such as query history to help audit and optimize your SQL workloads. Between Serverless, Pro, and Classic SQL Warehouse types that Databricks offers, our standard recommendation for you is to leverage Databricks serverless warehouses. You can explore features of these warehouse types in the [Compare features section](https://www.databricks.com/product/pricing/databricks-sql?_gl=1*2rsmlo*_ga*ZmExYzgzZDAtMWU0Ny00N2YyLWFhYzEtM2RhZTQzNTAyZjZi*_ga_PQSEQ3RZQC*MTY3OTYwMDg0Ni4zNTAuMS4xNjc5NjAyMDMzLjUzLjAuMA..&_ga=2.104593536.1471430337.1679342371-fa1c83d0-1e47-47f2-aac1-3dae43502f6b) on the Databricks pricing page. @@ -31,7 +40,7 @@ Another technique worth implementing is to provision separate SQL warehouses for Because of the ability of serverless warehouses to spin up in a matter of seconds, setting your auto-stop configuration to a lower threshold will not impact SLAs and end-user experience. From the SQL Workspace UI, the default value is 10 minutes and  you can set it to 5 minutes for a lower threshold with the UI. If you would like more custom settings, you can set the threshold to as low as 1 minute with the [API](https://docs.databricks.com/sql/api/sql-endpoints.html#). -## 2. Patterns & Best Practices +## Patterns & Best Practices Now that we have a solid sense of the infrastructure components, we can shift our focus to best practices and design patterns on pipeline development.  We recommend the staging/intermediate/mart approach which is analogous to the medallion architecture bronze/silver/gold approach that’s recommended by Databricks. Let’s dissect each stage further. @@ -121,7 +130,7 @@ incremental_predicates = [ }} ``` -## 3. Performance Troubleshooting +## Performance Troubleshooting Performance troubleshooting refers to the process of identifying and resolving issues that impact the performance of your dbt models and overall data pipelines. By improving the speed and performance of your Lakehouse platform, you will be able to process data faster, process large and complex queries more effectively, and provide faster time to market.  Let’s go into detail the three effective strategies that you can implement. @@ -166,7 +175,7 @@ Now you might be wondering, how do you identify opportunities for performance im With the [dbt Cloud Admin API](/docs/dbt-cloud-apis/admin-cloud-api), you can  pull the dbt artifacts from your dbt Cloud run,  put the generated `manifest.json` into an S3 bucket, stage it, and model the data using the [dbt artifacts package](https://hub.getdbt.com/brooklyn-data/dbt_artifacts/latest/). That package can help you identify inefficiencies in your dbt models and pinpoint where opportunities for improvement are. -## Conclusion +### Conclusion This concludes the second guide in our series on “Working with Databricks and dbt”, following [How to set up your Databricks and dbt Project](/guides/dbt-ecosystem/databricks-guides/how-to-set-up-your-databricks-dbt-project). diff --git a/website/docs/guides/debugging-schema-names.md b/website/docs/guides/debugging-schema-names.md index 1778d25d0b4..fbd1ce0ae69 100644 --- a/website/docs/guides/debugging-schema-names.md +++ b/website/docs/guides/debugging-schema-names.md @@ -8,7 +8,7 @@ time_to_complete: '45 minutes' platform: 'dbt-core' icon: 'guides' hide_table_of_contents: true -tags: ['schema names', 'dbt Core', 'legacy'] +tags: ['dbt Core', 'legacy'] level: 'Advanced' recently_updated: true --- diff --git a/website/docs/guides/dbt-ecosystem/databricks-guides/how-to-set-up-your-databricks-dbt-project.md b/website/docs/guides/how-to-set-up-your-databricks-dbt-project.md similarity index 90% rename from website/docs/guides/dbt-ecosystem/databricks-guides/how-to-set-up-your-databricks-dbt-project.md rename to website/docs/guides/how-to-set-up-your-databricks-dbt-project.md index ad12bdca725..1ca1940cc50 100644 --- a/website/docs/guides/dbt-ecosystem/databricks-guides/how-to-set-up-your-databricks-dbt-project.md +++ b/website/docs/guides/how-to-set-up-your-databricks-dbt-project.md @@ -1,5 +1,16 @@ -# How to set up your Databricks and dbt project - +--- +title: How to set up your Databricks and dbt project +sidebar_label: "How to set up your Databricks and dbt project" +description: "Learn more about setting up your dbt project with Databricks" +displayText: Setting up your dbt project with Databricks +hoverSnippet: Learn how to set up your dbt project with Databricks. +time_to_complete: '30 minutes' +icon: 'databricks' +hide_table_of_contents: true +tags: ['Databricks', 'dbt Core','dbt Cloud'] +level: 'Intermediate' +recently_updated: true +--- Databricks and dbt Labs are partnering to help data teams think like software engineering teams and ship trusted data, faster. The dbt-databricks adapter enables dbt users to leverage the latest Databricks features in their dbt project. Hundreds of customers are now using dbt and Databricks to build expressive and reliable data pipelines on the Lakehouse, generating data assets that enable analytics, ML, and AI use cases throughout the business. @@ -80,9 +91,9 @@ For your development credentials/profiles.yml: During your first invocation of `dbt run`, dbt will create the developer schema if it doesn't already exist in the dev catalog. -### Defining your dbt deployment environment +## Defining your dbt deployment environment -Last, we need to give dbt a way to deploy code outside of development environments. To do so, we’ll use dbt [environments](https://docs.getdbt.com/docs/collaborate/environments) to define the production targets that end users will interact with. +We need to give dbt a way to deploy code outside of development environments. To do so, we’ll use dbt [environments](https://docs.getdbt.com/docs/collaborate/environments) to define the production targets that end users will interact with. Core projects can use [targets in profiles](https://docs.getdbt.com/docs/core/connection-profiles#understanding-targets-in-profiles) to separate environments. [dbt Cloud environments](https://docs.getdbt.com/docs/cloud/develop-in-the-cloud#set-up-and-access-the-cloud-ide) allow you to define environments via the UI and [schedule jobs](/guides/databricks#create-and-run-a-job) for specific environments. @@ -94,10 +105,10 @@ Let’s set up our deployment environment: 4. Set the schema to the default for your prod environment. This can be overridden by [custom schemas](https://docs.getdbt.com/docs/build/custom-schemas#what-is-a-custom-schema) if you need to use more than one. 5. Provide your Service Principal token. -### Connect dbt to your git repository +## Connect dbt to your git repository Next, you’ll need somewhere to store and version control your code that allows you to collaborate with teammates. Connect your dbt project to a git repository with [dbt Cloud](/guides/databricks#set-up-a-dbt-cloud-managed-repository). [Core](/guides/manual-install#create-a-repository) projects will use the git CLI. -## Next steps +### Next steps -Now that your project is configured, you can start transforming your Databricks data with dbt. To help you scale efficiently, we recommend you follow our best practices, starting with the ["Unity Catalog best practices" guide](dbt-unity-catalog-best-practices). +Now that your project is configured, you can start transforming your Databricks data with dbt. To help you scale efficiently, we recommend you follow our best practices, starting with the [Unity Catalog best practices](/best-practices/dbt-unity-catalog-best-practices), then you can [Optimize dbt models on Databricks](/guides/how_to_optimize_dbt_models_on_databricks) . diff --git a/website/docs/guides/orchestration/how-to-use-databricks-workflows-to-run-dbt-cloud-jobs.md b/website/docs/guides/how-to-use-databricks-workflows-to-run-dbt-cloud-jobs.md similarity index 96% rename from website/docs/guides/orchestration/how-to-use-databricks-workflows-to-run-dbt-cloud-jobs.md rename to website/docs/guides/how-to-use-databricks-workflows-to-run-dbt-cloud-jobs.md index bb1045b3d2f..f80dc081c8b 100644 --- a/website/docs/guides/orchestration/how-to-use-databricks-workflows-to-run-dbt-cloud-jobs.md +++ b/website/docs/guides/how-to-use-databricks-workflows-to-run-dbt-cloud-jobs.md @@ -4,7 +4,14 @@ id: how-to-use-databricks-workflows-to-run-dbt-cloud-jobs description: Learn how to use Databricks workflows to run dbt Cloud jobs displayText: "Use Databricks workflows to run dbt Cloud jobs" hoverSnippet: Learn how to use Databricks workflows to run dbt Cloud jobs +time_to_complete: '60 minutes' +icon: 'databricks' +hide_table_of_contents: true +tags: ['Databricks', 'dbt Core','dbt Cloud','Orchestration'] +level: 'Intermediate' +recently_updated: true --- +## Introduction Using Databricks workflows to call the dbt Cloud job API can be useful for several reasons: @@ -13,7 +20,7 @@ Using Databricks workflows to call the dbt Cloud job API can be useful for sever 3. [**Separation of concerns —**](https://en.wikipedia.org/wiki/Separation_of_concerns) Detailed logs for dbt jobs in the dbt Cloud environment can lead to more modularity and efficient debugging. By doing so, it becomes easier to isolate bugs quickly while still being able to see the overall status in Databricks. 4. **Custom job triggering —** Use a Databricks workflow to trigger dbt Cloud jobs based on custom conditions or logic that aren't natively supported by dbt Cloud's scheduling feature. This can give you more flexibility in terms of when and how your dbt Cloud jobs run. -## Prerequisites +### Prerequisites - Active [Teams or Enterprise dbt Cloud account](https://www.getdbt.com/pricing/) - You must have a configured and existing [dbt Cloud deploy job](/docs/deploy/deploy-jobs) @@ -29,7 +36,7 @@ To use Databricks workflows for running dbt Cloud jobs, you need to perform the - [Create a Databricks Python notebook](#create-a-databricks-python-notebook) - [Configure the workflows to run the dbt Cloud jobs](#configure-the-workflows-to-run-the-dbt-cloud-jobs) -### Set up a Databricks secret scope +## Set up a Databricks secret scope 1. Retrieve **[User API Token](https://docs.getdbt.com/docs/dbt-cloud-apis/user-tokens#user-api-tokens) **or **[Service Account Token](https://docs.getdbt.com/docs/dbt-cloud-apis/service-tokens#generating-service-account-tokens) **from dbt Cloud 2. Set up a **Databricks secret scope**, which is used to securely store your dbt Cloud API key. @@ -47,7 +54,7 @@ databricks secrets put --scope --key --s 5. Replace **``** with the actual API key value that you copied from dbt Cloud in step 1. -### Create a Databricks Python notebook +## Create a Databricks Python notebook 1. [Create a **Databricks Python notebook**](https://docs.databricks.com/notebooks/notebooks-manage.html), which executes a Python script that calls the dbt Cloud job API. @@ -165,7 +172,7 @@ DbtJobRunStatus.SUCCESS You can cancel the job from dbt Cloud if necessary. ::: -### Configure the workflows to run the dbt Cloud jobs +## Configure the workflows to run the dbt Cloud jobs You can set up workflows directly from the notebook OR by adding this notebook to one of your existing workflows: @@ -206,6 +213,4 @@ You can set up workflows directly from the notebook OR by adding this notebook t Multiple Workflow tasks can be set up using the same notebook by configuring the `job_id` parameter to point to different dbt Cloud jobs. -## Closing - Using Databricks workflows to access the dbt Cloud job API can improve integration of your data pipeline processes and enable scheduling of more complex workflows. diff --git a/website/docs/guides/migrating-from-spark-to-databricks.md b/website/docs/guides/migrating-from-spark-to-databricks.md index f9255c585db..dd128a330e3 100644 --- a/website/docs/guides/migrating-from-spark-to-databricks.md +++ b/website/docs/guides/migrating-from-spark-to-databricks.md @@ -8,7 +8,7 @@ time_to_complete: '30 minutes' platform: ['dbt-core','dbt-cloud'] icon: 'guides' hide_table_of_contents: true -tags: ['migration', 'dbt Core','dbt Cloud'] +tags: ['Migration', 'dbt Core','dbt Cloud'] level: 'Intermediate' recently_updated: true --- diff --git a/website/docs/guides/migrating-from-stored-procedures.md b/website/docs/guides/migrating-from-stored-procedures.md index e8abff49aec..72f0dee7810 100644 --- a/website/docs/guides/migrating-from-stored-procedures.md +++ b/website/docs/guides/migrating-from-stored-procedures.md @@ -8,7 +8,7 @@ time_to_complete: '30 minutes' platform: 'dbt-core' icon: 'guides' hide_table_of_contents: true -tags: ['materializations', 'dbt Core'] +tags: ['Migration', 'dbt Core'] level: 'Beginner' recently_updated: true --- diff --git a/website/docs/guides/orchestration/custom-cicd-pipelines/1-cicd-background.md b/website/docs/guides/orchestration/custom-cicd-pipelines/1-cicd-background.md deleted file mode 100644 index a66259c6c49..00000000000 --- a/website/docs/guides/orchestration/custom-cicd-pipelines/1-cicd-background.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Customizing CI/CD with Custom Pipelines -id: 1-cicd-background ---- - -One of the core tenets of dbt is that analytic code should be version controlled. This provides a ton of benefit to your organization in terms of collaboration, code consistency, stability, and the ability to roll back to a prior version. There’s an additional benefit that is provided with your code hosting platform that is often overlooked or underutilized. Some of you may have experience using dbt Cloud’s [webhook functionality](https://docs.getdbt.com/docs/dbt-cloud/using-dbt-cloud/cloud-enabling-continuous-integration) to run a job when a PR is created. This is a fantastic capability, and meets most use cases for testing your code before merging to production. However, there are circumstances when an organization needs additional functionality, like running workflows on every commit (linting), or running workflows after a merge is complete. In this article, we will show you how to setup custom pipelines to lint your project and trigger a dbt Cloud job via the API. - -A note on parlance in this article since each code hosting platform uses different terms for similar concepts. The terms `pull request` (PR) and `merge request` (MR) are used interchangeably to mean the process of merging one branch into another branch. - - -## What are pipelines? - -Pipelines (which are known by many names, such as workflows, actions, or build steps) are a series of pre-defined jobs that are triggered by specific events in your repository (PR created, commit pushed, branch merged, etc). Those jobs can do pretty much anything your heart desires assuming you have the proper security access and coding chops. - -Jobs are executed on [runners](https://docs.github.com/en/actions/learn-github-actions/understanding-github-actions#runners), which are virtual servers. The runners come pre-configured with Ubuntu Linux, macOS, or Windows. That means the commands you execute are determined by the operating system of your runner. You’ll see how this comes into play later in the setup, but for now just remember that your code is executed on virtual servers that are, typically, hosted by the code hosting platform. - -![Diagram of how pipelines work](/img/guides/orchestration/custom-cicd-pipelines/pipeline-diagram.png) - -Please note, runners hosted by your code hosting platform provide a certain amount of free time. After that, billing charges may apply depending on how your account is setup. You also have the ability to host your own runners. That is beyond the scope of this article, but checkout the links below for more information if you’re interested in setting that up: - -- Repo-hosted runner billing information: - - [GitHub](https://docs.github.com/en/billing/managing-billing-for-github-actions/about-billing-for-github-actions) - - [GitLab](https://docs.gitlab.com/ee/ci/pipelines/cicd_minutes.html) - - [Bitbucket](https://bitbucket.org/product/features/pipelines#) -- Self-hosted runner information: - - [GitHub](https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners) - - [GitLab](https://docs.gitlab.com/runner/) - - [Bitbucket](https://support.atlassian.com/bitbucket-cloud/docs/runners/) - -Additionally, if you’re using the free tier of GitLab you can still follow this guide, but it may ask you to provide a credit card to verify your account. You’ll see something like this the first time you try to run a pipeline: - -![Warning from GitLab showing payment information is required](/img/guides/orchestration/custom-cicd-pipelines/gitlab-cicd-payment-warning.png) - - -## How to setup pipelines - -This guide provides details for multiple code hosting platforms. Where steps are unique, they are presented without a selection option. If code is specific to a platform (i.e. GitHub, GitLab, Bitbucket) you will see a selection option for each. - -Pipelines can be triggered by various events. The [dbt Cloud webhook](https://docs.getdbt.com/docs/dbt-cloud/using-dbt-cloud/cloud-enabling-continuous-integration) process already triggers a run if you want to run your jobs on a merge request, so this guide focuses on running pipelines for every push and when PRs are merged. Since pushes happen frequently in a project, we’ll keep this job super simple and fast by linting with SQLFluff. The pipeline that runs on merge requests will run less frequently, and can be used to call the dbt Cloud API to trigger a specific job. This can be helpful if you have specific requirements that need to happen when code is updated in production, like running a `--full-refresh` on all impacted incremental models. - -Here’s a quick look at what this pipeline will accomplish: - -![Diagram showing the pipelines to be created and the programs involved](/img/guides/orchestration/custom-cicd-pipelines/pipeline-programs-diagram.png) diff --git a/website/docs/guides/orchestration/custom-cicd-pipelines/4-dbt-cloud-job-on-pr.md b/website/docs/guides/orchestration/custom-cicd-pipelines/4-dbt-cloud-job-on-pr.md deleted file mode 100644 index 1a75fdc17ac..00000000000 --- a/website/docs/guides/orchestration/custom-cicd-pipelines/4-dbt-cloud-job-on-pr.md +++ /dev/null @@ -1,131 +0,0 @@ ---- -title: Run a dbt Cloud job on pull request -id: 4-dbt-cloud-job-on-pr ---- - -:::info Run on PR - -If your git provider has a native integration with dbt Cloud, you can take advantage of the setup instructions [here](/docs/deploy/ci-jobs). -This section is only for those projects that connect to their git repository using an SSH key. - -::: - -If your git provider is not one with a native integration with dbt Cloud, but you still want to take advantage of CI builds, you've come to the right spot! With just a bit of work it's possible to setup a job that will run a dbt Cloud job when a pull request (PR) is created. - -The setup for this pipeline will use the same steps as the prior page. Before moving on, **follow steps 1-5 from the [prior page](https://docs.getdbt.com/guides/orchestration/custom-cicd-pipelines/3-dbt-cloud-job-on-merge)** - -### 6. Create a pipeline job that runs when PRs are created - - - -For this job, we'll set it up using the `bitbucket-pipelines.yml` file as in the prior step. The YAML file will look pretty similar to our earlier job, but we’ll pass in the required variables to the Python script using `export` statements. Update this section to match your setup based on the comments in the file. - -**What is this pipeline going to do?** -The setup below will trigger a dbt Cloud job to run every time a PR is opened in this repository. It will also run a fresh version of the pipeline for every commit that is made on the PR until it is merged. -For example: If you open a PR, it will run the pipeline. If you then decide additional changes are needed, and commit/push to the PR branch, a new pipeline will run with the updated code. - -The following varibles control this job: - - `DBT_JOB_BRANCH`: Tells the dbt Cloud job to run the code in the branch that created this PR - - `DBT_JOB_SCHEMA_OVERRIDE`: Tells the dbt Cloud job to run this into a custom target schema - - The format of this will look like: `DBT_CLOUD_PR_{REPO_KEY}_{PR_NUMBER}` - - -```yaml -image: python:3.11.1 - - -pipelines: - # This job will run when pull requests are created in the repository - pull-requests: - '**': - - step: - name: 'Run dbt Cloud PR Job' - script: - # Check to only build if PR destination is master (or other branch). - # Comment or remove line below if you want to run on all PR's regardless of destination branch. - - if [ "${BITBUCKET_PR_DESTINATION_BRANCH}" != "main" ]; then printf 'PR Destination is not master, exiting.'; exit; fi - - export DBT_URL="https://cloud.getdbt.com" - - export DBT_JOB_CAUSE="Bitbucket Pipeline CI Job" - - export DBT_JOB_BRANCH=$BITBUCKET_BRANCH - - export DBT_JOB_SCHEMA_OVERRIDE="DBT_CLOUD_PR_"$BITBUCKET_PROJECT_KEY"_"$BITBUCKET_PR_ID - - export DBT_ACCOUNT_ID=00000 # enter your account id here - - export DBT_PROJECT_ID=00000 # enter your project id here - - export DBT_PR_JOB_ID=00000 # enter your job id here - - python python/run_and_monitor_dbt_job.py -``` - - - - -### 7. Confirm the pipeline runs - -Now that you have a new pipeline, it's time to run it and make sure it works. Since this only triggers when a PR is created, you'll need to create a new PR on a branch that contains the code above. Once you do that, you should see a pipeline that looks like this: - - - - -Bitbucket pipeline: -![dbt run on PR job in Bitbucket](/img/guides/orchestration/custom-cicd-pipelines/bitbucket-run-on-pr.png) - -dbt Cloud job: -![dbt Cloud job showing it was triggered by Bitbucket](/img/guides/orchestration/custom-cicd-pipelines/bitbucket-dbt-cloud-pr.png) - - - - -### 8. Handle those extra schemas in your database - -As noted above, when the PR job runs it will create a new schema based on the PR. To avoid having your database overwhelmed with PR schemas, consider adding a "cleanup" job to your dbt Cloud account. This job can run on a scheduled basis to cleanup any PR schemas that haven't been updated/used recently. - -Add this as a macro to your project. It takes 2 arguments that lets you control which schema get dropped: - - `age_in_days`: The number of days since the schema was last altered before it should be dropped (default 10 days) - - `database_to_clean`: The name of the database to remove schemas from - -```sql -{# - This macro finds PR schemas older than a set date and drops them - The macro defaults to 10 days old, but can be configured with the input argument age_in_days - Sample usage with different date: - dbt run-operation pr_schema_cleanup --args "{'database_to_clean': 'analytics','age_in_days':'15'}" -#} -{% macro pr_schema_cleanup(database_to_clean, age_in_days=10) %} - - {% set find_old_schemas %} - select - 'drop schema {{ database_to_clean }}.'||schema_name||';' - from {{ database_to_clean }}.information_schema.schemata - where - catalog_name = '{{ database_to_clean | upper }}' - and schema_name ilike 'DBT_CLOUD_PR%' - and last_altered <= (current_date() - interval '{{ age_in_days }} days') - {% endset %} - - {% if execute %} - - {{ log('Schema drop statements:' ,True) }} - - {% set schema_drop_list = run_query(find_old_schemas).columns[0].values() %} - - {% for schema_to_drop in schema_drop_list %} - {% do run_query(schema_to_drop) %} - {{ log(schema_to_drop ,True) }} - {% endfor %} - - {% endif %} - -{% endmacro %} -``` - -This macro goes into a dbt Cloud job that is run on a schedule. The command will look like this (text below for copy/paste): -![dbt Cloud job showing the run operation command for the cleanup macro](/img/guides/orchestration/custom-cicd-pipelines/dbt-macro-cleanup-pr.png) -`dbt run-operation pr_schema_cleanup --args "{ 'database_to_clean': 'development','age_in_days':15}"` diff --git a/website/docs/guides/orchestration/custom-cicd-pipelines/5-something-to-consider.md b/website/docs/guides/orchestration/custom-cicd-pipelines/5-something-to-consider.md deleted file mode 100644 index 6b39c5ce405..00000000000 --- a/website/docs/guides/orchestration/custom-cicd-pipelines/5-something-to-consider.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Something to Consider -id: 5-something-to-consider ---- - -Running dbt Cloud jobs through a CI/CD pipeline is a form of job orchestration. If you also run jobs using dbt Cloud’s built in scheduler, you now have 2 orchestration tools running jobs. The risk with this is that you could run into conflicts - you can imagine a case where you are triggering a pipeline on certain actions and running scheduled jobs in dbt Cloud, you would probably run into job clashes. The more tools you have, the more you have to make sure everything talks to each other. - -That being said, if **the only reason you want to use pipelines is for adding a lint check or run on merge**, you might decide the pros outweigh the cons, and as such you want to go with a hybrid approach. Just keep in mind that if two processes try and run the same job at the same time, dbt Cloud will queue the jobs and run one after the other. It’s a balancing act but can be accomplished with diligence to ensure you’re orchestrating jobs in a manner that does not conflict. \ No newline at end of file diff --git a/website/docs/guides/orchestration/set-up-ci/1-introduction.md b/website/docs/guides/orchestration/set-up-ci/1-introduction.md deleted file mode 100644 index 97df16b4ce1..00000000000 --- a/website/docs/guides/orchestration/set-up-ci/1-introduction.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Get started with Continuous Integration tests" -slug: overview ---- - -By validating your code _before_ it goes into production, you don't need to spend your afternoon fielding messages from people whose reports are suddenly broken. - -A solid CI setup is critical to preventing avoidable downtime and broken trust. dbt Cloud uses **sensible defaults** to get you up and running in a performant and cost-effective way in minimal time. - -After that, there's time to get fancy, but let's walk before we run. diff --git a/website/docs/guides/orchestration/set-up-ci/2-quick-setup.md b/website/docs/guides/orchestration/set-up-ci/2-quick-setup.md deleted file mode 100644 index 0dcfba7eb06..00000000000 --- a/website/docs/guides/orchestration/set-up-ci/2-quick-setup.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: "Baseline: Enable CI in 15 minutes" -slug: in-15-minutes -description: Find issues before they are deployed to production with dbt Cloud's Slim CI. ---- - -In this guide, we're going to add a **CI environment**, where proposed changes can be validated in the context of the entire project without impacting production systems. We will use a single set of deployment credentials (like the Prod environment), but models are built in a separate location to avoid impacting others (like the Dev environment). - -Your git flow will look like this: - - -## Prerequisites - -As part of your initial dbt Cloud setup, you should already have Development and Production environments configured. Let's recap what each does: - -- Your **Development environment** powers the IDE. Each user has individual credentials, and builds into an individual dev schema. Nothing you do here impacts any of your colleagues. -- Your **Production environment** brings the canonical version of your project to life for downstream consumers. There is a single set of deployment credentials, and everything is built into your production schema(s). - -## Step 1: Create a new CI environment - -See [Create a new environment](/docs/dbt-cloud-environments#create-a-deployment-environment). The environment should be called **CI**. Just like your existing Production environment, it will be a Deployment-type environment. - -When setting a Schema in the **Deployment Credentials** area, remember that dbt Cloud will automatically generate a custom schema name for each PR to ensure that they don't interfere with your deployed models. This means you can safely set the same Schema name as your Production job. - -## Step 2: Double-check your Production environment is identified - -Go into your existing Production environment, and ensure that the **Set as Production environment** checkbox is set. It'll make things easier later. - -## Step 3: Create a new job in the CI environment - -Use the **Continuous Integration Job** template, and call the job **CI Check**. - -In the Execution Settings, your command will be preset to `dbt build --select state:modified+`. Let's break this down: - -- [`dbt build`](/reference/commands/build) runs all nodes (seeds, models, snapshots, tests) at once in DAG order. If something fails, nodes that depend on it will be skipped. -- The [`state:modified+` selector](/reference/node-selection/methods#the-state-method) means that only modified nodes and their children will be run ("Slim CI"). In addition to [not wasting time](https://discourse.getdbt.com/t/how-we-sped-up-our-ci-runs-by-10x-using-slim-ci/2603) building and testing nodes that weren't changed in the first place, this significantly reduces compute costs. - -To be able to find modified nodes, dbt needs to have something to compare against. dbt Cloud uses the last successful run of any job in your Production environment as its [comparison state](/reference/node-selection/syntax#about-node-selection). As long as you identified your Production environment in Step 2, you won't need to touch this. If you didn't, pick the right environment from the dropdown. - -## Step 4: Test your process - -That's it! There are other steps you can take to be even more confident in your work, such as [validating your structure follows best practices](/guides/orchestration/set-up-ci/run-dbt-project-evaluator) and [linting your code](/guides/orchestration/set-up-ci/lint-on-push), but this covers the most critical checks. - -To test your new flow, create a new branch in the dbt Cloud IDE then add a new file or modify an existing one. Commit it, then create a new Pull Request (not a draft). Within a few seconds, you’ll see a new check appear in your git provider. - -## Things to keep in mind - -- If you make a new commit while a CI run based on older code is in progress, it will be automatically canceled and replaced with the fresh code. -- An unlimited number of CI jobs can run at once. If 10 developers all commit code to different PRs at the same time, each person will get their own schema containing their changes. Once each PR is merged, dbt Cloud will drop that schema. -- CI jobs will never block a production run. diff --git a/website/docs/guides/orchestration/set-up-ci/3-run-dbt-project-evaluator.md b/website/docs/guides/orchestration/set-up-ci/3-run-dbt-project-evaluator.md deleted file mode 100644 index 646a9cb42b7..00000000000 --- a/website/docs/guides/orchestration/set-up-ci/3-run-dbt-project-evaluator.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: "Enforce best practices with dbt project evaluator" -slug: run-dbt-project-evaluator -description: dbt Project Evaluator can be run from inside of your existing dbt Cloud CI job to identify common flaws in projects. ---- - -dbt Project Evaluator is a package designed to identify deviations from best practices common to many dbt projects, including modeling, testing, documentation, structure and performance problems. For an introduction to the package, read its [launch blog post](/blog/align-with-dbt-project-evaluator). - -## Step 1: Install the package - -As with all packages, add a reference to `dbt-labs/dbt_project_evaluator` to your `packages.yml` file. See the [dbt Package Hub](https://hub.getdbt.com/dbt-labs/dbt_project_evaluator/latest/) for full installation instructions. - -## Step 2: Define test severity with an environment variable - -As noted in the [documentation](https://dbt-labs.github.io/dbt-project-evaluator/latest/ci-check/), tests in the package are set to `warn` severity by default. - -To have these tests fail in CI, create a new environment called `DBT_PROJECT_EVALUATOR_SEVERITY`. Set the project-wide default to `warn`, and set it to `error` in the CI environment. - -In your `dbt_project.yml` file, override the severity configuration: - -```yaml -tests: -dbt_project_evaluator: - +severity: "{{ env_var('DBT_PROJECT_EVALUATOR_SEVERITY', 'warn') }}" -``` - -## Step 3: Update your CI commands - -Because these tests should only run after the rest of your project has been built, your existing CI command will need to be updated to exclude the dbt_project_evaluator package. You will then add a second step which builds _only_ the package's models and tests. - -Update your steps to: - -```bash -dbt build --select state:modified+ --exclude package:dbt_project_evaluator -dbt build --select package:dbt_project_evaluator -``` - -## Step 4: Apply any customizations - -Depending on the state of your project when you roll out the evaluator, you may need to skip some tests or allow exceptions for some areas. To do this, refer to the documentation on: - -- [disabling tests](https://dbt-labs.github.io/dbt-project-evaluator/latest/customization/customization/) -- [excluding groups of models from a specific test](https://dbt-labs.github.io/dbt-project-evaluator/latest/customization/exceptions/) -- [excluding packages or sources/models based on path](https://dbt-labs.github.io/dbt-project-evaluator/latest/customization/excluding-packages-and-paths/) - -If you create a seed to exclude groups of models from a specific test, remember to disable the default seed and include `dbt_project_evaluator_exceptions` in your second `dbt build` command above. diff --git a/website/docs/guides/orchestration/set-up-ci/4-lint-on-push.md b/website/docs/guides/orchestration/set-up-ci/4-lint-on-push.md deleted file mode 100644 index bc080922ab5..00000000000 --- a/website/docs/guides/orchestration/set-up-ci/4-lint-on-push.md +++ /dev/null @@ -1,190 +0,0 @@ ---- -title: "Run linting checks with SQLFluff" -slug: lint-on-push -description: Enforce your organization's SQL style guide with by running SQLFluff in your git workflow whenever new code is pushed. ---- - -By [linting](/docs/cloud/dbt-cloud-ide/lint-format#lint) your project during CI, you can ensure that code styling standards are consistently enforced, without spending human time nitpicking comma placement. - -The steps below create an action/pipeline which uses [SQLFluff](https://docs.sqlfluff.com/en/stable/) to scan your code and look for linting errors. If you don't already have SQLFluff rules defined, check out [our recommended config file](/best-practices/how-we-style/2-how-we-style-our-sql). - -### 1. Create a YAML file to define your pipeline - -The YAML files defined below are what tell your code hosting platform the steps to run. In this setup, you’re telling the platform to run a SQLFluff lint job every time a commit is pushed. - - - - -GitHub Actions are defined in the `.github/workflows` directory. To define the job for your action, add a new file named `lint_on_push.yml` under the `workflows` folder. Your final folder structure will look like this: - -```sql -my_awesome_project -├── .github -│ ├── workflows -│ │ └── lint_on_push.yml -``` - -**Key pieces:** - -- `on:` defines when the pipeline is run. This workflow will run whenever code is pushed to any branch except `main`. For other trigger options, check out [GitHub’s docs](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows). -- `runs-on: ubuntu-latest` - this defines the operating system we’re using to run the job -- `uses:` - When the Ubuntu server is created, it is completely empty. [`checkout`](https://github.com/actions/checkout#checkout-v3) and [`setup-python`](https://github.com/actions/setup-python#setup-python-v3) are public GitHub Actions which enable the server to access the code in your repo, and set up Python correctly. -- `run:` - these steps are run at the command line, as though you typed them at a prompt yourself. This will install sqlfluff and lint the project. Be sure to set the correct `--dialect` for your project. - -For a full breakdown of the properties in a workflow file, see [Understanding the workflow file](https://docs.github.com/en/actions/learn-github-actions/understanding-github-actions#understanding-the-workflow-file) on GitHub's website. - -```yaml -name: lint dbt project on push - -on: - push: - branches-ignore: - - 'main' - -jobs: - # this job runs SQLFluff with a specific set of rules - # note the dialect is set to Snowflake, so make that specific to your setup - # details on linter rules: https://docs.sqlfluff.com/en/stable/rules.html - lint_project: - name: Run SQLFluff linter - runs-on: ubuntu-latest - - steps: - - uses: "actions/checkout@v3" - - uses: "actions/setup-python@v4" - with: - python-version: "3.9" - - name: Install SQLFluff - run: "pip install sqlfluff" - - name: Lint project - run: "sqlfluff lint models --dialect snowflake" - -``` - - - - -Create a `.gitlab-ci.yml` file in your **root directory** to define the triggers for when to execute the script below. You’ll put the code below into this file. - -```sql -my_awesome_project -├── dbt_project.yml -├── .gitlab-ci.yml -``` - -**Key pieces:** - -- `image: python:3.9` - this defines the virtual image we’re using to run the job -- `rules:` - defines when the pipeline is run. This workflow will run whenever code is pushed to any branch except `main`. For other rules, refer to [GitLab’s documentation](https://docs.gitlab.com/ee/ci/yaml/#rules). -- `script:` - this is how we’re telling the GitLab runner to execute the Python script we defined above. - -```yaml -image: python:3.9 - -stages: - - pre-build - -# this job runs SQLFluff with a specific set of rules -# note the dialect is set to Snowflake, so make that specific to your setup -# details on linter rules: https://docs.sqlfluff.com/en/stable/rules.html -lint-project: - stage: pre-build - rules: - - if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH != 'main' - script: - - pip install sqlfluff - - sqlfluff lint models --dialect snowflake -``` - - - - -Create a `bitbucket-pipelines.yml` file in your **root directory** to define the triggers for when to execute the script below. You’ll put the code below into this file. - -```sql -my_awesome_project -├── bitbucket-pipelines.yml -├── dbt_project.yml -``` - -**Key pieces:** - -- `image: python:3.11.1` - this defines the virtual image we’re using to run the job -- `'**':` - this is used to filter when the pipeline runs. In this case we’re telling it to run on every push event, and you can see at line 12 we're creating a dummy pipeline for `main`. More information on filtering when a pipeline is run can be found in [Bitbucket's documentation](https://support.atlassian.com/bitbucket-cloud/docs/pipeline-triggers/) -- `script:` - this is how we’re telling the Bitbucket runner to execute the Python script we defined above. - -```yaml -image: python:3.11.1 - - -pipelines: - branches: - '**': # this sets a wildcard to run on every branch - - step: - name: Lint dbt project - script: - - pip install sqlfluff==0.13.1 - - sqlfluff lint models --dialect snowflake --rules L019,L020,L021,L022 - - 'main': # override if your default branch doesn't run on a branch named "main" - - step: - script: - - python --version -``` - - - - -### 2. Commit and push your changes to make sure everything works - -After you finish creating the YAML files, commit and push your code to trigger your pipeline for the first time. If everything goes well, you should see the pipeline in your code platform. When you click into the job you’ll get a log showing that SQLFluff was run. If your code failed linting you’ll get an error in the job with a description of what needs to be fixed. If everything passed the lint check, you’ll see a successful job run. - - - - -In your repository, click the *Actions* tab - -![Image showing the GitHub action for lint on push](/img/guides/orchestration/custom-cicd-pipelines/lint-on-push-github.png) - -Sample output from SQLFluff in the `Run SQLFluff linter` job: - -![Image showing the logs in GitHub for the SQLFluff run](/img/guides/orchestration/custom-cicd-pipelines/lint-on-push-logs-github.png) - - - - -In the menu option go to *CI/CD > Pipelines* - -![Image showing the GitLab action for lint on push](/img/guides/orchestration/custom-cicd-pipelines/lint-on-push-gitlab.png) - -Sample output from SQLFluff in the `Run SQLFluff linter` job: - -![Image showing the logs in GitLab for the SQLFluff run](/img/guides/orchestration/custom-cicd-pipelines/lint-on-push-logs-gitlab.png) - - - - -In the left menu pane, click on *Pipelines* - -![Image showing the Bitbucket action for lint on push](/img/guides/orchestration/custom-cicd-pipelines/lint-on-push-bitbucket.png) - -Sample output from SQLFluff in the `Run SQLFluff linter` job: - -![Image showing the logs in Bitbucket for the SQLFluff run](/img/guides/orchestration/custom-cicd-pipelines/lint-on-push-logs-bitbucket.png) - - - diff --git a/website/docs/guides/orchestration/set-up-ci/5-multiple-checks.md b/website/docs/guides/orchestration/set-up-ci/5-multiple-checks.md deleted file mode 100644 index 2c48e453c2c..00000000000 --- a/website/docs/guides/orchestration/set-up-ci/5-multiple-checks.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: "Advanced: Create a release train with additional environments" -slug: multiple-environments -description: Large and complex enterprises sometimes require additional layers of validation before deployment. Learn how to add these checks with dbt Cloud. ---- - -:::caution Are you sure you need this? -This approach can increase release safety, but creates additional manual steps in the deployment process as well as a greater maintenance burden. - -As such, it may slow down the time it takes to get new features into production. - -The team at Sunrun maintained a SOX-compliant deployment in dbt while reducing the number of environments. Check out [their Coalesce presentation](https://www.youtube.com/watch?v=vmBAO2XN-fM) to learn more. -::: - -In this section, we will add a new **QA** environment. New features will branch off from and be merged back into the associated `qa` branch, and a member of your team (the "Release Manager") will create a PR against `main` to be validated in the CI environment before going live. - -The git flow will look like this: - - -## Prerequisites - -- You have the **Development**, **CI**, and **Production** environments, as described in [the Baseline setup](/guides/orchestration/set-up-ci/in-15-minutes). - - -## Step 1: Create a `release` branch in your git repo - -As noted above, this branch will outlive any individual feature, and will be the base of all feature development for a period of time. Your team might choose to create a new branch for each sprint (`qa/sprint-01`, `qa/sprint-02`, etc), tie it to a version of your data product (`qa/1.0`, `qa/1.1`), or just have a single `qa` branch which remains active indefinitely. - -## Step 2: Update your Development environment to use the `qa` branch - -See [Custom branch behavior](/docs/dbt-cloud-environments#custom-branch-behavior). Setting `qa` as your custom branch ensures that the IDE creates new branches and PRs with the correct target, instead of using `main`. - - - -## Step 3: Create a new QA environment - -See [Create a new environment](/docs/dbt-cloud-environments#create-a-deployment-environment). The environment should be called **QA**. Just like your existing Production and CI environments, it will be a Deployment-type environment. - -Set its branch to `qa` as well. - -## Step 4: Create a new job - -Use the **Continuous Integration Job** template, and call the job **QA Check**. - -In the Execution Settings, your command will be preset to `dbt build --select state:modified+`. Let's break this down: - -- [`dbt build`](/reference/commands/build) runs all nodes (seeds, models, snapshots, tests) at once in DAG order. If something fails, nodes that depend on it will be skipped. -- The [`state:modified+` selector](/reference/node-selection/methods#the-state-method) means that only modified nodes and their children will be run ("Slim CI"). In addition to [not wasting time](https://discourse.getdbt.com/t/how-we-sped-up-our-ci-runs-by-10x-using-slim-ci/2603) building and testing nodes that weren't changed in the first place, this significantly reduces compute costs. - -To be able to find modified nodes, dbt needs to have something to compare against. Normally, we use the Production environment as the source of truth, but in this case there will be new code merged into `qa` long before it hits the `main` branch and Production environment. Because of this, we'll want to defer the Release environment to itself. - -### Optional: also add a compile-only job - -dbt Cloud uses the last successful run of any job in that environment as its [comparison state](/reference/node-selection/syntax#about-node-selection). If you have a lot of PRs in flight, the comparison state could switch around regularly. - -Adding a regularly-scheduled job inside of the QA environment whose only command is `dbt compile` can regenerate a more stable manifest for comparison purposes. - -## Step 5: Test your process - -When the Release Manager is ready to cut a new release, they will manually open a PR from `qa` into `main` from their git provider (e.g. GitHub, GitLab, Azure DevOps). dbt Cloud will detect the new PR, at which point the existing check in the CI environment will trigger and run. When using the [baseline configuration](/guides/orchestration/set-up-ci/in-15-minutes), it's possible to kick off the PR creation from inside of the dbt Cloud IDE. Under this paradigm, that button will create PRs targeting your QA branch instead. - -To test your new flow, create a new branch in the dbt Cloud IDE then add a new file or modify an existing one. Commit it, then create a new Pull Request (not a draft) against your `qa` branch. You'll see the integration tests begin to run. Once they complete, manually create a PR against `main`, and within a few seconds you’ll see the tests run again but this time incorporating all changes from all code that hasn't been merged to main yet. diff --git a/website/docs/guides/dbt-ecosystem/databricks-guides/productionizing-your-dbt-databricks-project.md b/website/docs/guides/productionizing-your-dbt-databricks-project.md similarity index 97% rename from website/docs/guides/dbt-ecosystem/databricks-guides/productionizing-your-dbt-databricks-project.md rename to website/docs/guides/productionizing-your-dbt-databricks-project.md index 9100ca8c3ce..06245846198 100644 --- a/website/docs/guides/dbt-ecosystem/databricks-guides/productionizing-your-dbt-databricks-project.md +++ b/website/docs/guides/productionizing-your-dbt-databricks-project.md @@ -3,12 +3,21 @@ title: Productionizing your dbt Databricks project id: "productionizing-your-dbt-databricks-project" sidebar_label: "Productionizing your dbt Databricks project" description: "Learn how to deliver models to end users and use best practices to maintain production data" +displayText: Productionizing your dbt Databricks project +hoverSnippet: Learn how to Productionizing your dbt Databricks project. +time_to_complete: '30 minutes' +icon: 'databricks' +hide_table_of_contents: true +tags: ['Databricks', 'dbt Core','dbt Cloud'] +level: 'Intermediate' +recently_updated: true --- +## Introduction Welcome to the third installment of our comprehensive series on optimizing and deploying your data pipelines using Databricks and dbt Cloud. In this guide, we'll dive into delivering these models to end users while incorporating best practices to ensure that your production data remains reliable and timely. -## Prerequisites +### Prerequisites If you don't have any of the following requirements, refer to the instructions in the [setup guide](/guides/dbt-ecosystem/databricks-guides/how-to-set-up-your-databricks-dbt-project) to catch up: @@ -67,7 +76,7 @@ After your job is set up and runs successfully, configure your **[project artifa This will be our main production job to refresh data that will be used by end users. Another job everyone should include in their dbt project is a continuous integration job. -### Add a CI job +## Add a CI job CI/CD, or Continuous Integration and Continuous Deployment/Delivery, has become a standard practice in software development for rapidly delivering new features and bug fixes while maintaining high quality and stability. dbt Cloud enables you to apply these practices to your data transformations. @@ -89,7 +98,7 @@ We recommend setting up a dbt Cloud CI job. This will decrease the job’s runti With dbt tests and SlimCI, you can feel confident that your production data will be timely and accurate even while delivering at high velocity. -### Monitor your jobs +## Monitor your jobs Keeping a close eye on your dbt Cloud jobs is crucial for maintaining a robust and efficient data pipeline. By monitoring job performance and quickly identifying potential issues, you can ensure that your data transformations run smoothly. dbt Cloud provides three entry points to monitor the health of your project: run history, deployment monitor, and status tiles. @@ -101,7 +110,7 @@ The deployment monitor in dbt Cloud offers a higher-level view of your run histo By adding [status tiles](/docs/deploy/dashboard-status-tiles) to your BI dashboards, you can give stakeholders visibility into the health of your data pipeline without leaving their preferred interface. Status tiles instill confidence in your data and help prevent unnecessary inquiries or context switching. To implement dashboard status tiles, you'll need to have dbt docs with [exposures](/docs/build/exposures) defined. -### Notifications +## Set up notifications Setting up [notifications](/docs/deploy/job-notifications) in dbt Cloud allows you to receive alerts via email or a Slack channel whenever a run ends. This ensures that the appropriate teams are notified and can take action promptly when jobs fail or are canceled. To set up notifications: @@ -111,7 +120,7 @@ Setting up [notifications](/docs/deploy/job-notifications) in dbt Cloud allows y If you require notifications through other means than email or Slack, you can use dbt Cloud's outbound [webhooks](/docs/deploy/webhooks) feature to relay job events to other tools. Webhooks enable you to [integrate dbt Cloud with a wide range of SaaS applications](/guides/orchestration/webhooks), extending your pipeline’s automation into other systems. -### Troubleshooting +## Troubleshooting When a disruption occurs in your production pipeline, it's essential to know how to troubleshoot issues effectively to minimize downtime and maintain a high degree of trust with your stakeholders. @@ -150,7 +159,7 @@ Inserting dbt Cloud jobs into a Databricks Workflows allows you to chain togethe To trigger your dbt Cloud job from Databricks, follow the instructions in our [Databricks Workflows to run dbt Cloud jobs guide](/guides/orchestration/how-to-use-databricks-workflows-to-run-dbt-cloud-jobs). -### Data masking +## Data masking Our [Best Practices for dbt and Unity Catalog](/guides/dbt-ecosystem/databricks-guides/dbt-unity-catalog-best-practices) guide recommends using separate catalogs *dev* and *prod* for development and deployment environments, with Unity Catalog and dbt Cloud handling configurations and permissions for environment isolation. Ensuring security while maintaining efficiency in your development and deployment environments is crucial. Additional security measures may be necessary to protect sensitive data, such as personally identifiable information (PII). @@ -179,7 +188,7 @@ Unity Catalog is a unified governance solution for your lakehouse. It provides a To get the most out of both tools, you can use the [persist docs config](/reference/resource-configs/persist_docs) to push table and column descriptions written in dbt into Unity Catalog, making the information easily accessible to both tools' users. Keeping the descriptions in dbt ensures they are version controlled and can be reproduced after a table is dropped. -## Additional resources +### Related docs - [Advanced deployments course](https://courses.getdbt.com/courses/advanced-deployment) if you want a deeper dive into these topics - [Autoscaling CI: The intelligent Slim CI](https://docs.getdbt.com/blog/intelligent-slim-ci) diff --git a/website/docs/guides/set-up-ci.md b/website/docs/guides/set-up-ci.md new file mode 100644 index 00000000000..cbff83d6b1d --- /dev/null +++ b/website/docs/guides/set-up-ci.md @@ -0,0 +1,355 @@ +--- +title: "Get started with Continuous Integration tests" +description: How to implement a CI environment for safe project validation. +displayText: +hoverSnippet: Learn how to +id: set-up-ci +time_to_complete: '60 minutes' +icon: 'guides' +hide_table_of_contents: true +tags: ['dbt Cloud', 'Orchestration'] +level: 'Intermediate' +recently_updated: true +--- +## Introduction + +By validating your code _before_ it goes into production, you don't need to spend your afternoon fielding messages from people whose reports are suddenly broken. + +A solid CI setup is critical to preventing avoidable downtime and broken trust. dbt Cloud uses **sensible defaults** to get you up and running in a performant and cost-effective way in minimal time. + +After that, there's time to get fancy, but let's walk before we run. + +In this guide, we're going to add a **CI environment**, where proposed changes can be validated in the context of the entire project without impacting production systems. We will use a single set of deployment credentials (like the Prod environment), but models are built in a separate location to avoid impacting others (like the Dev environment). + +Your git flow will look like this: + + +### Prerequisites + +As part of your initial dbt Cloud setup, you should already have Development and Production environments configured. Let's recap what each does: + +- Your **Development environment** powers the IDE. Each user has individual credentials, and builds into an individual dev schema. Nothing you do here impacts any of your colleagues. +- Your **Production environment** brings the canonical version of your project to life for downstream consumers. There is a single set of deployment credentials, and everything is built into your production schema(s). + +## Create a new CI environment + +See [Create a new environment](/docs/dbt-cloud-environments#create-a-deployment-environment). The environment should be called **CI**. Just like your existing Production environment, it will be a Deployment-type environment. + +When setting a Schema in the **Deployment Credentials** area, remember that dbt Cloud will automatically generate a custom schema name for each PR to ensure that they don't interfere with your deployed models. This means you can safely set the same Schema name as your Production job. + +### 1. Double-check your Production environment is identified + +Go into your existing Production environment, and ensure that the **Set as Production environment** checkbox is set. It'll make things easier later. + +### 2. Create a new job in the CI environment + +Use the **Continuous Integration Job** template, and call the job **CI Check**. + +In the Execution Settings, your command will be preset to `dbt build --select state:modified+`. Let's break this down: + +- [`dbt build`](/reference/commands/build) runs all nodes (seeds, models, snapshots, tests) at once in DAG order. If something fails, nodes that depend on it will be skipped. +- The [`state:modified+` selector](/reference/node-selection/methods#the-state-method) means that only modified nodes and their children will be run ("Slim CI"). In addition to [not wasting time](https://discourse.getdbt.com/t/how-we-sped-up-our-ci-runs-by-10x-using-slim-ci/2603) building and testing nodes that weren't changed in the first place, this significantly reduces compute costs. + +To be able to find modified nodes, dbt needs to have something to compare against. dbt Cloud uses the last successful run of any job in your Production environment as its [comparison state](/reference/node-selection/syntax#about-node-selection). As long as you identified your Production environment in Step 2, you won't need to touch this. If you didn't, pick the right environment from the dropdown. + +### 3. Test your process + +That's it! There are other steps you can take to be even more confident in your work, such as [validating your structure follows best practices](/guides/orchestration/set-up-ci/run-dbt-project-evaluator) and [linting your code](/guides/orchestration/set-up-ci/lint-on-push), but this covers the most critical checks. + +To test your new flow, create a new branch in the dbt Cloud IDE then add a new file or modify an existing one. Commit it, then create a new Pull Request (not a draft). Within a few seconds, you’ll see a new check appear in your git provider. + +### Things to keep in mind + +- If you make a new commit while a CI run based on older code is in progress, it will be automatically canceled and replaced with the fresh code. +- An unlimited number of CI jobs can run at once. If 10 developers all commit code to different PRs at the same time, each person will get their own schema containing their changes. Once each PR is merged, dbt Cloud will drop that schema. +- CI jobs will never block a production run. + +## Enforce best practices with dbt project evaluator + +dbt Project Evaluator is a package designed to identify deviations from best practices common to many dbt projects, including modeling, testing, documentation, structure and performance problems. For an introduction to the package, read its [launch blog post](/blog/align-with-dbt-project-evaluator). + +### 1. Install the package + +As with all packages, add a reference to `dbt-labs/dbt_project_evaluator` to your `packages.yml` file. See the [dbt Package Hub](https://hub.getdbt.com/dbt-labs/dbt_project_evaluator/latest/) for full installation instructions. + +### 2. Define test severity with an environment variable + +As noted in the [documentation](https://dbt-labs.github.io/dbt-project-evaluator/latest/ci-check/), tests in the package are set to `warn` severity by default. + +To have these tests fail in CI, create a new environment called `DBT_PROJECT_EVALUATOR_SEVERITY`. Set the project-wide default to `warn`, and set it to `error` in the CI environment. + +In your `dbt_project.yml` file, override the severity configuration: + +```yaml +tests: +dbt_project_evaluator: + +severity: "{{ env_var('DBT_PROJECT_EVALUATOR_SEVERITY', 'warn') }}" +``` + +### 3. Update your CI commands + +Because these tests should only run after the rest of your project has been built, your existing CI command will need to be updated to exclude the dbt_project_evaluator package. You will then add a second step which builds _only_ the package's models and tests. + +Update your steps to: + +```bash +dbt build --select state:modified+ --exclude package:dbt_project_evaluator +dbt build --select package:dbt_project_evaluator +``` + +### 4. Apply any customizations + +Depending on the state of your project when you roll out the evaluator, you may need to skip some tests or allow exceptions for some areas. To do this, refer to the documentation on: + +- [disabling tests](https://dbt-labs.github.io/dbt-project-evaluator/latest/customization/customization/) +- [excluding groups of models from a specific test](https://dbt-labs.github.io/dbt-project-evaluator/latest/customization/exceptions/) +- [excluding packages or sources/models based on path](https://dbt-labs.github.io/dbt-project-evaluator/latest/customization/excluding-packages-and-paths/) + +If you create a seed to exclude groups of models from a specific test, remember to disable the default seed and include `dbt_project_evaluator_exceptions` in your second `dbt build` command above. + +## Run linting checks with SQLFluff + +By [linting](/docs/cloud/dbt-cloud-ide/lint-format#lint) your project during CI, you can ensure that code styling standards are consistently enforced, without spending human time nitpicking comma placement. + +The steps below create an action/pipeline which uses [SQLFluff](https://docs.sqlfluff.com/en/stable/) to scan your code and look for linting errors. If you don't already have SQLFluff rules defined, check out [our recommended config file](/best-practices/how-we-style/2-how-we-style-our-sql). + +### 1. Create a YAML file to define your pipeline + +The YAML files defined below are what tell your code hosting platform the steps to run. In this setup, you’re telling the platform to run a SQLFluff lint job every time a commit is pushed. + + + + +GitHub Actions are defined in the `.github/workflows` directory. To define the job for your action, add a new file named `lint_on_push.yml` under the `workflows` folder. Your final folder structure will look like this: + +```sql +my_awesome_project +├── .github +│ ├── workflows +│ │ └── lint_on_push.yml +``` + +**Key pieces:** + +- `on:` defines when the pipeline is run. This workflow will run whenever code is pushed to any branch except `main`. For other trigger options, check out [GitHub’s docs](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows). +- `runs-on: ubuntu-latest` - this defines the operating system we’re using to run the job +- `uses:` - When the Ubuntu server is created, it is completely empty. [`checkout`](https://github.com/actions/checkout#checkout-v3) and [`setup-python`](https://github.com/actions/setup-python#setup-python-v3) are public GitHub Actions which enable the server to access the code in your repo, and set up Python correctly. +- `run:` - these steps are run at the command line, as though you typed them at a prompt yourself. This will install sqlfluff and lint the project. Be sure to set the correct `--dialect` for your project. + +For a full breakdown of the properties in a workflow file, see [Understanding the workflow file](https://docs.github.com/en/actions/learn-github-actions/understanding-github-actions#understanding-the-workflow-file) on GitHub's website. + +```yaml +name: lint dbt project on push + +on: + push: + branches-ignore: + - 'main' + +jobs: + # this job runs SQLFluff with a specific set of rules + # note the dialect is set to Snowflake, so make that specific to your setup + # details on linter rules: https://docs.sqlfluff.com/en/stable/rules.html + lint_project: + name: Run SQLFluff linter + runs-on: ubuntu-latest + + steps: + - uses: "actions/checkout@v3" + - uses: "actions/setup-python@v4" + with: + python-version: "3.9" + - name: Install SQLFluff + run: "pip install sqlfluff" + - name: Lint project + run: "sqlfluff lint models --dialect snowflake" + +``` + + + + +Create a `.gitlab-ci.yml` file in your **root directory** to define the triggers for when to execute the script below. You’ll put the code below into this file. + +```sql +my_awesome_project +├── dbt_project.yml +├── .gitlab-ci.yml +``` + +**Key pieces:** + +- `image: python:3.9` - this defines the virtual image we’re using to run the job +- `rules:` - defines when the pipeline is run. This workflow will run whenever code is pushed to any branch except `main`. For other rules, refer to [GitLab’s documentation](https://docs.gitlab.com/ee/ci/yaml/#rules). +- `script:` - this is how we’re telling the GitLab runner to execute the Python script we defined above. + +```yaml +image: python:3.9 + +stages: + - pre-build + +# this job runs SQLFluff with a specific set of rules +# note the dialect is set to Snowflake, so make that specific to your setup +# details on linter rules: https://docs.sqlfluff.com/en/stable/rules.html +lint-project: + stage: pre-build + rules: + - if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH != 'main' + script: + - pip install sqlfluff + - sqlfluff lint models --dialect snowflake +``` + + + + +Create a `bitbucket-pipelines.yml` file in your **root directory** to define the triggers for when to execute the script below. You’ll put the code below into this file. + +```sql +my_awesome_project +├── bitbucket-pipelines.yml +├── dbt_project.yml +``` + +**Key pieces:** + +- `image: python:3.11.1` - this defines the virtual image we’re using to run the job +- `'**':` - this is used to filter when the pipeline runs. In this case we’re telling it to run on every push event, and you can see at line 12 we're creating a dummy pipeline for `main`. More information on filtering when a pipeline is run can be found in [Bitbucket's documentation](https://support.atlassian.com/bitbucket-cloud/docs/pipeline-triggers/) +- `script:` - this is how we’re telling the Bitbucket runner to execute the Python script we defined above. + +```yaml +image: python:3.11.1 + + +pipelines: + branches: + '**': # this sets a wildcard to run on every branch + - step: + name: Lint dbt project + script: + - pip install sqlfluff==0.13.1 + - sqlfluff lint models --dialect snowflake --rules L019,L020,L021,L022 + + 'main': # override if your default branch doesn't run on a branch named "main" + - step: + script: + - python --version +``` + + + + +### 2. Commit and push your changes to make sure everything works + +After you finish creating the YAML files, commit and push your code to trigger your pipeline for the first time. If everything goes well, you should see the pipeline in your code platform. When you click into the job you’ll get a log showing that SQLFluff was run. If your code failed linting you’ll get an error in the job with a description of what needs to be fixed. If everything passed the lint check, you’ll see a successful job run. + + + + +In your repository, click the _Actions_ tab + +![Image showing the GitHub action for lint on push](/img/guides/orchestration/custom-cicd-pipelines/lint-on-push-github.png) + +Sample output from SQLFluff in the `Run SQLFluff linter` job: + +![Image showing the logs in GitHub for the SQLFluff run](/img/guides/orchestration/custom-cicd-pipelines/lint-on-push-logs-github.png) + + + + +In the menu option go to *CI/CD > Pipelines* + +![Image showing the GitLab action for lint on push](/img/guides/orchestration/custom-cicd-pipelines/lint-on-push-gitlab.png) + +Sample output from SQLFluff in the `Run SQLFluff linter` job: + +![Image showing the logs in GitLab for the SQLFluff run](/img/guides/orchestration/custom-cicd-pipelines/lint-on-push-logs-gitlab.png) + + + + +In the left menu pane, click on *Pipelines* + +![Image showing the Bitbucket action for lint on push](/img/guides/orchestration/custom-cicd-pipelines/lint-on-push-bitbucket.png) + +Sample output from SQLFluff in the `Run SQLFluff linter` job: + +![Image showing the logs in Bitbucket for the SQLFluff run](/img/guides/orchestration/custom-cicd-pipelines/lint-on-push-logs-bitbucket.png) + + + + +## Advanced: Create a release train with additional environments + +Large and complex enterprises sometimes require additional layers of validation before deployment. Learn how to add these checks with dbt Cloud. + +:::caution Are you sure you need this? +This approach can increase release safety, but creates additional manual steps in the deployment process as well as a greater maintenance burden. + +As such, it may slow down the time it takes to get new features into production. + +The team at Sunrun maintained a SOX-compliant deployment in dbt while reducing the number of environments. Check out [their Coalesce presentation](https://www.youtube.com/watch?v=vmBAO2XN-fM) to learn more. +::: + +In this section, we will add a new **QA** environment. New features will branch off from and be merged back into the associated `qa` branch, and a member of your team (the "Release Manager") will create a PR against `main` to be validated in the CI environment before going live. + +The git flow will look like this: + + +### Advanced prerequisites + +- You have the **Development**, **CI**, and **Production** environments, as described in [the Baseline setup](/guides/orchestration/set-up-ci/in-15-minutes). + +### 1. Create a `release` branch in your git repo + +As noted above, this branch will outlive any individual feature, and will be the base of all feature development for a period of time. Your team might choose to create a new branch for each sprint (`qa/sprint-01`, `qa/sprint-02`, etc), tie it to a version of your data product (`qa/1.0`, `qa/1.1`), or just have a single `qa` branch which remains active indefinitely. + +### 2. Update your Development environment to use the `qa` branch + +See [Custom branch behavior](/docs/dbt-cloud-environments#custom-branch-behavior). Setting `qa` as your custom branch ensures that the IDE creates new branches and PRs with the correct target, instead of using `main`. + + + +### 3. Create a new QA environment + +See [Create a new environment](/docs/dbt-cloud-environments#create-a-deployment-environment). The environment should be called **QA**. Just like your existing Production and CI environments, it will be a Deployment-type environment. + +Set its branch to `qa` as well. + +### 4. Create a new job + +Use the **Continuous Integration Job** template, and call the job **QA Check**. + +In the Execution Settings, your command will be preset to `dbt build --select state:modified+`. Let's break this down: + +- [`dbt build`](/reference/commands/build) runs all nodes (seeds, models, snapshots, tests) at once in DAG order. If something fails, nodes that depend on it will be skipped. +- The [`state:modified+` selector](/reference/node-selection/methods#the-state-method) means that only modified nodes and their children will be run ("Slim CI"). In addition to [not wasting time](https://discourse.getdbt.com/t/how-we-sped-up-our-ci-runs-by-10x-using-slim-ci/2603) building and testing nodes that weren't changed in the first place, this significantly reduces compute costs. + +To be able to find modified nodes, dbt needs to have something to compare against. Normally, we use the Production environment as the source of truth, but in this case there will be new code merged into `qa` long before it hits the `main` branch and Production environment. Because of this, we'll want to defer the Release environment to itself. + +### Optional: also add a compile-only job + +dbt Cloud uses the last successful run of any job in that environment as its [comparison state](/reference/node-selection/syntax#about-node-selection). If you have a lot of PRs in flight, the comparison state could switch around regularly. + +Adding a regularly-scheduled job inside of the QA environment whose only command is `dbt compile` can regenerate a more stable manifest for comparison purposes. + +### 5. Test your process + +When the Release Manager is ready to cut a new release, they will manually open a PR from `qa` into `main` from their git provider (e.g. GitHub, GitLab, Azure DevOps). dbt Cloud will detect the new PR, at which point the existing check in the CI environment will trigger and run. When using the [baseline configuration](/guides/orchestration/set-up-ci/in-15-minutes), it's possible to kick off the PR creation from inside of the dbt Cloud IDE. Under this paradigm, that button will create PRs targeting your QA branch instead. + +To test your new flow, create a new branch in the dbt Cloud IDE then add a new file or modify an existing one. Commit it, then create a new Pull Request (not a draft) against your `qa` branch. You'll see the integration tests begin to run. Once they complete, manually create a PR against `main`, and within a few seconds you’ll see the tests run again but this time incorporating all changes from all code that hasn't been merged to main yet. diff --git a/website/docs/guides/sl-migration.md b/website/docs/guides/sl-migration.md index 865785133e1..fe4755c6225 100644 --- a/website/docs/guides/sl-migration.md +++ b/website/docs/guides/sl-migration.md @@ -7,7 +7,7 @@ hoverSnippet: Learn how to migrate from the legacy dbt Semantic Layer to the lat time_to_complete: '30 minutes' icon: 'guides' hide_table_of_contents: true -tags: [Semantic Layer] +tags: ['Semantic Layer'] level: 'Intermediate' recently_updated: true --- From 278840679d1a39c127eb95653ef69643b3473f35 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Mon, 6 Nov 2023 11:23:02 +0000 Subject: [PATCH 074/305] remove callout and add tabs as examples --- .../docs/reference/resource-configs/alias.md | 46 ++++++++++++-- .../reference/resource-configs/database.md | 43 ++++++++++++- .../docs/reference/resource-configs/schema.md | 62 ++++++++++++++++++- 3 files changed, 140 insertions(+), 11 deletions(-) diff --git a/website/docs/reference/resource-configs/alias.md b/website/docs/reference/resource-configs/alias.md index 40da45ebcd1..9adfe0b1870 100644 --- a/website/docs/reference/resource-configs/alias.md +++ b/website/docs/reference/resource-configs/alias.md @@ -4,10 +4,47 @@ description: "Read this guide to understand the alias configuration in dbt." datatype: string --- -:::caution Heads up! -This is a work in progress document. While this configuration applies to multiple resource types, the documentation has only been written for seeds. -::: + + + +Specify a custom alias for a model in your `dbt_project.yml` file. + +For example, if you have a model that calculates `sales_metric`s and want to give it a more user-friendly alias, you can alias it like this: + + + +```yml +models: + your_project: + sales_metrics: + +alias: sales_dashboard +``` + + +This would return `analytics.finance.sales_dashboard` in the database, instead of the default `analytics.finance.sales_metrics`. + + + + +Configure a seed's alias in your `dbt_project.yml` file. + +For example, if you have a seed that represents `product_categories` and want to alias it as `categories_data`, you would alias like this: + + + +```yml +seeds: + your_project: + product_categories: + +alias: categories_data +``` + +This would return the name `analytics.finance.categories_data` in the database. + + + + ## Definition @@ -25,9 +62,8 @@ To learn more about changing the way that dbt generates a relation's `identifier ## Usage ### Seeds -Configure a seed's alias in your `dbt_project.yml` file. -The seed at `seeds/country_codes.csv` will be built as a named `country_mappings`. +In this example, the seed at `seeds/country_codes.csv` will be built as a named `country_mappings`. diff --git a/website/docs/reference/resource-configs/database.md b/website/docs/reference/resource-configs/database.md index 9c63b0ca457..6532483db9d 100644 --- a/website/docs/reference/resource-configs/database.md +++ b/website/docs/reference/resource-configs/database.md @@ -5,10 +5,47 @@ datatype: string description: "Read this guide to understand the database configuration in dbt." --- -:::caution Heads up! -This is a work in progress document. While this configuration applies to multiple resource types, the documentation has only been written for seeds. + + + +Specify a custom database for a model in your `dbt_project.yml` file. + +For example, if you have a model that you want to load into a database other than the target database, you can configure it like this: + + + +```yml +models: + your_project: + sales_metrics: + +database: reporting +``` + + +This would result in the generated relation being located in the `reporting` database, so the full relation name would be `reporting.finance.sales_metrics` instead of the default target database. + + + + +Configure a database in your `dbt_project.yml` file. + +For example, to load a seed into a database called `staging` instead of the target database, you can configure it like this: + + + +```yml +seeds: + your_project: + product_categories: + +database: staging +``` + +This would result in the generated relation being located in the `staging` database, so the full relation name would be `staging.finance.product_categories_data`. + + + + -::: ## Definition diff --git a/website/docs/reference/resource-configs/schema.md b/website/docs/reference/resource-configs/schema.md index c976bf6502a..9b6e2598893 100644 --- a/website/docs/reference/resource-configs/schema.md +++ b/website/docs/reference/resource-configs/schema.md @@ -5,10 +5,66 @@ description: "Schema - Read this in-depth guide to learn about configurations in datatype: string --- -:::caution Heads up! -This is a work in progress document. While this configuration applies to multiple resource types, the documentation has only been written for seeds. + + -::: +Specify a custom schema for a group of models in your `dbt_project.yml` file or a [config block](/reference/resource-configs/schema#models). + +For example, if you have a group of marketing-related models and you want to place them in a separate schema called `marketing`, you can configure it like this: + + + +```yml +models: + your_project: + marketing: # Grouping or folder for set of models + +schema: marketing +``` + + +This would result in the generated relations for these models being located in the `marketing` schema, so the full relation names would be `analytics.marketing.model_name`. + + + + +Configure a custom schema in your `dbt_project.yml` file. + +For example, if you have a seed that should be placed in a separate schema called `mappings`, you can configure it like this: + + + +```yml +seeds: + your_project: + product_mappings: + +schema: mappings +``` + +This would result in the generated relation being located in the `mappings` schema, so the full relation name would be `analytics.mappings.product_mappings_data`. + + + + + +Customize the schema for storing test results in your `dbt_project.yml` file. + +For example, to save test results in a specific schema, you can configure it like this: + + + + +```yml +tests: + +store_failures: true + +schema: test_results +``` + +This would result in the test results being stored in the `test_results` schema. + + + + +Refer to [Usage](#usage) for more examples. ## Definition Optionally specify a custom schema for a [model](/docs/build/sql-models) or [seed](/docs/build/seeds). (To specify a schema for a [snapshot](/docs/build/snapshots), use the [`target_schema` config](/reference/resource-configs/target_schema)). From a4466c2aa1da759318644b770e634f0edb12335a Mon Sep 17 00:00:00 2001 From: Ly Nguyen Date: Mon, 6 Nov 2023 16:04:46 -0800 Subject: [PATCH 075/305] Release note for job notification updates --- .../02-Nov-2023/job-notifications-rn.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 website/docs/docs/dbt-versions/release-notes/02-Nov-2023/job-notifications-rn.md diff --git a/website/docs/docs/dbt-versions/release-notes/02-Nov-2023/job-notifications-rn.md b/website/docs/docs/dbt-versions/release-notes/02-Nov-2023/job-notifications-rn.md new file mode 100644 index 00000000000..8da60e5d24d --- /dev/null +++ b/website/docs/docs/dbt-versions/release-notes/02-Nov-2023/job-notifications-rn.md @@ -0,0 +1,15 @@ +--- +title: "Enhancement: Email and Slack job notifications" +description: "November 2023: New quality-of-life improvements for setting up and administering email and Slack job notifications" +sidebar_label: "Enhancement: Job notifications" +sidebar_position: 10 +tags: [Nov-2023] +--- + +There are new quality-of-life improvements in dbt Cloud for email and Slack notifications about your jobs: + +- You can add external email addresses and receive job notifications from them. External emails can be addresses that are outside of your dbt Cloud account and also for configuring notifications in third-party services like Microsoft Teams and PagerDuty. +- You can configure notifications for multiple Slack channels. Previously, you could only configure one Slack channel. +- Any account admin can now edit slack notifications, not just the person who created it. + +To learn more, check out [Job notifications](/docs/deploy/job-notifications). \ No newline at end of file From 1b148d59af5b08f98e8f5e020fdc6fca29ea9d7b Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Mon, 6 Nov 2023 17:54:43 -0800 Subject: [PATCH 076/305] adding feedback from @nghi-ly --- website/docs/guides/airflow-and-dbt-cloud.md | 4 +++- website/docs/guides/bigquery-qs.md | 3 +-- website/docs/guides/building-packages.md | 4 ++-- website/docs/guides/codespace-qs.md | 3 ++- website/docs/guides/creating-new-materializations.md | 5 ++--- website/docs/guides/custom-cicd-pipelines.md | 4 ---- website/docs/guides/databricks-qs.md | 3 ++- ...t models on Databricks.md => dbt-models-on-databricks.md} | 1 + website/docs/guides/debugging-schema-names.md | 2 +- .../docs/guides/how-to-set-up-your-databricks-dbt-project.md | 3 +++ .../how-to-use-databricks-workflows-to-run-dbt-cloud-jobs.md | 1 + website/docs/guides/manual-install-qs.md | 2 ++ website/docs/guides/migrating-from-spark-to-databricks.md | 1 - website/docs/guides/redshift-qs.md | 3 +-- website/docs/guides/refactoring-legacy-sql.md | 2 +- website/docs/guides/sl-migration.md | 2 +- website/docs/guides/snowflake-qs.md | 3 ++- website/docs/guides/starburst-galaxy-qs.md | 3 ++- website/docs/guides/using-jinja.md | 5 +++-- 19 files changed, 30 insertions(+), 24 deletions(-) rename website/docs/guides/{dbt models on Databricks.md => dbt-models-on-databricks.md} (99%) diff --git a/website/docs/guides/airflow-and-dbt-cloud.md b/website/docs/guides/airflow-and-dbt-cloud.md index 98eb9f82d6c..6963a9b9baa 100644 --- a/website/docs/guides/airflow-and-dbt-cloud.md +++ b/website/docs/guides/airflow-and-dbt-cloud.md @@ -164,7 +164,9 @@ Now you have all the working pieces to get up and running with Airflow + dbt Clo ![https://lh3.googleusercontent.com/sRxe5xbv_LYhIKblc7eiY7AmByr1OibOac2_fIe54rpU3TBGwjMpdi_j0EPEFzM1_gNQXry7Jsm8aVw9wQBSNs1I6Cyzpvijaj0VGwSnmVf3OEV8Hv5EPOQHrwQgK2RhNBdyBxN2](https://lh3.googleusercontent.com/sRxe5xbv_LYhIKblc7eiY7AmByr1OibOac2_fIe54rpU3TBGwjMpdi_j0EPEFzM1_gNQXry7Jsm8aVw9wQBSNs1I6Cyzpvijaj0VGwSnmVf3OEV8Hv5EPOQHrwQgK2RhNBdyBxN2) -## Add your `job_id` and `account_id` config details to the python file: [dbt_cloud_provider_eltml.py](https://github.com/sungchun12/airflow-dbt-cloud/blob/main/dags/dbt_cloud_provider_eltml.py) +## Add your `job_id` and `account_id` config details to the python file + + Add your `job_id` and `account_id` config details to the python file: [dbt_cloud_provider_eltml.py](https://github.com/sungchun12/airflow-dbt-cloud/blob/main/dags/dbt_cloud_provider_eltml.py). 1. You’ll find these details within the dbt Cloud job URL, see the comments in the code snippet below for an example. diff --git a/website/docs/guides/bigquery-qs.md b/website/docs/guides/bigquery-qs.md index 5f0b641875f..d84e9a7528f 100644 --- a/website/docs/guides/bigquery-qs.md +++ b/website/docs/guides/bigquery-qs.md @@ -2,11 +2,10 @@ title: "Quickstart for dbt Cloud and BigQuery" id: "bigquery" time_to_complete: '30 minutes' -platform: 'dbt-cloud' +level: 'Beginner' icon: 'bigquery' hide_table_of_contents: true tags: ['BigQuery', 'dbt Cloud'] -level: 'Beginner' recently_updated: true --- diff --git a/website/docs/guides/building-packages.md b/website/docs/guides/building-packages.md index 9d26d7c85e4..32f863271f1 100644 --- a/website/docs/guides/building-packages.md +++ b/website/docs/guides/building-packages.md @@ -1,5 +1,5 @@ --- -title: "Building dbt packages" # to do: update this to creating +title: "Building dbt packages" id: "building-packages" description: When you have dbt code that might help others, you can create a package for dbt using a GitHub repository. displayText: Building dbt packages @@ -7,7 +7,7 @@ hoverSnippet: Learn how to create packages for dbt. time_to_complete: '60 minutes' icon: 'guides' hide_table_of_contents: true -tags: ['dbt Core', 'legacy'] +tags: ['dbt Core'] level: 'Advanced' recently_updated: true --- diff --git a/website/docs/guides/codespace-qs.md b/website/docs/guides/codespace-qs.md index f30d82457a8..2f5f57677af 100644 --- a/website/docs/guides/codespace-qs.md +++ b/website/docs/guides/codespace-qs.md @@ -3,8 +3,9 @@ title: "Quickstart for dbt Core using GitHub Codespaces" id: codespace platform: 'dbt-core' icon: 'fa-github' +level: 'Beginner' hide_table_of_contents: true -tags: ['dbt Core'] +tags: ['dbt Core','Quickstart'] --- ## Introduction diff --git a/website/docs/guides/creating-new-materializations.md b/website/docs/guides/creating-new-materializations.md index 12bdd0685b6..f2d1e9c40a2 100644 --- a/website/docs/guides/creating-new-materializations.md +++ b/website/docs/guides/creating-new-materializations.md @@ -1,14 +1,13 @@ --- title: "Creating new materializations" -id: "creating-new-materializations" +id: creating-new-materializations description: Learn how to create your own materializations. displayText: Creating new materializations hoverSnippet: Learn how to create your own materializations. time_to_complete: '30 minutes' -platform: 'dbt-core' icon: 'guides' hide_table_of_contents: true -tags: ['materializations', 'dbt Core'] +tags: ['dbt Core'] level: 'Advanced' recently_updated: true --- diff --git a/website/docs/guides/custom-cicd-pipelines.md b/website/docs/guides/custom-cicd-pipelines.md index 094a30eed31..5b4456c161c 100644 --- a/website/docs/guides/custom-cicd-pipelines.md +++ b/website/docs/guides/custom-cicd-pipelines.md @@ -92,8 +92,6 @@ This next part will happen in you code hosting platform. We need to save your AP }> -In GitHub: - - Open up your repository where you want to run the pipeline (the same one that houses your dbt project) - Click *Settings* to open up the repository options - On the left click the *Security* dropdown @@ -113,8 +111,6 @@ Here’s a video showing these steps: -In GitLab: - - Open up your repository where you want to run the pipeline (the same one that houses your dbt project) - Click *Settings* > *CI/CD* - Under the *Variables* section, click *Expand,* then click *Add variable* diff --git a/website/docs/guides/databricks-qs.md b/website/docs/guides/databricks-qs.md index cbd1c36f9a1..0aadf79c18e 100644 --- a/website/docs/guides/databricks-qs.md +++ b/website/docs/guides/databricks-qs.md @@ -1,10 +1,11 @@ --- title: "Quickstart for dbt Cloud and Databricks" id: "databricks" -platform: 'dbt-cloud' +level: 'Beginner' icon: 'databricks' hide_table_of_contents: true recently_updated: true +tags: ['dbt Cloud', 'Quickstart'] --- ## Introduction diff --git a/website/docs/guides/dbt models on Databricks.md b/website/docs/guides/dbt-models-on-databricks.md similarity index 99% rename from website/docs/guides/dbt models on Databricks.md rename to website/docs/guides/dbt-models-on-databricks.md index 5bb6de61e77..a205dd4fe6f 100644 --- a/website/docs/guides/dbt models on Databricks.md +++ b/website/docs/guides/dbt-models-on-databricks.md @@ -1,5 +1,6 @@ --- title: Optimize and troubleshoot dbt models on Databricks +id: optimize-dbt-models-on-databricks sidebar_label: "Optimize and troubleshoot dbt models on Databricks" description: "Learn more about optimizing and troubleshooting your dbt models on Databricks" displayText: Optimizing and troubleshooting your dbt models on Databricks diff --git a/website/docs/guides/debugging-schema-names.md b/website/docs/guides/debugging-schema-names.md index fbd1ce0ae69..73b67941ee4 100644 --- a/website/docs/guides/debugging-schema-names.md +++ b/website/docs/guides/debugging-schema-names.md @@ -8,7 +8,7 @@ time_to_complete: '45 minutes' platform: 'dbt-core' icon: 'guides' hide_table_of_contents: true -tags: ['dbt Core', 'legacy'] +tags: ['dbt Core'] level: 'Advanced' recently_updated: true --- diff --git a/website/docs/guides/how-to-set-up-your-databricks-dbt-project.md b/website/docs/guides/how-to-set-up-your-databricks-dbt-project.md index 1ca1940cc50..87f313a2542 100644 --- a/website/docs/guides/how-to-set-up-your-databricks-dbt-project.md +++ b/website/docs/guides/how-to-set-up-your-databricks-dbt-project.md @@ -1,5 +1,6 @@ --- title: How to set up your Databricks and dbt project +id: how-to-set-up-your-databricks-dbt-project sidebar_label: "How to set up your Databricks and dbt project" description: "Learn more about setting up your dbt project with Databricks" displayText: Setting up your dbt project with Databricks @@ -12,6 +13,8 @@ level: 'Intermediate' recently_updated: true --- +## Introduction + Databricks and dbt Labs are partnering to help data teams think like software engineering teams and ship trusted data, faster. The dbt-databricks adapter enables dbt users to leverage the latest Databricks features in their dbt project. Hundreds of customers are now using dbt and Databricks to build expressive and reliable data pipelines on the Lakehouse, generating data assets that enable analytics, ML, and AI use cases throughout the business. In this guide, we discuss how to set up your dbt project on the Databricks Lakehouse Platform so that it scales from a small team all the way up to a large organization. diff --git a/website/docs/guides/how-to-use-databricks-workflows-to-run-dbt-cloud-jobs.md b/website/docs/guides/how-to-use-databricks-workflows-to-run-dbt-cloud-jobs.md index f80dc081c8b..2bff4401acd 100644 --- a/website/docs/guides/how-to-use-databricks-workflows-to-run-dbt-cloud-jobs.md +++ b/website/docs/guides/how-to-use-databricks-workflows-to-run-dbt-cloud-jobs.md @@ -11,6 +11,7 @@ tags: ['Databricks', 'dbt Core','dbt Cloud','Orchestration'] level: 'Intermediate' recently_updated: true --- + ## Introduction Using Databricks workflows to call the dbt Cloud job API can be useful for several reasons: diff --git a/website/docs/guides/manual-install-qs.md b/website/docs/guides/manual-install-qs.md index 5c56f07dc5f..e49ef5bfdf7 100644 --- a/website/docs/guides/manual-install-qs.md +++ b/website/docs/guides/manual-install-qs.md @@ -3,8 +3,10 @@ title: "Quickstart for dbt Core from a manual install" id: manual-install description: "Connecting your warehouse to dbt Core using the CLI." sidebar_label: "Manual install quickstart" +level: 'Beginner' platform: 'dbt-core' icon: 'fa-light fa-square-terminal' +tags: ['dbt Core','Quickstart'] hide_table_of_contents: true --- ## Introduction diff --git a/website/docs/guides/migrating-from-spark-to-databricks.md b/website/docs/guides/migrating-from-spark-to-databricks.md index dd128a330e3..332ba5f0573 100644 --- a/website/docs/guides/migrating-from-spark-to-databricks.md +++ b/website/docs/guides/migrating-from-spark-to-databricks.md @@ -5,7 +5,6 @@ description: Learn how to migrate from dbt-spark to dbt-databricks. displayText: Migrating from Spark to Databricks hoverSnippet: Learn how to migrate from dbt-spark to dbt-databricks. time_to_complete: '30 minutes' -platform: ['dbt-core','dbt-cloud'] icon: 'guides' hide_table_of_contents: true tags: ['Migration', 'dbt Core','dbt Cloud'] diff --git a/website/docs/guides/redshift-qs.md b/website/docs/guides/redshift-qs.md index b635b86a693..d9f41be939c 100644 --- a/website/docs/guides/redshift-qs.md +++ b/website/docs/guides/redshift-qs.md @@ -1,11 +1,10 @@ --- title: "Quickstart for dbt Cloud and Redshift" id: "redshift" -platform: 'dbt-cloud' +level: 'Beginner' icon: 'redshift' hide_table_of_contents: true tags: ['Redshift', 'dbt Cloud'] -level: 'Advanced' --- ## Introduction diff --git a/website/docs/guides/refactoring-legacy-sql.md b/website/docs/guides/refactoring-legacy-sql.md index 2c1bf0ead03..c64157cc24b 100644 --- a/website/docs/guides/refactoring-legacy-sql.md +++ b/website/docs/guides/refactoring-legacy-sql.md @@ -8,7 +8,7 @@ time_to_complete: '30 minutes' platform: 'dbt-cloud' icon: 'guides' hide_table_of_contents: true -tags: ['SQL', 'legacy'] +tags: ['SQL'] level: 'Advanced' recently_updated: true --- diff --git a/website/docs/guides/sl-migration.md b/website/docs/guides/sl-migration.md index fe4755c6225..031997b5e4d 100644 --- a/website/docs/guides/sl-migration.md +++ b/website/docs/guides/sl-migration.md @@ -12,7 +12,7 @@ level: 'Intermediate' recently_updated: true --- -## introduction +## Introduction The legacy Semantic Layer will be deprecated in H2 2023. Additionally, the `dbt_metrics` package will not be supported in dbt v1.6 and later. If you are using `dbt_metrics`, you'll need to upgrade your configurations before upgrading to v1.6. This guide is for people who have the legacy dbt Semantic Layer setup and would like to migrate to the new dbt Semantic Layer. The estimated migration time is two weeks. diff --git a/website/docs/guides/snowflake-qs.md b/website/docs/guides/snowflake-qs.md index 33e253e8c15..4488d6b3097 100644 --- a/website/docs/guides/snowflake-qs.md +++ b/website/docs/guides/snowflake-qs.md @@ -1,8 +1,9 @@ --- title: "Quickstart for dbt Cloud and Snowflake" id: "snowflake" -platform: 'dbt-cloud' +level: 'Beginner' icon: 'snowflake' +tags: ['dbt Cloud','Quickstart'] hide_table_of_contents: true --- ## Introduction diff --git a/website/docs/guides/starburst-galaxy-qs.md b/website/docs/guides/starburst-galaxy-qs.md index 33228710509..1822c83fa90 100644 --- a/website/docs/guides/starburst-galaxy-qs.md +++ b/website/docs/guides/starburst-galaxy-qs.md @@ -1,9 +1,10 @@ --- title: "Quickstart for dbt Cloud and Starburst Galaxy" id: "starburst-galaxy" -platform: 'dbt-cloud' +level: 'Beginner' icon: 'starburst' hide_table_of_contents: true +tags: ['dbt Cloud','Quickstart'] --- ## Introduction diff --git a/website/docs/guides/using-jinja.md b/website/docs/guides/using-jinja.md index 1b2b7d7fd59..9078cb1aedd 100644 --- a/website/docs/guides/using-jinja.md +++ b/website/docs/guides/using-jinja.md @@ -2,14 +2,15 @@ title: "Using Jinja" id: "using-jinja" time_to_complete: '30 minutes' -platform: 'dbt-core' icon: 'guides' hide_table_of_contents: true -tags: ['jinja', 'dbt Core'] +tags: ['Jinja', 'dbt Core'] level: 'Advanced' recently_updated: true --- +## Introduction + In this guide, we're going to take a common pattern used in SQL, and then use Jinja to improve our code. If you'd like to work through this query, add [this CSV](https://github.com/dbt-labs/jaffle_shop/blob/core-v1.0.0/seeds/raw_payments.csv) to the `seeds/` folder of your dbt project, and then execute `dbt seed`. From 054792264d0486e7484cdc6925cc2676cde96a9c Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Mon, 6 Nov 2023 18:14:43 -0800 Subject: [PATCH 077/305] commenting out time_to_complete --- website/docs/guides/airflow-and-dbt-cloud.md | 2 +- website/docs/guides/bigquery-qs.md | 2 +- website/docs/guides/building-packages.md | 2 +- website/docs/guides/creating-new-materializations.md | 2 +- website/docs/guides/custom-cicd-pipelines.md | 2 +- website/docs/guides/dbt-models-on-databricks.md | 2 +- website/docs/guides/debugging-schema-names.md | 2 +- .../docs/guides/how-to-set-up-your-databricks-dbt-project.md | 2 +- .../how-to-use-databricks-workflows-to-run-dbt-cloud-jobs.md | 2 +- website/docs/guides/migrating-from-spark-to-databricks.md | 2 +- website/docs/guides/migrating-from-stored-procedures.md | 2 +- .../docs/guides/productionizing-your-dbt-databricks-project.md | 2 +- website/docs/guides/refactoring-legacy-sql.md | 2 +- website/docs/guides/set-up-ci.md | 2 +- website/docs/guides/sl-migration.md | 2 +- website/docs/guides/using-jinja.md | 2 +- 16 files changed, 16 insertions(+), 16 deletions(-) diff --git a/website/docs/guides/airflow-and-dbt-cloud.md b/website/docs/guides/airflow-and-dbt-cloud.md index 6963a9b9baa..a3ff59af14e 100644 --- a/website/docs/guides/airflow-and-dbt-cloud.md +++ b/website/docs/guides/airflow-and-dbt-cloud.md @@ -1,7 +1,7 @@ --- title: Airflow and dbt Cloud id: airflow-and-dbt-cloud -time_to_complete: '60 minutes' +# time_to_complete: '30 minutes' commenting out until we test icon: 'guides' hide_table_of_contents: true tags: ['dbt Cloud', 'Orchestration'] diff --git a/website/docs/guides/bigquery-qs.md b/website/docs/guides/bigquery-qs.md index d84e9a7528f..f13749333f5 100644 --- a/website/docs/guides/bigquery-qs.md +++ b/website/docs/guides/bigquery-qs.md @@ -1,7 +1,7 @@ --- title: "Quickstart for dbt Cloud and BigQuery" id: "bigquery" -time_to_complete: '30 minutes' +# time_to_complete: '30 minutes' commenting out until we test level: 'Beginner' icon: 'bigquery' hide_table_of_contents: true diff --git a/website/docs/guides/building-packages.md b/website/docs/guides/building-packages.md index 32f863271f1..ed22ae2fa12 100644 --- a/website/docs/guides/building-packages.md +++ b/website/docs/guides/building-packages.md @@ -4,7 +4,7 @@ id: "building-packages" description: When you have dbt code that might help others, you can create a package for dbt using a GitHub repository. displayText: Building dbt packages hoverSnippet: Learn how to create packages for dbt. -time_to_complete: '60 minutes' +# time_to_complete: '30 minutes' commenting out until we test icon: 'guides' hide_table_of_contents: true tags: ['dbt Core'] diff --git a/website/docs/guides/creating-new-materializations.md b/website/docs/guides/creating-new-materializations.md index f2d1e9c40a2..fe1f674e74f 100644 --- a/website/docs/guides/creating-new-materializations.md +++ b/website/docs/guides/creating-new-materializations.md @@ -4,7 +4,7 @@ id: creating-new-materializations description: Learn how to create your own materializations. displayText: Creating new materializations hoverSnippet: Learn how to create your own materializations. -time_to_complete: '30 minutes' +# time_to_complete: '30 minutes' commenting out until we test icon: 'guides' hide_table_of_contents: true tags: ['dbt Core'] diff --git a/website/docs/guides/custom-cicd-pipelines.md b/website/docs/guides/custom-cicd-pipelines.md index 5b4456c161c..df3d30e7c27 100644 --- a/website/docs/guides/custom-cicd-pipelines.md +++ b/website/docs/guides/custom-cicd-pipelines.md @@ -4,7 +4,7 @@ id: custom-cicd-pipelines description: "Learn the benefits of version-controlled analytics code and custom pipelines in dbt for enhanced code testing and workflow automation during the development process." displayText: Learn version-controlled code, custom pipelines, and enhanced code testing. hoverSnippet: Learn version-controlled code, custom pipelines, and enhanced code testing. -time_to_complete: '60 minutes' +# time_to_complete: '30 minutes' commenting out until we test icon: 'guides' hide_table_of_contents: true tags: ['dbt Cloud', 'Orchestration'] diff --git a/website/docs/guides/dbt-models-on-databricks.md b/website/docs/guides/dbt-models-on-databricks.md index a205dd4fe6f..21b848b6945 100644 --- a/website/docs/guides/dbt-models-on-databricks.md +++ b/website/docs/guides/dbt-models-on-databricks.md @@ -5,7 +5,7 @@ sidebar_label: "Optimize and troubleshoot dbt models on Databricks" description: "Learn more about optimizing and troubleshooting your dbt models on Databricks" displayText: Optimizing and troubleshooting your dbt models on Databricks hoverSnippet: Learn how to optimize and troubleshoot your dbt models on Databricks. -time_to_complete: '30 minutes' +# time_to_complete: '30 minutes' commenting out until we test icon: 'databricks' hide_table_of_contents: true tags: ['Databricks', 'dbt Core','dbt Cloud'] diff --git a/website/docs/guides/debugging-schema-names.md b/website/docs/guides/debugging-schema-names.md index 73b67941ee4..a5d8c9be5db 100644 --- a/website/docs/guides/debugging-schema-names.md +++ b/website/docs/guides/debugging-schema-names.md @@ -4,7 +4,7 @@ id: debugging-schema-names description: Learn how to debug schema names when models build under unexpected schemas displayText: Debugging schema names hoverSnippet: Learn how to debug schema names dbt. -time_to_complete: '45 minutes' +# time_to_complete: '30 minutes' commenting out until we test platform: 'dbt-core' icon: 'guides' hide_table_of_contents: true diff --git a/website/docs/guides/how-to-set-up-your-databricks-dbt-project.md b/website/docs/guides/how-to-set-up-your-databricks-dbt-project.md index 87f313a2542..fc03c542861 100644 --- a/website/docs/guides/how-to-set-up-your-databricks-dbt-project.md +++ b/website/docs/guides/how-to-set-up-your-databricks-dbt-project.md @@ -5,7 +5,7 @@ sidebar_label: "How to set up your Databricks and dbt project" description: "Learn more about setting up your dbt project with Databricks" displayText: Setting up your dbt project with Databricks hoverSnippet: Learn how to set up your dbt project with Databricks. -time_to_complete: '30 minutes' +# time_to_complete: '30 minutes' commenting out until we test icon: 'databricks' hide_table_of_contents: true tags: ['Databricks', 'dbt Core','dbt Cloud'] diff --git a/website/docs/guides/how-to-use-databricks-workflows-to-run-dbt-cloud-jobs.md b/website/docs/guides/how-to-use-databricks-workflows-to-run-dbt-cloud-jobs.md index 2bff4401acd..30221332355 100644 --- a/website/docs/guides/how-to-use-databricks-workflows-to-run-dbt-cloud-jobs.md +++ b/website/docs/guides/how-to-use-databricks-workflows-to-run-dbt-cloud-jobs.md @@ -4,7 +4,7 @@ id: how-to-use-databricks-workflows-to-run-dbt-cloud-jobs description: Learn how to use Databricks workflows to run dbt Cloud jobs displayText: "Use Databricks workflows to run dbt Cloud jobs" hoverSnippet: Learn how to use Databricks workflows to run dbt Cloud jobs -time_to_complete: '60 minutes' +# time_to_complete: '30 minutes' commenting out until we test icon: 'databricks' hide_table_of_contents: true tags: ['Databricks', 'dbt Core','dbt Cloud','Orchestration'] diff --git a/website/docs/guides/migrating-from-spark-to-databricks.md b/website/docs/guides/migrating-from-spark-to-databricks.md index 332ba5f0573..68c867e762e 100644 --- a/website/docs/guides/migrating-from-spark-to-databricks.md +++ b/website/docs/guides/migrating-from-spark-to-databricks.md @@ -4,7 +4,7 @@ id: "migrating-from-spark-to-databricks" description: Learn how to migrate from dbt-spark to dbt-databricks. displayText: Migrating from Spark to Databricks hoverSnippet: Learn how to migrate from dbt-spark to dbt-databricks. -time_to_complete: '30 minutes' +# time_to_complete: '30 minutes' commenting out until we test icon: 'guides' hide_table_of_contents: true tags: ['Migration', 'dbt Core','dbt Cloud'] diff --git a/website/docs/guides/migrating-from-stored-procedures.md b/website/docs/guides/migrating-from-stored-procedures.md index 72f0dee7810..ef86534c4af 100644 --- a/website/docs/guides/migrating-from-stored-procedures.md +++ b/website/docs/guides/migrating-from-stored-procedures.md @@ -4,7 +4,7 @@ id: migrating-from-stored-procedures description: Learn how to transform from a historical codebase of mixed DDL and DML statements to dbt models, including tips and patterns for the shift from a procedural to a declarative approach in defining datasets. displayText: Migrating from DDL, DML, and stored procedures hoverSnippet: Learn how to transform from a historical codebase of mixed DDL and DML statements to dbt models -time_to_complete: '30 minutes' +# time_to_complete: '30 minutes' commenting out until we test platform: 'dbt-core' icon: 'guides' hide_table_of_contents: true diff --git a/website/docs/guides/productionizing-your-dbt-databricks-project.md b/website/docs/guides/productionizing-your-dbt-databricks-project.md index 06245846198..c7a53ebc105 100644 --- a/website/docs/guides/productionizing-your-dbt-databricks-project.md +++ b/website/docs/guides/productionizing-your-dbt-databricks-project.md @@ -5,7 +5,7 @@ sidebar_label: "Productionizing your dbt Databricks project" description: "Learn how to deliver models to end users and use best practices to maintain production data" displayText: Productionizing your dbt Databricks project hoverSnippet: Learn how to Productionizing your dbt Databricks project. -time_to_complete: '30 minutes' +# time_to_complete: '30 minutes' commenting out until we test icon: 'databricks' hide_table_of_contents: true tags: ['Databricks', 'dbt Core','dbt Cloud'] diff --git a/website/docs/guides/refactoring-legacy-sql.md b/website/docs/guides/refactoring-legacy-sql.md index c64157cc24b..09fcb9aaf82 100644 --- a/website/docs/guides/refactoring-legacy-sql.md +++ b/website/docs/guides/refactoring-legacy-sql.md @@ -4,7 +4,7 @@ id: refactoring-legacy-sql description: This guide walks through refactoring a long SQL query (perhaps from a stored procedure) into modular dbt data models. displayText: Creating new materializations hoverSnippet: Learn how to refactoring a long SQL query into modular dbt data models. -time_to_complete: '30 minutes' +# time_to_complete: '30 minutes' commenting out until we test platform: 'dbt-cloud' icon: 'guides' hide_table_of_contents: true diff --git a/website/docs/guides/set-up-ci.md b/website/docs/guides/set-up-ci.md index cbff83d6b1d..1dfe7270708 100644 --- a/website/docs/guides/set-up-ci.md +++ b/website/docs/guides/set-up-ci.md @@ -4,7 +4,7 @@ description: How to implement a CI environment for safe project validation. displayText: hoverSnippet: Learn how to id: set-up-ci -time_to_complete: '60 minutes' +# time_to_complete: '30 minutes' commenting out until we test icon: 'guides' hide_table_of_contents: true tags: ['dbt Cloud', 'Orchestration'] diff --git a/website/docs/guides/sl-migration.md b/website/docs/guides/sl-migration.md index 031997b5e4d..5f5705314e9 100644 --- a/website/docs/guides/sl-migration.md +++ b/website/docs/guides/sl-migration.md @@ -4,7 +4,7 @@ id: "sl-migration" sidebar_label: "Legacy dbt Semantic Layer migration" description: "Learn how to migrate from the legacy dbt Semantic Layer to the latest one." hoverSnippet: Learn how to migrate from the legacy dbt Semantic Layer to the latest one. -time_to_complete: '30 minutes' +# time_to_complete: '30 minutes' commenting out until we test icon: 'guides' hide_table_of_contents: true tags: ['Semantic Layer'] diff --git a/website/docs/guides/using-jinja.md b/website/docs/guides/using-jinja.md index 9078cb1aedd..9c604b86453 100644 --- a/website/docs/guides/using-jinja.md +++ b/website/docs/guides/using-jinja.md @@ -1,7 +1,7 @@ --- title: "Using Jinja" id: "using-jinja" -time_to_complete: '30 minutes' +# time_to_complete: '30 minutes' commenting out until we test icon: 'guides' hide_table_of_contents: true tags: ['Jinja', 'dbt Core'] From 5578d03f131ea02740ebd8082d80fb975c9ab6cc Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Mon, 6 Nov 2023 18:54:42 -0800 Subject: [PATCH 078/305] adding some consistency --- ...rializations.md => create-new-materializations.md} | 4 ++-- website/docs/guides/dbt-models-on-databricks.md | 1 - ...ebugging-schema-names.md => debug-schema-names.md} | 8 ++++---- website/docs/guides/manual-install-qs.md | 1 - ...abricks.md => migrate-from-spark-to-databricks.md} | 6 +++--- ...rocedures.md => migrate-from-stored-procedures.md} | 6 +++--- .../orchestration/webhooks/serverless-datadog.md | 10 ++++++++-- ...d => productionize-your-dbt-databricks-project.md} | 11 +++++------ ...oject.md => set-up-your-databricks-dbt-project.md} | 5 ++--- website/docs/guides/sl-migration.md | 3 +-- website/docs/guides/using-jinja.md | 4 +++- 11 files changed, 31 insertions(+), 28 deletions(-) rename website/docs/guides/{creating-new-materializations.md => create-new-materializations.md} (99%) rename website/docs/guides/{debugging-schema-names.md => debug-schema-names.md} (97%) rename website/docs/guides/{migrating-from-spark-to-databricks.md => migrate-from-spark-to-databricks.md} (97%) rename website/docs/guides/{migrating-from-stored-procedures.md => migrate-from-stored-procedures.md} (99%) rename website/docs/guides/{productionizing-your-dbt-databricks-project.md => productionize-your-dbt-databricks-project.md} (98%) rename website/docs/guides/{how-to-set-up-your-databricks-dbt-project.md => set-up-your-databricks-dbt-project.md} (98%) diff --git a/website/docs/guides/creating-new-materializations.md b/website/docs/guides/create-new-materializations.md similarity index 99% rename from website/docs/guides/creating-new-materializations.md rename to website/docs/guides/create-new-materializations.md index fe1f674e74f..1ad7d202de6 100644 --- a/website/docs/guides/creating-new-materializations.md +++ b/website/docs/guides/create-new-materializations.md @@ -1,6 +1,6 @@ --- -title: "Creating new materializations" -id: creating-new-materializations +title: "Create new materializations" +id: create-new-materializations description: Learn how to create your own materializations. displayText: Creating new materializations hoverSnippet: Learn how to create your own materializations. diff --git a/website/docs/guides/dbt-models-on-databricks.md b/website/docs/guides/dbt-models-on-databricks.md index 21b848b6945..d1a55915777 100644 --- a/website/docs/guides/dbt-models-on-databricks.md +++ b/website/docs/guides/dbt-models-on-databricks.md @@ -1,7 +1,6 @@ --- title: Optimize and troubleshoot dbt models on Databricks id: optimize-dbt-models-on-databricks -sidebar_label: "Optimize and troubleshoot dbt models on Databricks" description: "Learn more about optimizing and troubleshooting your dbt models on Databricks" displayText: Optimizing and troubleshooting your dbt models on Databricks hoverSnippet: Learn how to optimize and troubleshoot your dbt models on Databricks. diff --git a/website/docs/guides/debugging-schema-names.md b/website/docs/guides/debug-schema-names.md similarity index 97% rename from website/docs/guides/debugging-schema-names.md rename to website/docs/guides/debug-schema-names.md index a5d8c9be5db..7f40576d7a9 100644 --- a/website/docs/guides/debugging-schema-names.md +++ b/website/docs/guides/debug-schema-names.md @@ -1,9 +1,9 @@ --- -title: Debugging schema names -id: debugging-schema-names +title: Debug schema names +id: debug-schema-names description: Learn how to debug schema names when models build under unexpected schemas -displayText: Debugging schema names -hoverSnippet: Learn how to debug schema names dbt. +displayText: Debug schema names +hoverSnippet: Learn how to debug schema names in dbt. # time_to_complete: '30 minutes' commenting out until we test platform: 'dbt-core' icon: 'guides' diff --git a/website/docs/guides/manual-install-qs.md b/website/docs/guides/manual-install-qs.md index e49ef5bfdf7..61796fe008a 100644 --- a/website/docs/guides/manual-install-qs.md +++ b/website/docs/guides/manual-install-qs.md @@ -2,7 +2,6 @@ title: "Quickstart for dbt Core from a manual install" id: manual-install description: "Connecting your warehouse to dbt Core using the CLI." -sidebar_label: "Manual install quickstart" level: 'Beginner' platform: 'dbt-core' icon: 'fa-light fa-square-terminal' diff --git a/website/docs/guides/migrating-from-spark-to-databricks.md b/website/docs/guides/migrate-from-spark-to-databricks.md similarity index 97% rename from website/docs/guides/migrating-from-spark-to-databricks.md rename to website/docs/guides/migrate-from-spark-to-databricks.md index 68c867e762e..5be1c08d787 100644 --- a/website/docs/guides/migrating-from-spark-to-databricks.md +++ b/website/docs/guides/migrate-from-spark-to-databricks.md @@ -1,8 +1,8 @@ --- -title: "Migrating from dbt-spark to dbt-databricks" -id: "migrating-from-spark-to-databricks" +title: "Migrate from dbt-spark to dbt-databricks" +id: "migrate-from-spark-to-databricks" description: Learn how to migrate from dbt-spark to dbt-databricks. -displayText: Migrating from Spark to Databricks +displayText: Migrate from Spark to Databricks hoverSnippet: Learn how to migrate from dbt-spark to dbt-databricks. # time_to_complete: '30 minutes' commenting out until we test icon: 'guides' diff --git a/website/docs/guides/migrating-from-stored-procedures.md b/website/docs/guides/migrate-from-stored-procedures.md similarity index 99% rename from website/docs/guides/migrating-from-stored-procedures.md rename to website/docs/guides/migrate-from-stored-procedures.md index ef86534c4af..c894bce9873 100644 --- a/website/docs/guides/migrating-from-stored-procedures.md +++ b/website/docs/guides/migrate-from-stored-procedures.md @@ -1,8 +1,8 @@ --- -title: Migrating from DDL, DML, and stored procedures -id: migrating-from-stored-procedures +title: Migrate from DDL, DML, and stored procedures +id: migrate-from-stored-procedures description: Learn how to transform from a historical codebase of mixed DDL and DML statements to dbt models, including tips and patterns for the shift from a procedural to a declarative approach in defining datasets. -displayText: Migrating from DDL, DML, and stored procedures +displayText: Migrate from DDL, DML, and stored procedures hoverSnippet: Learn how to transform from a historical codebase of mixed DDL and DML statements to dbt models # time_to_complete: '30 minutes' commenting out until we test platform: 'dbt-core' diff --git a/website/docs/guides/orchestration/webhooks/serverless-datadog.md b/website/docs/guides/orchestration/webhooks/serverless-datadog.md index 6bd38869259..ebdc7419727 100644 --- a/website/docs/guides/orchestration/webhooks/serverless-datadog.md +++ b/website/docs/guides/orchestration/webhooks/serverless-datadog.md @@ -1,8 +1,14 @@ --- title: "Create Datadog events from dbt Cloud results" -id: webhooks-guide-serverless-datadog -slug: serverless-datadog +id: serverless-datadog description: Configure a serverless app to add Datadog logs +hoverSnippet: Learn how to configure a serverless app to add Datadog logs. +# time_to_complete: '30 minutes' commenting out until we test +icon: 'guides' +hide_table_of_contents: true +tags: ['Webhooks'] +level: 'Intermediate' +recently_updated: true --- This guide will teach you how to build and host a basic Python app which will add dbt Cloud job events to Datadog. To do this, when a dbt Cloud job completes it will create a log entry for each node that was run, containing all information about the node provided by the [Discovery API](/docs/dbt-cloud-apis/discovery-schema-job-models). diff --git a/website/docs/guides/productionizing-your-dbt-databricks-project.md b/website/docs/guides/productionize-your-dbt-databricks-project.md similarity index 98% rename from website/docs/guides/productionizing-your-dbt-databricks-project.md rename to website/docs/guides/productionize-your-dbt-databricks-project.md index c7a53ebc105..ce4e73b567b 100644 --- a/website/docs/guides/productionizing-your-dbt-databricks-project.md +++ b/website/docs/guides/productionize-your-dbt-databricks-project.md @@ -1,14 +1,13 @@ --- -title: Productionizing your dbt Databricks project -id: "productionizing-your-dbt-databricks-project" -sidebar_label: "Productionizing your dbt Databricks project" +title: Productionize your dbt Databricks project +id: "productionize-your-dbt-databricks-project" description: "Learn how to deliver models to end users and use best practices to maintain production data" -displayText: Productionizing your dbt Databricks project -hoverSnippet: Learn how to Productionizing your dbt Databricks project. +displayText: Productionize your dbt Databricks project +hoverSnippet: Learn how to Productionize your dbt Databricks project. # time_to_complete: '30 minutes' commenting out until we test icon: 'databricks' hide_table_of_contents: true -tags: ['Databricks', 'dbt Core','dbt Cloud'] +tags: ['Databricks','dbt Core','dbt Cloud'] level: 'Intermediate' recently_updated: true --- diff --git a/website/docs/guides/how-to-set-up-your-databricks-dbt-project.md b/website/docs/guides/set-up-your-databricks-dbt-project.md similarity index 98% rename from website/docs/guides/how-to-set-up-your-databricks-dbt-project.md rename to website/docs/guides/set-up-your-databricks-dbt-project.md index fc03c542861..e40a4182423 100644 --- a/website/docs/guides/how-to-set-up-your-databricks-dbt-project.md +++ b/website/docs/guides/set-up-your-databricks-dbt-project.md @@ -1,7 +1,6 @@ --- -title: How to set up your Databricks and dbt project -id: how-to-set-up-your-databricks-dbt-project -sidebar_label: "How to set up your Databricks and dbt project" +title: Set up your dbt project with Databricks +id: set-up-your-databricks-dbt-project description: "Learn more about setting up your dbt project with Databricks" displayText: Setting up your dbt project with Databricks hoverSnippet: Learn how to set up your dbt project with Databricks. diff --git a/website/docs/guides/sl-migration.md b/website/docs/guides/sl-migration.md index 5f5705314e9..b0605ece333 100644 --- a/website/docs/guides/sl-migration.md +++ b/website/docs/guides/sl-migration.md @@ -1,9 +1,8 @@ --- title: "Legacy dbt Semantic Layer migration guide" id: "sl-migration" -sidebar_label: "Legacy dbt Semantic Layer migration" description: "Learn how to migrate from the legacy dbt Semantic Layer to the latest one." -hoverSnippet: Learn how to migrate from the legacy dbt Semantic Layer to the latest one. +hoverSnippet: Migrate from the legacy dbt Semantic Layer to the latest one. # time_to_complete: '30 minutes' commenting out until we test icon: 'guides' hide_table_of_contents: true diff --git a/website/docs/guides/using-jinja.md b/website/docs/guides/using-jinja.md index 9c604b86453..9f098bb637f 100644 --- a/website/docs/guides/using-jinja.md +++ b/website/docs/guides/using-jinja.md @@ -1,6 +1,8 @@ --- -title: "Using Jinja" +title: "Use Jinja to improve your SQL code" id: "using-jinja" +description: "Learn how to improve your SQL code using Jinja." +hoverSnippet: "Improve your SQL code with Jinja" # time_to_complete: '30 minutes' commenting out until we test icon: 'guides' hide_table_of_contents: true From cfac223f3cf153e6aeff48dc2a2b42737c35e07d Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Tue, 7 Nov 2023 09:06:02 +0000 Subject: [PATCH 079/305] Update website/docs/reference/resource-configs/database.md Co-authored-by: Joel Labes --- website/docs/reference/resource-configs/database.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/reference/resource-configs/database.md b/website/docs/reference/resource-configs/database.md index 6532483db9d..0586f69e351 100644 --- a/website/docs/reference/resource-configs/database.md +++ b/website/docs/reference/resource-configs/database.md @@ -2,7 +2,7 @@ sidebar_label: "database" resource_types: [models, seeds, tests] datatype: string -description: "Read this guide to understand the database configuration in dbt." +description: "Override the default database when dbt creates resources in your data platform." --- From d434148af12894b8dcd2d13510f8e33ae5ed9185 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Tue, 7 Nov 2023 13:22:21 +0000 Subject: [PATCH 080/305] joel's feedback --- .../docs/reference/resource-configs/alias.md | 87 ++++++++++++++----- .../reference/resource-configs/database.md | 34 +++++--- .../docs/reference/resource-configs/schema.md | 2 +- 3 files changed, 89 insertions(+), 34 deletions(-) diff --git a/website/docs/reference/resource-configs/alias.md b/website/docs/reference/resource-configs/alias.md index 9adfe0b1870..94eb9b34561 100644 --- a/website/docs/reference/resource-configs/alias.md +++ b/website/docs/reference/resource-configs/alias.md @@ -1,32 +1,33 @@ --- resource_types: [models, seeds, snapshots, tests] -description: "Read this guide to understand the alias configuration in dbt." +description: "Aliasing a resource lets you give it a custom name in the database instead of using the filename." datatype: string --- - + Specify a custom alias for a model in your `dbt_project.yml` file. -For example, if you have a model that calculates `sales_metric`s and want to give it a more user-friendly alias, you can alias it like this: +For example, if you have a model that calculates `sales_total` and want to give it a more user-friendly alias, you can alias it like this: ```yml models: your_project: - sales_metrics: + sales_total: +alias: sales_dashboard ``` -This would return `analytics.finance.sales_dashboard` in the database, instead of the default `analytics.finance.sales_metrics`. +This would return `analytics.finance.sales_dashboard` in the database, instead of the default `analytics.finance.sales_total`. + Configure a seed's alias in your `dbt_project.yml` file. For example, if you have a seed that represents `product_categories` and want to alias it as `categories_data`, you would alias like this: @@ -42,37 +43,81 @@ seeds: This would return the name `analytics.finance.categories_data` in the database. +In the following second example, the seed at `seeds/country_codes.csv` will be built as a named `country_mappings`. + + + +```yml +seeds: + jaffle_shop: + country_codes: + +alias: country_mappings + +``` + + + - -## Definition + -Optionally specify a custom alias for a [model](/docs/build/models) or [seed](/docs/build/seeds). +Configure a seed's alias in your `dbt_project.yml` file. -When dbt creates a relation (/) in a database, it creates it as: `{{ database }}.{{ schema }}.{{ identifier }}`, e.g. `analytics.finance.payments` +For example, if you have a snapshot that represents `my_snapshot` and want to alias it as `updated_at_id`, you would alias like this: -The standard behavior of dbt is: -* If a custom alias is _not_ specified, the identifier of the relation is the resource name (i.e. the filename). -* If a custom alias is specified, the identifier of the relation is the `{{ alias }}` value. + -To learn more about changing the way that dbt generates a relation's `identifier`, read [Using Aliases](/docs/build/custom-aliases). +```yml +snapshots: + - name: my_snapshot + config: + target_database: analytics + target_schema: finance + unique_key: id + strategy: timestamp + updated_at: updated_at + +alias: updated_at_id +``` +This would return the name `analytics.finance.updated_at_id` in the database. -## Usage + + + + -### Seeds +Configure a test's alias in your `dbt_project.yml` file. -In this example, the seed at `seeds/country_codes.csv` will be built as a named `country_mappings`. +For example, to add a unique test to the `order_id` column and give it an alias `unique_order_id_test` to identify this specific test, you would alias like this: ```yml -seeds: - jaffle_shop: - country_codes: - +alias: country_mappings - +models: + - name: orders + columns: + - name: order_id + tests: + - unique + +alias: unique_order_id_test ``` +This would return the name `analytics.finance.orders_order_id_unique_order_id_test` in the database. + + + + +## Definition + +Optionally specify a custom alias for a [model](/docs/build/models), [tests](/docs/build/tests), [snapshots](/docs/build/snapshots), or [seed](/docs/build/seeds). + +When dbt creates a relation (/) in a database, it creates it as: `{{ database }}.{{ schema }}.{{ identifier }}`, e.g. `analytics.finance.payments` + +The standard behavior of dbt is: +* If a custom alias is _not_ specified, the identifier of the relation is the resource name (i.e. the filename). +* If a custom alias is specified, the identifier of the relation is the `{{ alias }}` value. + +To learn more about changing the way that dbt generates a relation's `identifier`, read [Using Aliases](/docs/build/custom-aliases). + diff --git a/website/docs/reference/resource-configs/database.md b/website/docs/reference/resource-configs/database.md index 0586f69e351..0a8ee8ab991 100644 --- a/website/docs/reference/resource-configs/database.md +++ b/website/docs/reference/resource-configs/database.md @@ -42,6 +42,27 @@ seeds: This would result in the generated relation being located in the `staging` database, so the full relation name would be `staging.finance.product_categories_data`. + + + + + +Configure a database in your `dbt_project.yml` file. + +For example, to load a test into a database called `reporting` instead of the target database, you can configure it like this: + + + +```yml +tests: + - my_not_null_test: + column_name: order_id + type: not_null + +database: reporting +``` + +This would result in the generated relation being located in the `reporting` database, so the full relation name would be `reporting.finance.my_not_null_test`. + @@ -49,7 +70,7 @@ This would result in the generated relation being located in the `staging` datab ## Definition -Optionally specify a custom database for a [model](/docs/build/sql-models) or [seed](/docs/build/seeds). (To specify a database for a [snapshot](/docs/build/snapshots), use the [`target_database` config](/reference/resource-configs/target_database)). +Optionally specify a custom database for a [model](/docs/build/sql-models), [seed](/docs/build/seeds), or [tests](/docs/build/tests). (To specify a database for a [snapshot](/docs/build/snapshots), use the [`target_database` config](/reference/resource-configs/target_database)). When dbt creates a relation (/) in a database, it creates it as: `{{ database }}.{{ schema }}.{{ identifier }}`, e.g. `analytics.finance.payments` @@ -59,18 +80,7 @@ The standard behavior of dbt is: To learn more about changing the way that dbt generates a relation's `database`, read [Using Custom Databases](/docs/build/custom-databases) -## Usage -### Load seeds into the RAW database - - -```yml -seeds: - +database: RAW - -``` - - ## Warehouse specific information * BigQuery: `project` and `database` are interchangeable diff --git a/website/docs/reference/resource-configs/schema.md b/website/docs/reference/resource-configs/schema.md index 9b6e2598893..1f6e10195ad 100644 --- a/website/docs/reference/resource-configs/schema.md +++ b/website/docs/reference/resource-configs/schema.md @@ -1,7 +1,7 @@ --- sidebar_label: "schema" resource_types: [models, seeds, tests] -description: "Schema - Read this in-depth guide to learn about configurations in dbt." +description: "Override the default schema when dbt creates resources in your data platform." datatype: string --- From 1fa986ce9f617f8ea8931c8c8bdc3945fc65f8a3 Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Tue, 7 Nov 2023 12:01:24 -0800 Subject: [PATCH 081/305] moving webhooks guide content --- .../orchestration/webhooks/zapier-slack.md | 10 ++- .../webhooks => }/serverless-datadog.md | 78 ++++++++++--------- .../webhooks => }/serverless-pagerduty.md | 37 +++++---- .../webhooks => }/zapier-ms-teams.md | 33 +++++--- .../webhooks => }/zapier-new-cloud-job.md | 29 ++++--- .../zapier-refresh-mode-report.md | 35 +++++---- .../zapier-refresh-tableau-workbook.md | 33 ++++---- 7 files changed, 153 insertions(+), 102 deletions(-) rename website/docs/guides/{orchestration/webhooks => }/serverless-datadog.md (70%) rename website/docs/guides/{orchestration/webhooks => }/serverless-pagerduty.md (87%) rename website/docs/guides/{orchestration/webhooks => }/zapier-ms-teams.md (92%) rename website/docs/guides/{orchestration/webhooks => }/zapier-new-cloud-job.md (89%) rename website/docs/guides/{orchestration/webhooks => }/zapier-refresh-mode-report.md (90%) rename website/docs/guides/{orchestration/webhooks => }/zapier-refresh-tableau-workbook.md (92%) diff --git a/website/docs/guides/orchestration/webhooks/zapier-slack.md b/website/docs/guides/orchestration/webhooks/zapier-slack.md index 6ce89eadd12..f4eaff89728 100644 --- a/website/docs/guides/orchestration/webhooks/zapier-slack.md +++ b/website/docs/guides/orchestration/webhooks/zapier-slack.md @@ -1,8 +1,14 @@ --- title: "Post to Slack with error context when a job fails" -id: webhooks-guide-zapier-slack -slug: zapier-slack +id: zapier-slack description: Use Zapier and the dbt Cloud API to post error context to Slack +hoverSnippet: Learn how to use Zapier to trigger a dbt Cloud job once a run completes. +# time_to_complete: '30 minutes' commenting out until we test +icon: 'guides' +hide_table_of_contents: true +tags: ['Webhooks'] +level: 'Advanced' +recently_updated: true --- This guide will show you how to set up an integration between dbt Cloud jobs and Slack using [dbt Cloud webhooks](/docs/deploy/webhooks) and Zapier. It builds on the native [native Slack integration](/docs/deploy/job-notifications#slack-notifications) by attaching error message details of models and tests in a thread. diff --git a/website/docs/guides/orchestration/webhooks/serverless-datadog.md b/website/docs/guides/serverless-datadog.md similarity index 70% rename from website/docs/guides/orchestration/webhooks/serverless-datadog.md rename to website/docs/guides/serverless-datadog.md index ebdc7419727..3b1a3bd6db4 100644 --- a/website/docs/guides/orchestration/webhooks/serverless-datadog.md +++ b/website/docs/guides/serverless-datadog.md @@ -1,68 +1,71 @@ --- title: "Create Datadog events from dbt Cloud results" id: serverless-datadog -description: Configure a serverless app to add Datadog logs -hoverSnippet: Learn how to configure a serverless app to add Datadog logs. +description: Configure a serverless app to add dbt Cloud events to Datadog logs +hoverSnippet: Learn how to configure a serverless app to add dbt Cloud events to Datadog logs. # time_to_complete: '30 minutes' commenting out until we test icon: 'guides' hide_table_of_contents: true tags: ['Webhooks'] -level: 'Intermediate' +level: 'Advanced' recently_updated: true --- +## Introduction + This guide will teach you how to build and host a basic Python app which will add dbt Cloud job events to Datadog. To do this, when a dbt Cloud job completes it will create a log entry for each node that was run, containing all information about the node provided by the [Discovery API](/docs/dbt-cloud-apis/discovery-schema-job-models). In this example, we will use [fly.io](https://fly.io) for hosting/running the service. fly.io is a platform for running full stack apps without provisioning servers etc. This level of usage should comfortably fit inside of the Free tier. You can also use an alternative tool such as [AWS Lambda](https://adem.sh/blog/tutorial-fastapi-aws-lambda-serverless) or [Google Cloud Run](https://github.com/sekR4/FastAPI-on-Google-Cloud-Run). -## Prerequisites +### Prerequisites + This guide assumes some familiarity with: - [dbt Cloud Webhooks](/docs/deploy/webhooks) - CLI apps - Deploying code to a serverless code runner like fly.io or AWS Lambda -## Integration steps - -### 1. Clone the `dbt-cloud-webhooks-datadog` repo +## Clone the `dbt-cloud-webhooks-datadog` repo [This repository](https://github.com/dpguthrie/dbt-cloud-webhooks-datadog) contains the sample code for validating a webhook and creating logs in Datadog. -### 2. Install `flyctl` and sign up for fly.io +## Install `flyctl` and sign up for fly.io Follow the directions for your OS in the [fly.io docs](https://fly.io/docs/hands-on/install-flyctl/), then from your command line, run the following commands: Switch to the directory containing the repo you cloned in step 1: -```shell -#example: replace with your actual path -cd ~/Documents/GitHub/dbt-cloud-webhooks-datadog -``` + + ```shell + #example: replace with your actual path + cd ~/Documents/GitHub/dbt-cloud-webhooks-datadog + ``` Sign up for fly.io: -```shell -flyctl auth signup -``` + ```shell + flyctl auth signup + ``` Your console should show `successfully logged in as YOUR_EMAIL` when you're done, but if it doesn't then sign in to fly.io from your command line: -```shell -flyctl auth login -``` + ```shell + flyctl auth login + ``` + +## Launch your fly.io app -### 3. Launch your fly.io app Launching your app publishes it to the web and makes it ready to catch webhook events: -```shell -flyctl launch -``` + ```shell + flyctl launch + ``` -You will see a message saying that an existing `fly.toml` file was found. Type `y` to copy its configuration to your new app. +1. You will see a message saying that an existing `fly.toml` file was found. Type `y` to copy its configuration to your new app. -Choose an app name of your choosing, such as `YOUR_COMPANY-dbt-cloud-webhook-datadog`, or leave blank and one will be generated for you. Note that your name can only contain numbers, lowercase letters and dashes. +2. Choose an app name of your choosing, such as `YOUR_COMPANY-dbt-cloud-webhook-datadog`, or leave blank and one will be generated for you. Note that your name can only contain numbers, lowercase letters and dashes. -Choose a deployment region, and take note of the hostname that is generated (normally `APP_NAME.fly.dev`). +3. Choose a deployment region, and take note of the hostname that is generated (normally `APP_NAME.fly.dev`). -When asked if you would like to set up Postgresql or Redis databases, type `n` for each. +4. When asked if you would like to set up Postgresql or Redis databases, type `n` for each. -Type `y` when asked if you would like to deploy now. +5. Type `y` when asked if you would like to deploy now.
Sample output from the setup wizard: @@ -92,16 +95,16 @@ Wrote config file fly.toml
### 4. Create a Datadog API Key [Create an API Key for your Datadog account](https://docs.datadoghq.com/account_management/api-app-keys/) and make note of it and your Datadog site (e.g. `datadoghq.com`) for later. -### 5. Configure a new webhook in dbt Cloud -See [Create a webhook subscription](/docs/deploy/webhooks#create-a-webhook-subscription) for full instructions. Your event should be **Run completed**. - -Set the webhook URL to the host name you created earlier (`APP_NAME.fly.dev`) +## Configure a new webhook in dbt Cloud -Make note of the Webhook Secret Key for later. +1. See [Create a webhook subscription](/docs/deploy/webhooks#create-a-webhook-subscription) for full instructions. Your event should be **Run completed**. +2. Set the webhook URL to the host name you created earlier (`APP_NAME.fly.dev`) +3. Make note of the Webhook Secret Key for later. *Do not test the endpoint*; it won't work until you have stored the auth keys (next step) -### 6. Store secrets +## Store secrets + The application requires four secrets to be set, using these names: - `DBT_CLOUD_SERVICE_TOKEN`: a dbt Cloud [user token](https://docs.getdbt.com/docs/dbt-cloud-apis/user-tokens) or [service account token](https://docs.getdbt.com/docs/dbt-cloud-apis/service-tokens) with at least the `Metdata Only` permission. - `DBT_CLOUD_AUTH_TOKEN`: the Secret Key for the dbt Cloud webhook you created earlier. @@ -109,9 +112,10 @@ The application requires four secrets to be set, using these names: - `DD_SITE`: The Datadog site for your organisation, e.g. `datadoghq.com`. Set these secrets as follows, replacing `abc123` etc with actual values: -```shell -flyctl secrets set DBT_CLOUD_SERVICE_TOKEN=abc123 DBT_CLOUD_AUTH_TOKEN=def456 DD_API_KEY=ghi789 DD_SITE=datadoghq.com -``` + ```shell + flyctl secrets set DBT_CLOUD_SERVICE_TOKEN=abc123 DBT_CLOUD_AUTH_TOKEN=def456 DD_API_KEY=ghi789 DD_SITE=datadoghq.com + ``` + +## Deploy your app -### 7. Deploy your app After you set your secrets, fly.io will redeploy your application. When it has completed successfully, go back to the dbt Cloud webhook settings and click **Test Endpoint**. diff --git a/website/docs/guides/orchestration/webhooks/serverless-pagerduty.md b/website/docs/guides/serverless-pagerduty.md similarity index 87% rename from website/docs/guides/orchestration/webhooks/serverless-pagerduty.md rename to website/docs/guides/serverless-pagerduty.md index 5455af60110..31436221be5 100644 --- a/website/docs/guides/orchestration/webhooks/serverless-pagerduty.md +++ b/website/docs/guides/serverless-pagerduty.md @@ -1,10 +1,18 @@ --- -title: "Create PagerDuty alarms from failed dbt Cloud tasks" -id: webhooks-guide-serverless-pagerduty -slug: serverless-pagerduty -description: Configure a serverless app to create PagerDuty alarms +title: "Trigger PagerDuty alarms when dbt Cloud jobs fail" +id: serverless-pagerduty +description: Use webhooks to configure a serverless app to trigger PagerDuty alarms +hoverSnippet: Learn how to configure a serverless app that uses webhooks to trigger PagerDuty alarms. +# time_to_complete: '30 minutes' commenting out until we test +icon: 'guides' +hide_table_of_contents: true +tags: ['Webhooks'] +level: 'Advanced' +recently_updated: true --- +## Introduction + This guide will teach you how to build and host a basic Python app which will monitor dbt Cloud jobs and create PagerDuty alarms based on failure. To do this, when a dbt Cloud job completes it will: - Check for any failed nodes (e.g. non-passing tests or errored models), and - create a PagerDuty alarm based on those nodes by calling the PagerDuty Events API. Events are deduplicated per run ID. @@ -13,20 +21,20 @@ This guide will teach you how to build and host a basic Python app which will mo In this example, we will use fly.io for hosting/running the service. fly.io is a platform for running full stack apps without provisioning servers etc. This level of usage should comfortably fit inside of the Free tier. You can also use an alternative tool such as [AWS Lambda](https://adem.sh/blog/tutorial-fastapi-aws-lambda-serverless) or [Google Cloud Run](https://github.com/sekR4/FastAPI-on-Google-Cloud-Run). -## Prerequisites +### Prerequisites + This guide assumes some familiarity with: - [dbt Cloud Webhooks](/docs/deploy/webhooks) - CLI apps - Deploying code to a serverless code runner like fly.io or AWS Lambda -## Integration steps -### 1. Clone the `dbt-cloud-webhooks-pagerduty` repo +## Clone the `dbt-cloud-webhooks-pagerduty` repo [This repository](https://github.com/dpguthrie/dbt-cloud-webhooks-pagerduty) contains the sample code for validating a webhook and creating events in PagerDuty. -### 2. Install `flyctl` and sign up for fly.io +## Install `flyctl` and sign up for fly.io Follow the directions for your OS in the [fly.io docs](https://fly.io/docs/hands-on/install-flyctl/), then from your command line, run the following commands: @@ -46,7 +54,7 @@ Your console should show `successfully logged in as YOUR_EMAIL` when you're done flyctl auth login ``` -### 3. Launch your fly.io app +## Launch your fly.io app Launching your app publishes it to the web and makes it ready to catch webhook events: ```shell flyctl launch @@ -87,12 +95,12 @@ Wrote config file fly.toml
-### 4. Create a PagerDuty integration application +## Create a PagerDuty integration application See [PagerDuty's guide](https://developer.pagerduty.com/docs/ZG9jOjExMDI5NTgw-events-api-v2-overview#getting-started) for full instructions. Make note of the integration key for later. -### 5. Configure a new webhook in dbt Cloud +## Configure a new webhook in dbt Cloud See [Create a webhook subscription](/docs/deploy/webhooks#create-a-webhook-subscription) for full instructions. Your event should be **Run completed**. Set the webhook URL to the host name you created earlier (`APP_NAME.fly.dev`) @@ -101,7 +109,7 @@ Make note of the Webhook Secret Key for later. *Do not test the endpoint*; it won't work until you have stored the auth keys (next step) -### 6. Store secrets +## Store secrets The application requires three secrets to be set, using these names: - `DBT_CLOUD_SERVICE_TOKEN`: a dbt Cloud [user token](https://docs.getdbt.com/docs/dbt-cloud-apis/user-tokens) or [service account token](https://docs.getdbt.com/docs/dbt-cloud-apis/service-tokens) with at least the `Metdata Only` permission. - `DBT_CLOUD_AUTH_TOKEN`: the Secret Key for the dbt Cloud webhook you created earlier. @@ -112,5 +120,6 @@ Set these secrets as follows, replacing `abc123` etc with actual values: flyctl secrets set DBT_CLOUD_SERVICE_TOKEN=abc123 DBT_CLOUD_AUTH_TOKEN=def456 PD_ROUTING_KEY=ghi789 ``` -### 7. Deploy your app -After you set your secrets, fly.io will redeploy your application. When it has completed successfully, go back to the dbt Cloud webhook settings and click **Test Endpoint**. \ No newline at end of file +## Deploy your app + +After you set your secrets, fly.io will redeploy your application. When it has completed successfully, go back to the dbt Cloud webhook settings and click **Test Endpoint**. diff --git a/website/docs/guides/orchestration/webhooks/zapier-ms-teams.md b/website/docs/guides/zapier-ms-teams.md similarity index 92% rename from website/docs/guides/orchestration/webhooks/zapier-ms-teams.md rename to website/docs/guides/zapier-ms-teams.md index 148e16b2469..cb62a0edc33 100644 --- a/website/docs/guides/orchestration/webhooks/zapier-ms-teams.md +++ b/website/docs/guides/zapier-ms-teams.md @@ -2,8 +2,16 @@ title: "Post to Microsoft Teams when a job finishes" id: webhooks-guide-zapier-ms-teams slug: zapier-ms-teams -description: Use Zapier and the dbt Cloud API to post to Microsoft Teams +description: Use Zapier and dbt Cloud webhooks to post to Microsoft Teams when a job finishes running +hoverSnippet: Learn how to use Zapier with dbt Cloud webhooks to post in Microsoft Teams when a job finishes running. +# time_to_complete: '30 minutes' commenting out until we test +icon: 'guides' +hide_table_of_contents: true +tags: ['Webhooks'] +level: 'Advanced' +recently_updated: true --- +## Introduction This guide will show you how to set up an integration between dbt Cloud jobs and Microsoft Teams using [dbt Cloud Webhooks](/docs/deploy/webhooks) and Zapier, similar to the [native Slack integration](/docs/deploy/job-notifications#slack-notifications). @@ -14,19 +22,20 @@ When a dbt Cloud job finishes running, the integration will: - Post a summary to a Microsoft Teams channel. ![Screenshot of a message in MS Teams showing a summary of a dbt Cloud run which failed](/img/guides/orchestration/webhooks/zapier-ms-teams/ms-teams-ui.png) -## Prerequisites + +### Prerequisites In order to set up the integration, you should have familiarity with: - [dbt Cloud Webhooks](/docs/deploy/webhooks) - Zapier -## Integration steps -### 1. Set up the connection between Zapier and Microsoft Teams + +## Set up the connection between Zapier and Microsoft Teams * Install the [Zapier app in Microsoft Teams](https://appsource.microsoft.com/en-us/product/office/WA200002044) and [grant Zapier access to your account](https://zapier.com/blog/how-to-automate-microsoft-teams/). **Note**: To receive the message, add the Zapier app to the team's channel during installation. -### 2. Create a new Zap in Zapier +## Create a new Zap in Zapier Use **Webhooks by Zapier** as the Trigger, and **Catch Raw Hook** as the Event. If you don't intend to [validate the authenticity of your webhook](/docs/deploy/webhooks#validate-a-webhook) (not recommended!) then you can choose **Catch Hook** instead. Press **Continue**, then copy the webhook URL. @@ -34,6 +43,7 @@ Press **Continue**, then copy the webhook URL. ![Screenshot of the Zapier UI, showing the webhook URL ready to be copied](/img/guides/orchestration/webhooks/zapier-common/catch-raw-hook.png) ### 3. Configure a new webhook in dbt Cloud + See [Create a webhook subscription](/docs/deploy/webhooks#create-a-webhook-subscription) for full instructions. Choose either **Run completed** or **Run errored**, but not both, or you'll get double messages when a run fails. Make note of the Webhook Secret Key for later. @@ -42,14 +52,15 @@ Once you've tested the endpoint in dbt Cloud, go back to Zapier and click **Test The sample body's values are hard-coded and not reflective of your project, but they give Zapier a correctly-shaped object during development. -### 4. Store secrets +## Store secrets + In the next step, you will need the Webhook Secret Key from the prior step, and a dbt Cloud [user token](https://docs.getdbt.com/docs/dbt-cloud-apis/user-tokens) or [service account token](https://docs.getdbt.com/docs/dbt-cloud-apis/service-tokens). Zapier allows you to [store secrets](https://help.zapier.com/hc/en-us/articles/8496293271053-Save-and-retrieve-data-from-Zaps), which prevents your keys from being displayed in plaintext in the Zap code. You will be able to access them via the [StoreClient utility](https://help.zapier.com/hc/en-us/articles/8496293969549-Store-data-from-code-steps-with-StoreClient). -### 5. Add a code action +## Add a code action Select **Code by Zapier** as the App, and **Run Python** as the Event. In the **Set up action** area, add two items to **Input Data**: `raw_body` and `auth_header`. Map those to the `1. Raw Body` and `1. Headers Http Authorization` fields from the **Catch Raw Hook** step above. @@ -141,19 +152,21 @@ for step in run_data_results['run_steps']: output = {'outcome_message': outcome_message} ``` -### 6. Add the Microsoft Teams action +## Add the Microsoft Teams action + Select **Microsoft Teams** as the App, and **Send Channel Message** as the Action. In the **Set up action** area, choose the team and channel. Set the **Message Text Format** to **markdown**, then put **2. Outcome Message** from the Run Python in Code by Zapier output into the **Message Text** field. ![Screenshot of the Zapier UI, showing the mappings of prior steps to an MS Teams message](/img/guides/orchestration/webhooks/zapier-ms-teams/ms-teams-zap-config.png) -### 7. Test and deploy +## Test and deploy + As you have gone through each step, you should have tested the outputs, so you can now try posting a message into your Teams channel. When you're happy with it, remember to ensure that your `run_id` and `account_id` are no longer hardcoded, then publish your Zap. -## Other notes +### Other notes - If you post to a chat instead of a team channel, you don't need to add the Zapier app to Microsoft Teams. - If you post to a chat instead of a team channel, note that markdown is not supported and you will need to remove the markdown formatting. - If you chose the **Catch Hook** trigger instead of **Catch Raw Hook**, you will need to pass each required property from the webhook as an input instead of running `json.loads()` against the raw body. You will also need to remove the validation code. diff --git a/website/docs/guides/orchestration/webhooks/zapier-new-cloud-job.md b/website/docs/guides/zapier-new-cloud-job.md similarity index 89% rename from website/docs/guides/orchestration/webhooks/zapier-new-cloud-job.md rename to website/docs/guides/zapier-new-cloud-job.md index 0764c6c7911..b16fa94bc21 100644 --- a/website/docs/guides/orchestration/webhooks/zapier-new-cloud-job.md +++ b/website/docs/guides/zapier-new-cloud-job.md @@ -1,28 +1,34 @@ --- title: "Trigger a dbt Cloud job after a run finishes" -id: webhooks-guide-zapier-new-cloud-job -slug: zapier-new-cloud-job -description: Use Zapier to interact with the dbt Cloud API +id: zapier-new-cloud-job +description: Use Zapier to trigger a dbt Cloud job once a run completes. +hoverSnippet: Learn how to use Zapier to trigger a dbt Cloud job once a run completes. +# time_to_complete: '30 minutes' commenting out until we test +icon: 'guides' +hide_table_of_contents: true +tags: ['Webhooks'] +level: 'Advanced' +recently_updated: true --- +## Introduction + This guide will show you how to trigger a dbt Cloud job based on the successful completion of a different job. This can be useful when you need to trigger a job in a different project. Remember that dbt works best when it understands the whole context of the it has been asked to run, so use this ability judiciously. -## Prerequisites +### Prerequisites In order to set up the integration, you should have familiarity with: - [dbt Cloud Webhooks](/docs/deploy/webhooks) - Zapier -## Integration steps - -### 1. Create a new Zap in Zapier +## Create a new Zap in Zapier Use **Webhooks by Zapier** as the Trigger, and **Catch Raw Hook** as the Event. If you don't intend to [validate the authenticity of your webhook](/docs/deploy/webhooks#validate-a-webhook) (not recommended!) then you can choose **Catch Hook** instead. Press **Continue**, then copy the webhook URL. ![Screenshot of the Zapier UI, showing the webhook URL ready to be copied](/img/guides/orchestration/webhooks/zapier-common/catch-raw-hook.png) -### 2. Configure a new webhook in dbt Cloud +## Configure a new webhook in dbt Cloud See [Create a webhook subscription](/docs/deploy/webhooks#create-a-webhook-subscription) for full instructions. Your event should be **Run completed**, and you need to change the **Jobs** list to only contain the job you want to trigger the next run. Make note of the Webhook Secret Key for later. @@ -31,14 +37,14 @@ Once you've tested the endpoint in dbt Cloud, go back to Zapier and click **Test The sample body's values are hard-coded and not reflective of your project, but they give Zapier a correctly-shaped object during development. -### 3. Store secrets +## Store secrets In the next step, you will need the Webhook Secret Key from the prior step, and a dbt Cloud [user token](https://docs.getdbt.com/docs/dbt-cloud-apis/user-tokens) or [service account token](https://docs.getdbt.com/docs/dbt-cloud-apis/service-tokens). Zapier allows you to [store secrets](https://help.zapier.com/hc/en-us/articles/8496293271053-Save-and-retrieve-data-from-Zaps), which prevents your keys from being displayed in plaintext in the Zap code. You will be able to access them via the [StoreClient utility](https://help.zapier.com/hc/en-us/articles/8496293969549-Store-data-from-code-steps-with-StoreClient). -### 4. Add a code action +## Add a code action Select **Code by Zapier** as the App, and **Run Python** as the Event. In the **Set up action** area, add two items to **Input Data**: `raw_body` and `auth_header`. Map those to the `1. Raw Body` and `1. Headers Http Authorization` fields from the **Catch Raw Hook** step above. @@ -87,5 +93,6 @@ if hook_data['runStatus'] == "Success": return ``` -### 5. Test and deploy +## Test and deploy + When you're happy with it, remember to ensure that your `account_id` is no longer hardcoded, then publish your Zap. diff --git a/website/docs/guides/orchestration/webhooks/zapier-refresh-mode-report.md b/website/docs/guides/zapier-refresh-mode-report.md similarity index 90% rename from website/docs/guides/orchestration/webhooks/zapier-refresh-mode-report.md rename to website/docs/guides/zapier-refresh-mode-report.md index f682baae8e2..0ffcec9c96d 100644 --- a/website/docs/guides/orchestration/webhooks/zapier-refresh-mode-report.md +++ b/website/docs/guides/zapier-refresh-mode-report.md @@ -1,10 +1,18 @@ --- title: "Refresh a Mode dashboard when a job completes" -id: webhooks-guide-zapier-refresh-mode-report -slug: zapier-refresh-mode-report -description: Use Zapier to trigger a Mode dashboard refresh +id: zapier-refresh-mode-report +description: Use Zapier to trigger a Mode dashboard refresh when a dbt Cloud job completes +hoverSnippet: Learn how to use Zapier to trigger a Mode dashboard refresh when a dbt Cloud job completes. +# time_to_complete: '30 minutes' commenting out until we test +icon: 'guides' +hide_table_of_contents: true +tags: ['Webhooks'] +level: 'Advanced' +recently_updated: true --- +## Introduction + This guide will teach you how to refresh a Mode dashboard when a dbt Cloud job has completed successfully and there is fresh data available. The integration will: - Receive a webhook notification in Zapier @@ -12,23 +20,21 @@ This guide will teach you how to refresh a Mode dashboard when a dbt Cloud job h Although we are using the Mode API for a concrete example, the principles are readily transferrable to your [tool](https://learn.hex.tech/docs/develop-logic/hex-api/api-reference#operation/RunProject) [of](https://learn.microsoft.com/en-us/rest/api/power-bi/datasets/refresh-dataset) [choice](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref.htm#update_workbook_now). -## Prerequisites +### Prerequisites In order to set up the integration, you should have familiarity with: - [dbt Cloud Webhooks](/docs/deploy/webhooks) - Zapier - The [Mode API](https://mode.com/developer/api-reference/introduction/) -## Integration steps - -### 1. Create a new Zap in Zapier +## Create a new Zap in Zapier Use **Webhooks by Zapier** as the Trigger, and **Catch Raw Hook** as the Event. If you don't intend to [validate the authenticity of your webhook](/docs/deploy/webhooks#validate-a-webhook) (not recommended!) then you can choose **Catch Hook** instead. Press **Continue**, then copy the webhook URL. ![Screenshot of the Zapier UI, showing the webhook URL ready to be copied](/img/guides/orchestration/webhooks/zapier-common/catch-raw-hook.png) -### 2. Configure a new webhook in dbt Cloud +## Configure a new webhook in dbt Cloud See [Create a webhook subscription](/docs/deploy/webhooks#create-a-webhook-subscription) for full instructions. Your event should be **Run completed**, and you need to change the **Jobs** list to only contain any jobs whose completion should trigger a report refresh. Make note of the Webhook Secret Key for later. @@ -37,20 +43,19 @@ Once you've tested the endpoint in dbt Cloud, go back to Zapier and click **Test The sample body's values are hard-coded and not reflective of your project, but they give Zapier a correctly-shaped object during development. -### 3. Store secrets +## Store secrets In the next step, you will need the Webhook Secret Key from the prior step, and a dbt Cloud [user token](https://docs.getdbt.com/docs/dbt-cloud-apis/user-tokens) or [service account token](https://docs.getdbt.com/docs/dbt-cloud-apis/service-tokens), as well as a [Mode API token and secret](https://mode.com/developer/api-reference/authentication/). Zapier allows you to [store secrets](https://help.zapier.com/hc/en-us/articles/8496293271053-Save-and-retrieve-data-from-Zaps), which prevents your keys from being displayed in plaintext in the Zap code. You will be able to access them via the [StoreClient utility](https://help.zapier.com/hc/en-us/articles/8496293969549-Store-data-from-code-steps-with-StoreClient). - This guide assumes the names for the secret keys are: `DBT_WEBHOOK_KEY`, `MODE_API_TOKEN`, and `MODE_API_SECRET`. If you are using different names, make sure you update all references to them in the sample code. This guide uses a short-lived code action to store the secrets, but you can also use a tool like Postman to interact with the [REST API](https://store.zapier.com/) or create a separate Zap and call the [Set Value Action](https://help.zapier.com/hc/en-us/articles/8496293271053-Save-and-retrieve-data-from-Zaps#3-set-a-value-in-your-store-0-3). -#### a. Create a Storage by Zapier connection +### a. Create a Storage by Zapier connection If you haven't already got one, go to and create a new connection. Remember the UUID secret you generate for later. -#### b. Add a temporary code step +### b. Add a temporary code step Choose **Run Python** as the Event. Run the following code: ```python store = StoreClient('abc123') #replace with your UUID secret @@ -60,7 +65,7 @@ store.set('MODE_API_SECRET', 'abc123') #replace with your Mode API Secret ``` Test the step. You can delete this Action when the test succeeds. The key will remain stored as long as it is accessed at least once every three months. -### 4. Add a code action +## Add a code action Select **Code by Zapier** as the App, and **Run Python** as the Event. In the **Set up action** area, add two items to **Input Data**: `raw_body` and `auth_header`. Map those to the `1. Raw Body` and `1. Headers Http Authorization` fields from the **Catch Raw Hook** step above. @@ -124,5 +129,5 @@ if hook_data['runStatus'] == "Success": return ``` -### 5. Test and deploy -You can iterate on the Code step by modifying the code and then running the test again. When you're happy with it, you can publish your Zap. \ No newline at end of file +## Test and deploy +You can iterate on the Code step by modifying the code and then running the test again. When you're happy with it, you can publish your Zap. diff --git a/website/docs/guides/orchestration/webhooks/zapier-refresh-tableau-workbook.md b/website/docs/guides/zapier-refresh-tableau-workbook.md similarity index 92% rename from website/docs/guides/orchestration/webhooks/zapier-refresh-tableau-workbook.md rename to website/docs/guides/zapier-refresh-tableau-workbook.md index 52a9ae63523..6e8621659f0 100644 --- a/website/docs/guides/orchestration/webhooks/zapier-refresh-tableau-workbook.md +++ b/website/docs/guides/zapier-refresh-tableau-workbook.md @@ -1,16 +1,24 @@ --- title: "Refresh Tableau workbook with extracts after a job finishes" -id: webhooks-guide-zapier-refresh-tableau-workbook -slug: zapier-refresh-tableau-workbook -description: Use Zapier to trigger a Tableau workbook refresh +id: zapier-refresh-tableau-workbook +description: Use Zapier to trigger a Tableau workbook refresh once a dbt Cloud job completes successfully +hoverSnippet: Learn how to use Zapier to trigger a Tableau workbook refresh once a dbt Cloud job completes successfully. +# time_to_complete: '30 minutes' commenting out until we test +icon: 'guides' +hide_table_of_contents: true +tags: ['Webhooks'] +level: 'Advanced' +recently_updated: true --- +## Introduction + This guide will teach you how to refresh a Tableau workbook that leverages [extracts](https://help.tableau.com/current/pro/desktop/en-us/extracting_data.htm) when a dbt Cloud job has completed successfully and there is fresh data available. The integration will: - Receive a webhook notification in Zapier - Trigger a refresh of a Tableau workbook -## Prerequisites +### Prerequisites To set up the integration, you need to be familiar with: @@ -19,19 +27,18 @@ To set up the integration, you need to be familiar with: - The [Tableau API](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api.htm) - The [version](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm#rest_api_versioning) of Tableau's REST API that is compatible with your server -## Integration steps -### 1. Obtain authentication credentials from Tableau +## Obtain authentication credentials from Tableau To authenticate with the Tableau API, obtain a [Personal Access Token](https://help.tableau.com/current/server/en-us/security_personal_access_tokens.htm) from your Tableau Server/Cloud instance. In addition, make sure your Tableau workbook uses data sources that allow refresh access, which is usually set when publishing. -### 2. Create a new Zap in Zapier +## Create a new Zap in Zapier To trigger an action with the delivery of a webhook in Zapier, you'll want to create a new Zap with **Webhooks by Zapier** as the Trigger and **Catch Raw Hook** as the Event. However, if you choose not to [validate the authenticity of your webhook](/docs/deploy/webhooks#validate-a-webhook), which isn't recommended, you can choose **Catch Hook** instead. Press **Continue**, then copy the webhook URL. ![Screenshot of the Zapier UI, showing the webhook URL ready to be copied](/img/guides/orchestration/webhooks/zapier-common/catch-raw-hook.png) -### 3. Configure a new webhook in dbt Cloud +## Configure a new webhook in dbt Cloud To set up a webhook subscription for dbt Cloud, follow the instructions in [Create a webhook subscription](/docs/deploy/webhooks#create-a-webhook-subscription). For the event, choose **Run completed** and modify the **Jobs** list to include only the jobs that should trigger a report refresh. Remember to save the Webhook Secret Key for later. Paste in the webhook URL obtained from Zapier in step 2 into the **Endpoint** field and test the endpoint. @@ -40,7 +47,7 @@ Once you've tested the endpoint in dbt Cloud, go back to Zapier and click **Test The sample body's values are hard-coded and not reflective of your project, but they give Zapier a correctly-shaped object during development. -### 4. Store secrets +## Store secrets In the next step, you will need the Webhook Secret Key from the prior step, and your Tableau authentication credentials and details. Specifically, you'll need your Tableau server/site URL, server/site name, PAT name, and PAT secret. Zapier allows you to [store secrets](https://help.zapier.com/hc/en-us/articles/8496293271053-Save-and-retrieve-data-from-Zaps), which prevents your keys from being displayed in plaintext in the Zap code. You will be able to access them via the [StoreClient utility](https://help.zapier.com/hc/en-us/articles/8496293969549-Store-data-from-code-steps-with-StoreClient). @@ -49,11 +56,11 @@ This guide assumes the names for the secret keys are: `DBT_WEBHOOK_KEY`, `TABLEA This guide uses a short-lived code action to store the secrets, but you can also use a tool like Postman to interact with the [REST API](https://store.zapier.com/) or create a separate Zap and call the [Set Value Action](https://help.zapier.com/hc/en-us/articles/8496293271053-Save-and-retrieve-data-from-Zaps#3-set-a-value-in-your-store-0-3). -#### a. Create a Storage by Zapier connection +### a. Create a Storage by Zapier connection Create a new connection at https://zapier.com/app/connections/storage if you don't already have one and remember the UUID secret you generate for later. -#### b. Add a temporary code step +### b. Add a temporary code step Choose **Run Python** as the Event and input the following code: @@ -68,7 +75,7 @@ store.set('TABLEAU_API_TOKEN_SECRET', 'abc123') #replace with your Tableau API S Test the step to run the code. You can delete this action when the test succeeds. The keys will remain stored as long as it is accessed at least once every three months. -### 5. Add a code action +## Add a code action Select **Code by Zapier** as the App, and **Run Python** as the Event. In the **Set up action** area, add two items to **Input Data**: `raw_body` and `auth_header`. Map those to the `1. Raw Body` and `1. Headers Http Authorization` fields from the **Catch Raw Hook** step above. @@ -161,5 +168,5 @@ refresh_trigger = requests.post(refresh_url, data=json.dumps(refresh_data), head return {"message": "Workbook refresh has been queued"} ``` -### 6. Test and deploy +## Test and deploy To make changes to your code, you can modify it and test it again. When you're happy with it, you can publish your Zap. From 8306a1ae5bb07eae324e2df3930dd95d0502dc5b Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Tue, 7 Nov 2023 20:37:36 +0000 Subject: [PATCH 082/305] test --- website/package-lock.json | 67 +++++++++++++++++++++++++++++ website/package.json | 1 + website/static/js/headerLinkCopy.js | 26 +++++++++++ 3 files changed, 94 insertions(+) create mode 100644 website/static/js/headerLinkCopy.js diff --git a/website/package-lock.json b/website/package-lock.json index b15a903e97f..4b6000acac4 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -17,6 +17,7 @@ "@svgr/webpack": "^6.0.0", "axios": "^0.27.2", "classnames": "^2.3.1", + "clipboard": "^2.0.11", "clsx": "^1.1.1", "color": "^3.1.2", "core-js": "^3.20.0", @@ -8922,6 +8923,16 @@ "node": ">=8" } }, + "node_modules/clipboard": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz", + "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==", + "dependencies": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -10433,6 +10444,11 @@ "node": ">=0.4.0" } }, + "node_modules/delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -12659,6 +12675,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", + "dependencies": { + "delegate": "^3.1.2" + } + }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -21758,6 +21782,11 @@ "node": ">=4" } }, + "node_modules/select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==" + }, "node_modules/select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -23375,6 +23404,11 @@ "node": ">=0.6.0" } }, + "node_modules/tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" + }, "node_modules/tiny-invariant": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", @@ -31931,6 +31965,16 @@ } } }, + "clipboard": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz", + "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==", + "requires": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -33080,6 +33124,11 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" }, + "delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" + }, "depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -34755,6 +34804,14 @@ "slash": "^3.0.0" } }, + "good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", + "requires": { + "delegate": "^3.1.2" + } + }, "gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -41390,6 +41447,11 @@ "kind-of": "^6.0.0" } }, + "select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==" + }, "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -42620,6 +42682,11 @@ "setimmediate": "^1.0.4" } }, + "tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" + }, "tiny-invariant": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", diff --git a/website/package.json b/website/package.json index afb7a9b1cd4..9e812a58355 100644 --- a/website/package.json +++ b/website/package.json @@ -20,6 +20,7 @@ "@svgr/webpack": "^6.0.0", "axios": "^0.27.2", "classnames": "^2.3.1", + "clipboard": "^2.0.11", "clsx": "^1.1.1", "color": "^3.1.2", "core-js": "^3.20.0", diff --git a/website/static/js/headerLinkCopy.js b/website/static/js/headerLinkCopy.js new file mode 100644 index 00000000000..66a4800233c --- /dev/null +++ b/website/static/js/headerLinkCopy.js @@ -0,0 +1,26 @@ +import ClipboardJS from 'clipboard'; + +document.addEventListener("DOMContentLoaded", function () { + // Get all the headers with anchor links + const headers = document.querySelectorAll("a.anchor-header"); + + headers.forEach((header) => { + header.style.cursor = "pointer"; + const clipboard = new ClipboardJS(header, { + text: function(trigger) { + const anchorLink = trigger.getAttribute('href'); + return window.location.href.split('#')[0] + anchorLink; + } + }); + + clipboard.on('success', function(e) { + // Provide user feedback (e.g., alert or tooltip) here + // You can customize the feedback based on your preference + alert("Link copied to clipboard: " + e.text); + }); + + clipboard.on('error', function(e) { + console.error("Unable to copy to clipboard: " + e.text); + }); + }); +}); From 4dba75d5f0942640490884712ce0729e599c0ed8 Mon Sep 17 00:00:00 2001 From: allie dukuze Date: Tue, 7 Nov 2023 13:53:49 -0800 Subject: [PATCH 083/305] updating ip restriction docs --- website/docs/docs/cloud/secure/ip-restrictions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/cloud/secure/ip-restrictions.md b/website/docs/docs/cloud/secure/ip-restrictions.md index 093d2a1c876..034b3a6c144 100644 --- a/website/docs/docs/cloud/secure/ip-restrictions.md +++ b/website/docs/docs/cloud/secure/ip-restrictions.md @@ -36,7 +36,7 @@ To add an IP to the allowlist, from the **IP Restrictions** page: 4. Select **Allow** 5. Add the ranges in the CIDR notation - For example, 1.1.1.1/8 - - You cannot add multiple ranges in the same rule. Instead, create a rule per CIDR range. + - You can add multiple ranges in the same rule. 6. Click **Save** Note that simply adding the IP Ranges will not enforce IP restrictions. For more information, see the section “Enabling Restrictions.” From e032c5b0df8fb13d3970c028a46f08e5ee03a455 Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Tue, 7 Nov 2023 18:22:00 -0800 Subject: [PATCH 084/305] movign more guide content --- .../1-overview-dbt-python-snowpark.md | 20 +++++++++---- .../webhooks => }/zapier-slack.md | 29 ++++++++++--------- 2 files changed, 30 insertions(+), 19 deletions(-) rename website/docs/guides/{orchestration/webhooks => }/zapier-slack.md (95%) diff --git a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/1-overview-dbt-python-snowpark.md b/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/1-overview-dbt-python-snowpark.md index b03cb2ca013..b3843d49922 100644 --- a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/1-overview-dbt-python-snowpark.md +++ b/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/1-overview-dbt-python-snowpark.md @@ -1,31 +1,40 @@ --- title: "Leverage dbt Cloud to generate analytics and ML-ready pipelines with SQL and Python with Snowflake" -id: "1-overview-dbt-python-snowpark" +id: "dbt-python-snowpark" description: "Leverage dbt Cloud to generate analytics and ML-ready pipelines with SQL and Python with Snowflake" +hoverSnippet: Learn how to use a webhook or Slack message to trigger Zapier to post error context in Slack when a job fails. +# time_to_complete: '30 minutes' commenting out until we test +icon: 'guides' +hide_table_of_contents: true +tags: ['Webhooks'] +level: 'Advanced' +recently_updated: true --- +## Introduction + The focus of this workshop will be to demonstrate how we can use both *SQL and python together* in the same workflow to run *both analytics and machine learning models* on dbt Cloud. All code in today’s workshop can be found on [GitHub](https://github.com/dbt-labs/python-snowpark-formula1/tree/python-formula1). -## What you'll use during the lab +### What you'll use during the lab - A [Snowflake account](https://trial.snowflake.com/) with ACCOUNTADMIN access - A [dbt Cloud account](https://www.getdbt.com/signup/) -## What you'll learn +### What you'll learn - How to build scalable data transformation pipelines using dbt, and Snowflake using SQL and Python - How to leverage copying data into Snowflake from a public S3 bucket -## What you need to know +### What you need to know - Basic to intermediate SQL and python. - Basic understanding of dbt fundamentals. We recommend the [dbt Fundamentals course](https://courses.getdbt.com/collections) if you're interested. - High level machine learning process (encoding, training, testing) - Simple ML algorithms — we will use logistic regression to keep the focus on the *workflow*, not algorithms! -## What you'll build +### What you'll build - A set of data analytics and prediction pipelines using Formula 1 data leveraging dbt and Snowflake, making use of best practices like data quality tests and code promotion between environments - We will create insights for: @@ -36,3 +45,4 @@ All code in today’s workshop can be found on [GitHub](https://github.com/dbt-l As inputs, we are going to leverage Formula 1 datasets hosted on a dbt Labs public S3 bucket. We will create a Snowflake Stage for our CSV files then use Snowflake’s `COPY INTO` function to copy the data in from our CSV files into tables. The Formula 1 is available on [Kaggle](https://www.kaggle.com/datasets/rohanrao/formula-1-world-championship-1950-2020). The data is originally compiled from the [Ergast Developer API](http://ergast.com/mrd/). Overall we are going to set up the environments, build scalable pipelines in dbt, establish data tests, and promote code to production. + diff --git a/website/docs/guides/orchestration/webhooks/zapier-slack.md b/website/docs/guides/zapier-slack.md similarity index 95% rename from website/docs/guides/orchestration/webhooks/zapier-slack.md rename to website/docs/guides/zapier-slack.md index f4eaff89728..d103e4aa541 100644 --- a/website/docs/guides/orchestration/webhooks/zapier-slack.md +++ b/website/docs/guides/zapier-slack.md @@ -1,8 +1,8 @@ --- title: "Post to Slack with error context when a job fails" id: zapier-slack -description: Use Zapier and the dbt Cloud API to post error context to Slack -hoverSnippet: Learn how to use Zapier to trigger a dbt Cloud job once a run completes. +description: Use a webhook or Slack message to trigger Zapier and post error context in Slack when a job fails +hoverSnippet: Learn how to use a webhook or Slack message to trigger Zapier to post error context in Slack when a job fails. # time_to_complete: '30 minutes' commenting out until we test icon: 'guides' hide_table_of_contents: true @@ -11,6 +11,8 @@ level: 'Advanced' recently_updated: true --- +## Introduction + This guide will show you how to set up an integration between dbt Cloud jobs and Slack using [dbt Cloud webhooks](/docs/deploy/webhooks) and Zapier. It builds on the native [native Slack integration](/docs/deploy/job-notifications#slack-notifications) by attaching error message details of models and tests in a thread. Note: Because there is not a webhook for Run Cancelled, you may want to keep the standard Slack integration installed to receive those notifications. You could also use the [alternative integration](#alternate-approach) that augments the native integration without replacing it. @@ -23,21 +25,20 @@ When a dbt Cloud job finishes running, the integration will: - Create a threaded message attached to that post which contains any reasons that the job failed ![Screenshot of a message in Slack showing a summary of a dbt Cloud run which failed](/img/guides/orchestration/webhooks/zapier-slack/slack-thread-example.png) -## Prerequisites + +### Prerequisites In order to set up the integration, you should have familiarity with: - [dbt Cloud webhooks](/docs/deploy/webhooks) - Zapier -## Integration steps - -### 1. Create a new Zap in Zapier -Use **Webhooks by Zapier** as the Trigger, and **Catch Raw Hook** as the Event. If you don't intend to [validate the authenticity of your webhook](/docs/deploy/webhooks#validate-a-webhook) (not recommended!) then you can choose **Catch Hook** instead. -Click **Continue**, then copy the webhook URL. +## Create a new Zap in Zapier +1. Use **Webhooks by Zapier** as the Trigger, and **Catch Raw Hook** as the Event. If you don't intend to [validate the authenticity of your webhook](/docs/deploy/webhooks#validate-a-webhook) (not recommended!) then you can choose **Catch Hook** instead. +2. Click **Continue**, then copy the webhook URL. ![Screenshot of the Zapier UI, showing the webhook URL ready to be copied](/img/guides/orchestration/webhooks/zapier-common/catch-raw-hook.png) -### 2. Configure a new webhook in dbt Cloud +## Configure a new webhook in dbt Cloud See [Create a webhook subscription](/docs/deploy/webhooks#create-a-webhook-subscription) for full instructions. Choose **Run completed** as the Event. You can alternatively choose **Run errored**, but you will need to account for the fact that the necessary metadata [might not be available immediately](/docs/deploy/webhooks#completed-errored-event-difference). Remember the Webhook Secret Key for later. @@ -46,7 +47,7 @@ Once you've tested the endpoint in dbt Cloud, go back to Zapier and click **Test The sample body's values are hardcoded and not reflective of your project, but they give Zapier a correctly-shaped object during development. -### 3. Store secrets +## Store secrets In the next step, you will need the Webhook Secret Key from the prior step, and a dbt Cloud [user token](https://docs.getdbt.com/docs/dbt-cloud-apis/user-tokens) or [service account token](https://docs.getdbt.com/docs/dbt-cloud-apis/service-tokens). Zapier allows you to [store secrets](https://help.zapier.com/hc/en-us/articles/8496293271053-Save-and-retrieve-data-from-Zaps). This prevents your keys from being displayed as plaintext in the Zap code. You can access them with the [StoreClient utility](https://help.zapier.com/hc/en-us/articles/8496293969549-Store-data-from-code-steps-with-StoreClient). @@ -54,7 +55,7 @@ Zapier allows you to [store secrets](https://help.zapier.com/hc/en-us/articles/8 -### 4. Add a code action +## Add a code action Select **Code by Zapier** as the App, and **Run Python** as the Event. In the **Set up action** section, add two items to **Input Data**: `raw_body` and `auth_header`. Map those to the `1. Raw Body` and `1. Headers Http Authorization` fields from the previous **Catch Raw Hook** step. @@ -159,7 +160,7 @@ send_error_thread = len(threaded_errors_post) > 0 output = {'step_summary_post': step_summary_post, 'send_error_thread': send_error_thread, 'threaded_errors_post': threaded_errors_post} ``` -### 5. Add Slack actions in Zapier +## Add Slack actions in Zapier Select **Slack** as the App, and **Send Channel Message** as the Action. In the **Action** section, choose which **Channel** to post to. Set the **Message Text** field to **2. Step Summary Post** from the Run Python in Code by Zapier output. @@ -176,11 +177,11 @@ Add another **Send Channel Message in Slack** action. In the **Action** section, ![Screenshot of the Zapier UI, showing the mappings of prior steps to a Slack message](/img/guides/orchestration/webhooks/zapier-slack/thread-slack-config.png) -### 7. Test and deploy +## Test and deploy When you're done testing your Zap, make sure that your `run_id` and `account_id` are no longer hardcoded in the Code step, then publish your Zap. -## Alternate approach +## Alternately, use a dbt Cloud app Slack message to trigger Zapier Instead of using a webhook as your trigger, you can keep the existing dbt Cloud app installed in your Slack workspace and use its messages being posted to your channel as the trigger. In this case, you can skip validating the webhook and only need to load the context from the thread. From 1c2c186927b60df2fa99a51cf32833d8f9448a46 Mon Sep 17 00:00:00 2001 From: Doug Beatty <44704949+dbeatty10@users.noreply.github.com> Date: Tue, 7 Nov 2023 19:37:23 -0700 Subject: [PATCH 085/305] Restore preexisting backtick'ing --- website/docs/reference/resource-configs/meta.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/reference/resource-configs/meta.md b/website/docs/reference/resource-configs/meta.md index 199b31167bf..639615e7000 100644 --- a/website/docs/reference/resource-configs/meta.md +++ b/website/docs/reference/resource-configs/meta.md @@ -205,7 +205,7 @@ semantic_models: ## Definition The `meta` field can be used to set metadata for a resource. This metadata is compiled into the `manifest.json` file generated by dbt, and is viewable in the auto-generated documentation. -Depending on the resource you're configuring, `meta` may be available within the config property, and/or as a top-level key. (For backwards compatibility, `meta` is often (but not always) supported as a top-level key, though without the capabilities of `config` inheritance.) +Depending on the resource you're configuring, `meta` may be available within the `config` property, and/or as a top-level key. (For backwards compatibility, `meta` is often (but not always) supported as a top-level key, though without the capabilities of config inheritance.) ## Examples From caf1d5f13ac1ff41b28fd532c5cf3d3f5e7f0ba8 Mon Sep 17 00:00:00 2001 From: Doug Beatty <44704949+dbeatty10@users.noreply.github.com> Date: Tue, 7 Nov 2023 19:44:27 -0700 Subject: [PATCH 086/305] `meta` for semantic models in `dbt_project.yml` --- website/docs/reference/resource-configs/meta.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/website/docs/reference/resource-configs/meta.md b/website/docs/reference/resource-configs/meta.md index 639615e7000..9ccf2cc60dc 100644 --- a/website/docs/reference/resource-configs/meta.md +++ b/website/docs/reference/resource-configs/meta.md @@ -196,6 +196,8 @@ semantic_models: +The `meta` config can also be defined under the `semantic-models` config block in `dbt_project.yml`. See [configs and properties](/reference/configs-and-properties) for details. + From 8ef88b900b97e6b73d227ce29d9ae9fc6c76cb0d Mon Sep 17 00:00:00 2001 From: Doug Beatty <44704949+dbeatty10@users.noreply.github.com> Date: Tue, 7 Nov 2023 20:21:24 -0700 Subject: [PATCH 087/305] Match the style of other resource types --- .../docs/reference/resource-configs/group.md | 41 +------------------ 1 file changed, 2 insertions(+), 39 deletions(-) diff --git a/website/docs/reference/resource-configs/group.md b/website/docs/reference/resource-configs/group.md index acaedbe5424..07d06c88955 100644 --- a/website/docs/reference/resource-configs/group.md +++ b/website/docs/reference/resource-configs/group.md @@ -267,11 +267,11 @@ metrics: - + -Support for grouping semantic models was added in dbt Core v1.7 +Support for grouping semantic models has been added in dbt Core v1.7. @@ -304,43 +304,6 @@ semantic_models: - - - - -Support for grouping semantic models has been added in dbt Core v1.7. - - - - - - - -```yml -semantic_models: - - name: model_name - group: finance - -``` - - - - - -```yml -semantic_models: - [](resource-path): - +group: finance -``` - - - -The `group` configuration can be nested under the `config` key. - - - - - ## Definition From e9f77c2c580c85cd597aa9de9276fe583134419e Mon Sep 17 00:00:00 2001 From: Doug Beatty <44704949+dbeatty10@users.noreply.github.com> Date: Tue, 7 Nov 2023 20:26:23 -0700 Subject: [PATCH 088/305] Fix resource key in `dbt_project.yml` --- website/docs/reference/resource-configs/group.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/reference/resource-configs/group.md b/website/docs/reference/resource-configs/group.md index 07d06c88955..a663585cdd6 100644 --- a/website/docs/reference/resource-configs/group.md +++ b/website/docs/reference/resource-configs/group.md @@ -280,7 +280,7 @@ Support for grouping semantic models has been added in dbt Core v1.7. ```yaml -semantic_models: +semantic-models: [](resource-path): [+](plus-prefix)group: finance ``` From 5cc4101ff7a65f94e9c5f145a3fadf14e4eb2564 Mon Sep 17 00:00:00 2001 From: Doug Beatty <44704949+dbeatty10@users.noreply.github.com> Date: Tue, 7 Nov 2023 20:29:50 -0700 Subject: [PATCH 089/305] Restore order of `dbt_project.yml` vs. `models/semantic_models.yml` Even though the rest of the resource types have them in the other order --- .../docs/reference/resource-configs/group.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/website/docs/reference/resource-configs/group.md b/website/docs/reference/resource-configs/group.md index a663585cdd6..89d03c95bc9 100644 --- a/website/docs/reference/resource-configs/group.md +++ b/website/docs/reference/resource-configs/group.md @@ -277,16 +277,6 @@ Support for grouping semantic models has been added in dbt Core v1.7. - - -```yaml -semantic-models: - [](resource-path): - [+](plus-prefix)group: finance -``` - - - ```yaml @@ -300,6 +290,16 @@ semantic_models: + + +```yaml +semantic-models: + [](resource-path): + [+](plus-prefix)group: finance +``` + + + From 839aab91b2ee79194b1aa14c788562e7fad8ac40 Mon Sep 17 00:00:00 2001 From: Doug Beatty <44704949+dbeatty10@users.noreply.github.com> Date: Tue, 7 Nov 2023 20:30:59 -0700 Subject: [PATCH 090/305] Remove "version: 2" --- website/docs/reference/resource-configs/group.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/website/docs/reference/resource-configs/group.md b/website/docs/reference/resource-configs/group.md index 89d03c95bc9..53f5acb79ff 100644 --- a/website/docs/reference/resource-configs/group.md +++ b/website/docs/reference/resource-configs/group.md @@ -280,8 +280,6 @@ Support for grouping semantic models has been added in dbt Core v1.7. ```yaml -version: 2 - semantic_models: - name: [] group: finance From fff3afc84ae2e4b1ffaca7e880ef1115843b8b77 Mon Sep 17 00:00:00 2001 From: Doug Beatty <44704949+dbeatty10@users.noreply.github.com> Date: Tue, 7 Nov 2023 21:02:11 -0700 Subject: [PATCH 091/305] Add generic placeholders for the group name Rather than realistic examples --- website/docs/reference/resource-configs/group.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docs/reference/resource-configs/group.md b/website/docs/reference/resource-configs/group.md index 53f5acb79ff..36b0be341d2 100644 --- a/website/docs/reference/resource-configs/group.md +++ b/website/docs/reference/resource-configs/group.md @@ -282,7 +282,7 @@ Support for grouping semantic models has been added in dbt Core v1.7. ```yaml semantic_models: - name: [] - group: finance + group: ``` @@ -293,7 +293,7 @@ semantic_models: ```yaml semantic-models: [](resource-path): - [+](plus-prefix)group: finance + [+](plus-prefix)group: ``` From 1f20f4e1c3452180abca1998b03daead2f2a2165 Mon Sep 17 00:00:00 2001 From: Doug Beatty <44704949+dbeatty10@users.noreply.github.com> Date: Tue, 7 Nov 2023 21:03:17 -0700 Subject: [PATCH 092/305] Remove extraneous (and misleading) brackets --- website/docs/reference/resource-configs/group.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/reference/resource-configs/group.md b/website/docs/reference/resource-configs/group.md index 36b0be341d2..bce2a72136e 100644 --- a/website/docs/reference/resource-configs/group.md +++ b/website/docs/reference/resource-configs/group.md @@ -281,7 +281,7 @@ Support for grouping semantic models has been added in dbt Core v1.7. ```yaml semantic_models: - - name: [] + - name: group: ``` From eb7aa1547856e8f7cff3b75c762655261931bf81 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Wed, 8 Nov 2023 11:14:43 +0000 Subject: [PATCH 093/305] Update website/docs/reference/resource-configs/pre-hook-post-hook.md Co-authored-by: Pat Kearns --- website/docs/reference/resource-configs/pre-hook-post-hook.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/reference/resource-configs/pre-hook-post-hook.md b/website/docs/reference/resource-configs/pre-hook-post-hook.md index 16ef2e1685c..de652bff088 100644 --- a/website/docs/reference/resource-configs/pre-hook-post-hook.md +++ b/website/docs/reference/resource-configs/pre-hook-post-hook.md @@ -182,7 +182,7 @@ There may be occasions where you need to run these hooks _outside_ of a transact * You want to insert a record into an audit at the start of a run and do not want that statement rolled back if the model creation fails. To achieve this behavior, you can use one of the following syntaxes: - - Important note: Do not use this syntax if you are using a database where dbt does not use transactions by default. This includes databases like Snowflake, BigQuery, and Spark or Databricks. + - Important note: Do not use this syntax if you are using a database where dbt does not support transactions. This includes databases like Snowflake, BigQuery, and Spark or Databricks. From 9d76e141b2cb1d25cedb97aeafefb141999ccac0 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Wed, 8 Nov 2023 13:02:43 +0000 Subject: [PATCH 094/305] fold in joel's comments --- .../docs/reference/resource-configs/alias.md | 23 ++++++++++--------- .../reference/resource-configs/database.md | 2 +- .../docs/reference/resource-configs/schema.md | 2 +- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/website/docs/reference/resource-configs/alias.md b/website/docs/reference/resource-configs/alias.md index 94eb9b34561..6b7588ecaf7 100644 --- a/website/docs/reference/resource-configs/alias.md +++ b/website/docs/reference/resource-configs/alias.md @@ -8,7 +8,7 @@ datatype: string -Specify a custom alias for a model in your `dbt_project.yml` file. +Specify a custom alias for a model in your `dbt_project.yml` file or config block. For example, if you have a model that calculates `sales_total` and want to give it a more user-friendly alias, you can alias it like this: @@ -23,12 +23,13 @@ models: This would return `analytics.finance.sales_dashboard` in the database, instead of the default `analytics.finance.sales_total`. + -Configure a seed's alias in your `dbt_project.yml` file. +Configure a seed's alias in your `dbt_project.yml` file or config block. For example, if you have a seed that represents `product_categories` and want to alias it as `categories_data`, you would alias like this: @@ -62,36 +63,36 @@ seeds: -Configure a seed's alias in your `dbt_project.yml` file. +Configure a seed's alias in your `dbt_project.yml` file or config block. -For example, if you have a snapshot that represents `my_snapshot` and want to alias it as `updated_at_id`, you would alias like this: +For example, if you have a snapshot that represents `your_snapshot` and want to alias it as `updated_at_id`, you would alias like this: ```yml snapshots: - - name: my_snapshot + - name: your_snapshot config: target_database: analytics target_schema: finance unique_key: id strategy: timestamp updated_at: updated_at - +alias: updated_at_id + alias: your_snapshot ``` -This would return the name `analytics.finance.updated_at_id` in the database. +This would return the name `analytics.finance.your_snapshot` in the database. -Configure a test's alias in your `dbt_project.yml` file. +Configure a test's alias in your `schema.yml` file or config block. For example, to add a unique test to the `order_id` column and give it an alias `unique_order_id_test` to identify this specific test, you would alias like this: - + ```yml models: @@ -100,10 +101,10 @@ models: - name: order_id tests: - unique - +alias: unique_order_id_test + alias: unique_order_id_test ``` -This would return the name `analytics.finance.orders_order_id_unique_order_id_test` in the database. +When using `--store-failures`, this would return the name `analytics.finance.orders_order_id_unique_order_id_test` in the database. diff --git a/website/docs/reference/resource-configs/database.md b/website/docs/reference/resource-configs/database.md index 0a8ee8ab991..7d91358ff01 100644 --- a/website/docs/reference/resource-configs/database.md +++ b/website/docs/reference/resource-configs/database.md @@ -40,7 +40,7 @@ seeds: +database: staging ``` -This would result in the generated relation being located in the `staging` database, so the full relation name would be `staging.finance.product_categories_data`. +This would result in the generated relation being located in the `staging` database, so the full relation name would be `staging.finance.product_categories`. diff --git a/website/docs/reference/resource-configs/schema.md b/website/docs/reference/resource-configs/schema.md index 1f6e10195ad..3852ee4e639 100644 --- a/website/docs/reference/resource-configs/schema.md +++ b/website/docs/reference/resource-configs/schema.md @@ -40,7 +40,7 @@ seeds: +schema: mappings ``` -This would result in the generated relation being located in the `mappings` schema, so the full relation name would be `analytics.mappings.product_mappings_data`. +This would result in the generated relation being located in the `mappings` schema, so the full relation name would be `analytics.mappings.product_mappings`. From 583ffe489e187f876e37ed2ce7a733feec8c16cb Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Wed, 8 Nov 2023 16:09:23 +0000 Subject: [PATCH 095/305] updates --- website/docusaurus.config.js | 2 + website/package-lock.json | 25299 ++++---------------------- website/static/js/headerLinkCopy.js | 45 +- 3 files changed, 3399 insertions(+), 21947 deletions(-) diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index ce81d614c65..96d1a27ad50 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -258,6 +258,8 @@ var siteSettings = { src: "https://cdn.jsdelivr.net/npm/featherlight@1.7.14/release/featherlight.min.js", defer: true, }, + "https://cdn.jsdelivr.net/npm/clipboard@2.0.11/dist/clipboard.min.js", + "/js/headerLinkCopy.js", "/js/gtm.js", "/js/onetrust.js", "https://kit.fontawesome.com/7110474d41.js", diff --git a/website/package-lock.json b/website/package-lock.json index 4b6000acac4..e8c1f3b45f3 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -1,7 +1,7 @@ { "name": "website", "version": "0.0.0", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { @@ -82,26 +82,47 @@ "@dbt-labs/react-dbt-dag": "0.8.7" } }, + "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==", + "devOptional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@adobe/css-tools": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.2.0.tgz", - "integrity": "sha512-E09FiIft46CmH5Qnjb0wsW54/YQd69LsxeKUOWawmws1XWvyFGURnAChH0mlr7YPFR1ofwvUQfcL0J3lMxXqPA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.1.tgz", + "integrity": "sha512-/62yikz7NLScCGAAST5SHdnjaDJQBDq0M2muyRTpf2VQhw6StBg2ALiu73zSJQ4fMVLA+0uBhBHAle7Wg+2kSg==", "dev": true }, "node_modules/@algolia/autocomplete-core": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.7.4.tgz", - "integrity": "sha512-daoLpQ3ps/VTMRZDEBfU8ixXd+amZcNJ4QSP3IERGyzqnL5Ch8uSRFt/4G8pUvW9c3o6GA4vtVv4I4lmnkdXyg==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz", + "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==", + "dependencies": { + "@algolia/autocomplete-plugin-algolia-insights": "1.9.3", + "@algolia/autocomplete-shared": "1.9.3" + } + }, + "node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz", + "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==", "dependencies": { - "@algolia/autocomplete-shared": "1.7.4" + "@algolia/autocomplete-shared": "1.9.3" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" } }, "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.4.tgz", - "integrity": "sha512-s37hrvLEIfcmKY8VU9LsAXgm2yfmkdHT3DnA3SgHaY93yjZ2qL57wzb5QweVkYuEBZkT2PIREvRoLXC2sxTbpQ==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz", + "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==", "dependencies": { - "@algolia/autocomplete-shared": "1.7.4" + "@algolia/autocomplete-shared": "1.9.3" }, "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", @@ -109,79 +130,83 @@ } }, "node_modules/@algolia/autocomplete-shared": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.4.tgz", - "integrity": "sha512-2VGCk7I9tA9Ge73Km99+Qg87w0wzW4tgUruvWAn/gfey1ZXgmxZtyIRBebk35R1O8TbK77wujVtCnpsGpRy1kg==" + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz", + "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==", + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } }, "node_modules/@algolia/cache-browser-local-storage": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.16.0.tgz", - "integrity": "sha512-jVrk0YB3tjOhD5/lhBtYCVCeLjZmVpf2kdi4puApofytf/R0scjWz0GdozlW4HhU+Prxmt/c9ge4QFjtv5OAzQ==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.20.0.tgz", + "integrity": "sha512-uujahcBt4DxduBTvYdwO3sBfHuJvJokiC3BP1+O70fglmE1ShkH8lpXqZBac1rrU3FnNYSUs4pL9lBdTKeRPOQ==", "dependencies": { - "@algolia/cache-common": "4.16.0" + "@algolia/cache-common": "4.20.0" } }, "node_modules/@algolia/cache-common": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.16.0.tgz", - "integrity": "sha512-4iHjkSYQYw46pITrNQgXXhvUmcekI8INz1m+SzmqLX8jexSSy4Ky4zfGhZzhhhLHXUP3+x/PK/c0qPjxEvRwKQ==" + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.20.0.tgz", + "integrity": "sha512-vCfxauaZutL3NImzB2G9LjLt36vKAckc6DhMp05An14kVo8F1Yofb6SIl6U3SaEz8pG2QOB9ptwM5c+zGevwIQ==" }, "node_modules/@algolia/cache-in-memory": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.16.0.tgz", - "integrity": "sha512-p7RYykvA6Ip6QENxrh99nOD77otVh1sJRivcgcVpnjoZb5sIN3t33eUY1DpB9QSBizcrW+qk19rNkdnZ43a+PQ==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.20.0.tgz", + "integrity": "sha512-Wm9ak/IaacAZXS4mB3+qF/KCoVSBV6aLgIGFEtQtJwjv64g4ePMapORGmCyulCFwfePaRAtcaTbMcJF+voc/bg==", "dependencies": { - "@algolia/cache-common": "4.16.0" + "@algolia/cache-common": "4.20.0" } }, "node_modules/@algolia/client-account": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.16.0.tgz", - "integrity": "sha512-eydcfpdIyuWoKgUSz5iZ/L0wE/Wl7958kACkvTHLDNXvK/b8Z1zypoJavh6/km1ZNQmFpeYS2jrmq0kUSFn02w==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.20.0.tgz", + "integrity": "sha512-GGToLQvrwo7am4zVkZTnKa72pheQeez/16sURDWm7Seyz+HUxKi3BM6fthVVPUEBhtJ0reyVtuK9ArmnaKl10Q==", "dependencies": { - "@algolia/client-common": "4.16.0", - "@algolia/client-search": "4.16.0", - "@algolia/transporter": "4.16.0" + "@algolia/client-common": "4.20.0", + "@algolia/client-search": "4.20.0", + "@algolia/transporter": "4.20.0" } }, "node_modules/@algolia/client-analytics": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.16.0.tgz", - "integrity": "sha512-cONWXH3BfilgdlCofUm492bJRWtpBLVW/hsUlfoFtiX1u05xoBP7qeiDwh9RR+4pSLHLodYkHAf5U4honQ55Qg==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.20.0.tgz", + "integrity": "sha512-EIr+PdFMOallRdBTHHdKI3CstslgLORQG7844Mq84ib5oVFRVASuuPmG4bXBgiDbcsMLUeOC6zRVJhv1KWI0ug==", "dependencies": { - "@algolia/client-common": "4.16.0", - "@algolia/client-search": "4.16.0", - "@algolia/requester-common": "4.16.0", - "@algolia/transporter": "4.16.0" + "@algolia/client-common": "4.20.0", + "@algolia/client-search": "4.20.0", + "@algolia/requester-common": "4.20.0", + "@algolia/transporter": "4.20.0" } }, "node_modules/@algolia/client-common": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.16.0.tgz", - "integrity": "sha512-QVdR4019ukBH6f5lFr27W60trRxQF1SfS1qo0IP6gjsKhXhUVJuHxOCA6ArF87jrNkeuHEoRoDU+GlvaecNo8g==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.20.0.tgz", + "integrity": "sha512-P3WgMdEss915p+knMMSd/fwiHRHKvDu4DYRrCRaBrsfFw7EQHon+EbRSm4QisS9NYdxbS04kcvNoavVGthyfqQ==", "dependencies": { - "@algolia/requester-common": "4.16.0", - "@algolia/transporter": "4.16.0" + "@algolia/requester-common": "4.20.0", + "@algolia/transporter": "4.20.0" } }, "node_modules/@algolia/client-personalization": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.16.0.tgz", - "integrity": "sha512-irtLafssDGPuhYqIwxqOxiWlVYvrsBD+EMA1P9VJtkKi3vSNBxiWeQ0f0Tn53cUNdSRNEssfoEH84JL97SV2SQ==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.20.0.tgz", + "integrity": "sha512-N9+zx0tWOQsLc3K4PVRDV8GUeOLAY0i445En79Pr3zWB+m67V+n/8w4Kw1C5LlbHDDJcyhMMIlqezh6BEk7xAQ==", "dependencies": { - "@algolia/client-common": "4.16.0", - "@algolia/requester-common": "4.16.0", - "@algolia/transporter": "4.16.0" + "@algolia/client-common": "4.20.0", + "@algolia/requester-common": "4.20.0", + "@algolia/transporter": "4.20.0" } }, "node_modules/@algolia/client-search": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.16.0.tgz", - "integrity": "sha512-xsfrAE1jO/JDh1wFrRz+alVyW+aA6qnkzmbWWWZWEgVF3EaFqzIf9r1l/aDtDdBtNTNhX9H3Lg31+BRtd5izQA==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.20.0.tgz", + "integrity": "sha512-zgwqnMvhWLdpzKTpd3sGmMlr4c+iS7eyyLGiaO51zDZWGMkpgoNVmltkzdBwxOVXz0RsFMznIxB9zuarUv4TZg==", "dependencies": { - "@algolia/client-common": "4.16.0", - "@algolia/requester-common": "4.16.0", - "@algolia/transporter": "4.16.0" + "@algolia/client-common": "4.20.0", + "@algolia/requester-common": "4.20.0", + "@algolia/transporter": "4.20.0" } }, "node_modules/@algolia/events": { @@ -190,55 +215,55 @@ "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" }, "node_modules/@algolia/logger-common": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.16.0.tgz", - "integrity": "sha512-U9H8uCzSDuePJmbnjjTX21aPDRU6x74Tdq3dJmdYu2+pISx02UeBJm4kSgc9RW5jcR5j35G9gnjHY9Q3ngWbyQ==" + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.20.0.tgz", + "integrity": "sha512-xouigCMB5WJYEwvoWW5XDv7Z9f0A8VoXJc3VKwlHJw/je+3p2RcDXfksLI4G4lIVncFUYMZx30tP/rsdlvvzHQ==" }, "node_modules/@algolia/logger-console": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.16.0.tgz", - "integrity": "sha512-+qymusiM+lPZKrkf0tDjCQA158eEJO2IU+Nr/sJ9TFyI/xkFPjNPzw/Qbc8Iy/xcOXGlc6eMgmyjtVQqAWq6UA==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.20.0.tgz", + "integrity": "sha512-THlIGG1g/FS63z0StQqDhT6bprUczBI8wnLT3JWvfAQDZX5P6fCg7dG+pIrUBpDIHGszgkqYEqECaKKsdNKOUA==", "dependencies": { - "@algolia/logger-common": "4.16.0" + "@algolia/logger-common": "4.20.0" } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.16.0.tgz", - "integrity": "sha512-gK+kvs6LHl/PaOJfDuwjkopNbG1djzFLsVBklGBsSU6h6VjFkxIpo6Qq80IK14p9cplYZfhfaL12va6Q9p3KVQ==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.20.0.tgz", + "integrity": "sha512-HbzoSjcjuUmYOkcHECkVTwAelmvTlgs48N6Owt4FnTOQdwn0b8pdht9eMgishvk8+F8bal354nhx/xOoTfwiAw==", "dependencies": { - "@algolia/requester-common": "4.16.0" + "@algolia/requester-common": "4.20.0" } }, "node_modules/@algolia/requester-common": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.16.0.tgz", - "integrity": "sha512-3Zmcs/iMubcm4zqZ3vZG6Zum8t+hMWxGMzo0/uY2BD8o9q5vMxIYI0c4ocdgQjkXcix189WtZNkgjSOBzSbkdw==" + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.20.0.tgz", + "integrity": "sha512-9h6ye6RY/BkfmeJp7Z8gyyeMrmmWsMOCRBXQDs4mZKKsyVlfIVICpcSibbeYcuUdurLhIlrOUkH3rQEgZzonng==" }, "node_modules/@algolia/requester-node-http": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.16.0.tgz", - "integrity": "sha512-L8JxM2VwZzh8LJ1Zb8TFS6G3icYsCKZsdWW+ahcEs1rGWmyk9SybsOe1MLnjonGBaqPWJkn9NjS7mRdjEmBtKA==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.20.0.tgz", + "integrity": "sha512-ocJ66L60ABSSTRFnCHIEZpNHv6qTxsBwJEPfYaSBsLQodm0F9ptvalFkHMpvj5DfE22oZrcrLbOYM2bdPJRHng==", "dependencies": { - "@algolia/requester-common": "4.16.0" + "@algolia/requester-common": "4.20.0" } }, "node_modules/@algolia/transporter": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.16.0.tgz", - "integrity": "sha512-H9BVB2EAjT65w7XGBNf5drpsW39x2aSZ942j4boSAAJPPlLmjtj5IpAP7UAtsV8g9Beslonh0bLa1XGmE/P0BA==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.20.0.tgz", + "integrity": "sha512-Lsii1pGWOAISbzeyuf+r/GPhvHMPHSPrTDWNcIzOE1SG1inlJHICaVe2ikuoRjcpgxZNU54Jl+if15SUCsaTUg==", "dependencies": { - "@algolia/cache-common": "4.16.0", - "@algolia/logger-common": "4.16.0", - "@algolia/requester-common": "4.16.0" + "@algolia/cache-common": "4.20.0", + "@algolia/logger-common": "4.20.0", + "@algolia/requester-common": "4.20.0" } }, "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { @@ -246,44 +271,109 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dependencies": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/compat-data": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz", - "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz", + "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.0.tgz", - "integrity": "sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz", + "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.21.0", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.21.0", - "@babel/helpers": "^7.21.0", - "@babel/parser": "^7.21.0", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.0", - "@babel/types": "^7.21.0", - "convert-source-map": "^1.7.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helpers": "^7.23.2", + "@babel/parser": "^7.23.0", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -294,19 +384,19 @@ } }, "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { - "version": "7.21.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz", - "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dependencies": { - "@babel/types": "^7.21.0", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -315,81 +405,65 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", - "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", "lru-cache": "^5.1.1", - "semver": "^6.3.0" + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.0.tgz", - "integrity": "sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", + "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-member-expression-to-functions": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/helper-split-export-declaration": "^7.18.6" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -398,13 +472,22 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.0.tgz", - "integrity": "sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.3.1" + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -413,140 +496,127 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz", + "integrity": "sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==", "dependencies": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", "debug": "^4.1.1", "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" + "resolve": "^1.14.2" }, "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "dependencies": { - "@babel/types": "^7.18.6" - }, + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dependencies": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", - "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", "dependencies": { - "@babel/types": "^7.21.0" + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", - "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", + "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.2", - "@babel/types": "^7.21.2" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -556,112 +626,111 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", - "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.20.7", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7" + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", + "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dependencies": { - "@babel/types": "^7.20.2" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", "dependencies": { - "@babel/types": "^7.20.0" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", - "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", + "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", "dependencies": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", - "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", + "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", "dependencies": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.0", - "@babel/types": "^7.21.0" + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { @@ -733,9 +802,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.2.tgz", - "integrity": "sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "bin": { "parser": "bin/babel-parser.js" }, @@ -744,11 +813,11 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz", + "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -758,13 +827,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", - "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz", + "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.7" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -773,31 +842,24 @@ "@babel/core": "^7.13.0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "engines": { "node": ">=6.9.0" }, @@ -805,59 +867,46 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", - "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { - "@babel/core": "^7.12.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.12.13" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" @@ -866,43 +915,34 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", - "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.3" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -911,16 +951,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -929,44 +965,34 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -975,54 +1001,21 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz", - "integrity": "sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==", + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1030,35 +1023,32 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-dynamic-import": { + "node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1066,23 +1056,23 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { + "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" @@ -1091,115 +1081,116 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-jsx": { + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.22.5" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.2.tgz", + "integrity": "sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20", + "@babel/plugin-syntax-async-generators": "^7.8.4" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz", + "integrity": "sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1208,12 +1199,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1222,26 +1214,36 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", - "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz", + "integrity": "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" + "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.12.0" } }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", - "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "node_modules/@babel/plugin-transform-classes": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", + "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" }, "engines": { "node": ">=6.9.0" @@ -1250,14 +1252,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", - "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1266,12 +1267,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz", + "integrity": "sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1280,12 +1281,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz", - "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==", + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1294,20 +1296,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz", - "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1316,13 +1310,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", - "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz", + "integrity": "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/template": "^7.20.7" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1331,12 +1325,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz", - "integrity": "sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==", + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1345,13 +1340,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz", + "integrity": "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1360,12 +1355,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", + "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1374,13 +1369,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1389,12 +1385,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz", - "integrity": "sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==", + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz", + "integrity": "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1403,14 +1400,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", + "node_modules/@babel/plugin-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", "dependencies": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1419,12 +1414,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz", + "integrity": "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { "node": ">=6.9.0" @@ -1434,11 +1430,11 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1448,12 +1444,12 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", - "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz", + "integrity": "sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==", "dependencies": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1463,13 +1459,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz", - "integrity": "sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz", + "integrity": "sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==", "dependencies": { - "@babel/helper-module-transforms": "^7.21.2", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-simple-access": "^7.20.2" + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1479,14 +1475,14 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", - "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz", + "integrity": "sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==", "dependencies": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-identifier": "^7.19.1" + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -1496,12 +1492,12 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1511,12 +1507,12 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", - "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1526,11 +1522,11 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1539,13 +1535,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz", + "integrity": "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1554,12 +1550,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz", - "integrity": "sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==", + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz", + "integrity": "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { "node": ">=6.9.0" @@ -1568,12 +1565,16 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz", + "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -1582,12 +1583,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz", - "integrity": "sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==", + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1596,12 +1598,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz", + "integrity": "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1610,16 +1613,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz", - "integrity": "sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==", + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz", + "integrity": "sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.21.0" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1628,12 +1629,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", + "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1642,13 +1643,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1657,13 +1658,15 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", - "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz", + "integrity": "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "regenerator-transform": "^0.15.1" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { "node": ">=6.9.0" @@ -1672,12 +1675,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1686,17 +1689,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.21.0.tgz", - "integrity": "sha512-ReY6pxwSzEU0b3r2/T/VhqMKg/AkceBT19X0UptA3/tYi5Pe2eXgEUH+NNMC5nok6c6XQz5tyVTUpuezRfSMSg==", - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "semver": "^6.3.0" + "node_modules/@babel/plugin-transform-react-constant-elements": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.22.5.tgz", + "integrity": "sha512-BF5SXoO+nX3h5OhlN78XbbDrBOffv+AxPP2ENaJOVqjWCgBDeOY3WcaUcddutGSfoap+5NEQ/q/4I3WZIvgkXA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1705,20 +1703,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz", + "integrity": "sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1727,13 +1717,130 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", - "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.15.tgz", + "integrity": "sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", + "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz", + "integrity": "sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", + "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.2.tgz", + "integrity": "sha512-XOntj6icgzMS58jPVtQpiuF6ZFWxQiJavISGx5KGjRj+3gqZr8+N6Kx+N9BApWzgS+DOjIZfXXj0ZesenOWDyA==", + "dependencies": { + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.6", + "babel-plugin-polyfill-corejs3": "^0.8.5", + "babel-plugin-polyfill-regenerator": "^0.5.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1743,11 +1850,11 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1757,11 +1864,11 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1771,11 +1878,11 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1785,13 +1892,14 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.0.tgz", - "integrity": "sha512-xo///XTPp3mDzTtrqXoBlK9eiAYW3wv9JXglcn/u1bi60RW11dEUxIgA8cbnDhutS1zacjMRmAwxE0gMklLnZg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.15.tgz", + "integrity": "sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-typescript": "^7.20.0" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-typescript": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1801,11 +1909,26 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", + "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1815,12 +1938,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1829,38 +1952,41 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/preset-env": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", - "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", - "dependencies": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.20.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.2.tgz", + "integrity": "sha512-BW3gsuDD+rvHL2VO2SjAUNTBe5YrjsTiDyqamPDWY723na3/yPQ65X5oQkFVJZ0o50/2d+svm1rkPoJeR1KxVQ==", + "dependencies": { + "@babel/compat-data": "^7.23.2", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.15", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.15", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", @@ -1870,45 +1996,62 @@ "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.20.2", - "@babel/plugin-transform-classes": "^7.20.2", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.20.2", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.19.6", - "@babel/plugin-transform-modules-commonjs": "^7.19.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.20.1", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.23.2", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.23.0", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.11", + "@babel/plugin-transform-classes": "^7.22.15", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.23.0", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.11", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.11", + "@babel/plugin-transform-for-of": "^7.22.15", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.11", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.11", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.23.0", + "@babel/plugin-transform-modules-commonjs": "^7.23.0", + "@babel/plugin-transform-modules-systemjs": "^7.23.0", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", + "@babel/plugin-transform-numeric-separator": "^7.22.11", + "@babel/plugin-transform-object-rest-spread": "^7.22.15", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.11", + "@babel/plugin-transform-optional-chaining": "^7.23.0", + "@babel/plugin-transform-parameters": "^7.22.15", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.10", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.10", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "@babel/types": "^7.23.0", + "babel-plugin-polyfill-corejs2": "^0.4.6", + "babel-plugin-polyfill-corejs3": "^0.8.5", + "babel-plugin-polyfill-regenerator": "^0.5.3", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -1918,39 +2061,37 @@ } }, "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", "@babel/types": "^7.4.4", "esutils": "^2.0.2" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@babel/preset-react": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", - "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.22.15.tgz", + "integrity": "sha512-Csy1IJ2uEh/PecCBXXoZGAZBeCATTuePzCSB7dLYWS0vOEj6CNpjxIhW4duWwZodBNueH7QO14WbGn8YyeuN9w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-transform-react-display-name": "^7.22.5", + "@babel/plugin-transform-react-jsx": "^7.22.15", + "@babel/plugin-transform-react-jsx-development": "^7.22.5", + "@babel/plugin-transform-react-pure-annotations": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1960,13 +2101,15 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.21.0.tgz", - "integrity": "sha512-myc9mpoVA5m1rF8K8DgLEatOYFDpwC+RkMkjZ0Du6uI62YvDe8uxIEYVs/VCdSJ097nlALiU/yBC7//3nI+hNg==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.2.tgz", + "integrity": "sha512-u4UJc1XsS1GhIGteM8rnGiIvf9rJpiVgMEeCnwlLA7WJPC+jcXWJAGxYmeqs5hOZD8BbAfnV5ezBOxQbb4OUxA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.21.0", - "@babel/plugin-transform-typescript": "^7.21.0" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.23.0", + "@babel/plugin-transform-typescript": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -1981,54 +2124,54 @@ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" }, "node_modules/@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", + "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", "dependencies": { - "regenerator-runtime": "^0.13.11" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.21.0.tgz", - "integrity": "sha512-TDD4UJzos3JJtM+tHX+w2Uc+KWj7GV+VKKFdMVd2Rx8sdA19hcc3P3AHFYd5LVOw+pYuSd5lICC3gm52B6Rwxw==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.23.2.tgz", + "integrity": "sha512-54cIh74Z1rp4oIjsHjqN+WM4fMyCBYe+LpZ9jWm51CZ1fbH3SkAzQD/3XLoNkjbJ7YEmjobLXyvQrFypRHOrXw==", "dependencies": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.11" + "core-js-pure": "^3.30.2", + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.2.tgz", - "integrity": "sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw==", - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.21.1", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.2", - "@babel/types": "^7.21.2", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -2037,12 +2180,12 @@ } }, "node_modules/@babel/types": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.2.tgz", - "integrity": "sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2065,9 +2208,9 @@ } }, "node_modules/@cypress/react": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@cypress/react/-/react-7.0.2.tgz", - "integrity": "sha512-TTV7XNMDOO9mZUFWiGbd44Od/jqMVX/QbHYKQmK1XT3nIVFs0EvKJuHJmwN7wxLOR/+6twtyX6vTD8z8XBTliQ==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@cypress/react/-/react-7.0.3.tgz", + "integrity": "sha512-YseqnMugTbdPV9YCYEMXVqIf+P7x+pfjXOdjv4dnDFqNCZeHaZfOZVFZ4XfEHVxMv0aDszxlaLiIp3QDPhr12w==", "dev": true, "peerDependencies": { "@types/react": "^16.9.16 || ^17.0.0", @@ -2082,9 +2225,9 @@ } }, "node_modules/@cypress/request": { - "version": "2.88.11", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.11.tgz", - "integrity": "sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w==", + "version": "2.88.12", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.12.tgz", + "integrity": "sha512-tOn+0mDZxASFM+cuAP9szGUGPI1HwWVSvdzm7V4cCsPdFTx6qMj29CwaQmRAMIEhORIUBFBsYROYJcveK4uOjA==", "dev": true, "dependencies": { "aws-sign2": "~0.7.0", @@ -2102,7 +2245,7 @@ "performance-now": "^2.1.0", "qs": "~6.10.3", "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", + "tough-cookie": "^4.1.3", "tunnel-agent": "^0.6.0", "uuid": "^8.3.2" }, @@ -2125,9 +2268,9 @@ } }, "node_modules/@cypress/webpack-dev-server": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@cypress/webpack-dev-server/-/webpack-dev-server-3.3.0.tgz", - "integrity": "sha512-jOXvKo4I7U89cdKtuoD98VR2PJpueKgHBMbX/uH++SojE0xlUji8n/EFyZUBW/Eds+yPC4keupF8y/ViywP4QQ==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@cypress/webpack-dev-server/-/webpack-dev-server-3.7.0.tgz", + "integrity": "sha512-npn/8QfYLkAu1sR7GDkOK+4Onuh/SJ7PmR/XDx0rAc4M3nIBMpHyY+8gOBRq/On2AiX8hvA7733E4syaAxt5eg==", "dev": true, "dependencies": { "find-up": "6.3.0", @@ -2135,6 +2278,7 @@ "html-webpack-plugin-4": "npm:html-webpack-plugin@^4", "html-webpack-plugin-5": "npm:html-webpack-plugin@^5", "local-pkg": "0.4.1", + "semver": "^7.5.3", "speed-measure-webpack-plugin": "1.4.2", "tslib": "^2.3.1", "webpack-dev-server": "^4.7.4", @@ -2160,20 +2304,6 @@ "ms": "^2.1.1" } }, - "node_modules/@dbt-labs/react-dbt-dag": { - "version": "0.8.7", - "resolved": "https://npm.pkg.github.com/download/@dbt-labs/react-dbt-dag/0.8.7/927fdaa04ced1eca6c6a8505fa4c429df102ca29", - "integrity": "sha512-wGgbSPqCOENiIj5rc4fxCkKcT7GF2BuhgWkXg+UMvrwuaWKmvAh5UvsDRXjAJHT6l+JtxBvi6VVN5IbTLOW2LQ==", - "license": "ISC", - "optional": true, - "dependencies": { - "classnames": "^2.3.1", - "dagre": "^0.8.5", - "graphlib": "^2.1.8", - "lodash": "^4.17.21", - "react-flow-renderer": "^10.3.8" - } - }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -2183,24 +2313,25 @@ } }, "node_modules/@docsearch/css": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.3.3.tgz", - "integrity": "sha512-6SCwI7P8ao+se1TUsdZ7B4XzL+gqeQZnBc+2EONZlcVa0dVrk0NjETxozFKgMv0eEGH8QzP1fkN+A1rH61l4eg==" + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.5.2.tgz", + "integrity": "sha512-SPiDHaWKQZpwR2siD0KQUwlStvIAnEyK6tAE2h2Wuoq8ue9skzhlyVQ1ddzOxX6khULnAALDiR/isSF3bnuciA==" }, "node_modules/@docsearch/react": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.3.3.tgz", - "integrity": "sha512-pLa0cxnl+G0FuIDuYlW+EBK6Rw2jwLw9B1RHIeS4N4s2VhsfJ/wzeCi3CWcs5yVfxLd5ZK50t//TMA5e79YT7Q==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.5.2.tgz", + "integrity": "sha512-9Ahcrs5z2jq/DcAvYtvlqEBHImbm4YJI8M9y0x6Tqg598P40HTEkX7hsMcIuThI+hTFxRGZ9hll0Wygm2yEjng==", "dependencies": { - "@algolia/autocomplete-core": "1.7.4", - "@algolia/autocomplete-preset-algolia": "1.7.4", - "@docsearch/css": "3.3.3", - "algoliasearch": "^4.0.0" + "@algolia/autocomplete-core": "1.9.3", + "@algolia/autocomplete-preset-algolia": "1.9.3", + "@docsearch/css": "3.5.2", + "algoliasearch": "^4.19.1" }, "peerDependencies": { "@types/react": ">= 16.8.0 < 19.0.0", "react": ">= 16.8.0 < 19.0.0", - "react-dom": ">= 16.8.0 < 19.0.0" + "react-dom": ">= 16.8.0 < 19.0.0", + "search-insights": ">= 1 < 3" }, "peerDependenciesMeta": { "@types/react": { @@ -2211,6 +2342,9 @@ }, "react-dom": { "optional": true + }, + "search-insights": { + "optional": true } } }, @@ -2303,14 +2437,14 @@ } }, "node_modules/@docusaurus/core/node_modules/css-loader": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz", - "integrity": "sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==", + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", + "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", "dependencies": { "icss-utils": "^5.1.0", - "postcss": "^8.4.19", + "postcss": "^8.4.21", "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-local-by-default": "^4.0.3", "postcss-modules-scope": "^3.0.0", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.2.0", @@ -2363,9 +2497,9 @@ } }, "node_modules/@docusaurus/core/node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", @@ -3136,15 +3270,39 @@ "react-waypoint": ">=9.0.2" } }, + "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==", + "devOptional": 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==", + "devOptional": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.0.tgz", - "integrity": "sha512-fluIaaV+GyV24CCu/ggiHdV+j4RNh85yQnAYS/G2mZODZgGmmlrgCydjUcV3YvxCm9x8nMAfThsqTni4KiXT4A==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz", + "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==", "devOptional": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.4.0", + "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -3160,9 +3318,9 @@ } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "devOptional": true, "dependencies": { "type-fest": "^0.20.2" @@ -3187,18 +3345,18 @@ } }, "node_modules/@eslint/js": { - "version": "8.35.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.35.0.tgz", - "integrity": "sha512-JXdzbRiWclLVoD8sNUjR443VVlYqiYmDVT6rGUEIEHU5YJW0gaVZwV2xgM7D4arkvASqD0IlLUVjHiFuxaftRw==", + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz", + "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==", "devOptional": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@exodus/schemasafe": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@exodus/schemasafe/-/schemasafe-1.0.0-rc.10.tgz", - "integrity": "sha512-ZKjOj0oXi7h55tud+MopVNgyw+Y2EqhZHmLK594G2Gc8K/xXJKM+hVtPwXCMoahLx03km+Nms/HYwqjejxJurQ==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@exodus/schemasafe/-/schemasafe-1.3.0.tgz", + "integrity": "sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==" }, "node_modules/@faker-js/faker": { "version": "5.5.3", @@ -3206,21 +3364,21 @@ "integrity": "sha512-R11tGE6yIFwqpaIqcfkcg7AICXzFg14+5h5v0TfF/9+RMDL6jhzCy/pxHVOfbALGdtVYdt6JdR21tuxEgl34dw==" }, "node_modules/@fortawesome/fontawesome-common-types": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.0.tgz", - "integrity": "sha512-HNii132xfomg5QVZw0HwXXpN22s7VBHQBv9CeOu9tfJnhsWQNd2lmTNi8CSrnw5B+5YOmzu1UoPAyxaXsJ6RgQ==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.2.tgz", + "integrity": "sha512-1DgP7f+XQIJbLFCTX1V2QnxVmpLdKdzzo2k8EmvDOePfchaIGQ9eCHj2up3/jNEbZuBqel5OxiaOJf37TWauRA==", "hasInstallScript": true, "engines": { "node": ">=6" } }, "node_modules/@fortawesome/fontawesome-svg-core": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.0.tgz", - "integrity": "sha512-Bertv8xOiVELz5raB2FlXDPKt+m94MQ3JgDfsVbrqNpLU9+UE2E18GKjLKw+d3XbeYPqg1pzyQKGsrzbw+pPaw==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.2.tgz", + "integrity": "sha512-gjYDSKv3TrM2sLTOKBc5rH9ckje8Wrwgx1CxAPbN5N3Fm4prfi7NsJVWd1jklp7i5uSCVwhZS5qlhMXqLrpAIg==", "hasInstallScript": true, "dependencies": { - "@fortawesome/fontawesome-common-types": "6.4.0" + "@fortawesome/fontawesome-common-types": "6.4.2" }, "engines": { "node": ">=6" @@ -3252,12 +3410,12 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", "devOptional": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", + "@humanwhocodes/object-schema": "^2.0.1", "debug": "^4.1.1", "minimatch": "^3.0.5" }, @@ -3279,9 +3437,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", "devOptional": true }, "node_modules/@istanbuljs/load-nyc-config": { @@ -3576,12 +3734,12 @@ } }, "node_modules/@jest/expect-utils": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.4.3.tgz", - "integrity": "sha512-/6JWbkxHOP8EoS8jeeTd9dTfc9Uawi+43oLKHfp6zzux3U2hqOOVnV3ai4RpDYHOccL6g+5nrxpoc8DmJxtXVQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, "dependencies": { - "jest-get-type": "^29.4.3" + "jest-get-type": "^29.6.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -3829,11 +3987,11 @@ } }, "node_modules/@jest/schemas": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", - "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dependencies": { - "@sinclair/typebox": "^0.25.16" + "@sinclair/typebox": "^0.27.8" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -3909,6 +4067,12 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/@jest/transform/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, "node_modules/@jest/transform/node_modules/jest-util": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", @@ -3943,21 +4107,22 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "engines": { "node": ">=6.0.0" } @@ -3971,39 +4136,26 @@ } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" } }, - "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@jsdevtools/ono": { @@ -4092,10 +4244,15 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@mdx-js/mdx/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, "node_modules/@mdx-js/mdx/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "bin": { "semver": "bin/semver" } @@ -4147,9 +4304,9 @@ } }, "node_modules/@monaco-editor/loader": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@monaco-editor/loader/-/loader-1.3.2.tgz", - "integrity": "sha512-BTDbpHl3e47r3AAtpfVFTlAi7WXv4UQ/xZmz8atKl4q7epQV5e7+JbigFDViWF71VBi4IIBdcWP57Hj+OWuc9g==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@monaco-editor/loader/-/loader-1.4.0.tgz", + "integrity": "sha512-00ioBig0x642hytVspPl7DbQyaSWRaolYie/UFNjoTdvoKPzo6xrXLhTk9ixgIKcLH5b5vDOjVNiGyY+uDCUlg==", "dependencies": { "state-local": "^1.0.6" }, @@ -4158,12 +4315,11 @@ } }, "node_modules/@monaco-editor/react": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/@monaco-editor/react/-/react-4.4.6.tgz", - "integrity": "sha512-Gr3uz3LYf33wlFE3eRnta4RxP5FSNxiIV9ENn2D2/rN8KgGAD8ecvcITRtsbbyuOuNkwbuHYxfeaz2Vr+CtyFA==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@monaco-editor/react/-/react-4.6.0.tgz", + "integrity": "sha512-RFkU9/i7cN2bsq/iTkurMWOEErmYcY6JiQI3Jn+WeR/FGISH8JbHERjpS9oRuSOPvDMJI0Z8nJeKkbOs9sBYQw==", "dependencies": { - "@monaco-editor/loader": "^1.3.2", - "prop-types": "^15.7.2" + "@monaco-editor/loader": "^1.4.0" }, "peerDependencies": { "monaco-editor": ">= 0.25.0 < 1", @@ -4204,9 +4360,9 @@ } }, "node_modules/@polka/url": { - "version": "1.0.0-next.21", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", - "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" + "version": "1.0.0-next.23", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.23.tgz", + "integrity": "sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==" }, "node_modules/@react-hook/debounce": { "version": "3.0.0", @@ -4304,20 +4460,20 @@ } }, "node_modules/@react-types/checkbox": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@react-types/checkbox/-/checkbox-3.4.4.tgz", - "integrity": "sha512-rJNhbW4R9HTvdbF2oTZmqGiZ/WVP3/XsU4gae7tfdhSYjG+5T5h9zau1vRhz++zwKn57wfcyNn6a83GDhhgkVw==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@react-types/checkbox/-/checkbox-3.5.2.tgz", + "integrity": "sha512-iRQrbY8vRRya3bt3i7sHAifhP/ozfkly1/TItkRK5MNPRNPRDKns55D8ZFkRMj4NSyKQpjVt1zzlBXrnSOxWdQ==", "dependencies": { - "@react-types/shared": "^3.18.1" + "@react-types/shared": "^3.21.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, "node_modules/@react-types/checkbox/node_modules/@react-types/shared": { - "version": "3.18.1", - "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.18.1.tgz", - "integrity": "sha512-OpTYRFS607Ctfd6Tmhyk6t6cbFyDhO5K+etU35X50pMzpypo1b7vF0mkngEeTc0Xwl0e749ONZNPZskMyu5k8w==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.21.0.tgz", + "integrity": "sha512-wJA2cUF8dP4LkuNUt9Vh2kkfiQb2NLnV2pPXxVnKJZ7d4x2/7VPccN+LYPnH8m0X3+rt50cxWuPKQmjxSsCFOg==", "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } @@ -4385,9 +4541,9 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/@redocly/openapi-core": { - "version": "1.0.0-beta.123", - "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.0.0-beta.123.tgz", - "integrity": "sha512-W6MbUWpb/VaV+Kf0c3jmMIJw3WwwF7iK5nAfcOS+ZwrlbxtIl37+1hEydFlJ209vCR9HL12PaMwdh2Vpihj6Jw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.4.0.tgz", + "integrity": "sha512-M4f0H3XExPvJ0dwbEou7YKLzkpz2ZMS9JoNvrbEECO7WCwjGZ4AjbiUjp2p0ZzFMNIiNgTVUJJmkxGxsXW471Q==", "dependencies": { "@redocly/ajv": "^8.11.0", "@types/node": "^14.11.8", @@ -4401,13 +4557,14 @@ "yaml-ast-parser": "0.0.43" }, "engines": { - "node": ">=12.0.0" + "node": ">=14.19.0", + "npm": ">=7.0.0" } }, "node_modules/@redocly/openapi-core/node_modules/@types/node": { - "version": "14.18.37", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.37.tgz", - "integrity": "sha512-7GgtHCs/QZrBrDzgIJnQtuSvhFSwhyYSI2uafSwZoNt1iOGhEN5fwNrQMjtONyHm9+/LoA4453jH0CMYcr06Pg==" + "version": "14.18.63", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==" }, "node_modules/@redocly/openapi-core/node_modules/brace-expansion": { "version": "2.0.1", @@ -4584,9 +4741,9 @@ "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" }, "node_modules/@sinclair/typebox": { - "version": "0.25.24", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", - "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==" + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" }, "node_modules/@sindresorhus/is": { "version": "0.14.0", @@ -4628,15 +4785,15 @@ } }, "node_modules/@stoplight/elements": { - "version": "7.7.17", - "resolved": "https://registry.npmjs.org/@stoplight/elements/-/elements-7.7.17.tgz", - "integrity": "sha512-c+KqG+CtkugYfN+JPi1kj+Q7V5qJVa3VSep9E37Gn+oEdoy+HJcix5P4b/LEIJ6qF47xf9UEKLDnU729pAhJyw==", + "version": "7.13.9", + "resolved": "https://registry.npmjs.org/@stoplight/elements/-/elements-7.13.9.tgz", + "integrity": "sha512-SDuMa2hiJVQFKTlj06BXiAQ3OjRXmLv0IFrEDxU2hghONhoiyjDDljzbU7JlkpTJ9DzHs8yUYkQu2KbMfIP7ww==", "dependencies": { - "@stoplight/elements-core": "~7.7.17", - "@stoplight/http-spec": "^5.1.4", + "@stoplight/elements-core": "~7.13.9", + "@stoplight/http-spec": "^6.0.0", "@stoplight/json": "^3.18.1", - "@stoplight/mosaic": "^1.33.0", - "@stoplight/types": "^13.7.0", + "@stoplight/mosaic": "^1.44.4", + "@stoplight/types": "^14.0.0", "@stoplight/yaml": "^4.2.3", "classnames": "^2.2.6", "file-saver": "^2.0.5", @@ -4653,25 +4810,25 @@ } }, "node_modules/@stoplight/elements-core": { - "version": "7.7.17", - "resolved": "https://registry.npmjs.org/@stoplight/elements-core/-/elements-core-7.7.17.tgz", - "integrity": "sha512-R4lbw4pK9uS/+45AQLVVSkTkt6QV6Ke90W1WZzucBz0C2HdeuygHmpoCrXuLBsWRMpT8YKjJE/h5hWl5RzjQ9A==", + "version": "7.13.9", + "resolved": "https://registry.npmjs.org/@stoplight/elements-core/-/elements-core-7.13.9.tgz", + "integrity": "sha512-g1zQKa4On8EFUCKRN6p3AhtbOheQHRAtfMh1czrerCrP6KnNQats+xWn9yJ+ifgMQ+ezdAG8wNq8nd8CKbKwyw==", "dependencies": { - "@stoplight/http-spec": "^5.1.4", + "@stoplight/http-spec": "^6.0.0", "@stoplight/json": "^3.18.1", "@stoplight/json-schema-ref-parser": "^9.0.5", "@stoplight/json-schema-sampler": "0.2.3", - "@stoplight/json-schema-viewer": "^4.9.0", + "@stoplight/json-schema-viewer": "^4.12.1", "@stoplight/markdown-viewer": "^5.6.0", - "@stoplight/mosaic": "^1.33.0", - "@stoplight/mosaic-code-editor": "^1.33.0", - "@stoplight/mosaic-code-viewer": "^1.33.0", + "@stoplight/mosaic": "^1.44.4", + "@stoplight/mosaic-code-editor": "^1.44.4", + "@stoplight/mosaic-code-viewer": "^1.44.4", "@stoplight/path": "^1.3.2", "@stoplight/react-error-boundary": "^2.0.0", - "@stoplight/types": "^13.7.0", + "@stoplight/types": "^14.0.0", "@stoplight/yaml": "^4.2.3", "classnames": "^2.2.6", - "httpsnippet-lite": "^3.0.1", + "httpsnippet-lite": "^3.0.5", "jotai": "1.3.9", "json-schema": "^0.4.0", "lodash": "^4.17.19", @@ -4694,13 +4851,13 @@ } }, "node_modules/@stoplight/http-spec": { - "version": "5.9.4", - "resolved": "https://registry.npmjs.org/@stoplight/http-spec/-/http-spec-5.9.4.tgz", - "integrity": "sha512-hVI5BmSClygVTBwJpinOjyZ9yRpw61u6EC1/nBqSieKxLJ9T5WXlsaE+0s9cpzTg4fVP2jKnVFO3NbIU4vdtPA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@stoplight/http-spec/-/http-spec-6.0.2.tgz", + "integrity": "sha512-6uQxW0ycJF3cUSthsv7u3EClGn6AgqkLW9Q0dlrxOYJ1iH5Rx6SJEGYtmnkbTc/iXX/LygyoQ40lk8ebpqSegQ==", "dependencies": { "@stoplight/json": "^3.18.1", "@stoplight/json-schema-generator": "1.0.2", - "@stoplight/types": "^13.15.0", + "@stoplight/types": "14.0.0", "@types/json-schema": "7.0.11", "@types/swagger-schema-official": "~2.0.22", "@types/type-is": "^1.6.3", @@ -4710,7 +4867,7 @@ "lodash.pickby": "^4.6.0", "openapi3-ts": "^2.0.2", "postman-collection": "^4.1.2", - "tslib": "^2.3.1", + "tslib": "^2.6.2", "type-is": "^1.6.18" }, "engines": { @@ -4748,11 +4905,6 @@ "json-schema-generator": "bin/cli.js" } }, - "node_modules/@stoplight/json-schema-generator/node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, "node_modules/@stoplight/json-schema-merge-allof": { "version": "0.7.8", "resolved": "https://registry.npmjs.org/@stoplight/json-schema-merge-allof/-/json-schema-merge-allof-0.7.8.tgz", @@ -4764,9 +4916,9 @@ } }, "node_modules/@stoplight/json-schema-ref-parser": { - "version": "9.2.4", - "resolved": "https://registry.npmjs.org/@stoplight/json-schema-ref-parser/-/json-schema-ref-parser-9.2.4.tgz", - "integrity": "sha512-alWys5FhpfBtCJpZmWq47fZ4BBGcOGUqEI8b7AkJRZ+OaEoUIQtm8BReWY+JbU4D7+tBozX8Y+LF9Oxa9mYDSg==", + "version": "9.2.7", + "resolved": "https://registry.npmjs.org/@stoplight/json-schema-ref-parser/-/json-schema-ref-parser-9.2.7.tgz", + "integrity": "sha512-1vNzJ7iSrFTAFNbZHPyhI6GiJJw74+WaV61bARUQEDR4Jm80f9s0Tq9uCvGoMYwIFmWDJAoTiyegnUs6SvVxDw==", "dependencies": { "@jsdevtools/ono": "^7.1.3", "@stoplight/path": "^1.3.2", @@ -4787,9 +4939,9 @@ } }, "node_modules/@stoplight/json-schema-tree": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@stoplight/json-schema-tree/-/json-schema-tree-2.2.3.tgz", - "integrity": "sha512-cJ11QpzuoEsM6YgAahxoZDqzE+UjWTZqbRJanYLYqA4bC9pqB00Sj/NBqvTTIi6FfSef1D77KvURU5CcDk4h+A==", + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@stoplight/json-schema-tree/-/json-schema-tree-2.2.5.tgz", + "integrity": "sha512-H2d5EHbWJwbu4h7Eh3R4He4SGlfA5ScucpMqylVTgPwQImvikIyrI+v6oqzpl9fFZ6SkidfTcUs3z1+IKwxWdA==", "dependencies": { "@stoplight/json": "^3.12.0", "@stoplight/json-schema-merge-allof": "^0.7.8", @@ -4802,12 +4954,12 @@ } }, "node_modules/@stoplight/json-schema-viewer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@stoplight/json-schema-viewer/-/json-schema-viewer-4.9.1.tgz", - "integrity": "sha512-PZHLxEYtQwGSPo/fmcipmlLxDhKGSWocj+g6fW9t817rqO0wZ5lzjM65XG+WOj/oyYE5ghjX676Q3Nd2NYmOnQ==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@stoplight/json-schema-viewer/-/json-schema-viewer-4.12.1.tgz", + "integrity": "sha512-oMx0WrggjDPbIUcoqO7gx8dx1QA9bs7Y2jYNGAWnDe1wmsGcOOevkJ5LaruoCbuYAvsoGsBfqyJv8Ec8ATHBGQ==", "dependencies": { "@stoplight/json": "^3.20.1", - "@stoplight/json-schema-tree": "^2.2.2", + "@stoplight/json-schema-tree": "^2.2.5", "@stoplight/react-error-boundary": "^2.0.0", "@types/json-schema": "^7.0.7", "classnames": "^2.2.6", @@ -4883,10 +5035,17 @@ } } }, - "node_modules/@stoplight/json/node_modules/jsonc-parser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.2.1.tgz", - "integrity": "sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==" + "node_modules/@stoplight/json/node_modules/@stoplight/types": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-13.20.0.tgz", + "integrity": "sha512-2FNTv05If7ib79VPDA/r9eUet76jewXFH2y2K5vuge6SXbRHtWBhcaRmu+6QpF4/WRNoJj5XYRSwLGXDxysBGA==", + "dependencies": { + "@types/json-schema": "^7.0.4", + "utility-types": "^3.10.0" + }, + "engines": { + "node": "^12.20 || >=14.13" + } }, "node_modules/@stoplight/lifecycle": { "version": "2.3.3", @@ -4959,32 +5118,6 @@ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==" }, - "node_modules/@stoplight/markdown-viewer/node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/@stoplight/markdown-viewer/node_modules/hast-to-hyperscript": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-10.0.3.tgz", - "integrity": "sha512-NuBoUStp4fRwmvlfbidlEiRSTk0gSHm+97q4Xn9CJ10HO+Py7nlTuDi6RhM1qLOureukGrCXLG7AAxaGqqyslQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^0.4.1", - "web-namespaces": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/@stoplight/markdown-viewer/node_modules/hast-util-from-parse5": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-7.1.2.tgz", @@ -5018,18 +5151,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/@stoplight/markdown-viewer/node_modules/hast-util-parse-selector": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz", - "integrity": "sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==", - "dependencies": { - "@types/hast": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/@stoplight/markdown-viewer/node_modules/hast-util-raw": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-7.0.0.tgz", @@ -5070,22 +5191,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/@stoplight/markdown-viewer/node_modules/hastscript": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.2.0.tgz", - "integrity": "sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==", - "dependencies": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-parse-selector": "^3.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/@stoplight/markdown-viewer/node_modules/html-void-elements": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz", @@ -5188,15 +5293,6 @@ "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, - "node_modules/@stoplight/markdown-viewer/node_modules/property-information": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.2.0.tgz", - "integrity": "sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/@stoplight/markdown-viewer/node_modules/remark-parse": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", @@ -5209,23 +5305,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/@stoplight/markdown-viewer/node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/@stoplight/markdown-viewer/node_modules/style-to-object": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.1.tgz", - "integrity": "sha512-HFpbb5gr2ypci7Qw+IOhnP2zOU7e77b+rzM+wTzXzfi1PrtBCX0E7Pk4wL4iTLnhzZ+JgEGAhX81ebTg/aYjQw==", - "dependencies": { - "inline-style-parser": "0.1.1" - } - }, "node_modules/@stoplight/markdown-viewer/node_modules/unist-builder": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-3.0.1.tgz", @@ -5351,15 +5430,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/@stoplight/markdown-viewer/node_modules/web-namespaces": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", - "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/@stoplight/markdown-viewer/node_modules/zwitch": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", @@ -5445,9 +5515,9 @@ } }, "node_modules/@stoplight/mosaic": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/@stoplight/mosaic/-/mosaic-1.40.0.tgz", - "integrity": "sha512-hHEb0Cc4TzaPRjt9h5Ll7FuuVedvW6ZPa5HIxIMhPj4jgy5G3AaC1CCXzdRlwicBkUIp6lNkBOpB7cHadpXp1w==", + "version": "1.44.4", + "resolved": "https://registry.npmjs.org/@stoplight/mosaic/-/mosaic-1.44.4.tgz", + "integrity": "sha512-MgFyOeodjF24/obNzLJBh+AAlz68t/L2LVjEpasZchNJvC64KTgOf20R2caG3BtsZJh/v3K5O9kMaP8OR5uunA==", "dependencies": { "@fortawesome/fontawesome-svg-core": "^6.1.1", "@fortawesome/react-fontawesome": "^0.2.0", @@ -5479,9 +5549,9 @@ } }, "node_modules/@stoplight/mosaic-code-editor": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/@stoplight/mosaic-code-editor/-/mosaic-code-editor-1.40.0.tgz", - "integrity": "sha512-KU9Qj+JeXA6V4PtqJa8nV6W5scml92Bvbwc+//zd13MR5iUbbEKux9kzwtB1OJxvgSRsDI/5oP5yq1RzPLLQuw==", + "version": "1.44.4", + "resolved": "https://registry.npmjs.org/@stoplight/mosaic-code-editor/-/mosaic-code-editor-1.44.4.tgz", + "integrity": "sha512-JzDyi6CRlzdqaZ9yw39dpJNQ0vKrn8JGMP20ynS+1GxXpHJ84LSsRanuBdR+IMapg8UBIkSwV/P2nyejij8LxA==", "dependencies": { "@fortawesome/fontawesome-svg-core": "^6.1.1", "@fortawesome/react-fontawesome": "^0.2.0", @@ -5490,8 +5560,8 @@ "@react-types/radio": "3.1.2", "@react-types/shared": "3.9.0", "@react-types/switch": "3.1.2", - "@stoplight/mosaic": "1.40.0", - "@stoplight/mosaic-code-viewer": "1.40.0", + "@stoplight/mosaic": "1.44.4", + "@stoplight/mosaic-code-viewer": "1.44.4", "@stoplight/types": "^13.7.0", "clsx": "^1.1.1", "copy-to-clipboard": "^3.3.1", @@ -5512,6 +5582,18 @@ "react": ">= 16.14" } }, + "node_modules/@stoplight/mosaic-code-editor/node_modules/@stoplight/types": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-13.20.0.tgz", + "integrity": "sha512-2FNTv05If7ib79VPDA/r9eUet76jewXFH2y2K5vuge6SXbRHtWBhcaRmu+6QpF4/WRNoJj5XYRSwLGXDxysBGA==", + "dependencies": { + "@types/json-schema": "^7.0.4", + "utility-types": "^3.10.0" + }, + "engines": { + "node": "^12.20 || >=14.13" + } + }, "node_modules/@stoplight/mosaic-code-editor/node_modules/use-resize-observer": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/use-resize-observer/-/use-resize-observer-9.1.0.tgz", @@ -5525,9 +5607,9 @@ } }, "node_modules/@stoplight/mosaic-code-viewer": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/@stoplight/mosaic-code-viewer/-/mosaic-code-viewer-1.40.0.tgz", - "integrity": "sha512-beseNsIl3MT868HXgLDB1GNExiOpBwNPJttrOOceR3SXv1Xa/oTEVh2ADhgiW010uWuwYLq9QMllEeXJg/YX/Q==", + "version": "1.44.4", + "resolved": "https://registry.npmjs.org/@stoplight/mosaic-code-viewer/-/mosaic-code-viewer-1.44.4.tgz", + "integrity": "sha512-1dAkDWmatuXBtS2g1QXf75ehw98faGPKDiSdztlpGCVOKr0LPl8NPbELOQN1jPh8Vnte8ZKKseBjVF3scpdIHw==", "dependencies": { "@fortawesome/fontawesome-svg-core": "^6.1.1", "@fortawesome/react-fontawesome": "^0.2.0", @@ -5536,7 +5618,7 @@ "@react-types/radio": "3.1.2", "@react-types/shared": "3.9.0", "@react-types/switch": "3.1.2", - "@stoplight/mosaic": "1.40.0", + "@stoplight/mosaic": "1.44.4", "@stoplight/types": "^13.7.0", "clsx": "^1.1.1", "copy-to-clipboard": "^3.3.1", @@ -5557,6 +5639,18 @@ "react": ">= 16.14" } }, + "node_modules/@stoplight/mosaic-code-viewer/node_modules/@stoplight/types": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-13.20.0.tgz", + "integrity": "sha512-2FNTv05If7ib79VPDA/r9eUet76jewXFH2y2K5vuge6SXbRHtWBhcaRmu+6QpF4/WRNoJj5XYRSwLGXDxysBGA==", + "dependencies": { + "@types/json-schema": "^7.0.4", + "utility-types": "^3.10.0" + }, + "engines": { + "node": "^12.20 || >=14.13" + } + }, "node_modules/@stoplight/mosaic-code-viewer/node_modules/use-resize-observer": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/use-resize-observer/-/use-resize-observer-9.1.0.tgz", @@ -5569,6 +5663,28 @@ "react-dom": "16.8.0 - 18" } }, + "node_modules/@stoplight/mosaic/node_modules/@stoplight/types": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-13.20.0.tgz", + "integrity": "sha512-2FNTv05If7ib79VPDA/r9eUet76jewXFH2y2K5vuge6SXbRHtWBhcaRmu+6QpF4/WRNoJj5XYRSwLGXDxysBGA==", + "dependencies": { + "@types/json-schema": "^7.0.4", + "utility-types": "^3.10.0" + }, + "engines": { + "node": "^12.20 || >=14.13" + } + }, + "node_modules/@stoplight/mosaic/node_modules/@types/react": { + "version": "17.0.70", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.70.tgz", + "integrity": "sha512-yqYMK49/cnqw+T8R9/C+RNjRddYmPDGI5lKHi3bOYceQCBAh8X2ngSbZP0gnVeyvHr0T7wEgIIGKT1usNol08w==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, "node_modules/@stoplight/mosaic/node_modules/use-resize-observer": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/use-resize-observer/-/use-resize-observer-9.1.0.tgz", @@ -5613,9 +5729,9 @@ } }, "node_modules/@stoplight/types": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-13.15.0.tgz", - "integrity": "sha512-pBLjVRrWGVd+KzTbL3qrmufSKIEp0UfziDBdt/nrTHPKrlrtVwaHdrrQMcpM23yJDU1Wcg4cHvhIuGtKCT5OmA==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-14.0.0.tgz", + "integrity": "sha512-w7Ejau6TaB7RqR0vWzGJSdmgLEYD2frjgbHPZoxgGQwAq/R8Qh/D9p9Bl9JFdii+YTL5xoDjyX0c1WDRlbMV8g==", "dependencies": { "@types/json-schema": "^7.0.4", "utility-types": "^3.10.0" @@ -5643,6 +5759,18 @@ "resolved": "https://registry.npmjs.org/@stoplight/yaml-ast-parser/-/yaml-ast-parser-0.0.48.tgz", "integrity": "sha512-sV+51I7WYnLJnKPn2EMWgS4EUfoP4iWEbrWwbXsj0MZCB/xOK8j6+C9fntIdOM50kpx45ZLC3s6kwKivWuqvyg==" }, + "node_modules/@stoplight/yaml/node_modules/@stoplight/types": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-13.20.0.tgz", + "integrity": "sha512-2FNTv05If7ib79VPDA/r9eUet76jewXFH2y2K5vuge6SXbRHtWBhcaRmu+6QpF4/WRNoJj5XYRSwLGXDxysBGA==", + "dependencies": { + "@types/json-schema": "^7.0.4", + "utility-types": "^3.10.0" + }, + "engines": { + "node": "^12.20 || >=14.13" + } + }, "node_modules/@svgr/babel-plugin-add-jsx-attribute": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", @@ -5659,11 +5787,11 @@ } }, "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.5.0.tgz", - "integrity": "sha512-8zYdkym7qNyfXpWvu4yq46k41pyNM9SOstoWhKlm+IfdCE1DdnRKeMUPsWIEO/DEkaWxJ8T9esNdG3QwQ93jBA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { "type": "github", @@ -5674,11 +5802,11 @@ } }, "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.5.0.tgz", - "integrity": "sha512-NFdxMq3xA42Kb1UbzCVxplUc0iqSyM9X8kopImvFnB+uSDdzIHOdbs1op8ofAvVRtbg4oZiyRl3fTYeKcOe9Iw==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", + "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { "type": "github", @@ -5887,11 +6015,15 @@ } }, "node_modules/@swc/core": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.37.tgz", - "integrity": "sha512-VOFlEQ1pReOM73N9A7R8rt561GU8Rxsq833jiimWDUB2sXEN3V6n6wFTgYmZuMz2T4/R0cQA1nV48KkaT4gkFw==", + "version": "1.3.96", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.96.tgz", + "integrity": "sha512-zwE3TLgoZwJfQygdv2SdCK9mRLYluwDOM53I+dT6Z5ZvrgVENmY3txvWDvduzkV+/8IuvrRbVezMpxcojadRdQ==", "dev": true, "hasInstallScript": true, + "dependencies": { + "@swc/counter": "^0.1.1", + "@swc/types": "^0.1.5" + }, "engines": { "node": ">=10" }, @@ -5900,22 +6032,30 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.3.37", - "@swc/core-darwin-x64": "1.3.37", - "@swc/core-linux-arm-gnueabihf": "1.3.37", - "@swc/core-linux-arm64-gnu": "1.3.37", - "@swc/core-linux-arm64-musl": "1.3.37", - "@swc/core-linux-x64-gnu": "1.3.37", - "@swc/core-linux-x64-musl": "1.3.37", - "@swc/core-win32-arm64-msvc": "1.3.37", - "@swc/core-win32-ia32-msvc": "1.3.37", - "@swc/core-win32-x64-msvc": "1.3.37" + "@swc/core-darwin-arm64": "1.3.96", + "@swc/core-darwin-x64": "1.3.96", + "@swc/core-linux-arm-gnueabihf": "1.3.96", + "@swc/core-linux-arm64-gnu": "1.3.96", + "@swc/core-linux-arm64-musl": "1.3.96", + "@swc/core-linux-x64-gnu": "1.3.96", + "@swc/core-linux-x64-musl": "1.3.96", + "@swc/core-win32-arm64-msvc": "1.3.96", + "@swc/core-win32-ia32-msvc": "1.3.96", + "@swc/core-win32-x64-msvc": "1.3.96" + }, + "peerDependencies": { + "@swc/helpers": "^0.5.0" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.37.tgz", - "integrity": "sha512-iIyVqqioUpVeT/hbBVfkrsjfCyL4idNH+LVKGmoTAWaTTSB0+UNhNuA7Wh2CqIHWh1Mv7IlumitWPcqsVDdoEw==", + "version": "1.3.96", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.96.tgz", + "integrity": "sha512-8hzgXYVd85hfPh6mJ9yrG26rhgzCmcLO0h1TIl8U31hwmTbfZLzRitFQ/kqMJNbIBCwmNH1RU2QcJnL3d7f69A==", "cpu": [ "arm64" ], @@ -5929,9 +6069,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.37.tgz", - "integrity": "sha512-dao5nXPWKxtaxqak4ZkRyBoApNIelW/glantQhPhj0FjMjuIQc+v03ldJ8XDByWOG+6xuVUTheANCtEccxoQBw==", + "version": "1.3.96", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.96.tgz", + "integrity": "sha512-mFp9GFfuPg+43vlAdQZl0WZpZSE8sEzqL7sr/7Reul5McUHP0BaLsEzwjvD035ESfkY8GBZdLpMinblIbFNljQ==", "cpu": [ "x64" ], @@ -5945,9 +6085,9 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.37.tgz", - "integrity": "sha512-/mVrc8H/f062CUkqKGmBiil2VIYu4mKawHxERfeP1y38X5K/OwjG5s9MgO9TVxy+Ly6vejwj70kRhSa3hVp1Bw==", + "version": "1.3.96", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.96.tgz", + "integrity": "sha512-8UEKkYJP4c8YzYIY/LlbSo8z5Obj4hqcv/fUTHiEePiGsOddgGf7AWjh56u7IoN/0uEmEro59nc1ChFXqXSGyg==", "cpu": [ "arm" ], @@ -5961,9 +6101,9 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.37.tgz", - "integrity": "sha512-eRQ3KaZI0j5LidTfOIi/kUVOOMuVmw1HCdt/Z1TAUKoHMLVxY8xcJ3pEE3/+ednI60EmHpwpJRs6LelXyL6uzQ==", + "version": "1.3.96", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.96.tgz", + "integrity": "sha512-c/IiJ0s1y3Ymm2BTpyC/xr6gOvoqAVETrivVXHq68xgNms95luSpbYQ28rqaZC8bQC8M5zdXpSc0T8DJu8RJGw==", "cpu": [ "arm64" ], @@ -5977,9 +6117,9 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.37.tgz", - "integrity": "sha512-w2BRLODyxNQY2rfHZMZ5ir6QrrnGBPlnIslTrgKmVbn1OjZoxUCtuqhrYnCmybaAc4DOkeH02TqynEFXrm+EMw==", + "version": "1.3.96", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.96.tgz", + "integrity": "sha512-i5/UTUwmJLri7zhtF6SAo/4QDQJDH2fhYJaBIUhrICmIkRO/ltURmpejqxsM/ye9Jqv5zG7VszMC0v/GYn/7BQ==", "cpu": [ "arm64" ], @@ -5993,9 +6133,9 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.37.tgz", - "integrity": "sha512-CfoH8EsZJZ9kunjMUjBNYD5fFuO86zw+K/o4wEw72Yg6ZEiqPmeIlCKU8tpTv4sK+CbhUXrmVzMB5tqsb2jALQ==", + "version": "1.3.96", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.96.tgz", + "integrity": "sha512-USdaZu8lTIkm4Yf9cogct/j5eqtdZqTgcTib4I+NloUW0E/hySou3eSyp3V2UAA1qyuC72ld1otXuyKBna0YKQ==", "cpu": [ "x64" ], @@ -6009,9 +6149,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.37.tgz", - "integrity": "sha512-9YPrHYNdoG7PK11gV51GfL45biI2dic+YTqHUDKyykemsD7Ot1zUFX7Ty//pdvpKcKSff6SrHbfFACD5ziNirA==", + "version": "1.3.96", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.96.tgz", + "integrity": "sha512-QYErutd+G2SNaCinUVobfL7jWWjGTI0QEoQ6hqTp7PxCJS/dmKmj3C5ZkvxRYcq7XcZt7ovrYCTwPTHzt6lZBg==", "cpu": [ "x64" ], @@ -6025,9 +6165,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.37.tgz", - "integrity": "sha512-h17Ek8/wCDje6BrXOvCXBM80oBRmTSMMdLyt87whTl5xqYlWYYs9oQIzZndNRTlNpTgjGO8Ns2eo4kwVxIkBIA==", + "version": "1.3.96", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.96.tgz", + "integrity": "sha512-hjGvvAduA3Un2cZ9iNP4xvTXOO4jL3G9iakhFsgVhpkU73SGmK7+LN8ZVBEu4oq2SUcHO6caWvnZ881cxGuSpg==", "cpu": [ "arm64" ], @@ -6041,9 +6181,9 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.37.tgz", - "integrity": "sha512-1BR175E1olGy/zdt94cgdb6ps/lBNissAOaxyBk8taFpcjy3zpdP30yAoH0GIsC6isnZ5JfArbOJNRXXO5tE0Q==", + "version": "1.3.96", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.96.tgz", + "integrity": "sha512-Far2hVFiwr+7VPCM2GxSmbh3ikTpM3pDombE+d69hkedvYHYZxtTF+2LTKl/sXtpbUnsoq7yV/32c9R/xaaWfw==", "cpu": [ "ia32" ], @@ -6057,9 +6197,9 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.37.tgz", - "integrity": "sha512-1siDQ7dccQ1pesJmgAL3BUBbRPtfbNInOWnZOkiie/DfFqGQ117QKnCVyjUvwFKfTQx1+3UUTDmMSlRd00SlXg==", + "version": "1.3.96", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.96.tgz", + "integrity": "sha512-4VbSAniIu0ikLf5mBX81FsljnfqjoVGleEkCQv4+zRlyZtO3FHoDPkeLVoy6WRlj7tyrRcfUJ4mDdPkbfTO14g==", "cpu": [ "x64" ], @@ -6072,10 +6212,16 @@ "node": ">=10" } }, + "node_modules/@swc/counter": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.2.tgz", + "integrity": "sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==", + "dev": true + }, "node_modules/@swc/jest": { - "version": "0.2.24", - "resolved": "https://registry.npmjs.org/@swc/jest/-/jest-0.2.24.tgz", - "integrity": "sha512-fwgxQbM1wXzyKzl1+IW0aGrRvAA8k0Y3NxFhKigbPjOJ4mCKnWEcNX9HQS3gshflcxq8YKhadabGUVfdwjCr6Q==", + "version": "0.2.29", + "resolved": "https://registry.npmjs.org/@swc/jest/-/jest-0.2.29.tgz", + "integrity": "sha512-8reh5RvHBsSikDC3WGCd5ZTd2BXKkyOdK7QwynrCH58jk2cQFhhHhFBg/jvnWZehUQe/EoOImLENc9/DwbBFow==", "dev": true, "dependencies": { "@jest/create-cache-key-function": "^27.4.2", @@ -6088,6 +6234,18 @@ "@swc/core": "*" } }, + "node_modules/@swc/jest/node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/@swc/types": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz", + "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==", + "dev": true + }, "node_modules/@szmarczak/http-timer": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", @@ -6100,19 +6258,19 @@ } }, "node_modules/@testing-library/dom": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.0.0.tgz", - "integrity": "sha512-+/TLgKNFsYUshOY/zXsQOk+PlFQK+eyJ9T13IDVNJEi+M+Un7xlJK+FZKkbGSnf0+7E1G6PlDhkSYQ/GFiruBQ==", + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.3.tgz", + "integrity": "sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw==", "dev": true, "peer": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", "@types/aria-query": "^5.0.1", - "aria-query": "^5.0.0", + "aria-query": "5.1.3", "chalk": "^4.1.0", "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.4.4", + "lz-string": "^1.5.0", "pretty-format": "^27.0.2" }, "engines": { @@ -6120,9 +6278,9 @@ } }, "node_modules/@testing-library/jest-dom": { - "version": "5.16.5", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz", - "integrity": "sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz", + "integrity": "sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==", "dev": true, "dependencies": { "@adobe/css-tools": "^4.0.1", @@ -6173,18 +6331,18 @@ } }, "node_modules/@testing-library/react/node_modules/@testing-library/dom": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.0.tgz", - "integrity": "sha512-d9ULIT+a4EXLX3UU8FBjauG9NnsZHkHztXoIcTsOKoOw030fyjheN9svkTULjJxtYag9DZz5Jz5qkWZDPxTFwA==", + "version": "8.20.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.1.tgz", + "integrity": "sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==", "dev": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", "@types/aria-query": "^5.0.1", - "aria-query": "^5.0.0", + "aria-query": "5.1.3", "chalk": "^4.1.0", "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.4.4", + "lz-string": "^1.5.0", "pretty-format": "^27.0.2" }, "engines": { @@ -6225,15 +6383,15 @@ } }, "node_modules/@types/aria-query": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz", - "integrity": "sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", "dev": true }, "node_modules/@types/babel__core": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", - "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.4.tgz", + "integrity": "sha512-mLnSC22IC4vcWiuObSRjrLd9XcBTGf59vUSoq2jkQDJ/QQ8PMI9rSuzE+aEV8karUMbskw07bKYoUJCKTUaygg==", "dev": true, "dependencies": { "@babel/parser": "^7.20.7", @@ -6244,18 +6402,18 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "version": "7.6.7", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz", + "integrity": "sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==", "dev": true, "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", @@ -6263,328 +6421,75 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", - "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz", + "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==", "dev": true, "dependencies": { - "@babel/types": "^7.3.0" + "@babel/types": "^7.20.7" } }, "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "dependencies": { "@types/connect": "*", "@types/node": "*" } }, "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.3.tgz", + "integrity": "sha512-6mfQ6iNvhSKCZJoY6sIG3m0pKkdUcweVNOLuBBKvoWGzl2yRxOJcYOTRyLKt3nxXvBLJWa6QkW//tgbIwJehmA==", "dependencies": { "@types/express-serve-static-core": "*", "@types/node": "*" } }, - "node_modules/@types/d3": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.0.tgz", - "integrity": "sha512-jIfNVK0ZlxcuRDKtRS/SypEyOQ6UHaFQBKv032X45VvxSJ6Yi5G9behy9h6tNTHTDGh5Vq+KbmBjUWLgY4meCA==", - "optional": true, - "dependencies": { - "@types/d3-array": "*", - "@types/d3-axis": "*", - "@types/d3-brush": "*", - "@types/d3-chord": "*", - "@types/d3-color": "*", - "@types/d3-contour": "*", - "@types/d3-delaunay": "*", - "@types/d3-dispatch": "*", - "@types/d3-drag": "*", - "@types/d3-dsv": "*", - "@types/d3-ease": "*", - "@types/d3-fetch": "*", - "@types/d3-force": "*", - "@types/d3-format": "*", - "@types/d3-geo": "*", - "@types/d3-hierarchy": "*", - "@types/d3-interpolate": "*", - "@types/d3-path": "*", - "@types/d3-polygon": "*", - "@types/d3-quadtree": "*", - "@types/d3-random": "*", - "@types/d3-scale": "*", - "@types/d3-scale-chromatic": "*", - "@types/d3-selection": "*", - "@types/d3-shape": "*", - "@types/d3-time": "*", - "@types/d3-time-format": "*", - "@types/d3-timer": "*", - "@types/d3-transition": "*", - "@types/d3-zoom": "*" - } - }, - "node_modules/@types/d3-array": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.0.4.tgz", - "integrity": "sha512-nwvEkG9vYOc0Ic7G7kwgviY4AQlTfYGIZ0fqB7CQHXGyYM6nO7kJh5EguSNA3jfh4rq7Sb7eMVq8isuvg2/miQ==", - "optional": true - }, - "node_modules/@types/d3-axis": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.2.tgz", - "integrity": "sha512-uGC7DBh0TZrU/LY43Fd8Qr+2ja1FKmH07q2FoZFHo1eYl8aj87GhfVoY1saJVJiq24rp1+wpI6BvQJMKgQm8oA==", - "optional": true, - "dependencies": { - "@types/d3-selection": "*" - } - }, - "node_modules/@types/d3-brush": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.2.tgz", - "integrity": "sha512-2TEm8KzUG3N7z0TrSKPmbxByBx54M+S9lHoP2J55QuLU0VSQ9mE96EJSAOVNEqd1bbynMjeTS9VHmz8/bSw8rA==", - "optional": true, - "dependencies": { - "@types/d3-selection": "*" - } - }, - "node_modules/@types/d3-chord": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.2.tgz", - "integrity": "sha512-abT/iLHD3sGZwqMTX1TYCMEulr+wBd0SzyOQnjYNLp7sngdOHYtNkMRI5v3w5thoN+BWtlHVDx2Osvq6fxhZWw==", - "optional": true - }, - "node_modules/@types/d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-HKuicPHJuvPgCD+np6Se9MQvS6OCbJmOjGvylzMJRlDwUXjKTTXs6Pwgk79O09Vj/ho3u1ofXnhFOaEWWPrlwA==", - "optional": true - }, - "node_modules/@types/d3-contour": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.2.tgz", - "integrity": "sha512-k6/bGDoAGJZnZWaKzeB+9glgXCYGvh6YlluxzBREiVo8f/X2vpTEdgPy9DN7Z2i42PZOZ4JDhVdlTSTSkLDPlQ==", - "optional": true, - "dependencies": { - "@types/d3-array": "*", - "@types/geojson": "*" - } - }, - "node_modules/@types/d3-delaunay": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.1.tgz", - "integrity": "sha512-tLxQ2sfT0p6sxdG75c6f/ekqxjyYR0+LwPrsO1mbC9YDBzPJhs2HbJJRrn8Ez1DBoHRo2yx7YEATI+8V1nGMnQ==", - "optional": true - }, - "node_modules/@types/d3-dispatch": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.2.tgz", - "integrity": "sha512-rxN6sHUXEZYCKV05MEh4z4WpPSqIw+aP7n9ZN6WYAAvZoEAghEK1WeVZMZcHRBwyaKflU43PCUAJNjFxCzPDjg==", - "optional": true - }, - "node_modules/@types/d3-drag": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.2.tgz", - "integrity": "sha512-qmODKEDvyKWVHcWWCOVcuVcOwikLVsyc4q4EBJMREsoQnR2Qoc2cZQUyFUPgO9q4S3qdSqJKBsuefv+h0Qy+tw==", - "optional": true, - "dependencies": { - "@types/d3-selection": "*" - } - }, - "node_modules/@types/d3-dsv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.1.tgz", - "integrity": "sha512-76pBHCMTvPLt44wFOieouXcGXWOF0AJCceUvaFkxSZEu4VDUdv93JfpMa6VGNFs01FHfuP4a5Ou68eRG1KBfTw==", - "optional": true - }, - "node_modules/@types/d3-ease": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.0.tgz", - "integrity": "sha512-aMo4eaAOijJjA6uU+GIeW018dvy9+oH5Y2VPPzjjfxevvGQ/oRDs+tfYC9b50Q4BygRR8yE2QCLsrT0WtAVseA==", - "optional": true - }, - "node_modules/@types/d3-fetch": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.2.tgz", - "integrity": "sha512-gllwYWozWfbep16N9fByNBDTkJW/SyhH6SGRlXloR7WdtAaBui4plTP+gbUgiEot7vGw/ZZop1yDZlgXXSuzjA==", - "optional": true, - "dependencies": { - "@types/d3-dsv": "*" - } - }, - "node_modules/@types/d3-force": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.4.tgz", - "integrity": "sha512-q7xbVLrWcXvSBBEoadowIUJ7sRpS1yvgMWnzHJggFy5cUZBq2HZL5k/pBSm0GdYWS1vs5/EDwMjSKF55PDY4Aw==", - "optional": true - }, - "node_modules/@types/d3-format": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.1.tgz", - "integrity": "sha512-5KY70ifCCzorkLuIkDe0Z9YTf9RR2CjBX1iaJG+rgM/cPP+sO+q9YdQ9WdhQcgPj1EQiJ2/0+yUkkziTG6Lubg==", - "optional": true - }, - "node_modules/@types/d3-geo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.0.3.tgz", - "integrity": "sha512-bK9uZJS3vuDCNeeXQ4z3u0E7OeJZXjUgzFdSOtNtMCJCLvDtWDwfpRVWlyt3y8EvRzI0ccOu9xlMVirawolSCw==", - "optional": true, - "dependencies": { - "@types/geojson": "*" - } - }, - "node_modules/@types/d3-hierarchy": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", - "integrity": "sha512-9hjRTVoZjRFR6xo8igAJyNXQyPX6Aq++Nhb5ebrUF414dv4jr2MitM2fWiOY475wa3Za7TOS2Gh9fmqEhLTt0A==", - "optional": true - }, - "node_modules/@types/d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-jx5leotSeac3jr0RePOH1KdR9rISG91QIE4Q2PYTu4OymLTZfA3SrnURSLzKH48HmXVUru50b8nje4E79oQSQw==", - "optional": true, - "dependencies": { - "@types/d3-color": "*" - } - }, - "node_modules/@types/d3-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.0.0.tgz", - "integrity": "sha512-0g/A+mZXgFkQxN3HniRDbXMN79K3CdTpLsevj+PXiTcb2hVyvkZUBg37StmgCQkaD84cUJ4uaDAWq7UJOQy2Tg==", - "optional": true - }, - "node_modules/@types/d3-polygon": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.0.tgz", - "integrity": "sha512-D49z4DyzTKXM0sGKVqiTDTYr+DHg/uxsiWDAkNrwXYuiZVd9o9wXZIo+YsHkifOiyBkmSWlEngHCQme54/hnHw==", - "optional": true - }, - "node_modules/@types/d3-quadtree": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.2.tgz", - "integrity": "sha512-QNcK8Jguvc8lU+4OfeNx+qnVy7c0VrDJ+CCVFS9srBo2GL9Y18CnIxBdTF3v38flrGy5s1YggcoAiu6s4fLQIw==", - "optional": true - }, - "node_modules/@types/d3-random": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.1.tgz", - "integrity": "sha512-IIE6YTekGczpLYo/HehAy3JGF1ty7+usI97LqraNa8IiDur+L44d0VOjAvFQWJVdZOJHukUJw+ZdZBlgeUsHOQ==", - "optional": true - }, - "node_modules/@types/d3-scale": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.3.tgz", - "integrity": "sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ==", - "optional": true, - "dependencies": { - "@types/d3-time": "*" - } - }, - "node_modules/@types/d3-scale-chromatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", - "integrity": "sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw==", - "optional": true - }, - "node_modules/@types/d3-selection": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.4.tgz", - "integrity": "sha512-ZeykX7286BCyMg9sH5fIAORyCB6hcATPSRQpN47jwBA2bMbAT0s+EvtDP5r1FZYJ95R8QoEE1CKJX+n0/M5Vhg==", - "optional": true - }, - "node_modules/@types/d3-shape": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.1.tgz", - "integrity": "sha512-6Uh86YFF7LGg4PQkuO2oG6EMBRLuW9cbavUW46zkIO5kuS2PfTqo2o9SkgtQzguBHbLgNnU90UNsITpsX1My+A==", - "optional": true, - "dependencies": { - "@types/d3-path": "*" - } - }, - "node_modules/@types/d3-time": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz", - "integrity": "sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg==", - "optional": true - }, - "node_modules/@types/d3-time-format": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.0.tgz", - "integrity": "sha512-yjfBUe6DJBsDin2BMIulhSHmr5qNR5Pxs17+oW4DoVPyVIXZ+m6bs7j1UVKP08Emv6jRmYrYqxYzO63mQxy1rw==", - "optional": true - }, - "node_modules/@types/d3-timer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.0.tgz", - "integrity": "sha512-HNB/9GHqu7Fo8AQiugyJbv6ZxYz58wef0esl4Mv828w1ZKpAshw/uFWVDUcIB9KKFeFKoxS3cHY07FFgtTRZ1g==", - "optional": true - }, - "node_modules/@types/d3-transition": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.3.tgz", - "integrity": "sha512-/S90Od8Id1wgQNvIA8iFv9jRhCiZcGhPd2qX0bKF/PS+y0W5CrXKgIiELd2CvG1mlQrWK/qlYh3VxicqG1ZvgA==", - "optional": true, - "dependencies": { - "@types/d3-selection": "*" - } - }, - "node_modules/@types/d3-zoom": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.2.tgz", - "integrity": "sha512-t09DDJVBI6AkM7N8kuPsnq/3d/ehtRKBN1xSiYjjMCgbiw6HM6Ged5VhvswmhprfKyGvzeTEL/4WBaK9llWvlA==", - "optional": true, - "dependencies": { - "@types/d3-interpolate": "*", - "@types/d3-selection": "*" - } - }, "node_modules/@types/eslint": { - "version": "8.21.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.21.1.tgz", - "integrity": "sha512-rc9K8ZpVjNcLs8Fp0dkozd5Pt2Apk1glO4Vgz8ix1u6yFByxfqo5Yavpy65o+93TAe24jr7v+eSBtFLvOQtCRQ==", + "version": "8.44.7", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.7.tgz", + "integrity": "sha512-f5ORu2hcBbKei97U73mf+l9t4zTGl74IqZ0GQk4oVea/VS8tQZYkUveSYojk+frraAVYId0V2WC9O4PTNru2FQ==", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" } }, "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dependencies": { "@types/eslint": "*", "@types/estree": "*" } }, "node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" }, "node_modules/@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -6593,41 +6498,36 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.33", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz", - "integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==", + "version": "4.17.41", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", + "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", "dependencies": { "@types/node": "*", "@types/qs": "*", - "@types/range-parser": "*" + "@types/range-parser": "*", + "@types/send": "*" } }, - "node_modules/@types/geojson": { - "version": "7946.0.10", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz", - "integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==", - "optional": true - }, "node_modules/@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/har-format": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/@types/har-format/-/har-format-1.2.10.tgz", - "integrity": "sha512-o0J30wqycjF5miWDKYKKzzOU1ZTLuA42HZ4HE7/zqTOc/jTLdQ5NhYWvsRQo45Nfi1KHoRdNhteSI4BAxTF1Pg==" + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@types/har-format/-/har-format-1.2.15.tgz", + "integrity": "sha512-RpQH4rXLuvTXKR0zqHq3go0RVXYv/YVqv4TnPH95VbwUxZdQlK1EtcMvQvMpDngHbt13Csh9Z4qT9AbkiQH5BA==" }, "node_modules/@types/hast": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", - "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.8.tgz", + "integrity": "sha512-aMIqAlFd2wTIDZuvLbhUT+TGvMxrNC8ECUIVtH6xxy0sQLs3iu6NO8Kp/VT5je7i5ufnebXzdV1dNDMnvaH6IQ==", "dependencies": { - "@types/unist": "*" + "@types/unist": "^2" } }, "node_modules/@types/history": { @@ -6640,39 +6540,44 @@ "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" + }, "node_modules/@types/http-proxy": { - "version": "1.17.10", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.10.tgz", - "integrity": "sha512-Qs5aULi+zV1bwKAg5z1PWnDXWmsn+LxIvUGv6E2+OOMYhclZMO+OXd9pYVf2gLykf2I7IV2u7oTHwChPNsvJ7g==", + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==" }, "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/jest": { - "version": "29.4.0", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.4.0.tgz", - "integrity": "sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ==", + "version": "29.5.8", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.8.tgz", + "integrity": "sha512-fXEFTxMV2Co8ZF5aYFJv+YeA08RTYJfhtN5c9JSv/mFEMe+xxjufCb+PHL+bJcMs/ebPUsBu+UNTEz+ydXrR6g==", "dev": true, "dependencies": { "expect": "^29.0.0", @@ -6692,12 +6597,12 @@ } }, "node_modules/@types/jest/node_modules/pretty-format": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", - "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { - "@jest/schemas": "^29.4.3", + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, @@ -6721,32 +6626,43 @@ "integrity": "sha512-DUlIj2nk0YnJdlWgsFuVKcX27MLW0KbKmGVoUHmFr+74FYYNUDAaj9ZqTADvsbE8rfxuVmSFc7KczYn5Y09ozg==" }, "node_modules/@types/mdast": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", - "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", + "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", "dependencies": { - "@types/unist": "*" + "@types/unist": "^2" } }, "node_modules/@types/mdurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", - "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.5.tgz", + "integrity": "sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==" }, "node_modules/@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" }, "node_modules/@types/node": { - "version": "18.14.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.4.tgz", - "integrity": "sha512-VhCw7I7qO2X49+jaKcAUwi3rR+hbxT5VcYF493+Z5kMLI0DL568b7JI4IDJaxWFH0D/xwmGJNoXisyX+w7GH/g==" + "version": "20.9.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.0.tgz", + "integrity": "sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.9.tgz", + "integrity": "sha512-meK88cx/sTalPSLSoCzkiUB4VPIFHmxtXm5FaaqRDqBX2i/Sy8bJ4odsan0b20RBjPh06dAQ+OTTdnyQyhJZyQ==", + "dependencies": { + "@types/node": "*" + } }, "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" }, "node_modules/@types/parse5": { "version": "5.0.3", @@ -6754,30 +6670,30 @@ "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" }, "node_modules/@types/prettier": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", - "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", "dev": true }, "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + "version": "15.7.10", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.10.tgz", + "integrity": "sha512-mxSnDQxPqsZxmeShFH+uwQ4kO4gcJcGahjjMFeLbKE95IAZiiZyiEepGZjtXJ7hN/yfu0bu9xN2ajcU0JcxX6A==" }, "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + "version": "6.9.10", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz", + "integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==" }, "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" }, "node_modules/@types/react": { - "version": "17.0.53", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.53.tgz", - "integrity": "sha512-1yIpQR2zdYu1Z/dc1OxC+MA6GR240u3gcnP4l6mvj/PJiVaqHsQPmWttsvHsfnhfPbU2FuGmo0wSITPygjBmsw==", + "version": "18.2.37", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.37.tgz", + "integrity": "sha512-RGAYMi2bhRgEXT3f4B92WTohopH6bIXw05FuGlmJEnv/omEn190+QYEIYxIAuIBdKgboYYdVved2p1AxZVQnaw==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -6785,13 +6701,23 @@ } }, "node_modules/@types/react-dom": { - "version": "17.0.19", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.19.tgz", - "integrity": "sha512-PiYG40pnQRdPHnlf7tZnp0aQ6q9tspYr72vD61saO6zFCybLfMqwUCN0va1/P+86DXn18ZWeW30Bk7xlC5eEAQ==", + "version": "17.0.23", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.23.tgz", + "integrity": "sha512-lnJAZfMEDxfvELeeT24w4rnUYwpzUzQAOTfJQbWYnLcx8AEfz+fXJDCbowIBqNK/Bi4D6j8ovT8Qsda2OtDApA==", "dependencies": { "@types/react": "^17" } }, + "node_modules/@types/react-dom/node_modules/@types/react": { + "version": "17.0.70", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.70.tgz", + "integrity": "sha512-yqYMK49/cnqw+T8R9/C+RNjRddYmPDGI5lKHi3bOYceQCBAh8X2ngSbZP0gnVeyvHr0T7wEgIIGKT1usNol08w==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, "node_modules/@types/react-router": { "version": "5.1.20", "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", @@ -6802,13 +6728,13 @@ } }, "node_modules/@types/react-router-config": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.6.tgz", - "integrity": "sha512-db1mx37a1EJDf1XeX8jJN7R3PZABmJQXR8r28yUjVMFSjkmnQo6X6pOEEmNl+Tp2gYQOGPdYbFIipBtdElZ3Yg==", + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.10.tgz", + "integrity": "sha512-Wn6c/tXdEgi9adCMtDwx8Q2vGty6TsPTc/wCQQ9kAlye8UqFxj0vGFWWuhywNfkwqth+SOgJxQTLTZukrqDQmQ==", "dependencies": { "@types/history": "^4.7.11", "@types/react": "*", - "@types/react-router": "*" + "@types/react-router": "^5.1.0" } }, "node_modules/@types/react-router-dom": { @@ -6821,49 +6747,53 @@ "@types/react-router": "*" } }, - "node_modules/@types/resize-observer-browser": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/@types/resize-observer-browser/-/resize-observer-browser-0.1.7.tgz", - "integrity": "sha512-G9eN0Sn0ii9PWQ3Vl72jDPgeJwRWhv2Qk/nQkJuWmRmOB4HX3/BhD5SE1dZs/hzPZL/WKnvF0RHdTSG54QJFyg==", - "optional": true - }, "node_modules/@types/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" }, "node_modules/@types/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", + "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.6.tgz", + "integrity": "sha512-Vlktnchmkylvc9SnwwwozTv04L/e1NykF5vgoQ0XTmI8DD+wxfjQuHuvHS3p0r2jz2x2ghPs2h1FVeDirIteWA==" }, "node_modules/@types/semver": { - "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.5.tgz", + "integrity": "sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg==", "dev": true }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, "node_modules/@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", "dependencies": { "@types/express": "*" } }, "node_modules/@types/serve-static": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", - "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", + "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", "dependencies": { + "@types/http-errors": "*", "@types/mime": "*", "@types/node": "*" } @@ -6875,77 +6805,77 @@ "dev": true }, "node_modules/@types/sizzle": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", - "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.6.tgz", + "integrity": "sha512-m04Om5Gz6kbjUwAQ7XJJQ30OdEFsSmAVsvn4NYwcTRyMVpKKa1aPuESw1n2CxS5fYkOQv3nHgDKeNa8e76fUkw==", "dev": true }, "node_modules/@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/source-list-map": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", - "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.5.tgz", + "integrity": "sha512-cHBTLeIGIREJx839cDfMLKWao+FaJOlaPz4mnFHXUzShS8sXhzw6irhvIpYvp28TbTmTeAt3v+QgHMANsGbQtA==", "dev": true }, "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", "dev": true }, "node_modules/@types/swagger-schema-official": { - "version": "2.0.22", - "resolved": "https://registry.npmjs.org/@types/swagger-schema-official/-/swagger-schema-official-2.0.22.tgz", - "integrity": "sha512-7yQiX6MWSFSvc/1wW5smJMZTZ4fHOd+hqLr3qr/HONDxHEa2bnYAsOcGBOEqFIjd4yetwMOdEDdeW+udRAQnHA==" + "version": "2.0.25", + "resolved": "https://registry.npmjs.org/@types/swagger-schema-official/-/swagger-schema-official-2.0.25.tgz", + "integrity": "sha512-T92Xav+Gf/Ik1uPW581nA+JftmjWPgskw/WBf4TJzxRG/SJ+DfNnNE+WuZ4mrXuzflQMqMkm1LSYjzYW7MB1Cg==" }, "node_modules/@types/tapable": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz", - "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.11.tgz", + "integrity": "sha512-R3ltemSqZ/TKOBeyy+GBfZCLX3AYpxqarIbUMNe7+lxdazJp4iWLFpmjgBeZoRiKrWNImer1oWOlG2sDR6vGaw==", "dev": true }, "node_modules/@types/testing-library__jest-dom": { - "version": "5.14.5", - "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz", - "integrity": "sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==", + "version": "5.14.9", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz", + "integrity": "sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==", "dev": true, "dependencies": { "@types/jest": "*" } }, "node_modules/@types/type-is": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@types/type-is/-/type-is-1.6.3.tgz", - "integrity": "sha512-PNs5wHaNcBgCQG5nAeeZ7OvosrEsI9O4W2jAOO9BCCg4ux9ZZvH2+0iSCOIDBiKuQsiNS8CBlmfX9f5YBQ22cA==", + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/@types/type-is/-/type-is-1.6.6.tgz", + "integrity": "sha512-fs1KHv/f9OvmTMsu4sBNaUu32oyda9Y9uK25naJG8gayxNrfqGIjPQsbLIYyfe7xFkppnPlJB+BuTldOaX9bXw==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/uglify-js": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.1.tgz", - "integrity": "sha512-GkewRA4i5oXacU/n4MA9+bLgt5/L3F1mKrYvFGm7r2ouLXhRKjuWwo9XHNnbx6WF3vlGW21S3fCvgqxvxXXc5g==", + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-Hm/T0kV3ywpJyMGNbsItdivRhYNCQQf1IIsYsXnoVPES4t+FMLyDe0/K+Ea7ahWtMtSNb22ZdY7MIyoD9rqARg==", "dev": true, "dependencies": { "source-map": "^0.6.1" } }, "node_modules/@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" }, "node_modules/@types/webpack": { - "version": "4.41.33", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.33.tgz", - "integrity": "sha512-PPajH64Ft2vWevkerISMtnZ8rTs4YmRbs+23c402J0INmxDKCrhZNvwZYtzx96gY2wAtXdrK1BS2fiC8MlLr3g==", + "version": "4.41.36", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.36.tgz", + "integrity": "sha512-pF+DVW1pMLmgsPXqJr5QimdxIzOhe8oGKB98gdqAm0egKBy1lOLD5mRxbYboMQRkpYcG7BYcpqYblpKyvE7vhQ==", "dev": true, "dependencies": { "@types/node": "*", @@ -6957,9 +6887,9 @@ } }, "node_modules/@types/webpack-sources": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.0.tgz", - "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-4nZOdMwSPHZ4pTEZzSp0AsTM4K7Qmu40UKW4tJDiOVs20UzYF9l+qUe4s0ftfN0pin06n+5cWWDJXH+sbhAiDw==", "dev": true, "dependencies": { "@types/node": "*", @@ -6977,31 +6907,31 @@ } }, "node_modules/@types/ws": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", - "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", + "version": "8.5.9", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.9.tgz", + "integrity": "sha512-jbdrY0a8lxfdTp/+r7Z4CkycbOFN8WX+IOchLJr3juT/xzbJ8URyTVSJ/hvNdadTgM1mnedb47n+Y31GsFnQlg==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "version": "16.0.8", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.8.tgz", + "integrity": "sha512-1GwLEkmFafeb/HbE6pC7tFlgYSQ4Iqh2qlWCq8xN+Qfaiaxr2PcLfuhfRFRYqI6XJyeFoLYyKnhFbNsst9FMtQ==", "dev": true, "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" }, "node_modules/@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "dev": true, "optional": true, "dependencies": { @@ -7009,19 +6939,19 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.54.0.tgz", - "integrity": "sha512-+hSN9BdSr629RF02d7mMtXhAJvDTyCbprNYJKrXETlul/Aml6YZwd90XioVbjejQeHbb3R8Dg0CkRgoJDxo8aw==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.54.0", - "@typescript-eslint/type-utils": "5.54.0", - "@typescript-eslint/utils": "5.54.0", + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", + "graphemer": "^1.4.0", "ignore": "^5.2.0", "natural-compare-lite": "^1.4.0", - "regexpp": "^3.2.0", "semver": "^7.3.7", "tsutils": "^3.21.0" }, @@ -7043,14 +6973,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.54.0.tgz", - "integrity": "sha512-aAVL3Mu2qTi+h/r04WI/5PfNWvO6pdhpeMRWk9R7rEV4mwJNzoWf5CCU5vDKBsPIFQFjEq1xg7XBI2rjiMXQbQ==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.54.0", - "@typescript-eslint/types": "5.54.0", - "@typescript-eslint/typescript-estree": "5.54.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", "debug": "^4.3.4" }, "engines": { @@ -7070,13 +7000,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.54.0.tgz", - "integrity": "sha512-VTPYNZ7vaWtYna9M4oD42zENOBrb+ZYyCNdFs949GcN8Miwn37b8b7eMj+EZaq7VK9fx0Jd+JhmkhjFhvnovhg==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.54.0", - "@typescript-eslint/visitor-keys": "5.54.0" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -7087,13 +7017,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.54.0.tgz", - "integrity": "sha512-WI+WMJ8+oS+LyflqsD4nlXMsVdzTMYTxl16myXPaCXnSgc7LWwMsjxQFZCK/rVmTZ3FN71Ct78ehO9bRC7erYQ==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.54.0", - "@typescript-eslint/utils": "5.54.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -7114,9 +7044,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.54.0.tgz", - "integrity": "sha512-nExy+fDCBEgqblasfeE3aQ3NuafBUxZxgxXcYfzYRZFHdVvk5q60KhCSkG0noHgHRo/xQ/BOzURLZAafFpTkmQ==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -7127,13 +7057,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.54.0.tgz", - "integrity": "sha512-X2rJG97Wj/VRo5YxJ8Qx26Zqf0RRKsVHd4sav8NElhbZzhpBI8jU54i6hfo9eheumj4oO4dcRN1B/zIVEqR/MQ==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.54.0", - "@typescript-eslint/visitor-keys": "5.54.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -7154,18 +7084,18 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.54.0.tgz", - "integrity": "sha512-cuwm8D/Z/7AuyAeJ+T0r4WZmlnlxQ8wt7C7fLpFlKMR+dY6QO79Cq1WpJhvZbMA4ZeZGHiRWnht7ZJ8qkdAunw==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", "dev": true, "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.54.0", - "@typescript-eslint/types": "5.54.0", - "@typescript-eslint/typescript-estree": "5.54.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0", "semver": "^7.3.7" }, "engines": { @@ -7180,12 +7110,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.54.0.tgz", - "integrity": "sha512-xu4wT7aRCakGINTLGeyGqDn+78BwFlggwBjnHa1ar/KaGagnmwLYmlrXIrgAaQ3AE1Vd6nLfKASm7LrFHNbKGA==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.54.0", + "@typescript-eslint/types": "5.62.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -7196,134 +7126,140 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + "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==", + "devOptional": true + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==" }, "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/ast": "1.11.6", "@xtuc/long": "4.2.2" } }, @@ -7361,9 +7297,9 @@ } }, "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", "bin": { "acorn": "bin/acorn" }, @@ -7394,9 +7330,9 @@ } }, "node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", "peerDependencies": { "acorn": "^8" } @@ -7511,30 +7447,30 @@ } }, "node_modules/algoliasearch": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.16.0.tgz", - "integrity": "sha512-HAjKJ6bBblaXqO4dYygF4qx251GuJ6zCZt+qbJ+kU7sOC+yc84pawEjVpJByh+cGP2APFCsao2Giz50cDlKNPA==", - "dependencies": { - "@algolia/cache-browser-local-storage": "4.16.0", - "@algolia/cache-common": "4.16.0", - "@algolia/cache-in-memory": "4.16.0", - "@algolia/client-account": "4.16.0", - "@algolia/client-analytics": "4.16.0", - "@algolia/client-common": "4.16.0", - "@algolia/client-personalization": "4.16.0", - "@algolia/client-search": "4.16.0", - "@algolia/logger-common": "4.16.0", - "@algolia/logger-console": "4.16.0", - "@algolia/requester-browser-xhr": "4.16.0", - "@algolia/requester-common": "4.16.0", - "@algolia/requester-node-http": "4.16.0", - "@algolia/transporter": "4.16.0" + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.20.0.tgz", + "integrity": "sha512-y+UHEjnOItoNy0bYO+WWmLWBlPwDjKHW6mNHrPi0NkuhpQOOEbrkwQH/wgKFDLh7qlKjzoKeiRtlpewDPDG23g==", + "dependencies": { + "@algolia/cache-browser-local-storage": "4.20.0", + "@algolia/cache-common": "4.20.0", + "@algolia/cache-in-memory": "4.20.0", + "@algolia/client-account": "4.20.0", + "@algolia/client-analytics": "4.20.0", + "@algolia/client-common": "4.20.0", + "@algolia/client-personalization": "4.20.0", + "@algolia/client-search": "4.20.0", + "@algolia/logger-common": "4.20.0", + "@algolia/logger-console": "4.20.0", + "@algolia/requester-browser-xhr": "4.20.0", + "@algolia/requester-common": "4.20.0", + "@algolia/requester-node-http": "4.20.0", + "@algolia/transporter": "4.20.0" } }, "node_modules/algoliasearch-helper": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.12.0.tgz", - "integrity": "sha512-/j1U3PEwdan0n6P/QqSnSpNSLC5+cEMvyljd5CnmNmUjDlGrys+vFEOwjVEnqELIiAGMHEA/Nl3CiKVFBUYqyQ==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.15.0.tgz", + "integrity": "sha512-DGUnK3TGtDQsaUE4ayF/LjSN0DGsuYThB8WBgnnDY0Wq04K6lNVruO3LfqJOgSfDiezp+Iyt8Tj4YKHi+/ivSA==", "dependencies": { "@algolia/events": "^4.0.1" }, @@ -7688,6 +7624,19 @@ "deep-equal": "^2.0.5" } }, + "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-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", @@ -7702,14 +7651,14 @@ } }, "node_modules/array.prototype.reduce": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", - "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz", + "integrity": "sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-array-method-boxes-properly": "^1.0.0", "is-string": "^1.0.7" }, @@ -7720,6 +7669,27 @@ "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/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -7751,14 +7721,15 @@ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "node_modules/assert": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", - "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", + "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", "dependencies": { - "es6-object-assign": "^1.1.0", - "is-nan": "^1.2.1", - "object-is": "^1.0.1", - "util": "^0.12.0" + "call-bind": "^1.0.2", + "is-nan": "^1.3.2", + "object-is": "^1.1.5", + "object.assign": "^4.1.4", + "util": "^0.12.5" } }, "node_modules/assert-plus": { @@ -7780,9 +7751,9 @@ } }, "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", "dev": true }, "node_modules/asynckit": { @@ -7799,9 +7770,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "version": "10.4.16", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", "funding": [ { "type": "opencollective", @@ -7810,12 +7781,16 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001538", + "fraction.js": "^4.3.6", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", "postcss-value-parser": "^4.2.0" @@ -7983,69 +7958,64 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz", + "integrity": "sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==", "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.3", + "semver": "^6.3.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", + "version": "0.8.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz", + "integrity": "sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" + "@babel/helper-define-polyfill-provider": "^0.4.3", + "core-js-compat": "^3.33.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz", + "integrity": "sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3" + "@babel/helper-define-polyfill-provider": "^0.4.3" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-styled-components": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz", - "integrity": "sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.1.4.tgz", + "integrity": "sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-module-imports": "^7.16.0", - "babel-plugin-syntax-jsx": "^6.18.0", - "lodash": "^4.17.11", - "picomatch": "^2.3.0" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "lodash": "^4.17.21", + "picomatch": "^2.3.1" }, "peerDependencies": { "styled-components": ">= 2" } }, - "node_modules/babel-plugin-syntax-jsx": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==" - }, "node_modules/babel-preset-current-node-syntax": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", @@ -8226,6 +8196,17 @@ "ms": "2.0.0" } }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -8246,9 +8227,9 @@ } }, "node_modules/bonjour-service": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.0.tgz", - "integrity": "sha512-LVRinRB3k1/K0XzZ2p58COnWvkQknIY6sf0zF2rpErvcJXpMBttEPQSxK+HEXSS9VmpZlDoDnQWv8ftJT20B0Q==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", + "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", "dependencies": { "array-flatten": "^2.1.2", "dns-equal": "^1.0.0", @@ -8372,19 +8353,22 @@ } }, "node_modules/browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz", + "integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==", "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", + "elliptic": "^6.5.4", "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "parse-asn1": "^5.1.6", + "readable-stream": "^3.6.2", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 4" } }, "node_modules/browserify-zlib": { @@ -8396,9 +8380,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", "funding": [ { "type": "opencollective", @@ -8407,13 +8391,17 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" @@ -8503,6 +8491,19 @@ "node": ">=8" } }, + "node_modules/cacheable-request/node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" + }, + "node_modules/cacheable-request/node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dependencies": { + "json-buffer": "3.0.0" + } + }, "node_modules/cacheable-request/node_modules/lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", @@ -8520,21 +8521,22 @@ } }, "node_modules/cachedir": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", - "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz", + "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==", "dev": true, "engines": { "node": ">=6" } }, "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==", "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" @@ -8601,9 +8603,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001470", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001470.tgz", - "integrity": "sha512-065uNwY6QtHCBOExzbV6m236DDhYCCtPmQUCoQtwkVqzud8v5QPidoMr6CoMkC2nfp6nksjttqWQRRh75LqUmA==", + "version": "1.0.30001561", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001561.tgz", + "integrity": "sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==", "funding": [ { "type": "opencollective", @@ -8612,6 +8614,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ] }, @@ -8774,9 +8780,9 @@ } }, "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "funding": [ { "type": "github", @@ -8797,17 +8803,11 @@ } }, "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", "dev": true }, - "node_modules/classcat": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/classcat/-/classcat-5.0.4.tgz", - "integrity": "sha512-sbpkOw6z413p+HDGcBENe498WM9woqWHiJxCq7nvmxe9WmrUmqfAcxpIwAiMtM5Q3AhYkzXcNQHqsWq0mND51g==", - "optional": true - }, "node_modules/classnames": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", @@ -9052,9 +9052,9 @@ } }, "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", "dev": true }, "node_modules/color": { @@ -9110,14 +9110,14 @@ "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" }, "node_modules/colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" }, "node_modules/combine-promises": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz", - "integrity": "sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.2.0.tgz", + "integrity": "sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ==", "engines": { "node": ">=10" } @@ -9134,9 +9134,9 @@ } }, "node_modules/comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -9297,9 +9297,9 @@ } }, "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" }, "node_modules/cookie": { "version": "0.5.0", @@ -9315,9 +9315,9 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "node_modules/copy-text-to-clipboard": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.1.0.tgz", - "integrity": "sha512-PFM6BnjLnOON/lB3ta/Jg7Ywsv+l9kQGD4TWDCSlRBGmqnnTM5MrDkhAFgw+8HZt0wW6Q2BBE4cmy9sq+s9Qng==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz", + "integrity": "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==", "engines": { "node": ">=12" }, @@ -9394,13 +9394,13 @@ } }, "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "13.1.3", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", - "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", "dependencies": { "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", "merge2": "^1.4.1", "slash": "^4.0.0" }, @@ -9417,14 +9417,14 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/copy-webpack-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dependencies": { "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", + "ajv": "^8.9.0", "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" + "ajv-keywords": "^5.1.0" }, "engines": { "node": ">= 12.13.0" @@ -9446,9 +9446,9 @@ } }, "node_modules/core-js": { - "version": "3.29.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.29.0.tgz", - "integrity": "sha512-VG23vuEisJNkGl6XQmFJd3rEG/so/CNatqeE+7uZAwTSwFeB/qaO0be8xZYUNWprJ/GIwL8aMt9cj1kvbpTZhg==", + "version": "3.33.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.33.2.tgz", + "integrity": "sha512-XeBzWI6QL3nJQiHmdzbAOiMYqjrb7hwU7A39Qhvd/POSa/t9E1AeZyEZx3fNvp/vtM8zXwhoL0FsiS0hD0pruQ==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -9456,11 +9456,11 @@ } }, "node_modules/core-js-compat": { - "version": "3.29.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.29.0.tgz", - "integrity": "sha512-ScMn3uZNAFhK2DGoEfErguoiAHhV2Ju+oJo/jK08p7B3f3UhocUrCCkTvnZaiS+edl5nlIoiBXKcwMc6elv4KQ==", + "version": "3.33.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.2.tgz", + "integrity": "sha512-axfo+wxFVxnqf8RvxTzoAlzW4gRoacrHeoFlc9n0x50+7BEyZL/Rt3hicaED1/CEd7I6tPCPVUYcJwCMO5XUYw==", "dependencies": { - "browserslist": "^4.21.5" + "browserslist": "^4.22.1" }, "funding": { "type": "opencollective", @@ -9468,9 +9468,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.29.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.29.0.tgz", - "integrity": "sha512-v94gUjN5UTe1n0yN/opTihJ8QBWD2O8i19RfTZR7foONPWArnjB96QA/wk5ozu1mm6ja3udQCzOzwQXTxi3xOQ==", + "version": "3.33.2", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.33.2.tgz", + "integrity": "sha512-a8zeCdyVk7uF2elKIGz67AjcXOxjRbwOLz8SbklEso1V+2DoW4OkAMZN9S9GBgvZIaqQi/OemFX4OiSoQEmg1Q==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -9537,11 +9537,11 @@ } }, "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", "dependencies": { - "node-fetch": "2.6.7" + "node-fetch": "^2.6.12" } }, "node_modules/cross-spawn": { @@ -9595,9 +9595,9 @@ } }, "node_modules/css-declaration-sorter": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", - "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", "engines": { "node": "^10 || ^12 || >=14" }, @@ -9703,9 +9703,9 @@ } }, "node_modules/css-loader/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "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" @@ -9786,14 +9786,14 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dependencies": { "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", + "ajv": "^8.9.0", "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" + "ajv-keywords": "^5.1.0" }, "engines": { "node": ">= 12.13.0" @@ -10001,20 +10001,20 @@ "dev": true }, "node_modules/csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, "node_modules/cypress": { - "version": "12.7.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-12.7.0.tgz", - "integrity": "sha512-7rq+nmhzz0u6yabCFyPtADU2OOrYt6pvUau9qV7xyifJ/hnsaw/vkr0tnLlcuuQKUAOC1v1M1e4Z0zG7S0IAvA==", + "version": "12.17.4", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-12.17.4.tgz", + "integrity": "sha512-gAN8Pmns9MA5eCDFSDJXWKUpaL3IDd89N9TtIupjYnzLSmlpVr+ZR+vb4U/qaMp+lB6tBvAmt7504c3Z4RU5KQ==", "dev": true, "hasInstallScript": true, "dependencies": { - "@cypress/request": "^2.88.10", + "@cypress/request": "2.88.12", "@cypress/xvfb": "^1.2.4", - "@types/node": "^14.14.31", + "@types/node": "^16.18.39", "@types/sinonjs__fake-timers": "8.1.1", "@types/sizzle": "^2.3.2", "arch": "^2.2.0", @@ -10026,7 +10026,7 @@ "check-more-types": "^2.24.0", "cli-cursor": "^3.1.0", "cli-table3": "~0.6.1", - "commander": "^5.1.0", + "commander": "^6.2.1", "common-tags": "^1.8.0", "dayjs": "^1.10.4", "debug": "^4.3.4", @@ -10044,12 +10044,13 @@ "listr2": "^3.8.3", "lodash": "^4.17.21", "log-symbols": "^4.0.0", - "minimist": "^1.2.6", + "minimist": "^1.2.8", "ospath": "^1.2.2", "pretty-bytes": "^5.6.0", + "process": "^0.11.10", "proxy-from-env": "1.0.0", "request-progress": "^3.0.0", - "semver": "^7.3.2", + "semver": "^7.5.3", "supports-color": "^8.1.1", "tmp": "~0.2.1", "untildify": "^4.0.0", @@ -10063,11 +10064,29 @@ } }, "node_modules/cypress/node_modules/@types/node": { - "version": "14.18.37", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.37.tgz", - "integrity": "sha512-7GgtHCs/QZrBrDzgIJnQtuSvhFSwhyYSI2uafSwZoNt1iOGhEN5fwNrQMjtONyHm9+/LoA4453jH0CMYcr06Pg==", + "version": "16.18.61", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.61.tgz", + "integrity": "sha512-k0N7BqGhJoJzdh6MuQg1V1ragJiXTh8VUBAZTWjJ9cUq23SG0F0xavOwZbhiP4J3y20xd6jxKx+xNUhkMAi76Q==", "dev": true }, + "node_modules/cypress/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cypress/node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/cypress/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -10083,121 +10102,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", - "optional": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", - "optional": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-drag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", - "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", - "optional": true, - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", - "optional": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "optional": true, - "dependencies": { - "d3-color": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-selection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", - "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", - "optional": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", - "optional": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-transition": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", - "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", - "optional": true, - "dependencies": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "d3-selection": "2 - 3" - } - }, - "node_modules/d3-zoom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", - "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", - "optional": true, - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "2 - 3", - "d3-transition": "2 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/dagre": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz", - "integrity": "sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==", - "optional": true, - "dependencies": { - "graphlib": "^2.1.8", - "lodash": "^4.17.15" - } - }, "node_modules/dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -10225,9 +10129,9 @@ } }, "node_modules/dayjs": { - "version": "1.11.7", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz", - "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==", + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==", "dev": true }, "node_modules/debug": { @@ -10286,16 +10190,17 @@ "dev": true }, "node_modules/deep-equal": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", - "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.2.tgz", + "integrity": "sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA==", "dev": true, "dependencies": { + "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.2", - "get-intrinsic": "^1.1.3", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.1", "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.1", + "is-array-buffer": "^3.0.2", "is-date-object": "^1.0.5", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", @@ -10303,7 +10208,7 @@ "object-is": "^1.1.5", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", + "regexp.prototype.flags": "^1.5.0", "side-channel": "^1.0.4", "which-boxed-primitive": "^1.0.2", "which-collection": "^1.0.1", @@ -10328,9 +10233,9 @@ "devOptional": true }, "node_modules/deepmerge": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", - "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "engines": { "node": ">=0.10.0" } @@ -10392,6 +10297,19 @@ "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" }, + "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==", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -10401,10 +10319,11 @@ } }, "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dependencies": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, @@ -10458,9 +10377,9 @@ } }, "node_modules/des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", "dependencies": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" @@ -10488,9 +10407,9 @@ } }, "node_modules/detect-libc": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", - "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", "engines": { "node": ">=8" } @@ -10552,9 +10471,9 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -10592,9 +10511,9 @@ "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" }, "node_modules/dns-packet": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", - "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" }, @@ -10658,9 +10577,9 @@ } }, "node_modules/domain-browser": { - "version": "4.22.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.22.0.tgz", - "integrity": "sha512-IGBwjF7tNk3cwypFNH/7bfzBcgSCbaMOD3GsaY1AU/JRrnHnYgEM0+9kQt52iZxjNsjBtJYtao146V+f8jFZNw==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.23.0.tgz", + "integrity": "sha512-ArzcM/II1wCCujdCNyQjXrAFwS4mrLh4C7DZWlaI8mdh7h3BfKdNd3bKXITfl2PT9FtfQqaGvhi1vPRQPimjGA==", "engines": { "node": ">=10" }, @@ -10715,18 +10634,18 @@ } }, "node_modules/dompurify": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.5.tgz", - "integrity": "sha512-jggCCd+8Iqp4Tsz0nIvpcb22InKEBrGz5dw3EQJMs8HPJDsKbFIO3STYtAvCfDx26Muevn1MHVI0XxjgFfmiSA==" + "version": "2.4.7", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.7.tgz", + "integrity": "sha512-kxxKlPEDa6Nc5WJi+qRgPbOAbgTpSULL+vI3NUXsZMlkJxTqYI9wg5ZTay2sFrdZRWHPWNi+EdAhcJf81WtoMQ==" }, "node_modules/domutils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", - "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", - "domhandler": "^5.0.1" + "domhandler": "^5.0.3" }, "funding": { "url": "https://github.com/fb55/domutils?sponsor=1" @@ -10800,9 +10719,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.315", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.315.tgz", - "integrity": "sha512-ndBQYz3Eyy3rASjjQ9poMJGoAlsZ/aZnq6GBsGL4w/4sWIAwiUHVSsMuADbxa8WJw7pZ0oxLpGbtoDt4vRTdCg==" + "version": "1.4.578", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.578.tgz", + "integrity": "sha512-V0ZhSu1BQZKfG0yNEL6Dadzik8E1vAzfpVOapdSiT9F6yapEJ3Bk+4tZ4SMPdWiUchCgnM/ByYtBzp5ntzDMIA==" }, "node_modules/elliptic": { "version": "6.5.4", @@ -10874,9 +10793,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -10886,21 +10805,22 @@ } }, "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "dev": true, "dependencies": { - "ansi-colors": "^4.1.1" + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8.6" } }, "node_modules/entities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", - "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "engines": { "node": ">=0.12" }, @@ -10925,44 +10845,50 @@ } }, "node_modules/es-abstract": { - "version": "1.21.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", - "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", + "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.2", + "call-bind": "^1.0.5", "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", + "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": "^1.0.3", "has-property-descriptors": "^1.0.0", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.4", - "is-array-buffer": "^3.0.1", + "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.10", + "is-typed-array": "^1.1.12", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", + "object-inspect": "^1.13.1", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", + "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.9" + "which-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -10998,19 +10924,19 @@ } }, "node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz", + "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==" }, "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "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.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" }, "engines": { "node": ">= 0.4" @@ -11033,11 +10959,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es6-object-assign": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==" - }, "node_modules/es6-promise": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", @@ -11076,15 +10997,14 @@ } }, "node_modules/escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" + "esutils": "^2.0.2" }, "bin": { "escodegen": "bin/escodegen.js", @@ -11106,78 +11026,29 @@ "node": ">=4.0" } }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/eslint": { - "version": "8.35.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.35.0.tgz", - "integrity": "sha512-BxAf1fVL7w+JLRQhWl2pzGeSiGqbWumV4WNvc9Rhp6tiCtm4oHnyPBSEtMGZwrQgudFQ+otqzWoPB7x+hxoWsw==", + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz", + "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==", "devOptional": true, "dependencies": { - "@eslint/eslintrc": "^2.0.0", - "@eslint/js": "8.35.0", - "@humanwhocodes/config-array": "^0.11.8", + "@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", - "ajv": "^6.10.0", + "@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.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.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", @@ -11185,23 +11056,19 @@ "find-up": "^5.0.0", "glob-parent": "^6.0.2", "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", + "graphemer": "^1.4.0", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", "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.1", - "regexpp": "^3.2.0", + "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" }, "bin": { @@ -11215,9 +11082,9 @@ } }, "node_modules/eslint-config-prettier": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz", - "integrity": "sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", + "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" @@ -11227,9 +11094,9 @@ } }, "node_modules/eslint-plugin-markdown": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-3.0.0.tgz", - "integrity": "sha512-hRs5RUJGbeHDLfS7ELanT0e29Ocyssf/7kBM+p7KluY5AwngGkDf8Oyu4658/NZSGTTq05FZeWbkxXtbVyHPwg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-3.0.1.tgz", + "integrity": "sha512-8rqoc148DWdGdmYF6WSQFT3uQ6PO7zXYgeBpHAOAakX/zpq+NvFYbDA/H7PYzHajwtmaOzAwfxyl++x0g1/N9A==", "dev": true, "dependencies": { "mdast-util-from-markdown": "^0.8.5" @@ -11274,46 +11141,22 @@ "node": ">=8.0.0" } }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "devOptional": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "devOptional": true, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "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==", "devOptional": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "devOptional": true, "dependencies": { "esrecurse": "^4.3.0", @@ -11321,6 +11164,9 @@ }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/estraverse": { @@ -11361,9 +11207,9 @@ } }, "node_modules/eslint/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "devOptional": true, "dependencies": { "type-fest": "^0.20.2" @@ -11454,14 +11300,14 @@ } }, "node_modules/espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "devOptional": true, "dependencies": { - "acorn": "^8.8.0", + "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -11539,9 +11385,9 @@ } }, "node_modules/eta": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/eta/-/eta-2.0.1.tgz", - "integrity": "sha512-46E2qDPDm7QA+usjffUWz9KfXsxVZclPOuKsXs4ZWZdI/X1wpDF7AO424pt7fdYohCzWsIkXAhNGXSlwo5naAg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eta/-/eta-2.2.0.tgz", + "integrity": "sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==", "engines": { "node": ">=6.0.0" }, @@ -11650,16 +11496,16 @@ } }, "node_modules/expect": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.4.3.tgz", - "integrity": "sha512-uC05+Q7eXECFpgDrHdXA4k2rpMyStAYPItEDLyQDo5Ta7fVkJnNA/4zh/OIVkVVNZ1oOK1PipQoyNjuZ6sz6Dg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, "dependencies": { - "@jest/expect-utils": "^29.4.3", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.4.3", - "jest-message-util": "^29.4.3", - "jest-util": "^29.4.3" + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -11813,15 +11659,15 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", "dev": true }, "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -11931,9 +11777,9 @@ } }, "node_modules/fbjs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz", - "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", + "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", "dependencies": { "cross-fetch": "^3.1.5", "fbjs-css-vars": "^1.0.0", @@ -11941,7 +11787,7 @@ "object-assign": "^4.1.0", "promise": "^7.1.1", "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.30" + "ua-parser-js": "^1.0.35" } }, "node_modules/fbjs-css-vars": { @@ -12025,9 +11871,9 @@ } }, "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -12143,23 +11989,32 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "bin": { + "flat": "cli.js" + } + }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", + "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", "devOptional": true, "dependencies": { - "flatted": "^3.1.0", + "flatted": "^3.2.9", + "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=12.0.0" } }, "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "devOptional": true }, "node_modules/flux": { @@ -12180,9 +12035,9 @@ "integrity": "sha512-Gz1EvfOneuFfk4yG458dJ3TLJ7gV19q3OM/vVvvHf7eT02Hm1DleB4edsia6ahbKgAYxO9gvyQ1ioWZR+a00Yw==" }, "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", "funding": [ { "type": "individual", @@ -12221,9 +12076,9 @@ } }, "node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", - "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", + "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", "dependencies": { "@babel/code-frame": "^7.8.3", "@types/json-schema": "^7.0.5", @@ -12340,15 +12195,15 @@ } }, "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", "engines": { "node": "*" }, "funding": { "type": "patreon", - "url": "https://www.patreon.com/infusion" + "url": "https://github.com/sponsors/rawify" } }, "node_modules/fresh": { @@ -12384,9 +12239,9 @@ } }, "node_modules/fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", + "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==" }, "node_modules/fs.realpath": { "version": "1.0.0", @@ -12399,9 +12254,9 @@ "integrity": "sha512-hlq4+BU0hlPmwsFjwGGzZ+OZ9N/wq9Ljg/sq3pX+2CD7hrJsX9tJgWWK/wiNTFM212CLHWhicOoqwXyZGGetJg==" }, "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "hasInstallScript": true, "optional": true, "os": [ @@ -12412,20 +12267,23 @@ } }, "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==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "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.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -12460,13 +12318,14 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -12746,25 +12605,16 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "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==" }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "devOptional": true }, - "node_modules/graphlib": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", - "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", - "optional": true, - "dependencies": { - "lodash": "^4.17.15" - } - }, "node_modules/gray-matter": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", @@ -12818,17 +12668,6 @@ "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -12847,11 +12686,11 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", "dependencies": { - "get-intrinsic": "^1.1.1" + "get-intrinsic": "^1.2.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -12861,7 +12700,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -12924,24 +12762,42 @@ "minimalistic-assert": "^1.0.1" } }, + "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==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/hast-to-hyperscript": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", - "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-10.0.3.tgz", + "integrity": "sha512-NuBoUStp4fRwmvlfbidlEiRSTk0gSHm+97q4Xn9CJ10HO+Py7nlTuDi6RhM1qLOureukGrCXLG7AAxaGqqyslQ==", "dependencies": { - "@types/unist": "^2.0.3", - "comma-separated-tokens": "^1.0.0", - "property-information": "^5.3.0", - "space-separated-tokens": "^1.0.0", - "style-to-object": "^0.3.0", - "unist-util-is": "^4.0.0", - "web-namespaces": "^1.0.0" + "@types/unist": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-object": "^0.4.1", + "web-namespaces": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, + "node_modules/hast-to-hyperscript/node_modules/style-to-object": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz", + "integrity": "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==", + "dependencies": { + "inline-style-parser": "0.1.1" + } + }, "node_modules/hast-util-from-parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", @@ -12959,6 +12815,70 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/hast-util-from-parse5/node_modules/comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/hast-util-from-parse5/node_modules/hast-util-parse-selector": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", + "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5/node_modules/hastscript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", + "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", + "dependencies": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5/node_modules/property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "dependencies": { + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/hast-util-from-parse5/node_modules/space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/hast-util-from-parse5/node_modules/web-namespaces": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", + "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/hast-util-is-element": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz", @@ -12969,9 +12889,12 @@ } }, "node_modules/hast-util-parse-selector": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", - "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz", + "integrity": "sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==", + "dependencies": { + "@types/hast": "^2.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -13003,6 +12926,15 @@ "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, + "node_modules/hast-util-raw/node_modules/web-namespaces": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", + "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/hast-util-sanitize": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/hast-util-sanitize/-/hast-util-sanitize-4.1.0.tgz", @@ -13031,39 +12963,96 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/hast-util-to-text": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-2.0.1.tgz", - "integrity": "sha512-8nsgCARfs6VkwH2jJU9b8LNTuR4700na+0h3PqCaEk4MAnMDeu5P0tP8mjk9LLNGxIeQRLbiDbZVw6rku+pYsQ==", + "node_modules/hast-util-to-parse5/node_modules/comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/hast-util-to-parse5/node_modules/hast-to-hyperscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", + "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", "dependencies": { - "hast-util-is-element": "^1.0.0", - "repeat-string": "^1.0.0", - "unist-util-find-after": "^3.0.0" + "@types/unist": "^2.0.3", + "comma-separated-tokens": "^1.0.0", + "property-information": "^5.3.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.3.0", + "unist-util-is": "^4.0.0", + "web-namespaces": "^1.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/hast-util-whitespace": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz", - "integrity": "sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==", + "node_modules/hast-util-to-parse5/node_modules/property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "dependencies": { + "xtend": "^4.0.0" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/hastscript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", - "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", + "node_modules/hast-util-to-parse5/node_modules/space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/hast-util-to-parse5/node_modules/web-namespaces": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", + "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/hast-util-to-text": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-2.0.1.tgz", + "integrity": "sha512-8nsgCARfs6VkwH2jJU9b8LNTuR4700na+0h3PqCaEk4MAnMDeu5P0tP8mjk9LLNGxIeQRLbiDbZVw6rku+pYsQ==", + "dependencies": { + "hast-util-is-element": "^1.0.0", + "repeat-string": "^1.0.0", + "unist-util-find-after": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz", + "integrity": "sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.2.0.tgz", + "integrity": "sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==", "dependencies": { "@types/hast": "^2.0.0", - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^3.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0" }, "funding": { "type": "opencollective", @@ -13170,9 +13159,19 @@ } }, "node_modules/html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] }, "node_modules/html-escaper": { "version": "2.0.2", @@ -13209,9 +13208,9 @@ } }, "node_modules/html-tags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", - "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", "engines": { "node": ">=8" }, @@ -13229,9 +13228,9 @@ } }, "node_modules/html-webpack-plugin": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", - "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz", + "integrity": "sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg==", "dependencies": { "@types/html-minifier-terser": "^6.0.0", "html-minifier-terser": "^6.0.2", @@ -13513,9 +13512,9 @@ }, "node_modules/html-webpack-plugin-5": { "name": "html-webpack-plugin", - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", - "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz", + "integrity": "sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg==", "dev": true, "dependencies": { "@types/html-minifier-terser": "^6.0.0", @@ -13536,9 +13535,9 @@ } }, "node_modules/htmlparser2": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", - "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { @@ -13548,9 +13547,9 @@ ], "dependencies": { "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", + "domhandler": "^5.0.3", "domutils": "^3.0.1", - "entities": "^4.3.0" + "entities": "^4.4.0" } }, "node_modules/http-cache-semantics": { @@ -13729,11 +13728,11 @@ "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==" }, "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" @@ -13816,9 +13815,9 @@ } }, "node_modules/immer": { - "version": "9.0.19", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.19.tgz", - "integrity": "sha512-eY+Y0qcsB4TZKwgQzLaE/lqYMlKhv5J9dyd2RhhtGhNo2njPXDqU9XPfcNfa3MIDsdtZt5KlkIsirlo4dHsWdQ==", + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/immer" @@ -13927,13 +13926,13 @@ } }, "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "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.0", - "has": "^1.0.3", + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", "side-channel": "^1.0.4" }, "engines": { @@ -13957,9 +13956,9 @@ } }, "node_modules/ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", "engines": { "node": ">= 10" } @@ -14105,11 +14104,11 @@ } }, "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -14446,15 +14445,11 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "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==", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.11" }, "engines": { "node": ">= 0.4" @@ -14583,9 +14578,9 @@ "dev": true }, "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, "engines": { "node": ">=8" @@ -14608,26 +14603,41 @@ } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "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/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "dependencies": { "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", + "make-dir": "^4.0.0", "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/istanbul-lib-source-maps": { @@ -14645,9 +14655,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dev": true, "dependencies": { "html-escaper": "^2.0.0", @@ -14991,15 +15001,15 @@ } }, "node_modules/jest-diff": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.4.3.tgz", - "integrity": "sha512-YB+ocenx7FZ3T5O9lMVMeLYV4265socJKtkwgk/6YUz/VsEzYDkiMuMhWzZmxm3wDRQvayJu/PjkjjSkjoHsCA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.4.3" + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -15018,12 +15028,12 @@ } }, "node_modules/jest-diff/node_modules/pretty-format": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", - "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { - "@jest/schemas": "^29.4.3", + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, @@ -15155,9 +15165,9 @@ } }, "node_modules/jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -15386,15 +15396,15 @@ } }, "node_modules/jest-matcher-utils": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.4.3.tgz", - "integrity": "sha512-TTciiXEONycZ03h6R6pYiZlSkvYgT0l8aa49z/DLSGYjex4orMUcafuLXYyyEDWB1RKglq00jzwY00Ei7yFNVg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.4.3" + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -15413,12 +15423,12 @@ } }, "node_modules/jest-matcher-utils/node_modules/pretty-format": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", - "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { - "@jest/schemas": "^29.4.3", + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, @@ -15427,18 +15437,18 @@ } }, "node_modules/jest-message-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.4.3.tgz", - "integrity": "sha512-1Y8Zd4ZCN7o/QnWdMmT76If8LuDv23Z1DRovBj/vcSFNlGCJGoO8D1nJDw1AdyAGUk0myDLFGN5RbNeJyCRGCw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.4.3", + "@jest/types": "^29.6.3", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^29.4.3", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -15447,12 +15457,12 @@ } }, "node_modules/jest-message-util/node_modules/@jest/types": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.4.3.tgz", - "integrity": "sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, "dependencies": { - "@jest/schemas": "^29.4.3", + "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -15464,9 +15474,9 @@ } }, "node_modules/jest-message-util/node_modules/@types/yargs": { - "version": "17.0.22", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz", - "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==", + "version": "17.0.31", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz", + "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -15485,12 +15495,12 @@ } }, "node_modules/jest-message-util/node_modules/pretty-format": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", - "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { - "@jest/schemas": "^29.4.3", + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, @@ -15948,11 +15958,11 @@ } }, "node_modules/jest-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.4.3.tgz", - "integrity": "sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dependencies": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -15964,11 +15974,11 @@ } }, "node_modules/jest-util/node_modules/@jest/types": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.4.3.tgz", - "integrity": "sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dependencies": { - "@jest/schemas": "^29.4.3", + "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -15980,9 +15990,9 @@ } }, "node_modules/jest-util/node_modules/@types/yargs": { - "version": "17.0.22", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz", - "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==", + "version": "17.0.31", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz", + "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==", "dependencies": { "@types/yargs-parser": "*" } @@ -16049,12 +16059,12 @@ } }, "node_modules/jest-worker": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.4.3.tgz", - "integrity": "sha512-GLHN/GTAAMEy5BFdvpUfzr9Dr80zQqBrh0fz1mtRMe05hqP45+HfQltu7oTBfduD0UeZs09d+maFtFYAXFWvAA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dependencies": { "@types/node": "*", - "jest-util": "^29.4.3", + "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, @@ -16076,10 +16086,18 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "bin": { + "jiti": "bin/jiti.js" + } + }, "node_modules/joi": { - "version": "17.8.3", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.8.3.tgz", - "integrity": "sha512-q5Fn6Tj/jR8PfrLrx4fpGH4v9qM6o+vDUfD4/3vxxyg34OmKcNqYZ1qn2mpLza96S8tL0p0rIw2gOZX+/cTg9w==", + "version": "17.11.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.11.0.tgz", + "integrity": "sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==", "dependencies": { "@hapi/hoek": "^9.0.0", "@hapi/topo": "^5.0.0", @@ -16150,16 +16168,6 @@ "node": ">=0.10.0" } }, - "node_modules/js-sdsl": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", - "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", - "devOptional": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" - } - }, "node_modules/js-sha3": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", @@ -16253,30 +16261,6 @@ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, - "node_modules/jsdom/node_modules/tough-cookie": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", - "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", - "dev": true, - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsdom/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -16289,9 +16273,10 @@ } }, "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "devOptional": true }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", @@ -16356,10 +16341,9 @@ } }, "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.2.1.tgz", + "integrity": "sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==" }, "node_modules/jsonfile": { "version": "6.1.0", @@ -16411,11 +16395,12 @@ } }, "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "devOptional": true, "dependencies": { - "json-buffer": "3.0.0" + "json-buffer": "3.0.1" } }, "node_modules/kind-of": { @@ -16434,14 +16419,6 @@ "node": ">=6" } }, - "node_modules/klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", - "engines": { - "node": ">= 8" - } - }, "node_modules/latest-version": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", @@ -16453,6 +16430,15 @@ "node": ">=8" } }, + "node_modules/launch-editor": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", + "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, "node_modules/lazy-ass": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", @@ -16484,9 +16470,9 @@ } }, "node_modules/lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "engines": { "node": ">=10" } @@ -16497,35 +16483,98 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "node_modules/lint-staged": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.1.2.tgz", - "integrity": "sha512-K9b4FPbWkpnupvK3WXZLbgu9pchUJ6N7TtVZjbaPsoizkqFUDkUReUL25xdrCljJs7uLUF3tZ7nVPeo/6lp+6w==", - "dev": true, - "dependencies": { - "cli-truncate": "^3.1.0", - "colorette": "^2.0.19", - "commander": "^9.4.1", - "debug": "^4.3.4", - "execa": "^6.1.0", - "lilconfig": "2.0.6", - "listr2": "^5.0.5", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-inspect": "^1.12.2", - "pidtree": "^0.6.0", - "string-argv": "^0.3.1", - "yaml": "^2.1.3" + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.3.0.tgz", + "integrity": "sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ==", + "dev": true, + "dependencies": { + "chalk": "5.3.0", + "commander": "11.0.0", + "debug": "4.3.4", + "execa": "7.2.0", + "lilconfig": "2.1.0", + "listr2": "6.6.1", + "micromatch": "4.0.5", + "pidtree": "0.6.0", + "string-argv": "0.3.2", + "yaml": "2.3.1" }, "bin": { "lint-staged": "bin/lint-staged.js" }, "engines": { - "node": "^14.13.1 || >=16.0.0" + "node": "^16.14.0 || >=18.0.0" }, "funding": { "url": "https://opencollective.com/lint-staged" } }, + "node_modules/lint-staged/node_modules/ansi-escapes": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", + "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", + "dev": true, + "dependencies": { + "type-fest": "^1.0.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/lint-staged/node_modules/cli-truncate": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", @@ -16543,29 +16592,29 @@ } }, "node_modules/lint-staged/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", + "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", "dev": true, "engines": { - "node": "^12.20.0 || >=14" + "node": ">=16" } }, - "node_modules/lint-staged/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "node_modules/lint-staged/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", "dev": true }, "node_modules/lint-staged/node_modules/execa": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", - "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", "dev": true, "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.1", - "human-signals": "^3.0.1", + "human-signals": "^4.3.0", "is-stream": "^3.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^5.1.0", @@ -16574,7 +16623,7 @@ "strip-final-newline": "^3.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" }, "funding": { "url": "https://github.com/sindresorhus/execa?sponsor=1" @@ -16593,12 +16642,12 @@ } }, "node_modules/lint-staged/node_modules/human-signals": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", - "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", "dev": true, "engines": { - "node": ">=12.20.0" + "node": ">=14.18.0" } }, "node_modules/lint-staged/node_modules/is-fullwidth-code-point": { @@ -16626,22 +16675,20 @@ } }, "node_modules/lint-staged/node_modules/listr2": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-5.0.7.tgz", - "integrity": "sha512-MD+qXHPmtivrHIDRwPYdfNkrzqDiuaKU/rfBcec3WMyMF3xylQj3jMq344OtvQxz7zaCFViRAeqlr2AFhPvXHw==", + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-6.6.1.tgz", + "integrity": "sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==", "dev": true, "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.19", - "log-update": "^4.0.0", - "p-map": "^4.0.0", + "cli-truncate": "^3.1.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^5.0.1", "rfdc": "^1.3.0", - "rxjs": "^7.8.0", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" + "wrap-ansi": "^8.1.0" }, "engines": { - "node": "^14.13.1 || >=16.0.0" + "node": ">=16.0.0" }, "peerDependencies": { "enquirer": ">= 2.3.0 < 3" @@ -16652,59 +16699,25 @@ } } }, - "node_modules/lint-staged/node_modules/listr2/node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "node_modules/lint-staged/node_modules/log-update": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz", + "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==", "dev": true, "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" + "ansi-escapes": "^5.0.0", + "cli-cursor": "^4.0.0", + "slice-ansi": "^5.0.0", + "strip-ansi": "^7.0.1", + "wrap-ansi": "^8.0.1" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lint-staged/node_modules/listr2/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/lint-staged/node_modules/listr2/node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lint-staged/node_modules/listr2/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/lint-staged/node_modules/mimic-fn": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", @@ -16759,6 +16772,46 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lint-staged/node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/restore-cursor/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/lint-staged/node_modules/restore-cursor/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/lint-staged/node_modules/slice-ansi": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", @@ -16775,16 +16828,19 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/lint-staged/node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "node_modules/lint-staged/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/lint-staged/node_modules/strip-final-newline": { @@ -16799,50 +16855,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lint-staged/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/lint-staged/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/lint-staged/node_modules/wrap-ansi/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lint-staged/node_modules/yaml": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz", - "integrity": "sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", + "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", "dev": true, "engines": { "node": ">= 14" @@ -16983,6 +17011,16 @@ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, + "node_modules/lodash.escape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", + "integrity": "sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==" + }, "node_modules/lodash.flow": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", @@ -16993,6 +17031,11 @@ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" }, + "node_modules/lodash.invokemap": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.invokemap/-/lodash.invokemap-4.6.0.tgz", + "integrity": "sha512-CfkycNtMqgUlfjfdh2BhKO/ZXrP8ePOX5lEU/g0R3ItJcnuxWDwokMGKx1hWcfOikmyOVx6X9IwWnDGlgKl61w==" + }, "node_modules/lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", @@ -17030,11 +17073,21 @@ "resolved": "https://registry.npmjs.org/lodash.pickby/-/lodash.pickby-4.6.0.tgz", "integrity": "sha512-AZV+GsS/6ckvPOVQPXSiFFacKvKB4kOQu6ynt9wz0F3LO4R9Ij4K1ddYsIytDpSgLz88JHd9P+oaLeej5/Sl7Q==" }, + "node_modules/lodash.pullall": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.pullall/-/lodash.pullall-4.2.0.tgz", + "integrity": "sha512-VhqxBKH0ZxPpLhiu68YD1KnHmbhQJQctcipvmFnqIBDYzcIHzf3Zpu0tpeOKtR4x76p9yohc506eGdOjTmyIBg==" + }, "node_modules/lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" }, + "node_modules/lodash.uniqby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", + "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==" + }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -17170,9 +17223,9 @@ "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==" }, "node_modules/lz-string": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", - "integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true, "bin": { "lz-string": "bin/bin.js" @@ -17201,9 +17254,9 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -17244,9 +17297,9 @@ } }, "node_modules/marked": { - "version": "4.2.12", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.12.tgz", - "integrity": "sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", "bin": { "marked": "bin/marked.js" }, @@ -17470,11 +17523,11 @@ } }, "node_modules/memfs": { - "version": "3.4.13", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.13.tgz", - "integrity": "sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", "dependencies": { - "fs-monkey": "^1.0.3" + "fs-monkey": "^1.0.4" }, "engines": { "node": ">= 4.0.0" @@ -17712,9 +17765,9 @@ } }, "node_modules/mini-css-extract-plugin": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.2.tgz", - "integrity": "sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw==", + "version": "2.7.6", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", + "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", "dependencies": { "schema-utils": "^4.0.0" }, @@ -17761,14 +17814,14 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dependencies": { "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", + "ajv": "^8.9.0", "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" + "ajv-keywords": "^5.1.0" }, "engines": { "node": ">= 12.13.0" @@ -17800,12 +17853,9 @@ } }, "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "node_modules/mkdirp": { "version": "0.5.6", @@ -17824,9 +17874,9 @@ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" }, "node_modules/mobx": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.8.0.tgz", - "integrity": "sha512-+o/DrHa4zykFMSKfS8Z+CPSEg5LW9tSNGTuN8o6MF1GKxlfkSHSeJn5UtgxvPkGgaouplnrLXCF+duAsmm6FHQ==", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.10.2.tgz", + "integrity": "sha512-B1UGC3ieK3boCjnMEcZSwxqRDMdzX65H/8zOHbuTY8ZhvrIjTUoLRR2TP2bPqIgYRfb3+dUigu8yMZufNjn0LQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mobx" @@ -17857,9 +17907,9 @@ } }, "node_modules/mobx-react-lite": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-3.4.0.tgz", - "integrity": "sha512-bRuZp3C0itgLKHu/VNxi66DN/XVkQG7xtoBVWxpvC5FhAqbOCP21+nPhULjnzEqd7xBMybp6KwytdUpZKEgpIQ==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-3.4.3.tgz", + "integrity": "sha512-NkJREyFTSUXR772Qaai51BnE1voWx56LOL80xG7qkZr6vo8vEaLF3sz1JNUVh+rxmUzxYaqOhfuxTfqUh0FXUg==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mobx" @@ -17878,9 +17928,9 @@ } }, "node_modules/monaco-editor": { - "version": "0.36.1", - "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.36.1.tgz", - "integrity": "sha512-/CaclMHKQ3A6rnzBzOADfwdSJ25BFoFT0Emxsc4zYVyav5SkK9iA6lEtIeuN/oRYbwPgviJT+t3l+sjFa28jYg==", + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.44.0.tgz", + "integrity": "sha512-5SmjNStN6bSuSE5WPT2ZV+iYn1/yI9sd4Igtk23ChvqB7kDk9lZbB9F5frsuvpB+2njdIeGGFf2G4gbE6rCC9Q==", "peer": true }, "node_modules/mrmime": { @@ -17922,9 +17972,15 @@ } }, "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -17972,9 +18028,9 @@ } }, "node_modules/node-abi": { - "version": "3.33.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.33.0.tgz", - "integrity": "sha512-7GGVawqyHF4pfd0YFybhv/eM9JwTtPqx0mAanQ146O3FlSh3pA24zf9IRQTOsfTSqXTNzPSP5iagAJ94jjuVog==", + "version": "3.51.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.51.0.tgz", + "integrity": "sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA==", "dependencies": { "semver": "^7.3.5" }, @@ -18019,9 +18075,9 @@ } }, "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -18150,9 +18206,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" }, "node_modules/normalize-path": { "version": "3.0.0", @@ -18209,9 +18265,9 @@ } }, "node_modules/nwsapi": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", - "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", "dev": true }, "node_modules/oas-kit-common": { @@ -18301,9 +18357,9 @@ } }, "node_modules/oas-resolver/node_modules/yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -18360,9 +18416,9 @@ } }, "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -18408,15 +18464,16 @@ } }, "node_modules/object.getownpropertydescriptors": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", - "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz", + "integrity": "sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==", "dev": true, "dependencies": { - "array.prototype.reduce": "^1.0.5", + "array.prototype.reduce": "^1.0.6", "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "safe-array-concat": "^1.0.0" }, "engines": { "node": ">= 0.8" @@ -18518,17 +18575,17 @@ } }, "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "devOptional": 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", - "word-wrap": "^1.2.3" + "type-check": "^0.4.0" }, "engines": { "node": ">= 0.8.0" @@ -18632,9 +18689,9 @@ } }, "node_modules/package-json/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -18645,9 +18702,9 @@ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" }, "node_modules/papaparse": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.4.0.tgz", - "integrity": "sha512-ZBQABWG09p+u8rFoJVl/GhgxZ5zy9Zh1Lu/LVc7VX5T4nljjC14/YTcpebYwqP218B9X307eBOP7Tuhoqv7v7w==" + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.4.1.tgz", + "integrity": "sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw==" }, "node_modules/param-case": { "version": "3.0.4", @@ -18896,9 +18953,9 @@ } }, "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "dev": true, "engines": { "node": ">= 6" @@ -19058,9 +19115,9 @@ } }, "node_modules/postcss": { - "version": "8.4.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", - "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "funding": [ { "type": "opencollective", @@ -19069,10 +19126,14 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -19183,12 +19244,12 @@ } }, "node_modules/postcss-loader": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.2.tgz", - "integrity": "sha512-fUJzV/QH7NXUAqV8dWJ9Lg4aTkDCezpTS5HgJ2DvqznexTbSTxgi/dTECvTZ15BwKTtk8G/bqI/QTu2HPd3ZCg==", + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.3.tgz", + "integrity": "sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA==", "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", + "cosmiconfig": "^8.2.0", + "jiti": "^1.18.2", "semver": "^7.3.8" }, "engines": { @@ -19203,6 +19264,31 @@ "webpack": "^5.0.0" } }, + "node_modules/postcss-loader/node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/postcss-merge-idents": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz", @@ -19636,9 +19722,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", - "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -19648,9 +19734,9 @@ } }, "node_modules/postcss-sort-media-queries": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.3.0.tgz", - "integrity": "sha512-jAl8gJM2DvuIJiI9sL1CuiHtKM4s5aEIomkU8G3LFvbP+p8i7Sz8VV63uieTgoewGqKbi+hxBTiOKJlB35upCg==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.4.1.tgz", + "integrity": "sha512-QDESFzDDGKgpiIh4GYXsSy6sek2yAwQx1JASl5AxBtU1Lq2JfKBljIPNdil989NcSKRQX1ToiaKphImtBuhXWw==", "dependencies": { "sort-css-media-queries": "2.1.0" }, @@ -19707,9 +19793,9 @@ } }, "node_modules/postman-collection": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-4.1.7.tgz", - "integrity": "sha512-fMICmDa6megCH/jKq66MZVcR26wrSn1G/rjIkqrtdB6Df4u/I+XLRbWueQnz91Jwm3FR+su1refy4gwIjLLGLg==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-4.2.1.tgz", + "integrity": "sha512-DFLt3/yu8+ldtOTIzmBUctoupKJBOVK4NZO0t68K2lIir9smQg7OdQTBjOXYy+PDh7u0pSDvD66tm93eBHEPHA==", "dependencies": { "@faker-js/faker": "5.5.3", "file-type": "3.9.0", @@ -19720,24 +19806,13 @@ "mime-format": "2.0.1", "mime-types": "2.1.35", "postman-url-encoder": "3.0.5", - "semver": "7.3.8", + "semver": "7.5.4", "uuid": "8.3.2" }, "engines": { "node": ">=10" } }, - "node_modules/postman-collection/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/postman-url-encoder": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/postman-url-encoder/-/postman-url-encoder-3.0.5.tgz", @@ -19792,16 +19867,16 @@ } }, "node_modules/prettier": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", - "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", + "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", "dev": true, "peer": true, "bin": { - "prettier": "bin-prettier.js" + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=10.13.0" + "node": ">=14" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" @@ -19953,12 +20028,9 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "dependencies": { - "xtend": "^4.0.0" - }, + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.4.0.tgz", + "integrity": "sha512-9t5qARVofg2xQqKtytzt+lZ4d1Qvj8t5B8fEwXK6qOfgRLgH/b13QlgEyDh033NOS31nXeFbYv7CLUDG1CeifQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -20024,9 +20096,9 @@ } }, "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "engines": { "node": ">=6" } @@ -20089,15 +20161,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "engines": { - "node": ">=0.4.x" - } - }, "node_modules/querystring-es3": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", @@ -20186,6 +20249,17 @@ "node": ">= 0.8" } }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/raw-loader": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", @@ -20206,9 +20280,9 @@ } }, "node_modules/raw-loader/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -20409,33 +20483,9 @@ "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" }, "node_modules/react-fast-compare": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", - "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" - }, - "node_modules/react-flow-renderer": { - "version": "10.3.17", - "resolved": "https://registry.npmjs.org/react-flow-renderer/-/react-flow-renderer-10.3.17.tgz", - "integrity": "sha512-bywiqVErlh5kCDqw3x0an5Ur3mT9j9CwJsDwmhmz4i1IgYM1a0SPqqEhClvjX+s5pU4nHjmVaGXWK96pwsiGcQ==", - "deprecated": "react-flow-renderer has been renamed to reactflow, please use this package from now on https://reactflow.dev/docs/guides/migrate-to-v11/", - "optional": true, - "dependencies": { - "@babel/runtime": "^7.18.9", - "@types/d3": "^7.4.0", - "@types/resize-observer-browser": "^0.1.7", - "classcat": "^5.0.3", - "d3-drag": "^3.0.0", - "d3-selection": "^3.0.0", - "d3-zoom": "^3.0.0", - "zustand": "^3.7.2" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "react": "16 || 17 || 18", - "react-dom": "16 || 17 || 18" - } + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==" }, "node_modules/react-full-screen": { "version": "1.1.1", @@ -20669,21 +20719,21 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/react-tabs": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/react-tabs/-/react-tabs-3.2.3.tgz", - "integrity": "sha512-jx325RhRVnS9DdFbeF511z0T0WEqEoMl1uCE3LoZ6VaZZm7ytatxbum0B8bCTmaiV0KsU+4TtLGTGevCic7SWg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/react-tabs/-/react-tabs-4.3.0.tgz", + "integrity": "sha512-2GfoG+f41kiBIIyd3gF+/GRCCYtamC8/2zlAcD8cqQmqI9Q+YVz7fJLHMmU9pXDVYYHpJeCgUSBJju85vu5q8Q==", "dependencies": { "clsx": "^1.1.0", "prop-types": "^15.5.0" }, "peerDependencies": { - "react": "^16.3.0 || ^17.0.0-0" + "react": "^16.8.0 || ^17.0.0-0 || ^18.0.0" } }, "node_modules/react-textarea-autosize": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.4.1.tgz", - "integrity": "sha512-aD2C+qK6QypknC+lCMzteOdIjoMbNlgSFmJjCV+DrfTPwp59i/it9mMNf2HDzvRjQgKAyBDPyLJhcrzElf2U4Q==", + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.3.tgz", + "integrity": "sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==", "dependencies": { "@babel/runtime": "^7.20.13", "use-composed-ref": "^1.3.0", @@ -20744,9 +20794,9 @@ } }, "node_modules/readable-stream": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.1.tgz", - "integrity": "sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -20808,11 +20858,11 @@ } }, "node_modules/redoc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/redoc/-/redoc-2.0.0.tgz", - "integrity": "sha512-rU8iLdAkT89ywOkYk66Mr+IofqaMASlRvTew0dJvopCORMIPUcPMxjlJbJNC6wsn2vvMnpUFLQ/0ISDWn9BWag==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/redoc/-/redoc-2.1.3.tgz", + "integrity": "sha512-d7F9qLLxaiFW4GC03VkwlX9wuRIpx9aiIIf3o6mzMnqPfhxrn2IRKGndrkJeVdItgCfmg9jXZiFEowm60f1meQ==", "dependencies": { - "@redocly/openapi-core": "^1.0.0-beta.104", + "@redocly/openapi-core": "^1.0.0-rc.2", "classnames": "^2.3.1", "decko": "^1.2.0", "dompurify": "^2.2.8", @@ -20822,16 +20872,15 @@ "mark.js": "^8.11.1", "marked": "^4.0.15", "mobx-react": "^7.2.0", - "openapi-sampler": "^1.3.0", + "openapi-sampler": "^1.3.1", "path-browserify": "^1.0.1", "perfect-scrollbar": "^1.5.5", "polished": "^4.1.3", "prismjs": "^1.27.0", "prop-types": "^15.7.2", - "react-tabs": "^3.2.2", + "react-tabs": "^4.3.0", "slugify": "~1.4.7", "stickyfill": "^1.1.1", - "style-loader": "^3.3.1", "swagger2openapi": "^7.0.6", "url-template": "^2.0.8" }, @@ -20842,9 +20891,9 @@ "peerDependencies": { "core-js": "^3.1.4", "mobx": "^6.0.4", - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0", - "styled-components": "^4.1.1 || ^5.1.1" + "react": "^16.8.4 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.4 || ^17.0.0 || ^18.0.0", + "styled-components": "^4.1.1 || ^5.1.1 || ^6.0.5" } }, "node_modules/redoc/node_modules/slugify": { @@ -20855,21 +20904,6 @@ "node": ">=8.0.0" } }, - "node_modules/redoc/node_modules/style-loader": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", - "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, "node_modules/reftools": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/reftools/-/reftools-1.1.9.tgz", @@ -20884,9 +20918,9 @@ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", "dependencies": { "regenerate": "^1.4.2" }, @@ -20895,27 +20929,27 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" }, "node_modules/regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", "dependencies": { "@babel/runtime": "^7.8.4" } }, "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "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.1.3", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" }, "engines": { "node": ">= 0.4" @@ -20924,22 +20958,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "devOptional": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, "node_modules/regexpu-core": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.1.tgz", - "integrity": "sha512-nCOzW2V/X15XpLsK2rlgdwrysrBq+AauCn+omItIz4R1pIcmeot5zvjdmOBRLzEH/CkC6IxMJVmxDe3QcMuNVQ==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "dependencies": { "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", @@ -21144,19 +21166,6 @@ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" }, - "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/remark-mdx/node_modules/@babel/plugin-syntax-jsx": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", @@ -21168,10 +21177,15 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/remark-mdx/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, "node_modules/remark-mdx/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "bin": { "semver": "bin/semver" } @@ -21402,11 +21416,11 @@ "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" }, "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -21536,9 +21550,9 @@ } }, "node_modules/rtl-detect": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", - "integrity": "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.1.2.tgz", + "integrity": "sha512-PGMBq03+TTG/p/cRB7HCLKJ1MgDIi07+QU1faSjiYRfmY5UsAttV9Hs08jDAHVwcOwmVLcSJkpwyfXszVjWfIQ==" }, "node_modules/rtlcss": { "version": "3.5.0", @@ -21653,13 +21667,31 @@ } }, "node_modules/rxjs": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", - "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dependencies": { "tslib": "^2.1.0" } }, + "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-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -21704,9 +21736,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sanitize-html": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.10.0.tgz", - "integrity": "sha512-JqdovUd81dG4k87vZt6uA6YhDfWkUGruUu/aPmXLxXi45gZExnt9Bnw/qeQU8oGf82vPyaE0vO4aH0PbobB9JQ==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.11.0.tgz", + "integrity": "sha512-BG68EDHRaGKqlsNjJ2xUB7gpInPA8gVx/mvjO743hZaeMCZ2DwzW7xvsqZ+KNU4QKwj86HJ3uu2liISf2qBBUA==", "dependencies": { "deepmerge": "^4.2.2", "escape-string-regexp": "^4.0.0", @@ -21717,9 +21749,9 @@ } }, "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" }, "node_modules/saxes": { "version": "5.0.1", @@ -21770,6 +21802,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/search-insights": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.10.0.tgz", + "integrity": "sha512-pQGrOE56QuTRmq4NzliRZe9rv914hBMBjOviuDliDHoIhmBGoyZRlFsPd4RprGGNC4PKdD2Jz54YN4Cmkb44mA==", + "peer": true + }, "node_modules/section-matter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", @@ -21793,10 +21831,11 @@ "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" }, "node_modules/selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", "dependencies": { + "@types/node-forge": "^1.3.0", "node-forge": "^1" }, "engines": { @@ -21804,9 +21843,9 @@ } }, "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -21829,9 +21868,9 @@ } }, "node_modules/semver-diff/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -22032,6 +22071,34 @@ "node": ">= 0.8.0" } }, + "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==", + "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/set-harmonic-interval": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/set-harmonic-interval/-/set-harmonic-interval-1.0.1.tgz", @@ -22132,9 +22199,9 @@ } }, "node_modules/shell-quote": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.0.tgz", - "integrity": "sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -22284,13 +22351,13 @@ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, "node_modules/sirv": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", - "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", + "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", "dependencies": { "@polka/url": "^1.0.0-next.20", "mrmime": "^1.0.0", - "totalist": "^1.0.0" + "totalist": "^3.0.0" }, "engines": { "node": ">= 10" @@ -22347,9 +22414,9 @@ } }, "node_modules/slugify": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.5.tgz", - "integrity": "sha512-8mo9bslnBO3tr5PEVFzMPIWwWnipGS0xVbYf65zxDqfNwmzYn1LpiKNrR6DlClusuvo+hDHd1zKpmfAe83NQSQ==", + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz", + "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==", "engines": { "node": ">=8.0.0" } @@ -22404,9 +22471,9 @@ "deprecated": "Please use @jridgewell/sourcemap-codec instead" }, "node_modules/space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -22472,9 +22539,9 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", "dev": true, "dependencies": { "asn1": "~0.2.3", @@ -22591,9 +22658,9 @@ } }, "node_modules/std-env": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.2.tgz", - "integrity": "sha512-uUZI65yrV2Qva5gqE0+A7uVAvO40iPo6jGhs7s8keRfHCmtg+uB2X6EiLGCI9IgL1J17xGhvoOqSz79lzICPTA==" + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.4.3.tgz", + "integrity": "sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==" }, "node_modules/stickyfill": { "version": "1.1.1", @@ -22641,9 +22708,9 @@ } }, "node_modules/string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", "dev": true, "engines": { "node": ">=0.6.19" @@ -22690,9 +22757,9 @@ } }, "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -22703,29 +22770,46 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, + "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.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "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.1.4", - "es-abstract": "^1.20.4" + "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.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "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.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -22895,9 +22979,9 @@ } }, "node_modules/stylis": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", - "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", + "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" }, "node_modules/supports-color": { "version": "7.2.0", @@ -23141,9 +23225,9 @@ } }, "node_modules/swagger2openapi/node_modules/yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -23245,12 +23329,12 @@ } }, "node_modules/terser": { - "version": "5.16.5", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.5.tgz", - "integrity": "sha512-qcwfg4+RZa3YvlFh0qjifnzBHjKGNbtDo9yivMqMFDy9Q6FSaQWSB/j1xKhsoUFJIqDOM3TsN6D5xbrMrFcHbg==", + "version": "5.24.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz", + "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==", "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -23262,15 +23346,15 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", - "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.14", + "@jridgewell/trace-mapping": "^0.3.17", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.14.1" + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" }, "engines": { "node": ">= 10.13.0" @@ -23308,9 +23392,9 @@ } }, "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -23478,24 +23562,35 @@ } }, "node_modules/totalist": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", - "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", "engines": { "node": ">=6" } }, "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", "dev": true, "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" }, "engines": { - "node": ">=0.8" + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" } }, "node_modules/tr46": { @@ -23545,9 +23640,9 @@ "integrity": "sha512-DF8+Cf/FJJnPRxwz8agCoDelQXKZWQOS/gnnwx01nZ106tPJdB3BgJ9QTtLwXgR82D8O+nTjuZzWgf0Rg4vuRA==" }, "node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/tsutils": { "version": "3.21.0", @@ -23636,6 +23731,57 @@ "node": ">= 0.6" } }, + "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", @@ -23659,22 +23805,22 @@ } }, "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/ua-parser-js": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.34.tgz", - "integrity": "sha512-cJMeh/eOILyGu0ejgTKB95yKT3zOenSe9UGE3vj6WfiOwgGYnmATUsnDixMFvdU+rNMvWih83hrUP8VwhF9yXQ==", + "version": "1.0.37", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.37.tgz", + "integrity": "sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==", "funding": [ { "type": "opencollective", @@ -23683,6 +23829,10 @@ { "type": "paypal", "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" } ], "engines": { @@ -23704,6 +23854,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, "node_modules/unherit": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", @@ -23917,9 +24072,9 @@ } }, "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "engines": { "node": ">= 10.0.0" } @@ -23951,9 +24106,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "funding": [ { "type": "opencollective", @@ -23962,6 +24117,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { @@ -23969,7 +24128,7 @@ "picocolors": "^1.0.0" }, "bin": { - "browserslist-lint": "cli.js" + "update-browserslist-db": "cli.js" }, "peerDependencies": { "browserslist": ">= 4.21.0" @@ -24120,12 +24279,12 @@ "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==" }, "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", + "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" + "punycode": "^1.4.1", + "qs": "^6.11.2" } }, "node_modules/url-loader": { @@ -24155,9 +24314,9 @@ } }, "node_modules/url-loader/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -24198,9 +24357,23 @@ "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==" }, "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" + }, + "node_modules/url/node_modules/qs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/use-composed-ref": { "version": "1.3.0", @@ -24317,6 +24490,12 @@ "node": ">=10.12.0" } }, + "node_modules/v8-to-istanbul/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, "node_modules/v8-to-istanbul/node_modules/source-map": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", @@ -24505,9 +24684,9 @@ } }, "node_modules/web-namespaces": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", - "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -24531,21 +24710,21 @@ } }, "node_modules/webpack": { - "version": "5.75.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", - "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", + "version": "5.89.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", + "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", "dependencies": { "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", + "acorn-import-assertions": "^1.9.0", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", @@ -24554,9 +24733,9 @@ "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", + "schema-utils": "^3.2.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", + "terser-webpack-plugin": "^5.3.7", "watchpack": "^2.4.0", "webpack-sources": "^3.2.3" }, @@ -24577,19 +24756,26 @@ } }, "node_modules/webpack-bundle-analyzer": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.8.0.tgz", - "integrity": "sha512-ZzoSBePshOKhr+hd8u6oCkZVwpVaXgpw23ScGLFpR6SjYI7+7iIWYarjN6OEYOfRt8o7ZyZZQk0DuMizJ+LEIg==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.1.tgz", + "integrity": "sha512-jnd6EoYrf9yMxCyYDPj8eutJvtjQNp8PHmni/e/ulydHBWhT5J3menXt3HEkScsu9YqMAcG4CfFjs3rj5pVU1w==", "dependencies": { "@discoveryjs/json-ext": "0.5.7", "acorn": "^8.0.4", "acorn-walk": "^8.0.0", - "chalk": "^4.1.0", "commander": "^7.2.0", + "escape-string-regexp": "^4.0.0", "gzip-size": "^6.0.0", - "lodash": "^4.17.20", + "is-plain-object": "^5.0.0", + "lodash.debounce": "^4.0.8", + "lodash.escape": "^4.0.1", + "lodash.flatten": "^4.4.0", + "lodash.invokemap": "^4.6.0", + "lodash.pullall": "^4.2.0", + "lodash.uniqby": "^4.7.0", "opener": "^1.5.2", - "sirv": "^1.0.7", + "picocolors": "^1.0.0", + "sirv": "^2.0.3", "ws": "^7.3.1" }, "bin": { @@ -24600,9 +24786,9 @@ } }, "node_modules/webpack-bundle-analyzer/node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", + "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==", "engines": { "node": ">=0.4.0" } @@ -24677,14 +24863,14 @@ } }, "node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dependencies": { "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", + "ajv": "^8.9.0", "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" + "ajv-keywords": "^5.1.0" }, "engines": { "node": ">= 12.13.0" @@ -24695,9 +24881,9 @@ } }, "node_modules/webpack-dev-server": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", - "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", + "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", "dependencies": { "@types/bonjour": "^3.5.9", "@types/connect-history-api-fallback": "^1.3.5", @@ -24705,7 +24891,7 @@ "@types/serve-index": "^1.9.1", "@types/serve-static": "^1.13.10", "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", + "@types/ws": "^8.5.5", "ansi-html-community": "^0.0.8", "bonjour-service": "^1.0.11", "chokidar": "^3.5.3", @@ -24718,6 +24904,7 @@ "html-entities": "^2.3.2", "http-proxy-middleware": "^2.0.3", "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", "open": "^8.0.9", "p-retry": "^4.5.0", "rimraf": "^3.0.2", @@ -24727,7 +24914,7 @@ "sockjs": "^0.3.24", "spdy": "^4.0.2", "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" + "ws": "^8.13.0" }, "bin": { "webpack-dev-server": "bin/webpack-dev-server.js" @@ -24743,6 +24930,9 @@ "webpack": "^4.37.0 || ^5.0.0" }, "peerDependenciesMeta": { + "webpack": { + "optional": true + }, "webpack-cli": { "optional": true } @@ -24780,14 +24970,14 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dependencies": { "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", + "ajv": "^8.9.0", "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" + "ajv-keywords": "^5.1.0" }, "engines": { "node": ">= 12.13.0" @@ -24798,9 +24988,9 @@ } }, "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.1.tgz", - "integrity": "sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", "engines": { "node": ">=10.0.0" }, @@ -24818,11 +25008,12 @@ } }, "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", "dependencies": { "clone-deep": "^4.0.1", + "flat": "^5.0.2", "wildcard": "^2.0.0" }, "engines": { @@ -24838,9 +25029,9 @@ } }, "node_modules/webpack/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -24901,10 +25092,22 @@ "iconv-lite": "0.4.24" } }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" + "version": "3.6.19", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.19.tgz", + "integrity": "sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw==" }, "node_modules/whatwg-mimetype": { "version": "2.3.0", @@ -24972,16 +25175,15 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "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==", "dependencies": { "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "call-bind": "^1.0.4", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -25005,24 +25207,15 @@ } }, "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==" }, "node_modules/wolfy87-eventemitter": { "version": "5.2.9", "resolved": "https://registry.npmjs.org/wolfy87-eventemitter/-/wolfy87-eventemitter-5.2.9.tgz", "integrity": "sha512-P+6vtWyuDw+MB01X7UeF8TaHBvbCovf4HPEMF/SV7BdDc1SMTiBy13SRD71lQh4ExFTG1d/WNzDGDCyOKSMblw==" }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "devOptional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/wrap-ansi": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", @@ -25062,9 +25255,9 @@ } }, "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -25289,18747 +25482,5 @@ "url": "https://github.com/sponsors/wooorm" } } - }, - "dependencies": { - "@adobe/css-tools": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.2.0.tgz", - "integrity": "sha512-E09FiIft46CmH5Qnjb0wsW54/YQd69LsxeKUOWawmws1XWvyFGURnAChH0mlr7YPFR1ofwvUQfcL0J3lMxXqPA==", - "dev": true - }, - "@algolia/autocomplete-core": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.7.4.tgz", - "integrity": "sha512-daoLpQ3ps/VTMRZDEBfU8ixXd+amZcNJ4QSP3IERGyzqnL5Ch8uSRFt/4G8pUvW9c3o6GA4vtVv4I4lmnkdXyg==", - "requires": { - "@algolia/autocomplete-shared": "1.7.4" - } - }, - "@algolia/autocomplete-preset-algolia": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.4.tgz", - "integrity": "sha512-s37hrvLEIfcmKY8VU9LsAXgm2yfmkdHT3DnA3SgHaY93yjZ2qL57wzb5QweVkYuEBZkT2PIREvRoLXC2sxTbpQ==", - "requires": { - "@algolia/autocomplete-shared": "1.7.4" - } - }, - "@algolia/autocomplete-shared": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.4.tgz", - "integrity": "sha512-2VGCk7I9tA9Ge73Km99+Qg87w0wzW4tgUruvWAn/gfey1ZXgmxZtyIRBebk35R1O8TbK77wujVtCnpsGpRy1kg==" - }, - "@algolia/cache-browser-local-storage": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.16.0.tgz", - "integrity": "sha512-jVrk0YB3tjOhD5/lhBtYCVCeLjZmVpf2kdi4puApofytf/R0scjWz0GdozlW4HhU+Prxmt/c9ge4QFjtv5OAzQ==", - "requires": { - "@algolia/cache-common": "4.16.0" - } - }, - "@algolia/cache-common": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.16.0.tgz", - "integrity": "sha512-4iHjkSYQYw46pITrNQgXXhvUmcekI8INz1m+SzmqLX8jexSSy4Ky4zfGhZzhhhLHXUP3+x/PK/c0qPjxEvRwKQ==" - }, - "@algolia/cache-in-memory": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.16.0.tgz", - "integrity": "sha512-p7RYykvA6Ip6QENxrh99nOD77otVh1sJRivcgcVpnjoZb5sIN3t33eUY1DpB9QSBizcrW+qk19rNkdnZ43a+PQ==", - "requires": { - "@algolia/cache-common": "4.16.0" - } - }, - "@algolia/client-account": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.16.0.tgz", - "integrity": "sha512-eydcfpdIyuWoKgUSz5iZ/L0wE/Wl7958kACkvTHLDNXvK/b8Z1zypoJavh6/km1ZNQmFpeYS2jrmq0kUSFn02w==", - "requires": { - "@algolia/client-common": "4.16.0", - "@algolia/client-search": "4.16.0", - "@algolia/transporter": "4.16.0" - } - }, - "@algolia/client-analytics": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.16.0.tgz", - "integrity": "sha512-cONWXH3BfilgdlCofUm492bJRWtpBLVW/hsUlfoFtiX1u05xoBP7qeiDwh9RR+4pSLHLodYkHAf5U4honQ55Qg==", - "requires": { - "@algolia/client-common": "4.16.0", - "@algolia/client-search": "4.16.0", - "@algolia/requester-common": "4.16.0", - "@algolia/transporter": "4.16.0" - } - }, - "@algolia/client-common": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.16.0.tgz", - "integrity": "sha512-QVdR4019ukBH6f5lFr27W60trRxQF1SfS1qo0IP6gjsKhXhUVJuHxOCA6ArF87jrNkeuHEoRoDU+GlvaecNo8g==", - "requires": { - "@algolia/requester-common": "4.16.0", - "@algolia/transporter": "4.16.0" - } - }, - "@algolia/client-personalization": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.16.0.tgz", - "integrity": "sha512-irtLafssDGPuhYqIwxqOxiWlVYvrsBD+EMA1P9VJtkKi3vSNBxiWeQ0f0Tn53cUNdSRNEssfoEH84JL97SV2SQ==", - "requires": { - "@algolia/client-common": "4.16.0", - "@algolia/requester-common": "4.16.0", - "@algolia/transporter": "4.16.0" - } - }, - "@algolia/client-search": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.16.0.tgz", - "integrity": "sha512-xsfrAE1jO/JDh1wFrRz+alVyW+aA6qnkzmbWWWZWEgVF3EaFqzIf9r1l/aDtDdBtNTNhX9H3Lg31+BRtd5izQA==", - "requires": { - "@algolia/client-common": "4.16.0", - "@algolia/requester-common": "4.16.0", - "@algolia/transporter": "4.16.0" - } - }, - "@algolia/events": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", - "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" - }, - "@algolia/logger-common": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.16.0.tgz", - "integrity": "sha512-U9H8uCzSDuePJmbnjjTX21aPDRU6x74Tdq3dJmdYu2+pISx02UeBJm4kSgc9RW5jcR5j35G9gnjHY9Q3ngWbyQ==" - }, - "@algolia/logger-console": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.16.0.tgz", - "integrity": "sha512-+qymusiM+lPZKrkf0tDjCQA158eEJO2IU+Nr/sJ9TFyI/xkFPjNPzw/Qbc8Iy/xcOXGlc6eMgmyjtVQqAWq6UA==", - "requires": { - "@algolia/logger-common": "4.16.0" - } - }, - "@algolia/requester-browser-xhr": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.16.0.tgz", - "integrity": "sha512-gK+kvs6LHl/PaOJfDuwjkopNbG1djzFLsVBklGBsSU6h6VjFkxIpo6Qq80IK14p9cplYZfhfaL12va6Q9p3KVQ==", - "requires": { - "@algolia/requester-common": "4.16.0" - } - }, - "@algolia/requester-common": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.16.0.tgz", - "integrity": "sha512-3Zmcs/iMubcm4zqZ3vZG6Zum8t+hMWxGMzo0/uY2BD8o9q5vMxIYI0c4ocdgQjkXcix189WtZNkgjSOBzSbkdw==" - }, - "@algolia/requester-node-http": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.16.0.tgz", - "integrity": "sha512-L8JxM2VwZzh8LJ1Zb8TFS6G3icYsCKZsdWW+ahcEs1rGWmyk9SybsOe1MLnjonGBaqPWJkn9NjS7mRdjEmBtKA==", - "requires": { - "@algolia/requester-common": "4.16.0" - } - }, - "@algolia/transporter": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.16.0.tgz", - "integrity": "sha512-H9BVB2EAjT65w7XGBNf5drpsW39x2aSZ942j4boSAAJPPlLmjtj5IpAP7UAtsV8g9Beslonh0bLa1XGmE/P0BA==", - "requires": { - "@algolia/cache-common": "4.16.0", - "@algolia/logger-common": "4.16.0", - "@algolia/requester-common": "4.16.0" - } - }, - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz", - "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==" - }, - "@babel/core": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.0.tgz", - "integrity": "sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==", - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.21.0", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.21.0", - "@babel/helpers": "^7.21.0", - "@babel/parser": "^7.21.0", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.0", - "@babel/types": "^7.21.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/generator": { - "version": "7.21.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz", - "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", - "requires": { - "@babel/types": "^7.21.0", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "requires": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", - "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", - "requires": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.0.tgz", - "integrity": "sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-member-expression-to-functions": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/helper-split-export-declaration": "^7.18.6" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.0.tgz", - "integrity": "sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.3.1" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "requires": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", - "requires": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", - "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", - "requires": { - "@babel/types": "^7.21.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", - "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.2", - "@babel/types": "^7.21.2" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-replace-supers": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", - "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.20.7", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7" - } - }, - "@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "requires": { - "@babel/types": "^7.20.2" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", - "requires": { - "@babel/types": "^7.20.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" - }, - "@babel/helper-validator-option": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==" - }, - "@babel/helper-wrap-function": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", - "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", - "requires": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" - } - }, - "@babel/helpers": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", - "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", - "requires": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.0", - "@babel/types": "^7.21.0" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.2.tgz", - "integrity": "sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==" - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", - "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.7" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", - "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", - "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "requires": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz", - "integrity": "sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", - "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", - "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", - "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz", - "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz", - "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", - "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/template": "^7.20.7" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz", - "integrity": "sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz", - "integrity": "sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "requires": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", - "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", - "requires": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz", - "integrity": "sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==", - "requires": { - "@babel/helper-module-transforms": "^7.21.2", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-simple-access": "^7.20.2" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", - "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", - "requires": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-identifier": "^7.19.1" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", - "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz", - "integrity": "sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-constant-elements": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz", - "integrity": "sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz", - "integrity": "sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.21.0" - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "requires": { - "@babel/plugin-transform-react-jsx": "^7.18.6" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", - "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "regenerator-transform": "^0.15.1" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.21.0.tgz", - "integrity": "sha512-ReY6pxwSzEU0b3r2/T/VhqMKg/AkceBT19X0UptA3/tYi5Pe2eXgEUH+NNMC5nok6c6XQz5tyVTUpuezRfSMSg==", - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", - "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.0.tgz", - "integrity": "sha512-xo///XTPp3mDzTtrqXoBlK9eiAYW3wv9JXglcn/u1bi60RW11dEUxIgA8cbnDhutS1zacjMRmAwxE0gMklLnZg==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-typescript": "^7.20.0" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/preset-env": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", - "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", - "requires": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.20.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.20.2", - "@babel/plugin-transform-classes": "^7.20.2", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.20.2", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.19.6", - "@babel/plugin-transform-modules-commonjs": "^7.19.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.20.1", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/preset-react": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", - "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" - } - }, - "@babel/preset-typescript": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.21.0.tgz", - "integrity": "sha512-myc9mpoVA5m1rF8K8DgLEatOYFDpwC+RkMkjZ0Du6uI62YvDe8uxIEYVs/VCdSJ097nlALiU/yBC7//3nI+hNg==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.21.0", - "@babel/plugin-transform-typescript": "^7.21.0" - } - }, - "@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" - }, - "@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", - "requires": { - "regenerator-runtime": "^0.13.11" - } - }, - "@babel/runtime-corejs3": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.21.0.tgz", - "integrity": "sha512-TDD4UJzos3JJtM+tHX+w2Uc+KWj7GV+VKKFdMVd2Rx8sdA19hcc3P3AHFYd5LVOw+pYuSd5lICC3gm52B6Rwxw==", - "requires": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.11" - } - }, - "@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" - } - }, - "@babel/traverse": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.2.tgz", - "integrity": "sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw==", - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.21.1", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.2", - "@babel/types": "^7.21.2", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.2.tgz", - "integrity": "sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==", - "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "optional": true - }, - "@cypress/react": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@cypress/react/-/react-7.0.2.tgz", - "integrity": "sha512-TTV7XNMDOO9mZUFWiGbd44Od/jqMVX/QbHYKQmK1XT3nIVFs0EvKJuHJmwN7wxLOR/+6twtyX6vTD8z8XBTliQ==", - "dev": true, - "requires": {} - }, - "@cypress/request": { - "version": "2.88.11", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.11.tgz", - "integrity": "sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "http-signature": "~1.3.6", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "performance-now": "^2.1.0", - "qs": "~6.10.3", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^8.3.2" - }, - "dependencies": { - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - } - } - }, - "@cypress/webpack-dev-server": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@cypress/webpack-dev-server/-/webpack-dev-server-3.3.0.tgz", - "integrity": "sha512-jOXvKo4I7U89cdKtuoD98VR2PJpueKgHBMbX/uH++SojE0xlUji8n/EFyZUBW/Eds+yPC4keupF8y/ViywP4QQ==", - "dev": true, - "requires": { - "find-up": "6.3.0", - "fs-extra": "9.1.0", - "html-webpack-plugin-4": "npm:html-webpack-plugin@^4", - "html-webpack-plugin-5": "npm:html-webpack-plugin@^5", - "local-pkg": "0.4.1", - "speed-measure-webpack-plugin": "1.4.2", - "tslib": "^2.3.1", - "webpack-dev-server": "^4.7.4", - "webpack-merge": "^5.4.0" - } - }, - "@cypress/xvfb": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", - "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", - "dev": true, - "requires": { - "debug": "^3.1.0", - "lodash.once": "^4.1.1" - }, - "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" - } - } - } - }, - "@dbt-labs/react-dbt-dag": { - "version": "0.8.7", - "resolved": "https://npm.pkg.github.com/download/@dbt-labs/react-dbt-dag/0.8.7/927fdaa04ced1eca6c6a8505fa4c429df102ca29", - "integrity": "sha512-wGgbSPqCOENiIj5rc4fxCkKcT7GF2BuhgWkXg+UMvrwuaWKmvAh5UvsDRXjAJHT6l+JtxBvi6VVN5IbTLOW2LQ==", - "optional": true, - "requires": { - "classnames": "^2.3.1", - "dagre": "^0.8.5", - "graphlib": "^2.1.8", - "lodash": "^4.17.21", - "react-flow-renderer": "^10.3.8" - } - }, - "@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==" - }, - "@docsearch/css": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.3.3.tgz", - "integrity": "sha512-6SCwI7P8ao+se1TUsdZ7B4XzL+gqeQZnBc+2EONZlcVa0dVrk0NjETxozFKgMv0eEGH8QzP1fkN+A1rH61l4eg==" - }, - "@docsearch/react": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.3.3.tgz", - "integrity": "sha512-pLa0cxnl+G0FuIDuYlW+EBK6Rw2jwLw9B1RHIeS4N4s2VhsfJ/wzeCi3CWcs5yVfxLd5ZK50t//TMA5e79YT7Q==", - "requires": { - "@algolia/autocomplete-core": "1.7.4", - "@algolia/autocomplete-preset-algolia": "1.7.4", - "@docsearch/css": "3.3.3", - "algoliasearch": "^4.0.0" - } - }, - "@docusaurus/core": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.3.1.tgz", - "integrity": "sha512-0Jd4jtizqnRAr7svWaBbbrCCN8mzBNd2xFLoT/IM7bGfFie5y58oz97KzXliwiLY3zWjqMXjQcuP1a5VgCv2JA==", - "requires": { - "@babel/core": "^7.18.6", - "@babel/generator": "^7.18.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.18.6", - "@babel/preset-env": "^7.18.6", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.18.6", - "@babel/runtime": "^7.18.6", - "@babel/runtime-corejs3": "^7.18.6", - "@babel/traverse": "^7.18.8", - "@docusaurus/cssnano-preset": "2.3.1", - "@docusaurus/logger": "2.3.1", - "@docusaurus/mdx-loader": "2.3.1", - "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/utils": "2.3.1", - "@docusaurus/utils-common": "2.3.1", - "@docusaurus/utils-validation": "2.3.1", - "@slorber/static-site-generator-webpack-plugin": "^4.0.7", - "@svgr/webpack": "^6.2.1", - "autoprefixer": "^10.4.7", - "babel-loader": "^8.2.5", - "babel-plugin-dynamic-import-node": "^2.3.3", - "boxen": "^6.2.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "clean-css": "^5.3.0", - "cli-table3": "^0.6.2", - "combine-promises": "^1.1.0", - "commander": "^5.1.0", - "copy-webpack-plugin": "^11.0.0", - "core-js": "^3.23.3", - "css-loader": "^6.7.1", - "css-minimizer-webpack-plugin": "^4.0.0", - "cssnano": "^5.1.12", - "del": "^6.1.1", - "detect-port": "^1.3.0", - "escape-html": "^1.0.3", - "eta": "^2.0.0", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "html-minifier-terser": "^6.1.0", - "html-tags": "^3.2.0", - "html-webpack-plugin": "^5.5.0", - "import-fresh": "^3.3.0", - "leven": "^3.1.0", - "lodash": "^4.17.21", - "mini-css-extract-plugin": "^2.6.1", - "postcss": "^8.4.14", - "postcss-loader": "^7.0.0", - "prompts": "^2.4.2", - "react-dev-utils": "^12.0.1", - "react-helmet-async": "^1.3.0", - "react-loadable": "npm:@docusaurus/react-loadable@5.5.2", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.3.3", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.3.3", - "rtl-detect": "^1.0.4", - "semver": "^7.3.7", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.5", - "terser-webpack-plugin": "^5.3.3", - "tslib": "^2.4.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^6.0.1", - "webpack": "^5.73.0", - "webpack-bundle-analyzer": "^4.5.0", - "webpack-dev-server": "^4.9.3", - "webpack-merge": "^5.8.0", - "webpackbar": "^5.0.2" - }, - "dependencies": { - "css-loader": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz", - "integrity": "sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==", - "requires": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.19", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" - } - }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "requires": {} - }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "requires": {} - }, - "postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "requires": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "requires": { - "icss-utils": "^5.0.0" - } - } - } - }, - "@docusaurus/cssnano-preset": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.3.1.tgz", - "integrity": "sha512-7mIhAROES6CY1GmCjR4CZkUfjTL6B3u6rKHK0ChQl2d1IevYXq/k/vFgvOrJfcKxiObpMnE9+X6R2Wt1KqxC6w==", - "requires": { - "cssnano-preset-advanced": "^5.3.8", - "postcss": "^8.4.14", - "postcss-sort-media-queries": "^4.2.1", - "tslib": "^2.4.0" - } - }, - "@docusaurus/eslint-plugin": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/eslint-plugin/-/eslint-plugin-2.3.1.tgz", - "integrity": "sha512-xezO8YncV1EJi2+6ScBWHCjbgQfDpUQApd9T/Hw03rhwEV/WAk9oxbymsehLRvAG1k0/blB8Pb4PEo81qrdl3Q==", - "dev": true, - "requires": { - "@typescript-eslint/utils": "^5.30.5", - "tslib": "^2.4.0" - } - }, - "@docusaurus/logger": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.3.1.tgz", - "integrity": "sha512-2lAV/olKKVr9qJhfHFCaqBIl8FgYjbUFwgUnX76+cULwQYss+42ZQ3grHGFvI0ocN2X55WcYe64ellQXz7suqg==", - "requires": { - "chalk": "^4.1.2", - "tslib": "^2.4.0" - } - }, - "@docusaurus/lqip-loader": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/lqip-loader/-/lqip-loader-2.3.1.tgz", - "integrity": "sha512-pdZUh6FjvoVszGTaMHX4nhLfORdQ7ZnOv9wcfncsiR/iUzpHin+Dq3yOXPgB9C/yPvsaITzpCrJdGYfET29/dQ==", - "requires": { - "@docusaurus/logger": "2.3.1", - "file-loader": "^6.2.0", - "lodash": "^4.17.21", - "sharp": "^0.30.7", - "tslib": "^2.4.0" - } - }, - "@docusaurus/mdx-loader": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.3.1.tgz", - "integrity": "sha512-Gzga7OsxQRpt3392K9lv/bW4jGppdLFJh3luKRknCKSAaZrmVkOQv2gvCn8LAOSZ3uRg5No7AgYs/vpL8K94lA==", - "requires": { - "@babel/parser": "^7.18.8", - "@babel/traverse": "^7.18.8", - "@docusaurus/logger": "2.3.1", - "@docusaurus/utils": "2.3.1", - "@mdx-js/mdx": "^1.6.22", - "escape-html": "^1.0.3", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "image-size": "^1.0.1", - "mdast-util-to-string": "^2.0.0", - "remark-emoji": "^2.2.0", - "stringify-object": "^3.3.0", - "tslib": "^2.4.0", - "unified": "^9.2.2", - "unist-util-visit": "^2.0.3", - "url-loader": "^4.1.1", - "webpack": "^5.73.0" - }, - "dependencies": { - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@docusaurus/module-type-aliases": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.3.1.tgz", - "integrity": "sha512-6KkxfAVOJqIUynTRb/tphYCl+co3cP0PlHiMDbi+SzmYxMdgIrwYqH9yAnGSDoN6Jk2ZE/JY/Azs/8LPgKP48A==", - "requires": { - "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/types": "2.3.1", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "@types/react-router-dom": "*", - "react-helmet-async": "*", - "react-loadable": "npm:@docusaurus/react-loadable@5.5.2" - } - }, - "@docusaurus/plugin-content-blog": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.3.1.tgz", - "integrity": "sha512-f5LjqX+9WkiLyGiQ41x/KGSJ/9bOjSD8lsVhPvYeUYHCtYpuiDKfhZE07O4EqpHkBx4NQdtQDbp+aptgHSTuiw==", - "requires": { - "@docusaurus/core": "2.3.1", - "@docusaurus/logger": "2.3.1", - "@docusaurus/mdx-loader": "2.3.1", - "@docusaurus/types": "2.3.1", - "@docusaurus/utils": "2.3.1", - "@docusaurus/utils-common": "2.3.1", - "@docusaurus/utils-validation": "2.3.1", - "cheerio": "^1.0.0-rc.12", - "feed": "^4.2.2", - "fs-extra": "^10.1.0", - "lodash": "^4.17.21", - "reading-time": "^1.5.0", - "tslib": "^2.4.0", - "unist-util-visit": "^2.0.3", - "utility-types": "^3.10.0", - "webpack": "^5.73.0" - }, - "dependencies": { - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@docusaurus/plugin-content-docs": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.3.1.tgz", - "integrity": "sha512-DxztTOBEruv7qFxqUtbsqXeNcHqcVEIEe+NQoI1oi2DBmKBhW/o0MIal8lt+9gvmpx3oYtlwmLOOGepxZgJGkw==", - "requires": { - "@docusaurus/core": "2.3.1", - "@docusaurus/logger": "2.3.1", - "@docusaurus/mdx-loader": "2.3.1", - "@docusaurus/module-type-aliases": "2.3.1", - "@docusaurus/types": "2.3.1", - "@docusaurus/utils": "2.3.1", - "@docusaurus/utils-validation": "2.3.1", - "@types/react-router-config": "^5.0.6", - "combine-promises": "^1.1.0", - "fs-extra": "^10.1.0", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "tslib": "^2.4.0", - "utility-types": "^3.10.0", - "webpack": "^5.73.0" - }, - "dependencies": { - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@docusaurus/plugin-content-pages": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.3.1.tgz", - "integrity": "sha512-E80UL6hvKm5VVw8Ka8YaVDtO6kWWDVUK4fffGvkpQ/AJQDOg99LwOXKujPoICC22nUFTsZ2Hp70XvpezCsFQaA==", - "requires": { - "@docusaurus/core": "2.3.1", - "@docusaurus/mdx-loader": "2.3.1", - "@docusaurus/types": "2.3.1", - "@docusaurus/utils": "2.3.1", - "@docusaurus/utils-validation": "2.3.1", - "fs-extra": "^10.1.0", - "tslib": "^2.4.0", - "webpack": "^5.73.0" - }, - "dependencies": { - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@docusaurus/plugin-debug": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.3.1.tgz", - "integrity": "sha512-Ujpml1Ppg4geB/2hyu2diWnO49az9U2bxM9Shen7b6qVcyFisNJTkVG2ocvLC7wM1efTJcUhBO6zAku2vKJGMw==", - "requires": { - "@docusaurus/core": "2.3.1", - "@docusaurus/types": "2.3.1", - "@docusaurus/utils": "2.3.1", - "fs-extra": "^10.1.0", - "react-json-view": "^1.21.3", - "tslib": "^2.4.0" - }, - "dependencies": { - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@docusaurus/plugin-google-analytics": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.3.1.tgz", - "integrity": "sha512-OHip0GQxKOFU8n7gkt3TM4HOYTXPCFDjqKbMClDD3KaDnyTuMp/Zvd9HSr770lLEscgPWIvzhJByRAClqsUWiQ==", - "requires": { - "@docusaurus/core": "2.3.1", - "@docusaurus/types": "2.3.1", - "@docusaurus/utils-validation": "2.3.1", - "tslib": "^2.4.0" - } - }, - "@docusaurus/plugin-google-gtag": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.3.1.tgz", - "integrity": "sha512-uXtDhfu4+Hm+oqWUySr3DNI5cWC/rmP6XJyAk83Heor3dFjZqDwCbkX8yWPywkRiWev3Dk/rVF8lEn0vIGVocA==", - "requires": { - "@docusaurus/core": "2.3.1", - "@docusaurus/types": "2.3.1", - "@docusaurus/utils-validation": "2.3.1", - "tslib": "^2.4.0" - } - }, - "@docusaurus/plugin-google-tag-manager": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-2.3.1.tgz", - "integrity": "sha512-Ww2BPEYSqg8q8tJdLYPFFM3FMDBCVhEM4UUqKzJaiRMx3NEoly3qqDRAoRDGdIhlC//Rf0iJV9cWAoq2m6k3sw==", - "requires": { - "@docusaurus/core": "2.3.1", - "@docusaurus/types": "2.3.1", - "@docusaurus/utils-validation": "2.3.1", - "tslib": "^2.4.0" - } - }, - "@docusaurus/plugin-ideal-image": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-ideal-image/-/plugin-ideal-image-2.3.1.tgz", - "integrity": "sha512-hN/TbpG8Hsct06RNRZz69iCpxsXzryq+5o/8r62sGwhTAmMCN8ms8an+ubRk4bub0y3Gvg7YUcwmmFf6kE2fJg==", - "requires": { - "@docusaurus/core": "2.3.1", - "@docusaurus/lqip-loader": "2.3.1", - "@docusaurus/responsive-loader": "^1.7.0", - "@docusaurus/theme-translations": "2.3.1", - "@docusaurus/types": "2.3.1", - "@docusaurus/utils-validation": "2.3.1", - "@endiliey/react-ideal-image": "^0.0.11", - "react-waypoint": "^10.3.0", - "sharp": "^0.30.7", - "tslib": "^2.4.0", - "webpack": "^5.73.0" - } - }, - "@docusaurus/plugin-sitemap": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.3.1.tgz", - "integrity": "sha512-8Yxile/v6QGYV9vgFiYL+8d2N4z4Er3pSHsrD08c5XI8bUXxTppMwjarDUTH/TRTfgAWotRbhJ6WZLyajLpozA==", - "requires": { - "@docusaurus/core": "2.3.1", - "@docusaurus/logger": "2.3.1", - "@docusaurus/types": "2.3.1", - "@docusaurus/utils": "2.3.1", - "@docusaurus/utils-common": "2.3.1", - "@docusaurus/utils-validation": "2.3.1", - "fs-extra": "^10.1.0", - "sitemap": "^7.1.1", - "tslib": "^2.4.0" - }, - "dependencies": { - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@docusaurus/preset-classic": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.3.1.tgz", - "integrity": "sha512-OQ5W0AHyfdUk0IldwJ3BlnZ1EqoJuu2L2BMhqLbqwNWdkmzmSUvlFLH1Pe7CZSQgB2YUUC/DnmjbPKk/qQD0lQ==", - "requires": { - "@docusaurus/core": "2.3.1", - "@docusaurus/plugin-content-blog": "2.3.1", - "@docusaurus/plugin-content-docs": "2.3.1", - "@docusaurus/plugin-content-pages": "2.3.1", - "@docusaurus/plugin-debug": "2.3.1", - "@docusaurus/plugin-google-analytics": "2.3.1", - "@docusaurus/plugin-google-gtag": "2.3.1", - "@docusaurus/plugin-google-tag-manager": "2.3.1", - "@docusaurus/plugin-sitemap": "2.3.1", - "@docusaurus/theme-classic": "2.3.1", - "@docusaurus/theme-common": "2.3.1", - "@docusaurus/theme-search-algolia": "2.3.1", - "@docusaurus/types": "2.3.1" - } - }, - "@docusaurus/react-loadable": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", - "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", - "requires": { - "@types/react": "*", - "prop-types": "^15.6.2" - } - }, - "@docusaurus/responsive-loader": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/responsive-loader/-/responsive-loader-1.7.0.tgz", - "integrity": "sha512-N0cWuVqTRXRvkBxeMQcy/OF2l7GN8rmni5EzR3HpwR+iU2ckYPnziceojcxvvxQ5NqZg1QfEW0tycQgHp+e+Nw==", - "requires": { - "loader-utils": "^2.0.0" - } - }, - "@docusaurus/theme-classic": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.3.1.tgz", - "integrity": "sha512-SelSIDvyttb7ZYHj8vEUhqykhAqfOPKk+uP0z85jH72IMC58e7O8DIlcAeBv+CWsLbNIl9/Hcg71X0jazuxJug==", - "requires": { - "@docusaurus/core": "2.3.1", - "@docusaurus/mdx-loader": "2.3.1", - "@docusaurus/module-type-aliases": "2.3.1", - "@docusaurus/plugin-content-blog": "2.3.1", - "@docusaurus/plugin-content-docs": "2.3.1", - "@docusaurus/plugin-content-pages": "2.3.1", - "@docusaurus/theme-common": "2.3.1", - "@docusaurus/theme-translations": "2.3.1", - "@docusaurus/types": "2.3.1", - "@docusaurus/utils": "2.3.1", - "@docusaurus/utils-common": "2.3.1", - "@docusaurus/utils-validation": "2.3.1", - "@mdx-js/react": "^1.6.22", - "clsx": "^1.2.1", - "copy-text-to-clipboard": "^3.0.1", - "infima": "0.2.0-alpha.42", - "lodash": "^4.17.21", - "nprogress": "^0.2.0", - "postcss": "^8.4.14", - "prism-react-renderer": "^1.3.5", - "prismjs": "^1.28.0", - "react-router-dom": "^5.3.3", - "rtlcss": "^3.5.0", - "tslib": "^2.4.0", - "utility-types": "^3.10.0" - } - }, - "@docusaurus/theme-common": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.3.1.tgz", - "integrity": "sha512-RYmYl2OR2biO+yhmW1aS5FyEvnrItPINa+0U2dMxcHpah8reSCjQ9eJGRmAgkZFchV1+aIQzXOI1K7LCW38O0g==", - "requires": { - "@docusaurus/mdx-loader": "2.3.1", - "@docusaurus/module-type-aliases": "2.3.1", - "@docusaurus/plugin-content-blog": "2.3.1", - "@docusaurus/plugin-content-docs": "2.3.1", - "@docusaurus/plugin-content-pages": "2.3.1", - "@docusaurus/utils": "2.3.1", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "clsx": "^1.2.1", - "parse-numeric-range": "^1.3.0", - "prism-react-renderer": "^1.3.5", - "tslib": "^2.4.0", - "use-sync-external-store": "^1.2.0", - "utility-types": "^3.10.0" - } - }, - "@docusaurus/theme-search-algolia": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.3.1.tgz", - "integrity": "sha512-JdHaRqRuH1X++g5fEMLnq7OtULSGQdrs9AbhcWRQ428ZB8/HOiaN6mj3hzHvcD3DFgu7koIVtWPQnvnN7iwzHA==", - "requires": { - "@docsearch/react": "^3.1.1", - "@docusaurus/core": "2.3.1", - "@docusaurus/logger": "2.3.1", - "@docusaurus/plugin-content-docs": "2.3.1", - "@docusaurus/theme-common": "2.3.1", - "@docusaurus/theme-translations": "2.3.1", - "@docusaurus/utils": "2.3.1", - "@docusaurus/utils-validation": "2.3.1", - "algoliasearch": "^4.13.1", - "algoliasearch-helper": "^3.10.0", - "clsx": "^1.2.1", - "eta": "^2.0.0", - "fs-extra": "^10.1.0", - "lodash": "^4.17.21", - "tslib": "^2.4.0", - "utility-types": "^3.10.0" - }, - "dependencies": { - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@docusaurus/theme-translations": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.3.1.tgz", - "integrity": "sha512-BsBZzAewJabVhoGG1Ij2u4pMS3MPW6gZ6sS4pc+Y7czevRpzxoFNJXRtQDVGe7mOpv/MmRmqg4owDK+lcOTCVQ==", - "requires": { - "fs-extra": "^10.1.0", - "tslib": "^2.4.0" - }, - "dependencies": { - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@docusaurus/types": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.3.1.tgz", - "integrity": "sha512-PREbIRhTaNNY042qmfSE372Jb7djZt+oVTZkoqHJ8eff8vOIc2zqqDqBVc5BhOfpZGPTrE078yy/torUEZy08A==", - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.6.0", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.73.0", - "webpack-merge": "^5.8.0" - } - }, - "@docusaurus/utils": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.3.1.tgz", - "integrity": "sha512-9WcQROCV0MmrpOQDXDGhtGMd52DHpSFbKLfkyaYumzbTstrbA5pPOtiGtxK1nqUHkiIv8UwexS54p0Vod2I1lg==", - "requires": { - "@docusaurus/logger": "2.3.1", - "@svgr/webpack": "^6.2.1", - "escape-string-regexp": "^4.0.0", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "github-slugger": "^1.4.0", - "globby": "^11.1.0", - "gray-matter": "^4.0.3", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "micromatch": "^4.0.5", - "resolve-pathname": "^3.0.0", - "shelljs": "^0.8.5", - "tslib": "^2.4.0", - "url-loader": "^4.1.1", - "webpack": "^5.73.0" - }, - "dependencies": { - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@docusaurus/utils-common": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.3.1.tgz", - "integrity": "sha512-pVlRpXkdNcxmKNxAaB1ya2hfCEvVsLDp2joeM6K6uv55Oc5nVIqgyYSgSNKZyMdw66NnvMfsu0RBylcwZQKo9A==", - "requires": { - "tslib": "^2.4.0" - } - }, - "@docusaurus/utils-validation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.3.1.tgz", - "integrity": "sha512-7n0208IG3k1HVTByMHlZoIDjjOFC8sbViHVXJx0r3Q+3Ezrx+VQ1RZ/zjNn6lT+QBCRCXlnlaoJ8ug4HIVgQ3w==", - "requires": { - "@docusaurus/logger": "2.3.1", - "@docusaurus/utils": "2.3.1", - "joi": "^17.6.0", - "js-yaml": "^4.1.0", - "tslib": "^2.4.0" - } - }, - "@emotion/is-prop-valid": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", - "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", - "requires": { - "@emotion/memoize": "0.7.4" - } - }, - "@emotion/memoize": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", - "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" - }, - "@emotion/stylis": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", - "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" - }, - "@emotion/unitless": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", - "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" - }, - "@endiliey/react-ideal-image": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/@endiliey/react-ideal-image/-/react-ideal-image-0.0.11.tgz", - "integrity": "sha512-QxMjt/Gvur/gLxSoCy7VIyGGGrGmDN+VHcXkN3R2ApoWX0EYUE+hMgPHSW/PV6VVebZ1Nd4t2UnGRBDihu16JQ==", - "requires": {} - }, - "@eslint/eslintrc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.0.tgz", - "integrity": "sha512-fluIaaV+GyV24CCu/ggiHdV+j4RNh85yQnAYS/G2mZODZgGmmlrgCydjUcV3YvxCm9x8nMAfThsqTni4KiXT4A==", - "devOptional": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.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" - }, - "dependencies": { - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "devOptional": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "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==", - "devOptional": true - } - } - }, - "@eslint/js": { - "version": "8.35.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.35.0.tgz", - "integrity": "sha512-JXdzbRiWclLVoD8sNUjR443VVlYqiYmDVT6rGUEIEHU5YJW0gaVZwV2xgM7D4arkvASqD0IlLUVjHiFuxaftRw==", - "devOptional": true - }, - "@exodus/schemasafe": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@exodus/schemasafe/-/schemasafe-1.0.0-rc.10.tgz", - "integrity": "sha512-ZKjOj0oXi7h55tud+MopVNgyw+Y2EqhZHmLK594G2Gc8K/xXJKM+hVtPwXCMoahLx03km+Nms/HYwqjejxJurQ==" - }, - "@faker-js/faker": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-5.5.3.tgz", - "integrity": "sha512-R11tGE6yIFwqpaIqcfkcg7AICXzFg14+5h5v0TfF/9+RMDL6jhzCy/pxHVOfbALGdtVYdt6JdR21tuxEgl34dw==" - }, - "@fortawesome/fontawesome-common-types": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.0.tgz", - "integrity": "sha512-HNii132xfomg5QVZw0HwXXpN22s7VBHQBv9CeOu9tfJnhsWQNd2lmTNi8CSrnw5B+5YOmzu1UoPAyxaXsJ6RgQ==" - }, - "@fortawesome/fontawesome-svg-core": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.0.tgz", - "integrity": "sha512-Bertv8xOiVELz5raB2FlXDPKt+m94MQ3JgDfsVbrqNpLU9+UE2E18GKjLKw+d3XbeYPqg1pzyQKGsrzbw+pPaw==", - "requires": { - "@fortawesome/fontawesome-common-types": "6.4.0" - } - }, - "@fortawesome/react-fontawesome": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.0.tgz", - "integrity": "sha512-uHg75Rb/XORTtVt7OS9WoK8uM276Ufi7gCzshVWkUJbHhh3svsUUeqXerrM96Wm7fRiDzfKRwSoahhMIkGAYHw==", - "requires": { - "prop-types": "^15.8.1" - } - }, - "@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" - }, - "@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", - "devOptional": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.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==", - "devOptional": true - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "devOptional": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "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 - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0" - }, - "dependencies": { - "jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - } - } - }, - "@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", - "dev": true, - "requires": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - } - } - }, - "@jest/create-cache-key-function": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-27.5.1.tgz", - "integrity": "sha512-dmH1yW+makpTSURTy8VzdUwFnfQh1G8R+DxO2Ho2FFmBbKFEVm+3jWdvFhE2VqB/LATCTokkP0dotjyQyw5/AQ==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1" - } - }, - "@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", - "dev": true, - "requires": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1" - } - }, - "@jest/expect-utils": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.4.3.tgz", - "integrity": "sha512-/6JWbkxHOP8EoS8jeeTd9dTfc9Uawi+43oLKHfp6zzux3U2hqOOVnV3ai4RpDYHOccL6g+5nrxpoc8DmJxtXVQ==", - "dev": true, - "requires": { - "jest-get-type": "^29.4.3" - } - }, - "@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - }, - "dependencies": { - "jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - } - } - }, - "@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" - }, - "dependencies": { - "diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", - "dev": true - }, - "expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - } - }, - "jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true - }, - "jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - } - } - }, - "@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - }, - "dependencies": { - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/schemas": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", - "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", - "requires": { - "@sinclair/typebox": "^0.25.16" - } - }, - "@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", - "dev": true, - "requires": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", - "dev": true, - "requires": { - "@jest/test-result": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" - } - }, - "@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - } - } - }, - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" - }, - "@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "@jsdevtools/ono": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", - "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==" - }, - "@juggle/resize-observer": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz", - "integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==" - }, - "@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" - }, - "@mdx-js/mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", - "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", - "requires": { - "@babel/core": "7.12.9", - "@babel/plugin-syntax-jsx": "7.12.1", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@mdx-js/util": "1.6.22", - "babel-plugin-apply-mdx-type-prop": "1.6.22", - "babel-plugin-extract-import-names": "1.6.22", - "camelcase-css": "2.0.1", - "detab": "2.0.4", - "hast-util-raw": "6.0.1", - "lodash.uniq": "4.5.0", - "mdast-util-to-hast": "10.0.1", - "remark-footnotes": "2.0.0", - "remark-mdx": "1.6.22", - "remark-parse": "8.0.3", - "remark-squeeze-paragraphs": "4.0.0", - "style-to-object": "0.3.0", - "unified": "9.2.0", - "unist-builder": "2.0.3", - "unist-util-visit": "2.0.3" - }, - "dependencies": { - "@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" - }, - "unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - } - } - } - }, - "@mdx-js/react": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", - "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", - "requires": {} - }, - "@mdx-js/util": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", - "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==" - }, - "@monaco-editor/loader": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@monaco-editor/loader/-/loader-1.3.2.tgz", - "integrity": "sha512-BTDbpHl3e47r3AAtpfVFTlAi7WXv4UQ/xZmz8atKl4q7epQV5e7+JbigFDViWF71VBi4IIBdcWP57Hj+OWuc9g==", - "requires": { - "state-local": "^1.0.6" - } - }, - "@monaco-editor/react": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/@monaco-editor/react/-/react-4.4.6.tgz", - "integrity": "sha512-Gr3uz3LYf33wlFE3eRnta4RxP5FSNxiIV9ENn2D2/rN8KgGAD8ecvcITRtsbbyuOuNkwbuHYxfeaz2Vr+CtyFA==", - "requires": { - "@monaco-editor/loader": "^1.3.2", - "prop-types": "^15.7.2" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@polka/url": { - "version": "1.0.0-next.21", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", - "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" - }, - "@react-hook/debounce": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@react-hook/debounce/-/debounce-3.0.0.tgz", - "integrity": "sha512-ir/kPrSfAzY12Gre0sOHkZ2rkEmM4fS5M5zFxCi4BnCeXh2nvx9Ujd+U4IGpKCuPA+EQD0pg1eK2NGLvfWejag==", - "requires": { - "@react-hook/latest": "^1.0.2" - } - }, - "@react-hook/event": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@react-hook/event/-/event-1.2.6.tgz", - "integrity": "sha512-JUL5IluaOdn5w5Afpe/puPa1rj8X6udMlQ9dt4hvMuKmTrBS1Ya6sb4sVgvfe2eU4yDuOfAhik8xhbcCekbg9Q==", - "requires": {} - }, - "@react-hook/latest": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@react-hook/latest/-/latest-1.0.3.tgz", - "integrity": "sha512-dy6duzl+JnAZcDbNTfmaP3xHiKtbXYOaz3G51MGVljh548Y8MWzTr+PHLOfvpypEVW9zwvl+VyKjbWKEVbV1Rg==", - "requires": {} - }, - "@react-hook/passive-layout-effect": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@react-hook/passive-layout-effect/-/passive-layout-effect-1.2.1.tgz", - "integrity": "sha512-IwEphTD75liO8g+6taS+4oqz+nnroocNfWVHWz7j+N+ZO2vYrc6PV1q7GQhuahL0IOR7JccFTsFKQ/mb6iZWAg==", - "requires": {} - }, - "@react-hook/resize-observer": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@react-hook/resize-observer/-/resize-observer-1.2.6.tgz", - "integrity": "sha512-DlBXtLSW0DqYYTW3Ft1/GQFZlTdKY5VAFIC4+km6IK5NiPPDFchGbEJm1j6pSgMqPRHbUQgHJX7RaR76ic1LWA==", - "requires": { - "@juggle/resize-observer": "^3.3.1", - "@react-hook/latest": "^1.0.2", - "@react-hook/passive-layout-effect": "^1.2.0" - } - }, - "@react-hook/size": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@react-hook/size/-/size-2.1.2.tgz", - "integrity": "sha512-BmE5asyRDxSuQ9p14FUKJ0iBRgV9cROjqNG9jT/EjCM+xHha1HVqbPoT+14FQg1K7xIydabClCibUY4+1tw/iw==", - "requires": { - "@react-hook/passive-layout-effect": "^1.2.0", - "@react-hook/resize-observer": "^1.2.1" - } - }, - "@react-hook/throttle": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@react-hook/throttle/-/throttle-2.2.0.tgz", - "integrity": "sha512-LJ5eg+yMV8lXtqK3lR+OtOZ2WH/EfWvuiEEu0M3bhR7dZRfTyEJKxH1oK9uyBxiXPtWXiQggWbZirMCXam51tg==", - "requires": { - "@react-hook/latest": "^1.0.2" - } - }, - "@react-hook/window-size": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@react-hook/window-size/-/window-size-3.1.1.tgz", - "integrity": "sha512-yWnVS5LKnOUIrEsI44oz3bIIUYqflamPL27n+k/PC//PsX/YeWBky09oPeAoc9As6jSH16Wgo8plI+ECZaHk3g==", - "requires": { - "@react-hook/debounce": "^3.0.0", - "@react-hook/event": "^1.2.1", - "@react-hook/throttle": "^2.2.0" - } - }, - "@react-types/button": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@react-types/button/-/button-3.4.1.tgz", - "integrity": "sha512-B54M84LxdEppwjXNlkBEJyMfe9fd+bvFV7R6+NJvupGrZm/LuFNYjFcHk7yjMKWTdWm6DbpIuQz54n5qTW7Vlg==", - "requires": { - "@react-types/shared": "^3.8.0" - } - }, - "@react-types/checkbox": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@react-types/checkbox/-/checkbox-3.4.4.tgz", - "integrity": "sha512-rJNhbW4R9HTvdbF2oTZmqGiZ/WVP3/XsU4gae7tfdhSYjG+5T5h9zau1vRhz++zwKn57wfcyNn6a83GDhhgkVw==", - "requires": { - "@react-types/shared": "^3.18.1" - }, - "dependencies": { - "@react-types/shared": { - "version": "3.18.1", - "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.18.1.tgz", - "integrity": "sha512-OpTYRFS607Ctfd6Tmhyk6t6cbFyDhO5K+etU35X50pMzpypo1b7vF0mkngEeTc0Xwl0e749ONZNPZskMyu5k8w==", - "requires": {} - } - } - }, - "@react-types/radio": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@react-types/radio/-/radio-3.1.2.tgz", - "integrity": "sha512-vkIic8abrVUyl/YjKU3yTVwn8QgebzuadfV89PsaKc3hdmSiHhDsln5wYsfWOEotqMwPrG1aEv9yRMYO78OQXQ==", - "requires": { - "@react-types/shared": "^3.8.0" - } - }, - "@react-types/shared": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.9.0.tgz", - "integrity": "sha512-YYksINfR6q92P10AhPEGo47Hd7oz1hrnZ6Vx8Gsrq62IbqDdv1XOTzPBaj17Z1ymNY2pitLUSEXsLmozt4wxxQ==", - "requires": {} - }, - "@react-types/switch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@react-types/switch/-/switch-3.1.2.tgz", - "integrity": "sha512-EaYWoLvUCpOnt//Ov8VBxOjbs4hBpYE/rBAzzIknXaFvKOu867iZBFL7FJbcemOgC8/dwyaj6GUZ1Gw3Z1g59w==", - "requires": { - "@react-types/checkbox": "^3.2.3", - "@react-types/shared": "^3.8.0" - } - }, - "@react-types/textfield": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@react-types/textfield/-/textfield-3.3.0.tgz", - "integrity": "sha512-lOf0tx3c3dVaomH/uvKpOKFVTXQ232kLnMhOJTtj97JDX7fTr3SNhDUV0G8Zf4M0vr+l+xkTrJkywYE23rzliw==", - "requires": { - "@react-types/shared": "^3.9.0" - } - }, - "@redocly/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@redocly/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-9GWx27t7xWhDIR02PA18nzBdLcKQRgc46xNQvjFkrYk4UOmvKhJ/dawwiX0cCOeetN5LcaaiqQbVOWYK62SGHw==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "dependencies": { - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - } - } - }, - "@redocly/openapi-core": { - "version": "1.0.0-beta.123", - "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.0.0-beta.123.tgz", - "integrity": "sha512-W6MbUWpb/VaV+Kf0c3jmMIJw3WwwF7iK5nAfcOS+ZwrlbxtIl37+1hEydFlJ209vCR9HL12PaMwdh2Vpihj6Jw==", - "requires": { - "@redocly/ajv": "^8.11.0", - "@types/node": "^14.11.8", - "colorette": "^1.2.0", - "js-levenshtein": "^1.1.6", - "js-yaml": "^4.1.0", - "lodash.isequal": "^4.5.0", - "minimatch": "^5.0.1", - "node-fetch": "^2.6.1", - "pluralize": "^8.0.0", - "yaml-ast-parser": "0.0.43" - }, - "dependencies": { - "@types/node": { - "version": "14.18.37", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.37.tgz", - "integrity": "sha512-7GgtHCs/QZrBrDzgIJnQtuSvhFSwhyYSI2uafSwZoNt1iOGhEN5fwNrQMjtONyHm9+/LoA4453jH0CMYcr06Pg==" - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "requires": { - "balanced-match": "^1.0.0" - } - }, - "colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" - }, - "minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "@rehooks/component-size": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@rehooks/component-size/-/component-size-1.0.3.tgz", - "integrity": "sha512-pnYld+8SSF2vXwdLOqBGUyOrv/SjzwLjIUcs/4c1JJgR0q4E9eBtBfuZMD6zUD51fvSehSsbnlQMzotSmPTXPg==", - "requires": {} - }, - "@sentry/browser": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-6.19.7.tgz", - "integrity": "sha512-oDbklp4O3MtAM4mtuwyZLrgO1qDVYIujzNJQzXmi9YzymJCuzMLSRDvhY83NNDCRxf0pds4DShgYeZdbSyKraA==", - "requires": { - "@sentry/core": "6.19.7", - "@sentry/types": "6.19.7", - "@sentry/utils": "6.19.7", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@sentry/core": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-6.19.7.tgz", - "integrity": "sha512-tOfZ/umqB2AcHPGbIrsFLcvApdTm9ggpi/kQZFkej7kMphjT+SGBiQfYtjyg9jcRW+ilAR4JXC9BGKsdEQ+8Vw==", - "requires": { - "@sentry/hub": "6.19.7", - "@sentry/minimal": "6.19.7", - "@sentry/types": "6.19.7", - "@sentry/utils": "6.19.7", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@sentry/hub": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-6.19.7.tgz", - "integrity": "sha512-y3OtbYFAqKHCWezF0EGGr5lcyI2KbaXW2Ik7Xp8Mu9TxbSTuwTe4rTntwg8ngPjUQU3SUHzgjqVB8qjiGqFXCA==", - "requires": { - "@sentry/types": "6.19.7", - "@sentry/utils": "6.19.7", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@sentry/minimal": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.19.7.tgz", - "integrity": "sha512-wcYmSJOdvk6VAPx8IcmZgN08XTXRwRtB1aOLZm+MVHjIZIhHoBGZJYTVQS/BWjldsamj2cX3YGbGXNunaCfYJQ==", - "requires": { - "@sentry/hub": "6.19.7", - "@sentry/types": "6.19.7", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@sentry/react": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/react/-/react-6.19.7.tgz", - "integrity": "sha512-VzJeBg/v41jfxUYPkH2WYrKjWc4YiMLzDX0f4Zf6WkJ4v3IlDDSkX6DfmWekjTKBho6wiMkSNy2hJ1dHfGZ9jA==", - "requires": { - "@sentry/browser": "6.19.7", - "@sentry/minimal": "6.19.7", - "@sentry/types": "6.19.7", - "@sentry/utils": "6.19.7", - "hoist-non-react-statics": "^3.3.2", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@sentry/types": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-6.19.7.tgz", - "integrity": "sha512-jH84pDYE+hHIbVnab3Hr+ZXr1v8QABfhx39KknxqKWr2l0oEItzepV0URvbEhB446lk/S/59230dlUUIBGsXbg==" - }, - "@sentry/utils": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-6.19.7.tgz", - "integrity": "sha512-z95ECmE3i9pbWoXQrD/7PgkBAzJYR+iXtPuTkpBjDKs86O3mT+PXOT3BAn79w2wkn7/i3vOGD2xVr1uiMl26dA==", - "requires": { - "@sentry/types": "6.19.7", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" - }, - "@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" - }, - "@sinclair/typebox": { - "version": "0.25.24", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", - "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==" - }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" - }, - "@sinonjs/commons": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", - "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@slorber/static-site-generator-webpack-plugin": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz", - "integrity": "sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA==", - "requires": { - "eval": "^0.1.8", - "p-map": "^4.0.0", - "webpack-sources": "^3.2.2" - } - }, - "@stoplight/elements": { - "version": "7.7.17", - "resolved": "https://registry.npmjs.org/@stoplight/elements/-/elements-7.7.17.tgz", - "integrity": "sha512-c+KqG+CtkugYfN+JPi1kj+Q7V5qJVa3VSep9E37Gn+oEdoy+HJcix5P4b/LEIJ6qF47xf9UEKLDnU729pAhJyw==", - "requires": { - "@stoplight/elements-core": "~7.7.17", - "@stoplight/http-spec": "^5.1.4", - "@stoplight/json": "^3.18.1", - "@stoplight/mosaic": "^1.33.0", - "@stoplight/types": "^13.7.0", - "@stoplight/yaml": "^4.2.3", - "classnames": "^2.2.6", - "file-saver": "^2.0.5", - "lodash": "^4.17.19", - "react-query": "^3.34.19", - "react-router-dom": "^5.2.0" - } - }, - "@stoplight/elements-core": { - "version": "7.7.17", - "resolved": "https://registry.npmjs.org/@stoplight/elements-core/-/elements-core-7.7.17.tgz", - "integrity": "sha512-R4lbw4pK9uS/+45AQLVVSkTkt6QV6Ke90W1WZzucBz0C2HdeuygHmpoCrXuLBsWRMpT8YKjJE/h5hWl5RzjQ9A==", - "requires": { - "@stoplight/http-spec": "^5.1.4", - "@stoplight/json": "^3.18.1", - "@stoplight/json-schema-ref-parser": "^9.0.5", - "@stoplight/json-schema-sampler": "0.2.3", - "@stoplight/json-schema-viewer": "^4.9.0", - "@stoplight/markdown-viewer": "^5.6.0", - "@stoplight/mosaic": "^1.33.0", - "@stoplight/mosaic-code-editor": "^1.33.0", - "@stoplight/mosaic-code-viewer": "^1.33.0", - "@stoplight/path": "^1.3.2", - "@stoplight/react-error-boundary": "^2.0.0", - "@stoplight/types": "^13.7.0", - "@stoplight/yaml": "^4.2.3", - "classnames": "^2.2.6", - "httpsnippet-lite": "^3.0.1", - "jotai": "1.3.9", - "json-schema": "^0.4.0", - "lodash": "^4.17.19", - "nanoid": "^3.1.32", - "prop-types": "^15.7.2", - "react-query": "^3.34.19", - "react-router-dom": "^5.2.0", - "react-router-hash-link": "^2.1.0", - "tslib": "^2.1.0", - "urijs": "^1.19.11", - "util": "^0.12.4", - "xml-formatter": "^2.6.1" - } - }, - "@stoplight/http-spec": { - "version": "5.9.4", - "resolved": "https://registry.npmjs.org/@stoplight/http-spec/-/http-spec-5.9.4.tgz", - "integrity": "sha512-hVI5BmSClygVTBwJpinOjyZ9yRpw61u6EC1/nBqSieKxLJ9T5WXlsaE+0s9cpzTg4fVP2jKnVFO3NbIU4vdtPA==", - "requires": { - "@stoplight/json": "^3.18.1", - "@stoplight/json-schema-generator": "1.0.2", - "@stoplight/types": "^13.15.0", - "@types/json-schema": "7.0.11", - "@types/swagger-schema-official": "~2.0.22", - "@types/type-is": "^1.6.3", - "fnv-plus": "^1.3.1", - "lodash.isequalwith": "^4.4.0", - "lodash.pick": "^4.4.0", - "lodash.pickby": "^4.6.0", - "openapi3-ts": "^2.0.2", - "postman-collection": "^4.1.2", - "tslib": "^2.3.1", - "type-is": "^1.6.18" - } - }, - "@stoplight/json": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@stoplight/json/-/json-3.21.0.tgz", - "integrity": "sha512-5O0apqJ/t4sIevXCO3SBN9AHCEKKR/Zb4gaj7wYe5863jme9g02Q0n/GhM7ZCALkL+vGPTe4ZzTETP8TFtsw3g==", - "requires": { - "@stoplight/ordered-object-literal": "^1.0.3", - "@stoplight/path": "^1.3.2", - "@stoplight/types": "^13.6.0", - "jsonc-parser": "~2.2.1", - "lodash": "^4.17.21", - "safe-stable-stringify": "^1.1" - }, - "dependencies": { - "jsonc-parser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.2.1.tgz", - "integrity": "sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==" - } - } - }, - "@stoplight/json-schema-generator": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@stoplight/json-schema-generator/-/json-schema-generator-1.0.2.tgz", - "integrity": "sha512-FzSLFoIZc6Lmw3oRE7kU6YUrl5gBmUs//rY59jdFipBoSyTPv5NyqeyTg5mvT6rY1F3qTLU3xgzRi/9Pb9eZpA==", - "requires": { - "cross-fetch": "^3.1.5", - "json-promise": "1.1.x", - "minimist": "1.2.6", - "mkdirp": "0.5.x", - "pretty-data": "0.40.x" - }, - "dependencies": { - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - } - } - }, - "@stoplight/json-schema-merge-allof": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/@stoplight/json-schema-merge-allof/-/json-schema-merge-allof-0.7.8.tgz", - "integrity": "sha512-JTDt6GYpCWQSb7+UW1P91IAp/pcLWis0mmEzWVFcLsrNgtUYK7JLtYYz0ZPSR4QVL0fJ0YQejM+MPq5iNDFO4g==", - "requires": { - "compute-lcm": "^1.1.0", - "json-schema-compare": "^0.2.2", - "lodash": "^4.17.4" - } - }, - "@stoplight/json-schema-ref-parser": { - "version": "9.2.4", - "resolved": "https://registry.npmjs.org/@stoplight/json-schema-ref-parser/-/json-schema-ref-parser-9.2.4.tgz", - "integrity": "sha512-alWys5FhpfBtCJpZmWq47fZ4BBGcOGUqEI8b7AkJRZ+OaEoUIQtm8BReWY+JbU4D7+tBozX8Y+LF9Oxa9mYDSg==", - "requires": { - "@jsdevtools/ono": "^7.1.3", - "@stoplight/path": "^1.3.2", - "@stoplight/yaml": "^4.0.2", - "call-me-maybe": "^1.0.1", - "fastestsmallesttextencoderdecoder": "^1.0.22", - "isomorphic-fetch": "^3.0.0", - "node-abort-controller": "^3.0.1" - } - }, - "@stoplight/json-schema-sampler": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@stoplight/json-schema-sampler/-/json-schema-sampler-0.2.3.tgz", - "integrity": "sha512-57PqNll9y/Rkfp4/t1AkVfz5C0PIrDd8i2AW/N0XU5wVJ50kIrmJg3BD+PzmVcrF3lXFH7/LojoOUkzLZXMJpg==", - "requires": { - "@types/json-schema": "^7.0.7", - "json-pointer": "^0.6.1" - } - }, - "@stoplight/json-schema-tree": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@stoplight/json-schema-tree/-/json-schema-tree-2.2.3.tgz", - "integrity": "sha512-cJ11QpzuoEsM6YgAahxoZDqzE+UjWTZqbRJanYLYqA4bC9pqB00Sj/NBqvTTIi6FfSef1D77KvURU5CcDk4h+A==", - "requires": { - "@stoplight/json": "^3.12.0", - "@stoplight/json-schema-merge-allof": "^0.7.8", - "@stoplight/lifecycle": "^2.3.2", - "@types/json-schema": "^7.0.7", - "magic-error": "0.0.1" - } - }, - "@stoplight/json-schema-viewer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@stoplight/json-schema-viewer/-/json-schema-viewer-4.9.1.tgz", - "integrity": "sha512-PZHLxEYtQwGSPo/fmcipmlLxDhKGSWocj+g6fW9t817rqO0wZ5lzjM65XG+WOj/oyYE5ghjX676Q3Nd2NYmOnQ==", - "requires": { - "@stoplight/json": "^3.20.1", - "@stoplight/json-schema-tree": "^2.2.2", - "@stoplight/react-error-boundary": "^2.0.0", - "@types/json-schema": "^7.0.7", - "classnames": "^2.2.6", - "fnv-plus": "^1.3.1", - "jotai": "^1.4.5", - "lodash": "^4.17.19" - }, - "dependencies": { - "jotai": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/jotai/-/jotai-1.13.1.tgz", - "integrity": "sha512-RUmH1S4vLsG3V6fbGlKzGJnLrDcC/HNb5gH2AeA9DzuJknoVxSGvvg8OBB7lke+gDc4oXmdVsaKn/xDUhWZ0vw==", - "requires": {} - } - } - }, - "@stoplight/lifecycle": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@stoplight/lifecycle/-/lifecycle-2.3.3.tgz", - "integrity": "sha512-JbPRTIzPZabeYPAk5+gdsnfwAxqW35G9e0ZjOG3toUmNViLOsEzuK4vpWd+Prv2Mw8HRmu+haiYizteZp6mk0w==", - "requires": { - "tslib": "^2.3.1", - "wolfy87-eventemitter": "~5.2.8" - } - }, - "@stoplight/markdown": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@stoplight/markdown/-/markdown-3.2.0.tgz", - "integrity": "sha512-Hhnrj7xb+f4iMQQeZBKLgfst3OJyV8T4BKr8BSYnKpp070B6fE63V/lkPuKqrpvidcv6kz3INDBU/GE7K2Q0uw==", - "requires": { - "@stoplight/types": "^12.3.0", - "@stoplight/yaml": "^4.2.2", - "github-slugger": "^1.3.0", - "hast-util-whitespace": "^2.0.0", - "lodash": "^4.17.21", - "mdast-util-to-string": "^3.1.0", - "remark-frontmatter": "^3.0.0", - "remark-gfm": "^1.0.0", - "remark-parse": "^9.0.0", - "remark-stringify": "^9.0.1", - "tslib": "^2.3.0", - "unified": "^9.2.1", - "unist-util-select": "^4.0.0", - "unist-util-visit": "^3.1.0" - }, - "dependencies": { - "@stoplight/types": { - "version": "12.5.0", - "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-12.5.0.tgz", - "integrity": "sha512-dwqYcDrGmEyUv5TWrDam5TGOxU72ufyQ7hnOIIDdmW5ezOwZaBFoR5XQ9AsH49w7wgvOqB2Bmo799pJPWnpCbg==", - "requires": { - "@types/json-schema": "^7.0.4", - "utility-types": "^3.10.0" - } - }, - "mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", - "requires": { - "@types/mdast": "^3.0.0" - } - }, - "remark-parse": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", - "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", - "requires": { - "mdast-util-from-markdown": "^0.8.0" - } - }, - "unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "requires": { - "@types/unist": "^2.0.0" - } - }, - "unist-util-visit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-3.1.0.tgz", - "integrity": "sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^4.0.0" - } - }, - "unist-util-visit-parents": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz", - "integrity": "sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - } - } - }, - "@stoplight/markdown-viewer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@stoplight/markdown-viewer/-/markdown-viewer-5.6.0.tgz", - "integrity": "sha512-vKHn1Bv9nafBYQWtNLlrRZ1aKqFRTOdfWUAhCSV1ZH4iqxGa+O1OWWTBbeOF5du8vcrWu1tTrXoCXkZjmq1NlA==", - "requires": { - "@rehooks/component-size": "^1.0.3", - "@stoplight/markdown": "^3.1.3", - "@stoplight/react-error-boundary": "^2.0.0", - "deepmerge": "^4.2.2", - "hast-to-hyperscript": "^10.0.1", - "hast-util-raw": "7.0.0", - "hast-util-sanitize": "^4.0.0", - "hastscript": "^7.0.2", - "mdast-util-to-hast": "^11.1.1", - "remark-parse": "^9.0.0", - "unified": "^9.2.1", - "unist-builder": "^3.0.0", - "unist-util-select": "^4.0.1", - "unist-util-visit": "^3.1.0" - }, - "dependencies": { - "@types/parse5": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", - "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==" - }, - "comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==" - }, - "hast-to-hyperscript": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-10.0.3.tgz", - "integrity": "sha512-NuBoUStp4fRwmvlfbidlEiRSTk0gSHm+97q4Xn9CJ10HO+Py7nlTuDi6RhM1qLOureukGrCXLG7AAxaGqqyslQ==", - "requires": { - "@types/unist": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^0.4.1", - "web-namespaces": "^2.0.0" - } - }, - "hast-util-from-parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-7.1.2.tgz", - "integrity": "sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==", - "requires": { - "@types/hast": "^2.0.0", - "@types/unist": "^2.0.0", - "hastscript": "^7.0.0", - "property-information": "^6.0.0", - "vfile": "^5.0.0", - "vfile-location": "^4.0.0", - "web-namespaces": "^2.0.0" - }, - "dependencies": { - "vfile": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", - "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - } - } - }, - "hast-util-parse-selector": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz", - "integrity": "sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==", - "requires": { - "@types/hast": "^2.0.0" - } - }, - "hast-util-raw": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-7.0.0.tgz", - "integrity": "sha512-3UKuYgaqakZrY916JfQzqSk8xZGyxpj9zwfPB3MctXLDorPdyqk1QZGZoCEqU2LMIEzVXBZukAQs7aAH9TJPIw==", - "requires": { - "@types/hast": "^2.0.0", - "@types/parse5": "^6.0.0", - "@types/unist": "^2.0.3", - "hast-util-from-parse5": "^7.0.0", - "hast-util-to-parse5": "^7.0.0", - "html-void-elements": "^2.0.0", - "parse5": "^6.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^3.0.0", - "vfile": "^4.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - } - }, - "hast-util-to-parse5": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-7.1.0.tgz", - "integrity": "sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==", - "requires": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - } - }, - "hastscript": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.2.0.tgz", - "integrity": "sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==", - "requires": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-parse-selector": "^3.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0" - } - }, - "html-void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz", - "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==" - }, - "mdast-util-definitions": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz", - "integrity": "sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==", - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "dependencies": { - "unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - } - }, - "unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - } - } - }, - "mdast-util-to-hast": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-11.3.0.tgz", - "integrity": "sha512-4o3Cli3hXPmm1LhB+6rqhfsIUBjnKFlIUZvudaermXB+4/KONdd/W4saWWkC+LBLbPMqhFSSTSRgafHsT5fVJw==", - "requires": { - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "@types/mdurl": "^1.0.0", - "mdast-util-definitions": "^5.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^3.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "dependencies": { - "unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - } - }, - "unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - } - } - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "property-information": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.2.0.tgz", - "integrity": "sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==" - }, - "remark-parse": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", - "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", - "requires": { - "mdast-util-from-markdown": "^0.8.0" - } - }, - "space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==" - }, - "style-to-object": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.1.tgz", - "integrity": "sha512-HFpbb5gr2ypci7Qw+IOhnP2zOU7e77b+rzM+wTzXzfi1PrtBCX0E7Pk4wL4iTLnhzZ+JgEGAhX81ebTg/aYjQw==", - "requires": { - "inline-style-parser": "0.1.1" - } - }, - "unist-builder": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-3.0.1.tgz", - "integrity": "sha512-gnpOw7DIpCA0vpr6NqdPvTWnlPTApCTRzr+38E6hCWx3rz/cjo83SsKIlS1Z+L5ttScQ2AwutNnb8+tAvpb6qQ==", - "requires": { - "@types/unist": "^2.0.0" - } - }, - "unist-util-generated": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.1.tgz", - "integrity": "sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==" - }, - "unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "requires": { - "@types/unist": "^2.0.0" - } - }, - "unist-util-position": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.4.tgz", - "integrity": "sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==", - "requires": { - "@types/unist": "^2.0.0" - } - }, - "unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "requires": { - "@types/unist": "^2.0.0" - } - }, - "unist-util-visit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-3.1.0.tgz", - "integrity": "sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^4.0.0" - } - }, - "unist-util-visit-parents": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz", - "integrity": "sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - }, - "vfile-location": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.1.0.tgz", - "integrity": "sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==", - "requires": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" - }, - "dependencies": { - "vfile": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", - "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - } - } - }, - "vfile-message": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", - "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } - }, - "web-namespaces": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", - "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==" - }, - "zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==" - } - } - }, - "@stoplight/mosaic": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/@stoplight/mosaic/-/mosaic-1.40.0.tgz", - "integrity": "sha512-hHEb0Cc4TzaPRjt9h5Ll7FuuVedvW6ZPa5HIxIMhPj4jgy5G3AaC1CCXzdRlwicBkUIp6lNkBOpB7cHadpXp1w==", - "requires": { - "@fortawesome/fontawesome-svg-core": "^6.1.1", - "@fortawesome/react-fontawesome": "^0.2.0", - "@react-hook/size": "^2.1.1", - "@react-hook/window-size": "^3.0.7", - "@react-types/button": "3.4.1", - "@react-types/radio": "3.1.2", - "@react-types/shared": "3.9.0", - "@react-types/switch": "3.1.2", - "@react-types/textfield": "3.3.0", - "@stoplight/types": "^13.7.0", - "@types/react": "^17.0.3", - "@types/react-dom": "^17.0.3", - "clsx": "^1.1.1", - "copy-to-clipboard": "^3.3.1", - "dom-helpers": "^3.3.1", - "lodash.get": "^4.4.2", - "nano-memoize": "^1.2.1", - "polished": "^4.1.3", - "react-fast-compare": "^3.2.0", - "react-overflow-list": "^0.5.0", - "ts-keycode-enum": "^1.0.6", - "tslib": "^2.1.0", - "use-resize-observer": "^9.0.2", - "zustand": "^3.5.2" - }, - "dependencies": { - "use-resize-observer": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/use-resize-observer/-/use-resize-observer-9.1.0.tgz", - "integrity": "sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==", - "requires": { - "@juggle/resize-observer": "^3.3.1" - } - } - } - }, - "@stoplight/mosaic-code-editor": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/@stoplight/mosaic-code-editor/-/mosaic-code-editor-1.40.0.tgz", - "integrity": "sha512-KU9Qj+JeXA6V4PtqJa8nV6W5scml92Bvbwc+//zd13MR5iUbbEKux9kzwtB1OJxvgSRsDI/5oP5yq1RzPLLQuw==", - "requires": { - "@fortawesome/fontawesome-svg-core": "^6.1.1", - "@fortawesome/react-fontawesome": "^0.2.0", - "@react-hook/size": "^2.1.1", - "@react-hook/window-size": "^3.0.7", - "@react-types/radio": "3.1.2", - "@react-types/shared": "3.9.0", - "@react-types/switch": "3.1.2", - "@stoplight/mosaic": "1.40.0", - "@stoplight/mosaic-code-viewer": "1.40.0", - "@stoplight/types": "^13.7.0", - "clsx": "^1.1.1", - "copy-to-clipboard": "^3.3.1", - "dom-helpers": "^3.3.1", - "lodash.get": "^4.4.2", - "nano-memoize": "^1.2.1", - "polished": "^4.1.3", - "prism-react-renderer": "^1.2.1", - "prismjs": "^1.23.0", - "react-fast-compare": "^3.2.0", - "react-overflow-list": "^0.5.0", - "ts-keycode-enum": "^1.0.6", - "tslib": "^2.1.0", - "use-resize-observer": "^9.0.2", - "zustand": "^3.5.2" - }, - "dependencies": { - "use-resize-observer": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/use-resize-observer/-/use-resize-observer-9.1.0.tgz", - "integrity": "sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==", - "requires": { - "@juggle/resize-observer": "^3.3.1" - } - } - } - }, - "@stoplight/mosaic-code-viewer": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/@stoplight/mosaic-code-viewer/-/mosaic-code-viewer-1.40.0.tgz", - "integrity": "sha512-beseNsIl3MT868HXgLDB1GNExiOpBwNPJttrOOceR3SXv1Xa/oTEVh2ADhgiW010uWuwYLq9QMllEeXJg/YX/Q==", - "requires": { - "@fortawesome/fontawesome-svg-core": "^6.1.1", - "@fortawesome/react-fontawesome": "^0.2.0", - "@react-hook/size": "^2.1.1", - "@react-hook/window-size": "^3.0.7", - "@react-types/radio": "3.1.2", - "@react-types/shared": "3.9.0", - "@react-types/switch": "3.1.2", - "@stoplight/mosaic": "1.40.0", - "@stoplight/types": "^13.7.0", - "clsx": "^1.1.1", - "copy-to-clipboard": "^3.3.1", - "dom-helpers": "^3.3.1", - "lodash.get": "^4.4.2", - "nano-memoize": "^1.2.1", - "polished": "^4.1.3", - "prism-react-renderer": "^1.2.1", - "prismjs": "^1.23.0", - "react-fast-compare": "^3.2.0", - "react-overflow-list": "^0.5.0", - "ts-keycode-enum": "^1.0.6", - "tslib": "^2.1.0", - "use-resize-observer": "^9.0.2", - "zustand": "^3.5.2" - }, - "dependencies": { - "use-resize-observer": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/use-resize-observer/-/use-resize-observer-9.1.0.tgz", - "integrity": "sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==", - "requires": { - "@juggle/resize-observer": "^3.3.1" - } - } - } - }, - "@stoplight/ordered-object-literal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@stoplight/ordered-object-literal/-/ordered-object-literal-1.0.4.tgz", - "integrity": "sha512-OF8uib1jjDs5/cCU+iOVy+GJjU3X7vk/qJIkIJFqwmlJKrrtijFmqwbu8XToXrwTYLQTP+Hebws5gtZEmk9jag==" - }, - "@stoplight/path": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@stoplight/path/-/path-1.3.2.tgz", - "integrity": "sha512-lyIc6JUlUA8Ve5ELywPC8I2Sdnh1zc1zmbYgVarhXIp9YeAB0ReeqmGEOWNtlHkbP2DAA1AL65Wfn2ncjK/jtQ==" - }, - "@stoplight/react-error-boundary": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@stoplight/react-error-boundary/-/react-error-boundary-2.0.0.tgz", - "integrity": "sha512-r9cyaaH2h0kFe5c0aP+yJuY9CyXgfbBaMO6660M/wRQXqM49K5Ul7kexE4ei2cqYgo+Cd6ALl6RXSZFYwf2kCA==", - "requires": { - "@sentry/react": "^6.13.2" - } - }, - "@stoplight/types": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-13.15.0.tgz", - "integrity": "sha512-pBLjVRrWGVd+KzTbL3qrmufSKIEp0UfziDBdt/nrTHPKrlrtVwaHdrrQMcpM23yJDU1Wcg4cHvhIuGtKCT5OmA==", - "requires": { - "@types/json-schema": "^7.0.4", - "utility-types": "^3.10.0" - } - }, - "@stoplight/yaml": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@stoplight/yaml/-/yaml-4.2.3.tgz", - "integrity": "sha512-Mx01wjRAR9C7yLMUyYFTfbUf5DimEpHMkRDQ1PKLe9dfNILbgdxyrncsOXM3vCpsQ1Hfj4bPiGl+u4u6e9Akqw==", - "requires": { - "@stoplight/ordered-object-literal": "^1.0.1", - "@stoplight/types": "^13.0.0", - "@stoplight/yaml-ast-parser": "0.0.48", - "tslib": "^2.2.0" - } - }, - "@stoplight/yaml-ast-parser": { - "version": "0.0.48", - "resolved": "https://registry.npmjs.org/@stoplight/yaml-ast-parser/-/yaml-ast-parser-0.0.48.tgz", - "integrity": "sha512-sV+51I7WYnLJnKPn2EMWgS4EUfoP4iWEbrWwbXsj0MZCB/xOK8j6+C9fntIdOM50kpx45ZLC3s6kwKivWuqvyg==" - }, - "@svgr/babel-plugin-add-jsx-attribute": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", - "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==", - "requires": {} - }, - "@svgr/babel-plugin-remove-jsx-attribute": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.5.0.tgz", - "integrity": "sha512-8zYdkym7qNyfXpWvu4yq46k41pyNM9SOstoWhKlm+IfdCE1DdnRKeMUPsWIEO/DEkaWxJ8T9esNdG3QwQ93jBA==", - "requires": {} - }, - "@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.5.0.tgz", - "integrity": "sha512-NFdxMq3xA42Kb1UbzCVxplUc0iqSyM9X8kopImvFnB+uSDdzIHOdbs1op8ofAvVRtbg4oZiyRl3fTYeKcOe9Iw==", - "requires": {} - }, - "@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz", - "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==", - "requires": {} - }, - "@svgr/babel-plugin-svg-dynamic-title": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz", - "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==", - "requires": {} - }, - "@svgr/babel-plugin-svg-em-dimensions": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz", - "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==", - "requires": {} - }, - "@svgr/babel-plugin-transform-react-native-svg": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz", - "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==", - "requires": {} - }, - "@svgr/babel-plugin-transform-svg-component": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz", - "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==", - "requires": {} - }, - "@svgr/babel-preset": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz", - "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==", - "requires": { - "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", - "@svgr/babel-plugin-remove-jsx-attribute": "*", - "@svgr/babel-plugin-remove-jsx-empty-expression": "*", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", - "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", - "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", - "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", - "@svgr/babel-plugin-transform-svg-component": "^6.5.1" - } - }, - "@svgr/core": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz", - "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", - "requires": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/plugin-jsx": "^6.5.1", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.1" - } - }, - "@svgr/hast-util-to-babel-ast": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", - "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", - "requires": { - "@babel/types": "^7.20.0", - "entities": "^4.4.0" - } - }, - "@svgr/plugin-jsx": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", - "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", - "requires": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/hast-util-to-babel-ast": "^6.5.1", - "svg-parser": "^2.0.4" - } - }, - "@svgr/plugin-svgo": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz", - "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==", - "requires": { - "cosmiconfig": "^7.0.1", - "deepmerge": "^4.2.2", - "svgo": "^2.8.0" - } - }, - "@svgr/webpack": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz", - "integrity": "sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==", - "requires": { - "@babel/core": "^7.19.6", - "@babel/plugin-transform-react-constant-elements": "^7.18.12", - "@babel/preset-env": "^7.19.4", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.18.6", - "@svgr/core": "^6.5.1", - "@svgr/plugin-jsx": "^6.5.1", - "@svgr/plugin-svgo": "^6.5.1" - } - }, - "@swc/core": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.37.tgz", - "integrity": "sha512-VOFlEQ1pReOM73N9A7R8rt561GU8Rxsq833jiimWDUB2sXEN3V6n6wFTgYmZuMz2T4/R0cQA1nV48KkaT4gkFw==", - "dev": true, - "requires": { - "@swc/core-darwin-arm64": "1.3.37", - "@swc/core-darwin-x64": "1.3.37", - "@swc/core-linux-arm-gnueabihf": "1.3.37", - "@swc/core-linux-arm64-gnu": "1.3.37", - "@swc/core-linux-arm64-musl": "1.3.37", - "@swc/core-linux-x64-gnu": "1.3.37", - "@swc/core-linux-x64-musl": "1.3.37", - "@swc/core-win32-arm64-msvc": "1.3.37", - "@swc/core-win32-ia32-msvc": "1.3.37", - "@swc/core-win32-x64-msvc": "1.3.37" - } - }, - "@swc/core-darwin-arm64": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.37.tgz", - "integrity": "sha512-iIyVqqioUpVeT/hbBVfkrsjfCyL4idNH+LVKGmoTAWaTTSB0+UNhNuA7Wh2CqIHWh1Mv7IlumitWPcqsVDdoEw==", - "dev": true, - "optional": true - }, - "@swc/core-darwin-x64": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.37.tgz", - "integrity": "sha512-dao5nXPWKxtaxqak4ZkRyBoApNIelW/glantQhPhj0FjMjuIQc+v03ldJ8XDByWOG+6xuVUTheANCtEccxoQBw==", - "dev": true, - "optional": true - }, - "@swc/core-linux-arm-gnueabihf": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.37.tgz", - "integrity": "sha512-/mVrc8H/f062CUkqKGmBiil2VIYu4mKawHxERfeP1y38X5K/OwjG5s9MgO9TVxy+Ly6vejwj70kRhSa3hVp1Bw==", - "dev": true, - "optional": true - }, - "@swc/core-linux-arm64-gnu": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.37.tgz", - "integrity": "sha512-eRQ3KaZI0j5LidTfOIi/kUVOOMuVmw1HCdt/Z1TAUKoHMLVxY8xcJ3pEE3/+ednI60EmHpwpJRs6LelXyL6uzQ==", - "dev": true, - "optional": true - }, - "@swc/core-linux-arm64-musl": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.37.tgz", - "integrity": "sha512-w2BRLODyxNQY2rfHZMZ5ir6QrrnGBPlnIslTrgKmVbn1OjZoxUCtuqhrYnCmybaAc4DOkeH02TqynEFXrm+EMw==", - "dev": true, - "optional": true - }, - "@swc/core-linux-x64-gnu": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.37.tgz", - "integrity": "sha512-CfoH8EsZJZ9kunjMUjBNYD5fFuO86zw+K/o4wEw72Yg6ZEiqPmeIlCKU8tpTv4sK+CbhUXrmVzMB5tqsb2jALQ==", - "dev": true, - "optional": true - }, - "@swc/core-linux-x64-musl": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.37.tgz", - "integrity": "sha512-9YPrHYNdoG7PK11gV51GfL45biI2dic+YTqHUDKyykemsD7Ot1zUFX7Ty//pdvpKcKSff6SrHbfFACD5ziNirA==", - "dev": true, - "optional": true - }, - "@swc/core-win32-arm64-msvc": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.37.tgz", - "integrity": "sha512-h17Ek8/wCDje6BrXOvCXBM80oBRmTSMMdLyt87whTl5xqYlWYYs9oQIzZndNRTlNpTgjGO8Ns2eo4kwVxIkBIA==", - "dev": true, - "optional": true - }, - "@swc/core-win32-ia32-msvc": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.37.tgz", - "integrity": "sha512-1BR175E1olGy/zdt94cgdb6ps/lBNissAOaxyBk8taFpcjy3zpdP30yAoH0GIsC6isnZ5JfArbOJNRXXO5tE0Q==", - "dev": true, - "optional": true - }, - "@swc/core-win32-x64-msvc": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.37.tgz", - "integrity": "sha512-1siDQ7dccQ1pesJmgAL3BUBbRPtfbNInOWnZOkiie/DfFqGQ117QKnCVyjUvwFKfTQx1+3UUTDmMSlRd00SlXg==", - "dev": true, - "optional": true - }, - "@swc/jest": { - "version": "0.2.24", - "resolved": "https://registry.npmjs.org/@swc/jest/-/jest-0.2.24.tgz", - "integrity": "sha512-fwgxQbM1wXzyKzl1+IW0aGrRvAA8k0Y3NxFhKigbPjOJ4mCKnWEcNX9HQS3gshflcxq8YKhadabGUVfdwjCr6Q==", - "dev": true, - "requires": { - "@jest/create-cache-key-function": "^27.4.2", - "jsonc-parser": "^3.2.0" - } - }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "requires": { - "defer-to-connect": "^1.0.1" - } - }, - "@testing-library/dom": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.0.0.tgz", - "integrity": "sha512-+/TLgKNFsYUshOY/zXsQOk+PlFQK+eyJ9T13IDVNJEi+M+Un7xlJK+FZKkbGSnf0+7E1G6PlDhkSYQ/GFiruBQ==", - "dev": true, - "peer": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "^5.0.0", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.4.4", - "pretty-format": "^27.0.2" - } - }, - "@testing-library/jest-dom": { - "version": "5.16.5", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz", - "integrity": "sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==", - "dev": true, - "requires": { - "@adobe/css-tools": "^4.0.1", - "@babel/runtime": "^7.9.2", - "@types/testing-library__jest-dom": "^5.9.1", - "aria-query": "^5.0.0", - "chalk": "^3.0.0", - "css.escape": "^1.5.1", - "dom-accessibility-api": "^0.5.6", - "lodash": "^4.17.15", - "redent": "^3.0.0" - }, - "dependencies": { - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "@testing-library/react": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-12.1.5.tgz", - "integrity": "sha512-OfTXCJUFgjd/digLUuPxa0+/3ZxsQmE7ub9kcbW/wi96Bh3o/p5vrETcBGfP17NWPGqeYYl5LTRpwyGoMC4ysg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.12.5", - "@testing-library/dom": "^8.0.0", - "@types/react-dom": "<18.0.0" - }, - "dependencies": { - "@testing-library/dom": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.0.tgz", - "integrity": "sha512-d9ULIT+a4EXLX3UU8FBjauG9NnsZHkHztXoIcTsOKoOw030fyjheN9svkTULjJxtYag9DZz5Jz5qkWZDPxTFwA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "^5.0.0", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.4.4", - "pretty-format": "^27.0.2" - } - } - } - }, - "@testing-library/user-event": { - "version": "13.5.0", - "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz", - "integrity": "sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.12.5" - } - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" - }, - "@types/aria-query": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz", - "integrity": "sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==", - "dev": true - }, - "@types/babel__core": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", - "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", - "dev": true, - "requires": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", - "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "requires": { - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", - "requires": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "@types/d3": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.0.tgz", - "integrity": "sha512-jIfNVK0ZlxcuRDKtRS/SypEyOQ6UHaFQBKv032X45VvxSJ6Yi5G9behy9h6tNTHTDGh5Vq+KbmBjUWLgY4meCA==", - "optional": true, - "requires": { - "@types/d3-array": "*", - "@types/d3-axis": "*", - "@types/d3-brush": "*", - "@types/d3-chord": "*", - "@types/d3-color": "*", - "@types/d3-contour": "*", - "@types/d3-delaunay": "*", - "@types/d3-dispatch": "*", - "@types/d3-drag": "*", - "@types/d3-dsv": "*", - "@types/d3-ease": "*", - "@types/d3-fetch": "*", - "@types/d3-force": "*", - "@types/d3-format": "*", - "@types/d3-geo": "*", - "@types/d3-hierarchy": "*", - "@types/d3-interpolate": "*", - "@types/d3-path": "*", - "@types/d3-polygon": "*", - "@types/d3-quadtree": "*", - "@types/d3-random": "*", - "@types/d3-scale": "*", - "@types/d3-scale-chromatic": "*", - "@types/d3-selection": "*", - "@types/d3-shape": "*", - "@types/d3-time": "*", - "@types/d3-time-format": "*", - "@types/d3-timer": "*", - "@types/d3-transition": "*", - "@types/d3-zoom": "*" - } - }, - "@types/d3-array": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.0.4.tgz", - "integrity": "sha512-nwvEkG9vYOc0Ic7G7kwgviY4AQlTfYGIZ0fqB7CQHXGyYM6nO7kJh5EguSNA3jfh4rq7Sb7eMVq8isuvg2/miQ==", - "optional": true - }, - "@types/d3-axis": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.2.tgz", - "integrity": "sha512-uGC7DBh0TZrU/LY43Fd8Qr+2ja1FKmH07q2FoZFHo1eYl8aj87GhfVoY1saJVJiq24rp1+wpI6BvQJMKgQm8oA==", - "optional": true, - "requires": { - "@types/d3-selection": "*" - } - }, - "@types/d3-brush": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.2.tgz", - "integrity": "sha512-2TEm8KzUG3N7z0TrSKPmbxByBx54M+S9lHoP2J55QuLU0VSQ9mE96EJSAOVNEqd1bbynMjeTS9VHmz8/bSw8rA==", - "optional": true, - "requires": { - "@types/d3-selection": "*" - } - }, - "@types/d3-chord": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.2.tgz", - "integrity": "sha512-abT/iLHD3sGZwqMTX1TYCMEulr+wBd0SzyOQnjYNLp7sngdOHYtNkMRI5v3w5thoN+BWtlHVDx2Osvq6fxhZWw==", - "optional": true - }, - "@types/d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-HKuicPHJuvPgCD+np6Se9MQvS6OCbJmOjGvylzMJRlDwUXjKTTXs6Pwgk79O09Vj/ho3u1ofXnhFOaEWWPrlwA==", - "optional": true - }, - "@types/d3-contour": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.2.tgz", - "integrity": "sha512-k6/bGDoAGJZnZWaKzeB+9glgXCYGvh6YlluxzBREiVo8f/X2vpTEdgPy9DN7Z2i42PZOZ4JDhVdlTSTSkLDPlQ==", - "optional": true, - "requires": { - "@types/d3-array": "*", - "@types/geojson": "*" - } - }, - "@types/d3-delaunay": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.1.tgz", - "integrity": "sha512-tLxQ2sfT0p6sxdG75c6f/ekqxjyYR0+LwPrsO1mbC9YDBzPJhs2HbJJRrn8Ez1DBoHRo2yx7YEATI+8V1nGMnQ==", - "optional": true - }, - "@types/d3-dispatch": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.2.tgz", - "integrity": "sha512-rxN6sHUXEZYCKV05MEh4z4WpPSqIw+aP7n9ZN6WYAAvZoEAghEK1WeVZMZcHRBwyaKflU43PCUAJNjFxCzPDjg==", - "optional": true - }, - "@types/d3-drag": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.2.tgz", - "integrity": "sha512-qmODKEDvyKWVHcWWCOVcuVcOwikLVsyc4q4EBJMREsoQnR2Qoc2cZQUyFUPgO9q4S3qdSqJKBsuefv+h0Qy+tw==", - "optional": true, - "requires": { - "@types/d3-selection": "*" - } - }, - "@types/d3-dsv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.1.tgz", - "integrity": "sha512-76pBHCMTvPLt44wFOieouXcGXWOF0AJCceUvaFkxSZEu4VDUdv93JfpMa6VGNFs01FHfuP4a5Ou68eRG1KBfTw==", - "optional": true - }, - "@types/d3-ease": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.0.tgz", - "integrity": "sha512-aMo4eaAOijJjA6uU+GIeW018dvy9+oH5Y2VPPzjjfxevvGQ/oRDs+tfYC9b50Q4BygRR8yE2QCLsrT0WtAVseA==", - "optional": true - }, - "@types/d3-fetch": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.2.tgz", - "integrity": "sha512-gllwYWozWfbep16N9fByNBDTkJW/SyhH6SGRlXloR7WdtAaBui4plTP+gbUgiEot7vGw/ZZop1yDZlgXXSuzjA==", - "optional": true, - "requires": { - "@types/d3-dsv": "*" - } - }, - "@types/d3-force": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.4.tgz", - "integrity": "sha512-q7xbVLrWcXvSBBEoadowIUJ7sRpS1yvgMWnzHJggFy5cUZBq2HZL5k/pBSm0GdYWS1vs5/EDwMjSKF55PDY4Aw==", - "optional": true - }, - "@types/d3-format": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.1.tgz", - "integrity": "sha512-5KY70ifCCzorkLuIkDe0Z9YTf9RR2CjBX1iaJG+rgM/cPP+sO+q9YdQ9WdhQcgPj1EQiJ2/0+yUkkziTG6Lubg==", - "optional": true - }, - "@types/d3-geo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.0.3.tgz", - "integrity": "sha512-bK9uZJS3vuDCNeeXQ4z3u0E7OeJZXjUgzFdSOtNtMCJCLvDtWDwfpRVWlyt3y8EvRzI0ccOu9xlMVirawolSCw==", - "optional": true, - "requires": { - "@types/geojson": "*" - } - }, - "@types/d3-hierarchy": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", - "integrity": "sha512-9hjRTVoZjRFR6xo8igAJyNXQyPX6Aq++Nhb5ebrUF414dv4jr2MitM2fWiOY475wa3Za7TOS2Gh9fmqEhLTt0A==", - "optional": true - }, - "@types/d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-jx5leotSeac3jr0RePOH1KdR9rISG91QIE4Q2PYTu4OymLTZfA3SrnURSLzKH48HmXVUru50b8nje4E79oQSQw==", - "optional": true, - "requires": { - "@types/d3-color": "*" - } - }, - "@types/d3-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.0.0.tgz", - "integrity": "sha512-0g/A+mZXgFkQxN3HniRDbXMN79K3CdTpLsevj+PXiTcb2hVyvkZUBg37StmgCQkaD84cUJ4uaDAWq7UJOQy2Tg==", - "optional": true - }, - "@types/d3-polygon": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.0.tgz", - "integrity": "sha512-D49z4DyzTKXM0sGKVqiTDTYr+DHg/uxsiWDAkNrwXYuiZVd9o9wXZIo+YsHkifOiyBkmSWlEngHCQme54/hnHw==", - "optional": true - }, - "@types/d3-quadtree": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.2.tgz", - "integrity": "sha512-QNcK8Jguvc8lU+4OfeNx+qnVy7c0VrDJ+CCVFS9srBo2GL9Y18CnIxBdTF3v38flrGy5s1YggcoAiu6s4fLQIw==", - "optional": true - }, - "@types/d3-random": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.1.tgz", - "integrity": "sha512-IIE6YTekGczpLYo/HehAy3JGF1ty7+usI97LqraNa8IiDur+L44d0VOjAvFQWJVdZOJHukUJw+ZdZBlgeUsHOQ==", - "optional": true - }, - "@types/d3-scale": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.3.tgz", - "integrity": "sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ==", - "optional": true, - "requires": { - "@types/d3-time": "*" - } - }, - "@types/d3-scale-chromatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", - "integrity": "sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw==", - "optional": true - }, - "@types/d3-selection": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.4.tgz", - "integrity": "sha512-ZeykX7286BCyMg9sH5fIAORyCB6hcATPSRQpN47jwBA2bMbAT0s+EvtDP5r1FZYJ95R8QoEE1CKJX+n0/M5Vhg==", - "optional": true - }, - "@types/d3-shape": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.1.tgz", - "integrity": "sha512-6Uh86YFF7LGg4PQkuO2oG6EMBRLuW9cbavUW46zkIO5kuS2PfTqo2o9SkgtQzguBHbLgNnU90UNsITpsX1My+A==", - "optional": true, - "requires": { - "@types/d3-path": "*" - } - }, - "@types/d3-time": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz", - "integrity": "sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg==", - "optional": true - }, - "@types/d3-time-format": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.0.tgz", - "integrity": "sha512-yjfBUe6DJBsDin2BMIulhSHmr5qNR5Pxs17+oW4DoVPyVIXZ+m6bs7j1UVKP08Emv6jRmYrYqxYzO63mQxy1rw==", - "optional": true - }, - "@types/d3-timer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.0.tgz", - "integrity": "sha512-HNB/9GHqu7Fo8AQiugyJbv6ZxYz58wef0esl4Mv828w1ZKpAshw/uFWVDUcIB9KKFeFKoxS3cHY07FFgtTRZ1g==", - "optional": true - }, - "@types/d3-transition": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.3.tgz", - "integrity": "sha512-/S90Od8Id1wgQNvIA8iFv9jRhCiZcGhPd2qX0bKF/PS+y0W5CrXKgIiELd2CvG1mlQrWK/qlYh3VxicqG1ZvgA==", - "optional": true, - "requires": { - "@types/d3-selection": "*" - } - }, - "@types/d3-zoom": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.2.tgz", - "integrity": "sha512-t09DDJVBI6AkM7N8kuPsnq/3d/ehtRKBN1xSiYjjMCgbiw6HM6Ged5VhvswmhprfKyGvzeTEL/4WBaK9llWvlA==", - "optional": true, - "requires": { - "@types/d3-interpolate": "*", - "@types/d3-selection": "*" - } - }, - "@types/eslint": { - "version": "8.21.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.21.1.tgz", - "integrity": "sha512-rc9K8ZpVjNcLs8Fp0dkozd5Pt2Apk1glO4Vgz8ix1u6yFByxfqo5Yavpy65o+93TAe24jr7v+eSBtFLvOQtCRQ==", - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" - }, - "@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.33", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz", - "integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==", - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "@types/geojson": { - "version": "7946.0.10", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz", - "integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==", - "optional": true - }, - "@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/har-format": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/@types/har-format/-/har-format-1.2.10.tgz", - "integrity": "sha512-o0J30wqycjF5miWDKYKKzzOU1ZTLuA42HZ4HE7/zqTOc/jTLdQ5NhYWvsRQo45Nfi1KHoRdNhteSI4BAxTF1Pg==" - }, - "@types/hast": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", - "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", - "requires": { - "@types/unist": "*" - } - }, - "@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" - }, - "@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" - }, - "@types/http-proxy": { - "version": "1.17.10", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.10.tgz", - "integrity": "sha512-Qs5aULi+zV1bwKAg5z1PWnDXWmsn+LxIvUGv6E2+OOMYhclZMO+OXd9pYVf2gLykf2I7IV2u7oTHwChPNsvJ7g==", - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "29.4.0", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.4.0.tgz", - "integrity": "sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ==", - "dev": true, - "requires": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "pretty-format": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", - "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", - "dev": true, - "requires": { - "@jest/schemas": "^29.4.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - } - } - } - }, - "@types/js-cookie": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-2.2.7.tgz", - "integrity": "sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==" - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" - }, - "@types/katex": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.11.1.tgz", - "integrity": "sha512-DUlIj2nk0YnJdlWgsFuVKcX27MLW0KbKmGVoUHmFr+74FYYNUDAaj9ZqTADvsbE8rfxuVmSFc7KczYn5Y09ozg==" - }, - "@types/mdast": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", - "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", - "requires": { - "@types/unist": "*" - } - }, - "@types/mdurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", - "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" - }, - "@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" - }, - "@types/node": { - "version": "18.14.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.4.tgz", - "integrity": "sha512-VhCw7I7qO2X49+jaKcAUwi3rR+hbxT5VcYF493+Z5kMLI0DL568b7JI4IDJaxWFH0D/xwmGJNoXisyX+w7GH/g==" - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "@types/parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", - "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" - }, - "@types/prettier": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", - "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", - "dev": true - }, - "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" - }, - "@types/react": { - "version": "17.0.53", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.53.tgz", - "integrity": "sha512-1yIpQR2zdYu1Z/dc1OxC+MA6GR240u3gcnP4l6mvj/PJiVaqHsQPmWttsvHsfnhfPbU2FuGmo0wSITPygjBmsw==", - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-dom": { - "version": "17.0.19", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.19.tgz", - "integrity": "sha512-PiYG40pnQRdPHnlf7tZnp0aQ6q9tspYr72vD61saO6zFCybLfMqwUCN0va1/P+86DXn18ZWeW30Bk7xlC5eEAQ==", - "requires": { - "@types/react": "^17" - } - }, - "@types/react-router": { - "version": "5.1.20", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", - "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "@types/react-router-config": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.6.tgz", - "integrity": "sha512-db1mx37a1EJDf1XeX8jJN7R3PZABmJQXR8r28yUjVMFSjkmnQo6X6pOEEmNl+Tp2gYQOGPdYbFIipBtdElZ3Yg==", - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "@types/resize-observer-browser": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/@types/resize-observer-browser/-/resize-observer-browser-0.1.7.tgz", - "integrity": "sha512-G9eN0Sn0ii9PWQ3Vl72jDPgeJwRWhv2Qk/nQkJuWmRmOB4HX3/BhD5SE1dZs/hzPZL/WKnvF0RHdTSG54QJFyg==", - "optional": true - }, - "@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" - }, - "@types/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==", - "requires": { - "@types/node": "*" - } - }, - "@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - }, - "@types/semver": { - "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", - "dev": true - }, - "@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "requires": { - "@types/express": "*" - } - }, - "@types/serve-static": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", - "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", - "requires": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "@types/sinonjs__fake-timers": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", - "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", - "dev": true - }, - "@types/sizzle": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", - "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", - "dev": true - }, - "@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "requires": { - "@types/node": "*" - } - }, - "@types/source-list-map": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", - "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", - "dev": true - }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "@types/swagger-schema-official": { - "version": "2.0.22", - "resolved": "https://registry.npmjs.org/@types/swagger-schema-official/-/swagger-schema-official-2.0.22.tgz", - "integrity": "sha512-7yQiX6MWSFSvc/1wW5smJMZTZ4fHOd+hqLr3qr/HONDxHEa2bnYAsOcGBOEqFIjd4yetwMOdEDdeW+udRAQnHA==" - }, - "@types/tapable": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz", - "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", - "dev": true - }, - "@types/testing-library__jest-dom": { - "version": "5.14.5", - "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz", - "integrity": "sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==", - "dev": true, - "requires": { - "@types/jest": "*" - } - }, - "@types/type-is": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@types/type-is/-/type-is-1.6.3.tgz", - "integrity": "sha512-PNs5wHaNcBgCQG5nAeeZ7OvosrEsI9O4W2jAOO9BCCg4ux9ZZvH2+0iSCOIDBiKuQsiNS8CBlmfX9f5YBQ22cA==", - "requires": { - "@types/node": "*" - } - }, - "@types/uglify-js": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.1.tgz", - "integrity": "sha512-GkewRA4i5oXacU/n4MA9+bLgt5/L3F1mKrYvFGm7r2ouLXhRKjuWwo9XHNnbx6WF3vlGW21S3fCvgqxvxXXc5g==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - } - }, - "@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" - }, - "@types/webpack": { - "version": "4.41.33", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.33.tgz", - "integrity": "sha512-PPajH64Ft2vWevkerISMtnZ8rTs4YmRbs+23c402J0INmxDKCrhZNvwZYtzx96gY2wAtXdrK1BS2fiC8MlLr3g==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/tapable": "^1", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "anymatch": "^3.0.0", - "source-map": "^0.6.0" - } - }, - "@types/webpack-sources": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.0.tgz", - "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true - } - } - }, - "@types/ws": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", - "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", - "requires": { - "@types/node": "*" - } - }, - "@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" - }, - "@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "dev": true, - "optional": true, - "requires": { - "@types/node": "*" - } - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.54.0.tgz", - "integrity": "sha512-+hSN9BdSr629RF02d7mMtXhAJvDTyCbprNYJKrXETlul/Aml6YZwd90XioVbjejQeHbb3R8Dg0CkRgoJDxo8aw==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.54.0", - "@typescript-eslint/type-utils": "5.54.0", - "@typescript-eslint/utils": "5.54.0", - "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/parser": { - "version": "5.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.54.0.tgz", - "integrity": "sha512-aAVL3Mu2qTi+h/r04WI/5PfNWvO6pdhpeMRWk9R7rEV4mwJNzoWf5CCU5vDKBsPIFQFjEq1xg7XBI2rjiMXQbQ==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.54.0", - "@typescript-eslint/types": "5.54.0", - "@typescript-eslint/typescript-estree": "5.54.0", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.54.0.tgz", - "integrity": "sha512-VTPYNZ7vaWtYna9M4oD42zENOBrb+ZYyCNdFs949GcN8Miwn37b8b7eMj+EZaq7VK9fx0Jd+JhmkhjFhvnovhg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.54.0", - "@typescript-eslint/visitor-keys": "5.54.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.54.0.tgz", - "integrity": "sha512-WI+WMJ8+oS+LyflqsD4nlXMsVdzTMYTxl16myXPaCXnSgc7LWwMsjxQFZCK/rVmTZ3FN71Ct78ehO9bRC7erYQ==", - "dev": true, - "requires": { - "@typescript-eslint/typescript-estree": "5.54.0", - "@typescript-eslint/utils": "5.54.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/types": { - "version": "5.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.54.0.tgz", - "integrity": "sha512-nExy+fDCBEgqblasfeE3aQ3NuafBUxZxgxXcYfzYRZFHdVvk5q60KhCSkG0noHgHRo/xQ/BOzURLZAafFpTkmQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.54.0.tgz", - "integrity": "sha512-X2rJG97Wj/VRo5YxJ8Qx26Zqf0RRKsVHd4sav8NElhbZzhpBI8jU54i6hfo9eheumj4oO4dcRN1B/zIVEqR/MQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.54.0", - "@typescript-eslint/visitor-keys": "5.54.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/utils": { - "version": "5.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.54.0.tgz", - "integrity": "sha512-cuwm8D/Z/7AuyAeJ+T0r4WZmlnlxQ8wt7C7fLpFlKMR+dY6QO79Cq1WpJhvZbMA4ZeZGHiRWnht7ZJ8qkdAunw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.54.0", - "@typescript-eslint/types": "5.54.0", - "@typescript-eslint/typescript-estree": "5.54.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0", - "semver": "^7.3.7" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.54.0.tgz", - "integrity": "sha512-xu4wT7aRCakGINTLGeyGqDn+78BwFlggwBjnHa1ar/KaGagnmwLYmlrXIrgAaQ3AE1Vd6nLfKASm7LrFHNbKGA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.54.0", - "eslint-visitor-keys": "^3.3.0" - } - }, - "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@xobotyi/scrollbar-width": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz", - "integrity": "sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==" - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==" - }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - } - } - }, - "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "requires": {} - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "devOptional": true, - "requires": {} - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true - }, - "address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==" - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "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" - } - }, - "ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "requires": { - "ajv": "^8.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - } - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "requires": {} - }, - "algoliasearch": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.16.0.tgz", - "integrity": "sha512-HAjKJ6bBblaXqO4dYygF4qx251GuJ6zCZt+qbJ+kU7sOC+yc84pawEjVpJByh+cGP2APFCsao2Giz50cDlKNPA==", - "requires": { - "@algolia/cache-browser-local-storage": "4.16.0", - "@algolia/cache-common": "4.16.0", - "@algolia/cache-in-memory": "4.16.0", - "@algolia/client-account": "4.16.0", - "@algolia/client-analytics": "4.16.0", - "@algolia/client-common": "4.16.0", - "@algolia/client-personalization": "4.16.0", - "@algolia/client-search": "4.16.0", - "@algolia/logger-common": "4.16.0", - "@algolia/logger-console": "4.16.0", - "@algolia/requester-browser-xhr": "4.16.0", - "@algolia/requester-common": "4.16.0", - "@algolia/requester-node-http": "4.16.0", - "@algolia/transporter": "4.16.0" - } - }, - "algoliasearch-helper": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.12.0.tgz", - "integrity": "sha512-/j1U3PEwdan0n6P/QqSnSpNSLC5+cEMvyljd5CnmNmUjDlGrys+vFEOwjVEnqELIiAGMHEA/Nl3CiKVFBUYqyQ==", - "requires": { - "@algolia/events": "^4.0.1" - } - }, - "ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "requires": { - "string-width": "^4.1.0" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } - } - }, - "ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - } - } - }, - "ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==" - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "dev": true - }, - "arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", - "dev": true, - "requires": { - "deep-equal": "^2.0.5" - } - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" - }, - "array.prototype.reduce": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", - "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - } - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "assert": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", - "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", - "requires": { - "es6-object-assign": "^1.1.0", - "is-nan": "^1.2.1", - "object-is": "^1.0.1", - "util": "^0.12.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" - }, - "autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", - "requires": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "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==" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true - }, - "aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", - "dev": true - }, - "axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "requires": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" - } - }, - "babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", - "dev": true, - "requires": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - } - }, - "babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - } - }, - "babel-plugin-apply-mdx-type-prop": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", - "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@mdx-js/util": "1.6.22" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - } - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-extract-import-names": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", - "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - } - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "requires": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - } - }, - "babel-plugin-styled-components": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz", - "integrity": "sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-module-imports": "^7.16.0", - "babel-plugin-syntax-jsx": "^6.18.0", - "lodash": "^4.17.11", - "picomatch": "^2.3.0" - } - }, - "babel-plugin-syntax-jsx": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==" - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^27.5.1", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "base16": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", - "integrity": "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==" - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==" - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "blob-util": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", - "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", - "dev": true - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "requires": { - "side-channel": "^1.0.4" - } - } - } - }, - "bonjour-service": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.0.tgz", - "integrity": "sha512-LVRinRB3k1/K0XzZ2p58COnWvkQknIY6sf0zF2rpErvcJXpMBttEPQSxK+HEXSS9VmpZlDoDnQWv8ftJT20B0Q==", - "requires": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "boxen": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", - "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", - "requires": { - "ansi-align": "^3.0.1", - "camelcase": "^6.2.0", - "chalk": "^4.1.2", - "cli-boxes": "^3.0.0", - "string-width": "^5.0.1", - "type-fest": "^2.5.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.0.1" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "broadcast-channel": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/broadcast-channel/-/broadcast-channel-3.7.0.tgz", - "integrity": "sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg==", - "requires": { - "@babel/runtime": "^7.7.2", - "detect-node": "^2.1.0", - "js-sha3": "0.8.0", - "microseconds": "0.2.0", - "nano-time": "1.0.0", - "oblivious-set": "1.0.0", - "rimraf": "3.0.2", - "unload": "2.2.0" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", - "requires": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==" - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" - }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - }, - "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" - } - } - }, - "cachedir": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", - "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "call-me-maybe": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", - "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==" - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" - }, - "camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" - }, - "camelize": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", - "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==" - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001470", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001470.tgz", - "integrity": "sha512-065uNwY6QtHCBOExzbV6m236DDhYCCtPmQUCoQtwkVqzud8v5QPidoMr6CoMkC2nfp6nksjttqWQRRh75LqUmA==" - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true - }, - "ccount": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", - "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==" - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true - }, - "character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" - }, - "character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" - }, - "character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" - }, - "charset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/charset/-/charset-1.0.1.tgz", - "integrity": "sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg==" - }, - "check-more-types": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", - "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", - "dev": true - }, - "cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "requires": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - } - }, - "cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "requires": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - } - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" - }, - "ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==" - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true - }, - "classcat": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/classcat/-/classcat-5.0.4.tgz", - "integrity": "sha512-sbpkOw6z413p+HDGcBENe498WM9woqWHiJxCq7nvmxe9WmrUmqfAcxpIwAiMtM5Q3AhYkzXcNQHqsWq0mND51g==", - "optional": true - }, - "classnames": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", - "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" - }, - "clean-css": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", - "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", - "requires": { - "source-map": "~0.6.0" - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - }, - "cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==" - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "requires": { - "@colors/colors": "1.5.0", - "string-width": "^4.2.0" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } - } - }, - "cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } - } - }, - "clipboard": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz", - "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==", - "requires": { - "good-listener": "^1.2.2", - "select": "^1.1.2", - "tiny-emitter": "^2.0.0" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "dependencies": { - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "requires": { - "mimic-response": "^1.0.0" - }, - "dependencies": { - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - } - } - }, - "clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true - }, - "collapse-white-space": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", - "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==" - }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "requires": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - }, - "dependencies": { - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - } - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" - }, - "colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" - }, - "combine-promises": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz", - "integrity": "sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==" - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" - }, - "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" - }, - "common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "compute-gcd": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/compute-gcd/-/compute-gcd-1.2.1.tgz", - "integrity": "sha512-TwMbxBNz0l71+8Sc4czv13h4kEqnchV9igQZBi6QUaz09dnz13juGnnaWWJTRsP3brxOoxeB4SA2WELLw1hCtg==", - "requires": { - "validate.io-array": "^1.0.3", - "validate.io-function": "^1.0.2", - "validate.io-integer-array": "^1.0.0" - } - }, - "compute-lcm": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/compute-lcm/-/compute-lcm-1.1.2.tgz", - "integrity": "sha512-OFNPdQAXnQhDSKioX8/XYT6sdUlXwpeMjfd6ApxMJfyZ4GxmLR1xvMERctlYhlHwIiz6CSpBc2+qYKjHGZw4TQ==", - "requires": { - "compute-gcd": "^1.2.1", - "validate.io-array": "^1.0.3", - "validate.io-function": "^1.0.2", - "validate.io-integer-array": "^1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "requires": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - } - }, - "connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==" - }, - "consola": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" - }, - "consolidated-events": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/consolidated-events/-/consolidated-events-2.0.2.tgz", - "integrity": "sha512-2/uRVMdRypf5z/TW/ncD/66l75P5hH2vM/GR8Jf8HLc2xnfJtmina6F6du8+v4Z2vTrMo7jC+W1tmEEuuELgkQ==" - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==" - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==" - }, - "content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" - }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "copy-text-to-clipboard": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.1.0.tgz", - "integrity": "sha512-PFM6BnjLnOON/lB3ta/Jg7Ywsv+l9kQGD4TWDCSlRBGmqnnTM5MrDkhAFgw+8HZt0wW6Q2BBE4cmy9sq+s9Qng==" - }, - "copy-to-clipboard": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", - "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", - "requires": { - "toggle-selection": "^1.0.6" - } - }, - "copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", - "requires": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "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==", - "requires": { - "is-glob": "^4.0.3" - } - }, - "globby": { - "version": "13.1.3", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", - "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", - "requires": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" - } - } - }, - "core-js": { - "version": "3.29.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.29.0.tgz", - "integrity": "sha512-VG23vuEisJNkGl6XQmFJd3rEG/so/CNatqeE+7uZAwTSwFeB/qaO0be8xZYUNWprJ/GIwL8aMt9cj1kvbpTZhg==" - }, - "core-js-compat": { - "version": "3.29.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.29.0.tgz", - "integrity": "sha512-ScMn3uZNAFhK2DGoEfErguoiAHhV2Ju+oJo/jK08p7B3f3UhocUrCCkTvnZaiS+edl5nlIoiBXKcwMc6elv4KQ==", - "requires": { - "browserslist": "^4.21.5" - } - }, - "core-js-pure": { - "version": "3.29.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.29.0.tgz", - "integrity": "sha512-v94gUjN5UTe1n0yN/opTihJ8QBWD2O8i19RfTZR7foONPWArnjB96QA/wk5ozu1mm6ja3udQCzOzwQXTxi3xOQ==" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" - }, - "cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "requires": { - "node-fetch": "2.6.7" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" - }, - "css-color-keywords": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", - "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==" - }, - "css-declaration-sorter": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", - "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", - "requires": {} - }, - "css-in-js-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-3.1.0.tgz", - "integrity": "sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==", - "requires": { - "hyphenate-style-name": "^1.0.3" - } - }, - "css-loader": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", - "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "cssesc": "^3.0.0", - "icss-utils": "^4.1.1", - "loader-utils": "^1.2.3", - "normalize-path": "^3.0.0", - "postcss": "^7.0.32", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.2", - "postcss-modules-scope": "^2.2.0", - "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^2.7.0", - "semver": "^6.3.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "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" - } - }, - "loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "css-minimizer-webpack-plugin": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz", - "integrity": "sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA==", - "requires": { - "cssnano": "^5.1.8", - "jest-worker": "^29.1.2", - "postcss": "^8.4.17", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - } - } - }, - "css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - } - }, - "css-selector-parser": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-1.4.1.tgz", - "integrity": "sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g==" - }, - "css-to-react-native": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", - "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", - "requires": { - "camelize": "^1.0.0", - "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^4.0.2" - } - }, - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" - }, - "css.escape": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" - }, - "cssnano": { - "version": "5.1.15", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", - "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", - "requires": { - "cssnano-preset-default": "^5.2.14", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - } - }, - "cssnano-preset-advanced": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.10.tgz", - "integrity": "sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ==", - "requires": { - "autoprefixer": "^10.4.12", - "cssnano-preset-default": "^5.2.14", - "postcss-discard-unused": "^5.1.0", - "postcss-merge-idents": "^5.1.1", - "postcss-reduce-idents": "^5.2.0", - "postcss-zindex": "^5.1.0" - } - }, - "cssnano-preset-default": { - "version": "5.2.14", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", - "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", - "requires": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.1", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.4", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.2", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - } - }, - "cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "requires": {} - }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "requires": { - "css-tree": "^1.1.2" - } - }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } - } - }, - "csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" - }, - "cypress": { - "version": "12.7.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-12.7.0.tgz", - "integrity": "sha512-7rq+nmhzz0u6yabCFyPtADU2OOrYt6pvUau9qV7xyifJ/hnsaw/vkr0tnLlcuuQKUAOC1v1M1e4Z0zG7S0IAvA==", - "dev": true, - "requires": { - "@cypress/request": "^2.88.10", - "@cypress/xvfb": "^1.2.4", - "@types/node": "^14.14.31", - "@types/sinonjs__fake-timers": "8.1.1", - "@types/sizzle": "^2.3.2", - "arch": "^2.2.0", - "blob-util": "^2.0.2", - "bluebird": "^3.7.2", - "buffer": "^5.6.0", - "cachedir": "^2.3.0", - "chalk": "^4.1.0", - "check-more-types": "^2.24.0", - "cli-cursor": "^3.1.0", - "cli-table3": "~0.6.1", - "commander": "^5.1.0", - "common-tags": "^1.8.0", - "dayjs": "^1.10.4", - "debug": "^4.3.4", - "enquirer": "^2.3.6", - "eventemitter2": "6.4.7", - "execa": "4.1.0", - "executable": "^4.1.1", - "extract-zip": "2.0.1", - "figures": "^3.2.0", - "fs-extra": "^9.1.0", - "getos": "^3.2.1", - "is-ci": "^3.0.0", - "is-installed-globally": "~0.4.0", - "lazy-ass": "^1.6.0", - "listr2": "^3.8.3", - "lodash": "^4.17.21", - "log-symbols": "^4.0.0", - "minimist": "^1.2.6", - "ospath": "^1.2.2", - "pretty-bytes": "^5.6.0", - "proxy-from-env": "1.0.0", - "request-progress": "^3.0.0", - "semver": "^7.3.2", - "supports-color": "^8.1.1", - "tmp": "~0.2.1", - "untildify": "^4.0.0", - "yauzl": "^2.10.0" - }, - "dependencies": { - "@types/node": { - "version": "14.18.37", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.37.tgz", - "integrity": "sha512-7GgtHCs/QZrBrDzgIJnQtuSvhFSwhyYSI2uafSwZoNt1iOGhEN5fwNrQMjtONyHm9+/LoA4453jH0CMYcr06Pg==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", - "optional": true - }, - "d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", - "optional": true - }, - "d3-drag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", - "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", - "optional": true, - "requires": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" - } - }, - "d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", - "optional": true - }, - "d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "optional": true, - "requires": { - "d3-color": "1 - 3" - } - }, - "d3-selection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", - "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", - "optional": true - }, - "d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", - "optional": true - }, - "d3-transition": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", - "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", - "optional": true, - "requires": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" - } - }, - "d3-zoom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", - "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", - "optional": true, - "requires": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "2 - 3", - "d3-transition": "2 - 3" - } - }, - "dagre": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz", - "integrity": "sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==", - "optional": true, - "requires": { - "graphlib": "^2.1.8", - "lodash": "^4.17.15" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - } - }, - "dayjs": { - "version": "1.11.7", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz", - "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", - "dev": true - }, - "decko": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decko/-/decko-1.2.0.tgz", - "integrity": "sha512-m8FnyHXV1QX+S1cl+KPFDIl6NMkxtKsy6+U/aYyjrOqWMuwAwYWu7ePqrsUHtDR5Y8Yk2pi/KIDSgF+vT4cPOQ==" - }, - "decode-uri-component": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.4.1.tgz", - "integrity": "sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ==" - }, - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "requires": { - "mimic-response": "^3.1.0" - } - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "deep-equal": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", - "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.2", - "get-intrinsic": "^1.1.3", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.1", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - }, - "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==", - "devOptional": true - }, - "deepmerge": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", - "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==" - }, - "default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "requires": { - "execa": "^5.0.0" - }, - "dependencies": { - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" - } - } - }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" - }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" - }, - "define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "requires": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" - }, - "delegate": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", - "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - }, - "detab": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", - "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", - "requires": { - "repeat-string": "^1.5.4" - } - }, - "detect-libc": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", - "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, - "detect-port": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", - "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", - "requires": { - "address": "^1.0.1", - "debug": "4" - } - }, - "detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "requires": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "requires": { - "path-type": "^4.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" - }, - "dns-packet": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", - "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", - "requires": { - "@leichtgewicht/ip-codec": "^2.0.1" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "devOptional": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-accessibility-api": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", - "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", - "dev": true - }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "requires": { - "utila": "~0.4" - } - }, - "dom-helpers": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", - "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", - "requires": { - "@babel/runtime": "^7.1.2" - } - }, - "dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - } - }, - "dom7": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/dom7/-/dom7-4.0.6.tgz", - "integrity": "sha512-emjdpPLhpNubapLFdjNL9tP06Sr+GZkrIHEXLWvOGsytACUrkbeIdjO5g77m00BrHTznnlcNqgmn7pCN192TBA==", - "requires": { - "ssr-window": "^4.0.0" - } - }, - "domain-browser": { - "version": "4.22.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.22.0.tgz", - "integrity": "sha512-IGBwjF7tNk3cwypFNH/7bfzBcgSCbaMOD3GsaY1AU/JRrnHnYgEM0+9kQt52iZxjNsjBtJYtao146V+f8jFZNw==" - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" - }, - "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true - } - } - }, - "domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "requires": { - "domelementtype": "^2.3.0" - } - }, - "dompurify": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.5.tgz", - "integrity": "sha512-jggCCd+8Iqp4Tsz0nIvpcb22InKEBrGz5dw3EQJMs8HPJDsKbFIO3STYtAvCfDx26Muevn1MHVI0XxjgFfmiSA==" - }, - "domutils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", - "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", - "requires": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.1" - } - }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "requires": { - "is-obj": "^2.0.0" - }, - "dependencies": { - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" - } - } - }, - "dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true - }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "duplexer3": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", - "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "electron-to-chromium": { - "version": "1.4.315", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.315.tgz", - "integrity": "sha512-ndBQYz3Eyy3rASjjQ9poMJGoAlsZ/aZnq6GBsGL4w/4sWIAwiUHVSsMuADbxa8WJw7pZ0oxLpGbtoDt4vRTdCg==" - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" - }, - "emoticon": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", - "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "entities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", - "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==" - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", - "requires": { - "stackframe": "^1.3.4" - } - }, - "es-abstract": { - "version": "1.21.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", - "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.4", - "is-array-buffer": "^3.0.1", - "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.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" - } - }, - "es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true - }, - "es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - } - }, - "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" - }, - "es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.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" - } - }, - "es6-object-assign": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==" - }, - "es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==" - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - } - } - }, - "eslint": { - "version": "8.35.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.35.0.tgz", - "integrity": "sha512-BxAf1fVL7w+JLRQhWl2pzGeSiGqbWumV4WNvc9Rhp6tiCtm4oHnyPBSEtMGZwrQgudFQ+otqzWoPB7x+hxoWsw==", - "devOptional": true, - "requires": { - "@eslint/eslintrc": "^2.0.0", - "@eslint/js": "8.35.0", - "@humanwhocodes/config-array": "^0.11.8", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "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.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "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", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "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.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "dependencies": { - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "devOptional": true, - "requires": { - "esrecurse": "^4.3.0", - "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==", - "devOptional": true - }, - "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==", - "devOptional": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "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==", - "devOptional": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "devOptional": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "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==", - "devOptional": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "devOptional": 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==", - "devOptional": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "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==", - "devOptional": true - }, - "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==", - "devOptional": 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==", - "devOptional": true - } - } - }, - "eslint-config-prettier": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz", - "integrity": "sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==", - "dev": true, - "requires": {} - }, - "eslint-plugin-markdown": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-3.0.0.tgz", - "integrity": "sha512-hRs5RUJGbeHDLfS7ELanT0e29Ocyssf/7kBM+p7KluY5AwngGkDf8Oyu4658/NZSGTTq05FZeWbkxXtbVyHPwg==", - "dev": true, - "requires": { - "mdast-util-from-markdown": "^0.8.5" - } - }, - "eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "devOptional": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "devOptional": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "devOptional": true - }, - "espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", - "devOptional": true, - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "devOptional": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "devOptional": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "eta": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/eta/-/eta-2.0.1.tgz", - "integrity": "sha512-46E2qDPDm7QA+usjffUWz9KfXsxVZclPOuKsXs4ZWZdI/X1wpDF7AO424pt7fdYohCzWsIkXAhNGXSlwo5naAg==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" - }, - "eval": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", - "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", - "requires": { - "@types/node": "*", - "require-like": ">= 0.1.1" - } - }, - "eventemitter2": { - "version": "6.4.7", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", - "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", - "dev": true - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "executable": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", - "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", - "dev": true, - "requires": { - "pify": "^2.2.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true - }, - "expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" - }, - "expect": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.4.3.tgz", - "integrity": "sha512-uC05+Q7eXECFpgDrHdXA4k2rpMyStAYPItEDLyQDo5Ta7fVkJnNA/4zh/OIVkVVNZ1oOK1PipQoyNjuZ6sz6Dg==", - "dev": true, - "requires": { - "@jest/expect-utils": "^29.4.3", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.4.3", - "jest-message-util": "^29.4.3", - "jest-util": "^29.4.3" - } - }, - "express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "requires": { - "safe-buffer": "5.2.1" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "requires": { - "@types/yauzl": "^2.9.1", - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true - }, - "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==" - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "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==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "devOptional": true - }, - "fast-loops": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-loops/-/fast-loops-1.1.3.tgz", - "integrity": "sha512-8EZzEP0eKkEEVX+drtd9mtuQ+/QrlfW/5MlwcwK5Nds6EkZ/tRzEexkzUY2mIssnAyVLT+TKHuRXmFNNXYUd6g==" - }, - "fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" - }, - "fast-shallow-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-shallow-equal/-/fast-shallow-equal-1.0.0.tgz", - "integrity": "sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==" - }, - "fast-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", - "requires": { - "punycode": "^1.3.2" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" - } - } - }, - "fastest-stable-stringify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fastest-stable-stringify/-/fastest-stable-stringify-2.0.2.tgz", - "integrity": "sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==" - }, - "fastestsmallesttextencoderdecoder": { - "version": "1.0.22", - "resolved": "https://registry.npmjs.org/fastestsmallesttextencoderdecoder/-/fastestsmallesttextencoderdecoder-1.0.22.tgz", - "integrity": "sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==" - }, - "fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "requires": { - "reusify": "^1.0.4" - } - }, - "fault": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", - "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", - "requires": { - "format": "^0.2.0" - } - }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "fbemitter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", - "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", - "requires": { - "fbjs": "^3.0.0" - } - }, - "fbjs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz", - "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", - "requires": { - "cross-fetch": "^3.1.5", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.30" - } - }, - "fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "requires": { - "pend": "~1.2.0" - } - }, - "feed": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", - "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", - "requires": { - "xml-js": "^1.6.11" - } - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - } - } - }, - "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==", - "devOptional": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "file-saver": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", - "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" - }, - "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==" - }, - "filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==" - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "filter-obj": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-2.0.2.tgz", - "integrity": "sha512-lO3ttPjHZRfjMcxWKb1j1eDhTFsu4meeR3lnMcnBFhk6RuLhvEiuALu2TlfL310ph4lCYYwgF/ElIjdP739tdg==" - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dev": true, - "requires": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "devOptional": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "devOptional": true - }, - "flux": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.4.tgz", - "integrity": "sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw==", - "requires": { - "fbemitter": "^3.0.0", - "fbjs": "^3.0.1" - } - }, - "fnv-plus": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/fnv-plus/-/fnv-plus-1.3.1.tgz", - "integrity": "sha512-Gz1EvfOneuFfk4yG458dJ3TLJ7gV19q3OM/vVvvHf7eT02Hm1DleB4edsia6ahbKgAYxO9gvyQ1ioWZR+a00Yw==" - }, - "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "^1.1.3" - } - }, - "foreach": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.6.tgz", - "integrity": "sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==" - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true - }, - "fork-ts-checker-webpack-plugin": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", - "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", - "requires": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - } - }, - "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" - } - } - }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==" - }, - "formdata-node": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", - "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", - "requires": { - "node-domexception": "1.0.0", - "web-streams-polyfill": "4.0.0-beta.3" - } - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" - }, - "fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" - }, - "fs": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.2.tgz", - "integrity": "sha512-YAiVokMCrSIFZiroB1oz51hPiPRVcUtSa4x2U5RYXyhS9VAPdiFigKbPTnOSq7XY8wd3FIVPYmXpo5lMzFmxgg==" - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "fscreen": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fscreen/-/fscreen-1.2.0.tgz", - "integrity": "sha512-hlq4+BU0hlPmwsFjwGGzZ+OZ9N/wq9Ljg/sq3pX+2CD7hrJsX9tJgWWK/wiNTFM212CLHWhicOoqwXyZGGetJg==" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "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 - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { - "pump": "^3.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" - } - }, - "getos": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", - "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", - "dev": true, - "requires": { - "async": "^3.2.0" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" - }, - "github-slugger": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", - "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "requires": { - "ini": "2.0.0" - } - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "requires": { - "global-prefix": "^3.0.0" - } - }, - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "dependencies": { - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, - "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" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "good-listener": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", - "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", - "requires": { - "delegate": "^3.1.2" - } - }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "dependencies": { - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - } - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "devOptional": true - }, - "graphlib": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", - "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", - "optional": true, - "requires": { - "lodash": "^4.17.15" - } - }, - "gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "requires": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } - } - }, - "gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "requires": { - "duplexer": "^0.1.2" - } - }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "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", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hast-to-hyperscript": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", - "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", - "requires": { - "@types/unist": "^2.0.3", - "comma-separated-tokens": "^1.0.0", - "property-information": "^5.3.0", - "space-separated-tokens": "^1.0.0", - "style-to-object": "^0.3.0", - "unist-util-is": "^4.0.0", - "web-namespaces": "^1.0.0" - } - }, - "hast-util-from-parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", - "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", - "requires": { - "@types/parse5": "^5.0.0", - "hastscript": "^6.0.0", - "property-information": "^5.0.0", - "vfile": "^4.0.0", - "vfile-location": "^3.2.0", - "web-namespaces": "^1.0.0" - } - }, - "hast-util-is-element": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz", - "integrity": "sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ==" - }, - "hast-util-parse-selector": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", - "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==" - }, - "hast-util-raw": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", - "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", - "requires": { - "@types/hast": "^2.0.0", - "hast-util-from-parse5": "^6.0.0", - "hast-util-to-parse5": "^6.0.0", - "html-void-elements": "^1.0.0", - "parse5": "^6.0.0", - "unist-util-position": "^3.0.0", - "vfile": "^4.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - }, - "dependencies": { - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - } - } - }, - "hast-util-sanitize": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hast-util-sanitize/-/hast-util-sanitize-4.1.0.tgz", - "integrity": "sha512-Hd9tU0ltknMGRDv+d6Ro/4XKzBqQnP/EZrpiTbpFYfXv/uOhWeKc+2uajcbEvAEH98VZd7eII2PiXm13RihnLw==", - "requires": { - "@types/hast": "^2.0.0" - } - }, - "hast-util-to-parse5": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", - "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", - "requires": { - "hast-to-hyperscript": "^9.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - } - }, - "hast-util-to-text": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-2.0.1.tgz", - "integrity": "sha512-8nsgCARfs6VkwH2jJU9b8LNTuR4700na+0h3PqCaEk4MAnMDeu5P0tP8mjk9LLNGxIeQRLbiDbZVw6rku+pYsQ==", - "requires": { - "hast-util-is-element": "^1.0.0", - "repeat-string": "^1.0.0", - "unist-util-find-after": "^3.0.0" - } - }, - "hast-util-whitespace": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz", - "integrity": "sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==" - }, - "hastscript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", - "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", - "requires": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - }, - "history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "requires": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "requires": { - "react-is": "^16.7.0" - }, - "dependencies": { - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - } - } - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.5" - } - }, - "html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "requires": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "dependencies": { - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" - } - } - }, - "html-tags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", - "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==" - }, - "html-void-elements": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", - "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==" - }, - "html-webpack-plugin": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", - "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", - "requires": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - } - }, - "html-webpack-plugin-4": { - "version": "npm:html-webpack-plugin@4.5.2", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", - "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", - "dev": true, - "requires": { - "@types/html-minifier-terser": "^5.0.0", - "@types/tapable": "^1.0.5", - "@types/webpack": "^4.41.8", - "html-minifier-terser": "^5.0.1", - "loader-utils": "^1.2.3", - "lodash": "^4.17.20", - "pretty-error": "^2.1.1", - "tapable": "^1.1.3", - "util.promisify": "1.0.0" - }, - "dependencies": { - "@types/html-minifier-terser": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", - "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "clean-css": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", - "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", - "dev": true, - "requires": { - "source-map": "~0.6.0" - } - }, - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true - }, - "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - } - }, - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - }, - "html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", - "dev": true, - "requires": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", - "he": "^1.2.0", - "param-case": "^3.0.3", - "relateurl": "^0.2.7", - "terser": "^4.6.3" - } - }, - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "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" - } - }, - "loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "pretty-error": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", - "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", - "dev": true, - "requires": { - "lodash": "^4.17.20", - "renderkid": "^2.0.4" - } - }, - "renderkid": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", - "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", - "dev": true, - "requires": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^3.0.1" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true - }, - "terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - } - } - } - } - }, - "html-webpack-plugin-5": { - "version": "npm:html-webpack-plugin@5.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", - "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", - "dev": true, - "requires": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - } - }, - "htmlparser2": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", - "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "entities": "^4.3.0" - } - }, - "http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "requires": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "dependencies": { - "is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==" - } - } - }, - "http-reasons": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/http-reasons/-/http-reasons-0.1.0.tgz", - "integrity": "sha512-P6kYh0lKZ+y29T2Gqz+RlC9WBLhKe8kDmcJ+A+611jFfxdPsbMRQ5aNmFRM3lENqFkK+HTTL+tlQviAiv0AbLQ==" - }, - "http-signature": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", - "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^2.0.2", - "sshpk": "^1.14.1" - } - }, - "http2-client": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/http2-client/-/http2-client-1.3.5.tgz", - "integrity": "sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA==" - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==" - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "httpsnippet-lite": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/httpsnippet-lite/-/httpsnippet-lite-3.0.5.tgz", - "integrity": "sha512-So4qTXY5iFj5XtFDwyz2PicUu+8NWrI8e8h+ZeZoVtMNcFQp4FFIntBHUE+JPUG6QQU8o1VHCy+X4ETRDwt9CA==", - "requires": { - "@types/har-format": "^1.2.10", - "formdata-node": "^4.4.1", - "stringify-object": "3.3.0" - } - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true - }, - "husky": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", - "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", - "dev": true - }, - "hyphenate-style-name": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz", - "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==" - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-utils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", - "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", - "dev": true, - "requires": { - "postcss": "^7.0.14" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - } - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" - }, - "image-size": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", - "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", - "requires": { - "queue": "6.0.2" - } - }, - "immer": { - "version": "9.0.19", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.19.tgz", - "integrity": "sha512-eY+Y0qcsB4TZKwgQzLaE/lqYMlKhv5J9dyd2RhhtGhNo2njPXDqU9XPfcNfa3MIDsdtZt5KlkIsirlo4dHsWdQ==" - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==" - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - }, - "infima": { - "version": "0.2.0-alpha.42", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.42.tgz", - "integrity": "sha512-ift8OXNbQQwtbIt6z16KnSWP7uJ/SysSMFI4F87MNRTicypfl4Pv3E2OGVv6N3nSZFJvA8imYulCBS64iyHYww==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" - }, - "inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" - }, - "inline-style-prefixer": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-6.0.4.tgz", - "integrity": "sha512-FwXmZC2zbeeS7NzGjJ6pAiqRhXR0ugUShSNb6GApMl6da0/XGc4MOJsoWAywia52EEWbXNSy0pzkwz/+Y+swSg==", - "requires": { - "css-in-js-utils": "^3.1.0", - "fast-loops": "^1.1.3" - } - }, - "internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==" - }, - "is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" - }, - "is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "requires": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - } - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^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-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "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", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "requires": { - "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-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" - }, - "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==" - }, - "is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dev": true, - "requires": { - "ci-info": "^3.2.0" - } - }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "requires": { - "has": "^1.0.3" - } - }, - "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": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" - }, - "is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "requires": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - } - }, - "is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true - }, - "is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } - }, - "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-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "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-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==" - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" - }, - "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==" - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" - }, - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" - }, - "is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==" - }, - "is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" - }, - "is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true - }, - "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-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - }, - "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.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true - }, - "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" - } - }, - "is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "is-whitespace-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", - "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==" - }, - "is-word-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", - "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==" - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "requires": { - "is-docker": "^2.0.0" - } - }, - "is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" - }, - "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", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" - }, - "isomorphic-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", - "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", - "requires": { - "node-fetch": "^2.6.1", - "whatwg-fetch": "^3.4.1" - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", - "dev": true, - "requires": { - "@jest/core": "^27.5.1", - "import-local": "^3.0.2", - "jest-cli": "^27.5.1" - } - }, - "jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "execa": "^5.0.0", - "throat": "^6.0.1" - }, - "dependencies": { - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - } - } - }, - "jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - }, - "dependencies": { - "diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", - "dev": true - }, - "expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - } - }, - "jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true - }, - "jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - } - } - }, - "jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", - "dev": true, - "requires": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - }, - "dependencies": { - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - } - } - }, - "jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", - "dev": true, - "requires": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - } - } - }, - "jest-diff": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.4.3.tgz", - "integrity": "sha512-YB+ocenx7FZ3T5O9lMVMeLYV4265socJKtkwgk/6YUz/VsEzYDkiMuMhWzZmxm3wDRQvayJu/PjkjjSkjoHsCA==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.4.3" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "pretty-format": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", - "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", - "dev": true, - "requires": { - "@jest/schemas": "^29.4.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - } - } - } - }, - "jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - } - } - }, - "jest-environment-jsdom": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", - "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" - }, - "dependencies": { - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - } - } - }, - "jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - }, - "dependencies": { - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - } - } - }, - "jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", - "dev": true - }, - "jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - }, - "dependencies": { - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-jasmine2": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", - "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" - }, - "dependencies": { - "diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", - "dev": true - }, - "expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - } - }, - "jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true - }, - "jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - } - } - }, - "jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", - "dev": true, - "requires": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true - } - } - }, - "jest-matcher-utils": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.4.3.tgz", - "integrity": "sha512-TTciiXEONycZ03h6R6pYiZlSkvYgT0l8aa49z/DLSGYjex4orMUcafuLXYyyEDWB1RKglq00jzwY00Ei7yFNVg==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.4.3" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "pretty-format": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", - "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", - "dev": true, - "requires": { - "@jest/schemas": "^29.4.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - } - } - } - }, - "jest-message-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.4.3.tgz", - "integrity": "sha512-1Y8Zd4ZCN7o/QnWdMmT76If8LuDv23Z1DRovBj/vcSFNlGCJGoO8D1nJDw1AdyAGUk0myDLFGN5RbNeJyCRGCw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.4.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.4.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "@jest/types": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.4.3.tgz", - "integrity": "sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA==", - "dev": true, - "requires": { - "@jest/schemas": "^29.4.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.22", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz", - "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "pretty-format": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", - "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", - "dev": true, - "requires": { - "@jest/schemas": "^29.4.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - } - } - } - }, - "jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*" - } - }, - "jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "requires": {} - }, - "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true - }, - "jest-resolve": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", - "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "dependencies": { - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - } - } - }, - "jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" - } - }, - "jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", - "dev": true, - "requires": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - }, - "dependencies": { - "jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "dependencies": { - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - } - } - }, - "jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - } - }, - "jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", - "dev": true, - "requires": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" - }, - "dependencies": { - "diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", - "dev": true - }, - "expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - } - }, - "jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true - }, - "jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - } - } - }, - "jest-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.4.3.tgz", - "integrity": "sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q==", - "requires": { - "@jest/types": "^29.4.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "dependencies": { - "@jest/types": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.4.3.tgz", - "integrity": "sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA==", - "requires": { - "@jest/schemas": "^29.4.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.22", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz", - "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==", - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "leven": "^3.1.0", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true - } - } - }, - "jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", - "dev": true, - "requires": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.5.1", - "string-length": "^4.0.1" - }, - "dependencies": { - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - } - } - }, - "jest-worker": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.4.3.tgz", - "integrity": "sha512-GLHN/GTAAMEy5BFdvpUfzr9Dr80zQqBrh0fz1mtRMe05hqP45+HfQltu7oTBfduD0UeZs09d+maFtFYAXFWvAA==", - "requires": { - "@types/node": "*", - "jest-util": "^29.4.3", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "joi": { - "version": "17.8.3", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.8.3.tgz", - "integrity": "sha512-q5Fn6Tj/jR8PfrLrx4fpGH4v9qM6o+vDUfD4/3vxxyg34OmKcNqYZ1qn2mpLza96S8tL0p0rIw2gOZX+/cTg9w==", - "requires": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, - "jotai": { - "version": "1.3.9", - "resolved": "https://registry.npmjs.org/jotai/-/jotai-1.3.9.tgz", - "integrity": "sha512-b6DvH9gf+7TfjaboCO54g+C0yhaakIaUBtjLf0dk1p15FWCzNw/93sezdXy9cCaZ8qcEdMLJcjBwQlORmIq29g==", - "requires": {} - }, - "js-cookie": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", - "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==" - }, - "js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==" - }, - "js-sdsl": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", - "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", - "devOptional": true - }, - "js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { - "argparse": "^2.0.1" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true - }, - "jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "requires": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "tough-cookie": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", - "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", - "dev": true, - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - } - }, - "universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true - } - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "json-pointer": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/json-pointer/-/json-pointer-0.6.2.tgz", - "integrity": "sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw==", - "requires": { - "foreach": "^2.0.4" - } - }, - "json-promise": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/json-promise/-/json-promise-1.1.8.tgz", - "integrity": "sha512-rz31P/7VfYnjQFrF60zpPTT0egMPlc8ZvIQHWs4ZtNZNnAXRmXo6oS+6eyWr5sEMG03OVhklNrTXxiIRYzoUgQ==", - "requires": { - "bluebird": "*" - } - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "json-schema-compare": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/json-schema-compare/-/json-schema-compare-0.2.2.tgz", - "integrity": "sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ==", - "requires": { - "lodash": "^4.17.4" - } - }, - "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==" - }, - "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==", - "devOptional": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" - }, - "jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "jsprim": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", - "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "katex": { - "version": "0.13.24", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.13.24.tgz", - "integrity": "sha512-jZxYuKCma3VS5UuxOx/rFV1QyGSl3Uy/i0kTJF3HgQ5xMinCQVF8Zd4bMY/9aI9b9A2pjIBOsjSSm68ykTAr8w==", - "requires": { - "commander": "^8.0.0" - }, - "dependencies": { - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" - } - } - }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "requires": { - "json-buffer": "3.0.0" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" - }, - "klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==" - }, - "latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "requires": { - "package-json": "^6.3.0" - } - }, - "lazy-ass": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", - "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", - "dev": true - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "devOptional": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==" - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "lint-staged": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.1.2.tgz", - "integrity": "sha512-K9b4FPbWkpnupvK3WXZLbgu9pchUJ6N7TtVZjbaPsoizkqFUDkUReUL25xdrCljJs7uLUF3tZ7nVPeo/6lp+6w==", - "dev": true, - "requires": { - "cli-truncate": "^3.1.0", - "colorette": "^2.0.19", - "commander": "^9.4.1", - "debug": "^4.3.4", - "execa": "^6.1.0", - "lilconfig": "2.0.6", - "listr2": "^5.0.5", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-inspect": "^1.12.2", - "pidtree": "^0.6.0", - "string-argv": "^0.3.1", - "yaml": "^2.1.3" - }, - "dependencies": { - "cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", - "dev": true, - "requires": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" - } - }, - "commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "execa": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", - "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^3.0.1", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - } - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "human-signals": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", - "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true - }, - "is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true - }, - "listr2": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-5.0.7.tgz", - "integrity": "sha512-MD+qXHPmtivrHIDRwPYdfNkrzqDiuaKU/rfBcec3WMyMF3xylQj3jMq344OtvQxz7zaCFViRAeqlr2AFhPvXHw==", - "dev": true, - "requires": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.19", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.8.0", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } - } - }, - "mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true - }, - "npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dev": true, - "requires": { - "path-key": "^4.0.0" - } - }, - "onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "requires": { - "mimic-fn": "^4.0.0" - } - }, - "path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true - }, - "slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dev": true, - "requires": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true - } - } - }, - "strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } - } - }, - "yaml": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz", - "integrity": "sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==", - "dev": true - } - } - }, - "liquid-json": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/liquid-json/-/liquid-json-0.3.1.tgz", - "integrity": "sha512-wUayTU8MS827Dam6MxgD72Ui+KOSF+u/eIqpatOtjnvgJ0+mnDq33uC2M7J0tPK+upe/DpUAuK4JUU89iBoNKQ==" - }, - "listr2": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", - "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", - "dev": true, - "requires": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.1", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==" - }, - "loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "local-pkg": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.1.tgz", - "integrity": "sha512-lL87ytIGP2FU5PWwNDo0w3WhIo2gopIAxPg9RxDYF7m4rr5ahuZxP22xnJHIvaLTe4Z9P6uKKY2UHiwyB4pcrw==", - "dev": true - }, - "locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, - "requires": { - "p-locate": "^6.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.curry": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", - "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==" - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "lodash.flow": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", - "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==" - }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" - }, - "lodash.isequalwith": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.isequalwith/-/lodash.isequalwith-4.4.0.tgz", - "integrity": "sha512-dcZON0IalGBpRmJBmMkaoV7d3I80R2O+FrzsZyHdNSFrANq/cgDqKQNmAHE8UEj4+QYWwwhkQOVdLHiAopzlsQ==" - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "devOptional": true - }, - "lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "dev": true - }, - "lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==" - }, - "lodash.pickby": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.pickby/-/lodash.pickby-4.6.0.tgz", - "integrity": "sha512-AZV+GsS/6ckvPOVQPXSiFFacKvKB4kOQu6ynt9wz0F3LO4R9Ij4K1ddYsIytDpSgLz88JHd9P+oaLeej5/Sl7Q==" - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "longest-streak": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", - "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==" - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "requires": { - "tslib": "^2.0.3" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==" - }, - "lz-string": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", - "integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==", - "dev": true - }, - "magic-error": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/magic-error/-/magic-error-0.0.1.tgz", - "integrity": "sha512-1+N1ET8cbC5bfLQZcRojClzgK2gbUt9keTMr9OJeuXnQKWsfwRRRICuMA3HKaCIXFEgKzxivuMGCNKD7cdU5pg==" - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "requires": { - "tmpl": "1.0.5" - } - }, - "mark.js": { - "version": "8.11.1", - "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", - "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==" - }, - "markdown-escapes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", - "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==" - }, - "markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "requires": { - "repeat-string": "^1.0.0" - } - }, - "marked": { - "version": "4.2.12", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.12.tgz", - "integrity": "sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw==" - }, - "match-sorter": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-6.3.1.tgz", - "integrity": "sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw==", - "requires": { - "@babel/runtime": "^7.12.5", - "remove-accents": "0.4.2" - } - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "mdast-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", - "requires": { - "unist-util-remove": "^2.0.0" - } - }, - "mdast-util-definitions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", - "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", - "requires": { - "unist-util-visit": "^2.0.0" - } - }, - "mdast-util-find-and-replace": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-1.1.1.tgz", - "integrity": "sha512-9cKl33Y21lyckGzpSmEQnIDjEfeeWelN5s1kUW1LwdB0Fkuq2u+4GdqcGEygYxJE8GVqCl0741bYXHgamfWAZA==", - "requires": { - "escape-string-regexp": "^4.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "mdast-util-from-markdown": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", - "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^2.0.0", - "micromark": "~2.11.0", - "parse-entities": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - } - }, - "mdast-util-frontmatter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-0.2.0.tgz", - "integrity": "sha512-FHKL4w4S5fdt1KjJCwB0178WJ0evnyyQr5kXTM3wrOVpytD0hrkvd+AOOjU9Td8onOejCkmZ+HQRT3CZ3coHHQ==", - "requires": { - "micromark-extension-frontmatter": "^0.2.0" - } - }, - "mdast-util-gfm": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-0.1.2.tgz", - "integrity": "sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ==", - "requires": { - "mdast-util-gfm-autolink-literal": "^0.1.0", - "mdast-util-gfm-strikethrough": "^0.2.0", - "mdast-util-gfm-table": "^0.1.0", - "mdast-util-gfm-task-list-item": "^0.1.0", - "mdast-util-to-markdown": "^0.6.1" - } - }, - "mdast-util-gfm-autolink-literal": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-0.1.3.tgz", - "integrity": "sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A==", - "requires": { - "ccount": "^1.0.0", - "mdast-util-find-and-replace": "^1.1.0", - "micromark": "^2.11.3" - } - }, - "mdast-util-gfm-strikethrough": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-0.2.3.tgz", - "integrity": "sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA==", - "requires": { - "mdast-util-to-markdown": "^0.6.0" - } - }, - "mdast-util-gfm-table": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-0.1.6.tgz", - "integrity": "sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ==", - "requires": { - "markdown-table": "^2.0.0", - "mdast-util-to-markdown": "~0.6.0" - } - }, - "mdast-util-gfm-task-list-item": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-0.1.6.tgz", - "integrity": "sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A==", - "requires": { - "mdast-util-to-markdown": "~0.6.0" - } - }, - "mdast-util-to-hast": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", - "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "mdast-util-definitions": "^4.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^2.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" - } - }, - "mdast-util-to-markdown": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", - "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", - "requires": { - "@types/unist": "^2.0.0", - "longest-streak": "^2.0.0", - "mdast-util-to-string": "^2.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.0.0", - "zwitch": "^1.0.0" - } - }, - "mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==" - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" - }, - "memfs": { - "version": "3.4.13", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.13.tgz", - "integrity": "sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg==", - "requires": { - "fs-monkey": "^1.0.3" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" - }, - "micromark": { - "version": "2.11.4", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", - "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", - "requires": { - "debug": "^4.0.0", - "parse-entities": "^2.0.0" - } - }, - "micromark-extension-frontmatter": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-0.2.2.tgz", - "integrity": "sha512-q6nPLFCMTLtfsctAuS0Xh4vaolxSFUWUWR6PZSrXXiRy+SANGllpcqdXFv2z07l0Xz/6Hl40hK0ffNCJPH2n1A==", - "requires": { - "fault": "^1.0.0" - } - }, - "micromark-extension-gfm": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-0.3.3.tgz", - "integrity": "sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A==", - "requires": { - "micromark": "~2.11.0", - "micromark-extension-gfm-autolink-literal": "~0.5.0", - "micromark-extension-gfm-strikethrough": "~0.6.5", - "micromark-extension-gfm-table": "~0.4.0", - "micromark-extension-gfm-tagfilter": "~0.3.0", - "micromark-extension-gfm-task-list-item": "~0.3.0" - } - }, - "micromark-extension-gfm-autolink-literal": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-0.5.7.tgz", - "integrity": "sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw==", - "requires": { - "micromark": "~2.11.3" - } - }, - "micromark-extension-gfm-strikethrough": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-0.6.5.tgz", - "integrity": "sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw==", - "requires": { - "micromark": "~2.11.0" - } - }, - "micromark-extension-gfm-table": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-0.4.3.tgz", - "integrity": "sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA==", - "requires": { - "micromark": "~2.11.0" - } - }, - "micromark-extension-gfm-tagfilter": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-0.3.0.tgz", - "integrity": "sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q==" - }, - "micromark-extension-gfm-task-list-item": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-0.3.3.tgz", - "integrity": "sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ==", - "requires": { - "micromark": "~2.11.0" - } - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "microseconds": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/microseconds/-/microseconds-0.2.0.tgz", - "integrity": "sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==" - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-format": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mime-format/-/mime-format-2.0.1.tgz", - "integrity": "sha512-XxU3ngPbEnrYnNbIX+lYSaYg0M01v6p2ntd2YaFksTu0vayaw5OJvbdRyWs07EYRlLED5qadUZ+xo+XhOvFhwg==", - "requires": { - "charset": "^1.0.0" - } - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" - }, - "min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true - }, - "mini-css-extract-plugin": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.2.tgz", - "integrity": "sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw==", - "requires": { - "schema-utils": "^4.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - } - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "requires": { - "minimist": "^1.2.6" - } - }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, - "mobx": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.8.0.tgz", - "integrity": "sha512-+o/DrHa4zykFMSKfS8Z+CPSEg5LW9tSNGTuN8o6MF1GKxlfkSHSeJn5UtgxvPkGgaouplnrLXCF+duAsmm6FHQ==" - }, - "mobx-react": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/mobx-react/-/mobx-react-7.6.0.tgz", - "integrity": "sha512-+HQUNuh7AoQ9ZnU6c4rvbiVVl+wEkb9WqYsVDzGLng+Dqj1XntHu79PvEWKtSMoMj67vFp/ZPXcElosuJO8ckA==", - "requires": { - "mobx-react-lite": "^3.4.0" - } - }, - "mobx-react-lite": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-3.4.0.tgz", - "integrity": "sha512-bRuZp3C0itgLKHu/VNxi66DN/XVkQG7xtoBVWxpvC5FhAqbOCP21+nPhULjnzEqd7xBMybp6KwytdUpZKEgpIQ==", - "requires": {} - }, - "monaco-editor": { - "version": "0.36.1", - "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.36.1.tgz", - "integrity": "sha512-/CaclMHKQ3A6rnzBzOADfwdSJ25BFoFT0Emxsc4zYVyav5SkK9iA6lEtIeuN/oRYbwPgviJT+t3l+sjFa28jYg==", - "peer": true - }, - "mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "requires": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - } - }, - "nano-memoize": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/nano-memoize/-/nano-memoize-1.3.1.tgz", - "integrity": "sha512-wQiW3xHptgGlec/Zbo7oq6Zz4kKoK8TaIIs1irTO9iJOGTIG3lnQRUJfH73bJ/rn7MOE4sTdSU+ALPGEidaijQ==" - }, - "nano-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/nano-time/-/nano-time-1.0.0.tgz", - "integrity": "sha512-flnngywOoQ0lLQOTRNexn2gGSNuM9bKj9RZAWSzhQ+UJYaAFG9bac4DW9VHjUAzrOaIcajHybCTHe/bkvozQqA==", - "requires": { - "big-integer": "^1.6.16" - } - }, - "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" - }, - "napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "devOptional": true - }, - "natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node-abi": { - "version": "3.33.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.33.0.tgz", - "integrity": "sha512-7GGVawqyHF4pfd0YFybhv/eM9JwTtPqx0mAanQ146O3FlSh3pA24zf9IRQTOsfTSqXTNzPSP5iagAJ94jjuVog==", - "requires": { - "semver": "^7.3.5" - } - }, - "node-abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", - "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==" - }, - "node-addon-api": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", - "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" - }, - "node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==" - }, - "node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "requires": { - "lodash": "^4.17.21" - } - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - }, - "dependencies": { - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - } - } - }, - "node-fetch-h2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/node-fetch-h2/-/node-fetch-h2-2.3.0.tgz", - "integrity": "sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg==", - "requires": { - "http2-client": "^1.2.5" - } - }, - "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node-polyfill-webpack-plugin": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/node-polyfill-webpack-plugin/-/node-polyfill-webpack-plugin-1.1.4.tgz", - "integrity": "sha512-Z0XTKj1wRWO8o/Vjobsw5iOJCN+Sua3EZEUc2Ziy9CyVvmHKu6o+t4gUH9GOE0czyPR94LI6ZCV/PpcM8b5yow==", - "requires": { - "assert": "^2.0.0", - "browserify-zlib": "^0.2.0", - "buffer": "^6.0.3", - "console-browserify": "^1.2.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.12.0", - "domain-browser": "^4.19.0", - "events": "^3.3.0", - "filter-obj": "^2.0.2", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "^1.0.1", - "process": "^0.11.10", - "punycode": "^2.1.1", - "querystring-es3": "^0.2.1", - "readable-stream": "^3.6.0", - "stream-browserify": "^3.0.0", - "stream-http": "^3.2.0", - "string_decoder": "^1.3.0", - "timers-browserify": "^2.0.12", - "tty-browserify": "^0.0.1", - "url": "^0.11.0", - "util": "^0.12.4", - "vm-browserify": "^1.1.2" - }, - "dependencies": { - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - } - } - }, - "node-readfiles": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/node-readfiles/-/node-readfiles-0.2.0.tgz", - "integrity": "sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA==", - "requires": { - "es6-promise": "^3.2.1" - } - }, - "node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" - }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "requires": { - "path-key": "^3.0.0" - } - }, - "nprogress": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" - }, - "nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "requires": { - "boolbase": "^1.0.0" - } - }, - "nwsapi": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", - "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==", - "dev": true - }, - "oas-kit-common": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/oas-kit-common/-/oas-kit-common-1.0.8.tgz", - "integrity": "sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ==", - "requires": { - "fast-safe-stringify": "^2.0.7" - } - }, - "oas-linter": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/oas-linter/-/oas-linter-3.2.2.tgz", - "integrity": "sha512-KEGjPDVoU5K6swgo9hJVA/qYGlwfbFx+Kg2QB/kd7rzV5N8N5Mg6PlsoCMohVnQmo+pzJap/F610qTodKzecGQ==", - "requires": { - "@exodus/schemasafe": "^1.0.0-rc.2", - "should": "^13.2.1", - "yaml": "^1.10.0" - } - }, - "oas-resolver": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/oas-resolver/-/oas-resolver-2.5.6.tgz", - "integrity": "sha512-Yx5PWQNZomfEhPPOphFbZKi9W93CocQj18NlD2Pa4GWZzdZpSJvYwoiuurRI7m3SpcChrnO08hkuQDL3FGsVFQ==", - "requires": { - "node-fetch-h2": "^2.3.0", - "oas-kit-common": "^1.0.8", - "reftools": "^1.1.9", - "yaml": "^1.10.0", - "yargs": "^17.0.1" - }, - "dependencies": { - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" - } - } - }, - "oas-schema-walker": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/oas-schema-walker/-/oas-schema-walker-1.1.5.tgz", - "integrity": "sha512-2yucenq1a9YPmeNExoUa9Qwrt9RFkjqaMAA1X+U7sbb0AqBeTIdMHky9SQQ6iN94bO5NW0W4TRYXerG+BdAvAQ==" - }, - "oas-validator": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/oas-validator/-/oas-validator-5.0.8.tgz", - "integrity": "sha512-cu20/HE5N5HKqVygs3dt94eYJfBi0TsZvPVXDhbXQHiEityDN+RROTleefoKRKKJ9dFAF2JBkDHgvWj0sjKGmw==", - "requires": { - "call-me-maybe": "^1.0.1", - "oas-kit-common": "^1.0.8", - "oas-linter": "^3.2.2", - "oas-resolver": "^2.5.6", - "oas-schema-walker": "^1.1.5", - "reftools": "^1.1.9", - "should": "^13.2.1", - "yaml": "^1.10.0" - } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, - "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "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==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", - "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", - "dev": true, - "requires": { - "array.prototype.reduce": "^1.0.5", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "oblivious-set": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/oblivious-set/-/oblivious-set-1.0.0.tgz", - "integrity": "sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw==" - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "openapi-sampler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/openapi-sampler/-/openapi-sampler-1.3.1.tgz", - "integrity": "sha512-Ert9mvc2tLPmmInwSyGZS+v4Ogu9/YoZuq9oP3EdUklg2cad6+IGndP9yqJJwbgdXwZibiq5fpv6vYujchdJFg==", - "requires": { - "@types/json-schema": "^7.0.7", - "json-pointer": "0.6.2" - } - }, - "openapi3-ts": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/openapi3-ts/-/openapi3-ts-2.0.2.tgz", - "integrity": "sha512-TxhYBMoqx9frXyOgnRHufjQfPXomTIHYKhSKJ6jHfj13kS8OEIhvmE8CTuQyKtjjWttAjX5DPxM1vmalEpo8Qw==", - "requires": { - "yaml": "^1.10.2" - } - }, - "opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==" - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "devOptional": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==" - }, - "ospath": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", - "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", - "dev": true - }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" - }, - "p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "requires": { - "yocto-queue": "^1.0.0" - } - }, - "p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "requires": { - "p-limit": "^4.0.0" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "requires": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "requires": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "papaparse": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.4.0.tgz", - "integrity": "sha512-ZBQABWG09p+u8rFoJVl/GhgxZ5zy9Zh1Lu/LVc7VX5T4nljjC14/YTcpebYwqP218B9X307eBOP7Tuhoqv7v7w==" - }, - "param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "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==", - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse-numeric-range": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", - "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" - }, - "parse-srcset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", - "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==" - }, - "parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "requires": { - "entities": "^4.4.0" - } - }, - "parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "requires": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" - }, - "path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "requires": { - "isarray": "0.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - } - } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "perfect-scrollbar": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/perfect-scrollbar/-/perfect-scrollbar-1.5.5.tgz", - "integrity": "sha512-dzalfutyP3e/FOpdlhVryN4AJ5XDVauVWxybSkLZmakFE2sS3y3pc4JnSprw8tGmHvkaG5Edr5T7LBTZ+WWU2g==" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "pidtree": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", - "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true - }, - "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "requires": { - "find-up": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "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==" - } - } - }, - "pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" - } - } - }, - "pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==" - }, - "polished": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/polished/-/polished-4.2.2.tgz", - "integrity": "sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==", - "requires": { - "@babel/runtime": "^7.17.8" - } - }, - "postcss": { - "version": "8.4.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", - "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", - "requires": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "requires": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-colormin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", - "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", - "requires": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", - "requires": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "requires": {} - }, - "postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "requires": {} - }, - "postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "requires": {} - }, - "postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "requires": {} - }, - "postcss-discard-unused": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz", - "integrity": "sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==", - "requires": { - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-loader": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.2.tgz", - "integrity": "sha512-fUJzV/QH7NXUAqV8dWJ9Lg4aTkDCezpTS5HgJ2DvqznexTbSTxgi/dTECvTZ15BwKTtk8G/bqI/QTu2HPd3ZCg==", - "requires": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.8" - } - }, - "postcss-merge-idents": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz", - "integrity": "sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==", - "requires": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", - "requires": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" - } - }, - "postcss-merge-rules": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", - "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", - "requires": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", - "requires": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", - "requires": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", - "requires": { - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-modules-extract-imports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", - "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", - "dev": true, - "requires": { - "postcss": "^7.0.5" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - } - } - }, - "postcss-modules-local-by-default": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", - "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", - "dev": true, - "requires": { - "icss-utils": "^4.1.1", - "postcss": "^7.0.32", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - } - } - }, - "postcss-modules-scope": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", - "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", - "dev": true, - "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - } - } - }, - "postcss-modules-values": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", - "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", - "dev": true, - "requires": { - "icss-utils": "^4.0.0", - "postcss": "^7.0.6" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - } - } - }, - "postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "requires": {} - }, - "postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", - "requires": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "requires": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", - "requires": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-reduce-idents": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz", - "integrity": "sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-reduce-initial": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", - "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", - "requires": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" - } - }, - "postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-selector-parser": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", - "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-sort-media-queries": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.3.0.tgz", - "integrity": "sha512-jAl8gJM2DvuIJiI9sL1CuiHtKM4s5aEIomkU8G3LFvbP+p8i7Sz8VV63uieTgoewGqKbi+hxBTiOKJlB35upCg==", - "requires": { - "sort-css-media-queries": "2.1.0" - } - }, - "postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "requires": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - } - }, - "postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "requires": { - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "postcss-zindex": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz", - "integrity": "sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==", - "requires": {} - }, - "postman-collection": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-4.1.7.tgz", - "integrity": "sha512-fMICmDa6megCH/jKq66MZVcR26wrSn1G/rjIkqrtdB6Df4u/I+XLRbWueQnz91Jwm3FR+su1refy4gwIjLLGLg==", - "requires": { - "@faker-js/faker": "5.5.3", - "file-type": "3.9.0", - "http-reasons": "0.1.0", - "iconv-lite": "0.6.3", - "liquid-json": "0.3.1", - "lodash": "4.17.21", - "mime-format": "2.0.1", - "mime-types": "2.1.35", - "postman-url-encoder": "3.0.5", - "semver": "7.3.8", - "uuid": "8.3.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "postman-url-encoder": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/postman-url-encoder/-/postman-url-encoder-3.0.5.tgz", - "integrity": "sha512-jOrdVvzUXBC7C+9gkIkpDJ3HIxOHTIqjpQ4C1EMt1ZGeMvSEpbFCKq23DEfgsj46vMnDgyQf+1ZLp2Wm+bKSsA==", - "requires": { - "punycode": "^2.1.1" - } - }, - "prebuild-install": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", - "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", - "requires": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "devOptional": true - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==" - }, - "prettier": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", - "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", - "dev": true, - "peer": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true - }, - "pretty-data": { - "version": "0.40.0", - "resolved": "https://registry.npmjs.org/pretty-data/-/pretty-data-0.40.0.tgz", - "integrity": "sha512-YFLnEdDEDnkt/GEhet5CYZHCvALw6+Elyb/tp8kQG03ZSIuzeaDWpZYndCXwgqu4NAjh1PI534dhDS1mHarRnQ==" - }, - "pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "requires": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - } - } - }, - "pretty-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==" - }, - "prism-react-renderer": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz", - "integrity": "sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==", - "requires": {} - }, - "prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==" - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "requires": { - "asap": "~2.0.3" - } - }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - }, - "dependencies": { - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - } - } - }, - "property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "requires": { - "xtend": "^4.0.0" - } - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "dependencies": { - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - } - } - }, - "proxy-from-env": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", - "dev": true - }, - "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" - }, - "pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "requires": { - "escape-goat": "^2.0.0" - } - }, - "pure-color": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", - "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==" - }, - "qs": { - "version": "6.10.4", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", - "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "query-string": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-8.1.0.tgz", - "integrity": "sha512-BFQeWxJOZxZGix7y+SByG3F36dA0AbTy9o6pSmKFcFz7DAj0re9Frkty3saBn3nHo3D0oZJ/+rx3r8H8r8Jbpw==", - "requires": { - "decode-uri-component": "^0.4.1", - "filter-obj": "^5.1.0", - "split-on-first": "^3.0.0" - }, - "dependencies": { - "filter-obj": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-5.1.0.tgz", - "integrity": "sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==" - } - } - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==" - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==" - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "requires": { - "inherits": "~2.0.3" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==" - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - } - } - }, - "raw-loader": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", - "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" - } - } - }, - "react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "react-base16-styling": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", - "integrity": "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==", - "requires": { - "base16": "^1.0.0", - "lodash.curry": "^4.0.1", - "lodash.flow": "^3.3.0", - "pure-color": "^1.2.0" - } - }, - "react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "requires": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "dependencies": { - "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==", - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==" - }, - "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==", - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "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==", - "requires": { - "p-limit": "^3.0.2" - } - }, - "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==" - }, - "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==" - } - } - }, - "react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - } - }, - "react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" - }, - "react-fast-compare": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", - "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" - }, - "react-flow-renderer": { - "version": "10.3.17", - "resolved": "https://registry.npmjs.org/react-flow-renderer/-/react-flow-renderer-10.3.17.tgz", - "integrity": "sha512-bywiqVErlh5kCDqw3x0an5Ur3mT9j9CwJsDwmhmz4i1IgYM1a0SPqqEhClvjX+s5pU4nHjmVaGXWK96pwsiGcQ==", - "optional": true, - "requires": { - "@babel/runtime": "^7.18.9", - "@types/d3": "^7.4.0", - "@types/resize-observer-browser": "^0.1.7", - "classcat": "^5.0.3", - "d3-drag": "^3.0.0", - "d3-selection": "^3.0.0", - "d3-zoom": "^3.0.0", - "zustand": "^3.7.2" - } - }, - "react-full-screen": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/react-full-screen/-/react-full-screen-1.1.1.tgz", - "integrity": "sha512-xoEgkoTiN0dw9cjYYGViiMCBYbkS97BYb4bHPhQVWXj1UnOs8PZ1rPzpX+2HMhuvQV1jA5AF9GaRbO3fA5aZtg==", - "requires": { - "fscreen": "^1.0.2" - } - }, - "react-helmet-async": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", - "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", - "requires": { - "@babel/runtime": "^7.12.5", - "invariant": "^2.2.4", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.2.0", - "shallowequal": "^1.1.0" - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, - "react-json-view": { - "version": "1.21.3", - "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", - "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", - "requires": { - "flux": "^4.0.1", - "react-base16-styling": "^0.6.0", - "react-lifecycles-compat": "^3.0.4", - "react-textarea-autosize": "^8.3.2" - } - }, - "react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "react-loadable": { - "version": "npm:@docusaurus/react-loadable@5.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", - "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", - "requires": { - "@types/react": "*", - "prop-types": "^15.6.2" - } - }, - "react-loadable-ssr-addon-v5-slorber": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", - "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", - "requires": { - "@babel/runtime": "^7.10.3" - } - }, - "react-overflow-list": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/react-overflow-list/-/react-overflow-list-0.5.0.tgz", - "integrity": "sha512-+UegukgQ10E4ll3txz4DJyrnCgZ3eDVuv5dvR8ziyG5FfgCDZcUKeKhIgbU90oyqQa21aH4oLOoGKt0TiYJRmg==", - "requires": { - "react-use": "^17.3.1" - }, - "dependencies": { - "react-use": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/react-use/-/react-use-17.4.0.tgz", - "integrity": "sha512-TgbNTCA33Wl7xzIJegn1HndB4qTS9u03QUwyNycUnXaweZkE4Kq2SB+Yoxx8qbshkZGYBDvUXbXWRUmQDcZZ/Q==", - "requires": { - "@types/js-cookie": "^2.2.6", - "@xobotyi/scrollbar-width": "^1.9.5", - "copy-to-clipboard": "^3.3.1", - "fast-deep-equal": "^3.1.3", - "fast-shallow-equal": "^1.0.0", - "js-cookie": "^2.2.1", - "nano-css": "^5.3.1", - "react-universal-interface": "^0.6.2", - "resize-observer-polyfill": "^1.5.1", - "screenfull": "^5.1.0", - "set-harmonic-interval": "^1.0.1", - "throttle-debounce": "^3.0.1", - "ts-easing": "^0.2.0", - "tslib": "^2.1.0" - }, - "dependencies": { - "nano-css": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/nano-css/-/nano-css-5.3.5.tgz", - "integrity": "sha512-vSB9X12bbNu4ALBu7nigJgRViZ6ja3OU7CeuiV1zMIbXOdmkLahgtPmh3GBOlDxbKY0CitqlPdOReGlBLSp+yg==", - "requires": { - "css-tree": "^1.1.2", - "csstype": "^3.0.6", - "fastest-stable-stringify": "^2.0.2", - "inline-style-prefixer": "^6.0.0", - "rtl-css-js": "^1.14.0", - "sourcemap-codec": "^1.4.8", - "stacktrace-js": "^2.0.2", - "stylis": "^4.0.6" - } - } - } - } - } - }, - "react-query": { - "version": "3.39.3", - "resolved": "https://registry.npmjs.org/react-query/-/react-query-3.39.3.tgz", - "integrity": "sha512-nLfLz7GiohKTJDuT4us4X3h/8unOh+00MLb2yJoGTPjxKs2bc1iDhkNx2bd5MKklXnOD3NrVZ+J2UXujA5In4g==", - "requires": { - "@babel/runtime": "^7.5.5", - "broadcast-channel": "^3.4.1", - "match-sorter": "^6.0.2" - } - }, - "react-router": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", - "requires": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "dependencies": { - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - } - } - }, - "react-router-config": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", - "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", - "requires": { - "@babel/runtime": "^7.1.2" - } - }, - "react-router-dom": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", - "requires": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - } - }, - "react-router-hash-link": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/react-router-hash-link/-/react-router-hash-link-2.4.3.tgz", - "integrity": "sha512-NU7GWc265m92xh/aYD79Vr1W+zAIXDWp3L2YZOYP4rCqPnJ6LI6vh3+rKgkidtYijozHclaEQTAHaAaMWPVI4A==", - "requires": { - "prop-types": "^15.7.2" - } - }, - "react-tabs": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/react-tabs/-/react-tabs-3.2.3.tgz", - "integrity": "sha512-jx325RhRVnS9DdFbeF511z0T0WEqEoMl1uCE3LoZ6VaZZm7ytatxbum0B8bCTmaiV0KsU+4TtLGTGevCic7SWg==", - "requires": { - "clsx": "^1.1.0", - "prop-types": "^15.5.0" - } - }, - "react-textarea-autosize": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.4.1.tgz", - "integrity": "sha512-aD2C+qK6QypknC+lCMzteOdIjoMbNlgSFmJjCV+DrfTPwp59i/it9mMNf2HDzvRjQgKAyBDPyLJhcrzElf2U4Q==", - "requires": { - "@babel/runtime": "^7.20.13", - "use-composed-ref": "^1.3.0", - "use-latest": "^1.2.1" - } - }, - "react-tooltip": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-4.5.1.tgz", - "integrity": "sha512-Zo+CSFUGXar1uV+bgXFFDe7VeS2iByeIp5rTgTcc2HqtuOS5D76QapejNNfx320MCY91TlhTQat36KGFTqgcvw==", - "requires": { - "prop-types": "^15.8.1", - "uuid": "^7.0.3" - }, - "dependencies": { - "uuid": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", - "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==" - } - } - }, - "react-universal-interface": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/react-universal-interface/-/react-universal-interface-0.6.2.tgz", - "integrity": "sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==", - "requires": {} - }, - "react-waypoint": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/react-waypoint/-/react-waypoint-10.3.0.tgz", - "integrity": "sha512-iF1y2c1BsoXuEGz08NoahaLFIGI9gTUAAOKip96HUmylRT6DUtpgoBPjk/Y8dfcFVmfVDvUzWjNXpZyKTOV0SQ==", - "requires": { - "@babel/runtime": "^7.12.5", - "consolidated-events": "^1.1.0 || ^2.0.0", - "prop-types": "^15.0.0", - "react-is": "^17.0.1 || ^18.0.0" - } - }, - "readable-stream": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.1.tgz", - "integrity": "sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "requires": { - "picomatch": "^2.2.1" - } - }, - "reading-time": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", - "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "requires": { - "resolve": "^1.1.6" - } - }, - "recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "requires": { - "minimatch": "^3.0.5" - } - }, - "redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - } - }, - "redoc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/redoc/-/redoc-2.0.0.tgz", - "integrity": "sha512-rU8iLdAkT89ywOkYk66Mr+IofqaMASlRvTew0dJvopCORMIPUcPMxjlJbJNC6wsn2vvMnpUFLQ/0ISDWn9BWag==", - "requires": { - "@redocly/openapi-core": "^1.0.0-beta.104", - "classnames": "^2.3.1", - "decko": "^1.2.0", - "dompurify": "^2.2.8", - "eventemitter3": "^4.0.7", - "json-pointer": "^0.6.2", - "lunr": "^2.3.9", - "mark.js": "^8.11.1", - "marked": "^4.0.15", - "mobx-react": "^7.2.0", - "openapi-sampler": "^1.3.0", - "path-browserify": "^1.0.1", - "perfect-scrollbar": "^1.5.5", - "polished": "^4.1.3", - "prismjs": "^1.27.0", - "prop-types": "^15.7.2", - "react-tabs": "^3.2.2", - "slugify": "~1.4.7", - "stickyfill": "^1.1.1", - "style-loader": "^3.3.1", - "swagger2openapi": "^7.0.6", - "url-template": "^2.0.8" - }, - "dependencies": { - "slugify": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.4.7.tgz", - "integrity": "sha512-tf+h5W1IrjNm/9rKKj0JU2MDMruiopx0jjVA5zCdBtcGjfp0+c5rHw/zADLC3IeKlGHtVbHtpfzvYA0OYT+HKg==" - }, - "style-loader": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", - "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", - "requires": {} - } - } - }, - "reftools": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/reftools/-/reftools-1.1.9.tgz", - "integrity": "sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w==" - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "devOptional": true - }, - "regexpu-core": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.1.tgz", - "integrity": "sha512-nCOzW2V/X15XpLsK2rlgdwrysrBq+AauCn+omItIz4R1pIcmeot5zvjdmOBRLzEH/CkC6IxMJVmxDe3QcMuNVQ==", - "requires": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - } - }, - "registry-auth-token": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", - "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", - "requires": { - "rc": "1.2.8" - } - }, - "registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "requires": { - "rc": "^1.2.8" - } - }, - "regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" - } - } - }, - "rehype-katex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/rehype-katex/-/rehype-katex-5.0.0.tgz", - "integrity": "sha512-ksSuEKCql/IiIadOHiKRMjypva9BLhuwQNascMqaoGLDVd0k2NlE2wMvgZ3rpItzRKCd6vs8s7MFbb8pcR0AEg==", - "requires": { - "@types/katex": "^0.11.0", - "hast-util-to-text": "^2.0.0", - "katex": "^0.13.0", - "rehype-parse": "^7.0.0", - "unified": "^9.0.0", - "unist-util-visit": "^2.0.0" - } - }, - "rehype-parse": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-7.0.1.tgz", - "integrity": "sha512-fOiR9a9xH+Le19i4fGzIEowAbwG7idy2Jzs4mOrFWBSJ0sNUgy0ev871dwWnbOo371SjgjG4pwzrbgSVrKxecw==", - "requires": { - "hast-util-from-parse5": "^6.0.0", - "parse5": "^6.0.0" - }, - "dependencies": { - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - } - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==" - }, - "remark-emoji": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", - "integrity": "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==", - "requires": { - "emoticon": "^3.2.0", - "node-emoji": "^1.10.0", - "unist-util-visit": "^2.0.3" - } - }, - "remark-footnotes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", - "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==" - }, - "remark-frontmatter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-3.0.0.tgz", - "integrity": "sha512-mSuDd3svCHs+2PyO29h7iijIZx4plX0fheacJcAoYAASfgzgVIcXGYSq9GFyYocFLftQs8IOmmkgtOovs6d4oA==", - "requires": { - "mdast-util-frontmatter": "^0.2.0", - "micromark-extension-frontmatter": "^0.2.0" - } - }, - "remark-gfm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-1.0.0.tgz", - "integrity": "sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA==", - "requires": { - "mdast-util-gfm": "^0.1.0", - "micromark-extension-gfm": "^0.3.0" - } - }, - "remark-math": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-math/-/remark-math-3.0.1.tgz", - "integrity": "sha512-epT77R/HK0x7NqrWHdSV75uNLwn8g9qTyMqCRCDujL0vj/6T6+yhdrR7mjELWtkse+Fw02kijAaBuVcHBor1+Q==" - }, - "remark-mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", - "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", - "requires": { - "@babel/core": "7.12.9", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.12.1", - "@babel/plugin-syntax-jsx": "7.12.1", - "@mdx-js/util": "1.6.22", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" - }, - "dependencies": { - "@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" - }, - "unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - } - } - } - }, - "remark-parse": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", - "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", - "requires": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" - } - }, - "remark-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", - "requires": { - "mdast-squeeze-paragraphs": "^4.0.0" - } - }, - "remark-stringify": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz", - "integrity": "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==", - "requires": { - "mdast-util-to-markdown": "^0.6.0" - } - }, - "remove-accents": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz", - "integrity": "sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==" - }, - "renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "requires": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - } - }, - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" - }, - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - } - } - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==" - }, - "request-progress": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", - "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", - "dev": true, - "requires": { - "throttleit": "^1.0.0" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" - }, - "require-like": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==" - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, - "resize-observer-polyfill": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", - "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "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==" - }, - "resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, - "resolve.exports": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", - "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", - "dev": true - }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", - "requires": { - "lowercase-keys": "^1.0.0" - } - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - }, - "rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rtl-css-js": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/rtl-css-js/-/rtl-css-js-1.16.1.tgz", - "integrity": "sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==", - "requires": { - "@babel/runtime": "^7.1.2" - } - }, - "rtl-detect": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", - "integrity": "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==" - }, - "rtlcss": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz", - "integrity": "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==", - "requires": { - "find-up": "^5.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.3.11", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "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==", - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "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==", - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "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==", - "requires": { - "p-limit": "^3.0.2" - } - }, - "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==" - }, - "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==" - } - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rxjs": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", - "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", - "requires": { - "tslib": "^2.1.0" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "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" - } - }, - "safe-stable-stringify": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-1.1.1.tgz", - "integrity": "sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sanitize-html": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.10.0.tgz", - "integrity": "sha512-JqdovUd81dG4k87vZt6uA6YhDfWkUGruUu/aPmXLxXi45gZExnt9Bnw/qeQU8oGf82vPyaE0vO4aH0PbobB9JQ==", - "requires": { - "deepmerge": "^4.2.2", - "escape-string-regexp": "^4.0.0", - "htmlparser2": "^8.0.0", - "is-plain-object": "^5.0.0", - "parse-srcset": "^1.0.2", - "postcss": "^8.3.11" - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "requires": { - "xmlchars": "^2.2.0" - } - }, - "scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - }, - "screenfull": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/screenfull/-/screenfull-5.2.0.tgz", - "integrity": "sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==" - }, - "section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "requires": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - } - }, - "select": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", - "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==" - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" - }, - "selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "requires": { - "node-forge": "^1" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, - "semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - } - } - }, - "serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-handler": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz", - "integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==", - "requires": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "fast-url-parser": "1.1.3", - "mime-types": "2.1.18", - "minimatch": "3.1.2", - "path-is-inside": "1.0.2", - "path-to-regexp": "2.2.1", - "range-parser": "1.2.0" - }, - "dependencies": { - "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" - }, - "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "requires": { - "mime-db": "~1.33.0" - } - }, - "path-to-regexp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", - "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" - } - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" - } - } - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "set-harmonic-interval": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-harmonic-interval/-/set-harmonic-interval-1.0.1.tgz", - "integrity": "sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==" - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "requires": { - "kind-of": "^6.0.2" - } - }, - "shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" - }, - "sharp": { - "version": "0.30.7", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.30.7.tgz", - "integrity": "sha512-G+MY2YW33jgflKPTXXptVO28HvNOo9G3j0MybYAHeEmby+QuD2U98dT6ueht9cv/XDqZspSpIhoSW+BAKJ7Hig==", - "requires": { - "color": "^4.2.3", - "detect-libc": "^2.0.1", - "node-addon-api": "^5.0.0", - "prebuild-install": "^7.1.1", - "semver": "^7.3.7", - "simple-get": "^4.0.1", - "tar-fs": "^2.1.1", - "tunnel-agent": "^0.6.0" - }, - "dependencies": { - "color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "requires": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - } - } - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "shell-quote": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.0.tgz", - "integrity": "sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==" - }, - "shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "should": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", - "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", - "requires": { - "should-equal": "^2.0.0", - "should-format": "^3.0.3", - "should-type": "^1.4.0", - "should-type-adaptors": "^1.0.1", - "should-util": "^1.0.0" - } - }, - "should-equal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", - "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", - "requires": { - "should-type": "^1.4.0" - } - }, - "should-format": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", - "integrity": "sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q==", - "requires": { - "should-type": "^1.3.0", - "should-type-adaptors": "^1.0.1" - } - }, - "should-type": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", - "integrity": "sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ==" - }, - "should-type-adaptors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", - "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", - "requires": { - "should-type": "^1.3.0", - "should-util": "^1.0.0" - } - }, - "should-util": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", - "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==" - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" - }, - "simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "requires": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "simple-html-tokenizer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/simple-html-tokenizer/-/simple-html-tokenizer-0.1.1.tgz", - "integrity": "sha512-Mc/gH3RvlKvB/gkp9XwgDKEWrSYyefIJPGG8Jk1suZms/rISdUuVEMx5O1WBnTWaScvxXDvGJrZQWblUmQHjkQ==", - "dev": true - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - } - } - }, - "sirv": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", - "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", - "requires": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^1.0.0" - } - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "sitemap": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", - "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", - "requires": { - "@types/node": "^17.0.5", - "@types/sax": "^1.2.1", - "arg": "^5.0.0", - "sax": "^1.2.4" - }, - "dependencies": { - "@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" - } - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "slugify": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.5.tgz", - "integrity": "sha512-8mo9bslnBO3tr5PEVFzMPIWwWnipGS0xVbYf65zxDqfNwmzYn1LpiKNrR6DlClusuvo+hDHd1zKpmfAe83NQSQ==" - }, - "sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "requires": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "sort-css-media-queries": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz", - "integrity": "sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" - }, - "space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" - }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "speed-measure-webpack-plugin": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.4.2.tgz", - "integrity": "sha512-AtVzD0bnIy2/B0fWqJpJgmhcrfWFhBlduzSo0uwplr/QvB33ZNZj2NEth3NONgdnZJqicK0W0mSxnLSbsVCDbw==", - "dev": true, - "requires": { - "chalk": "^4.1.0" - } - }, - "split-on-first": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-3.0.0.tgz", - "integrity": "sha512-qxQJTx2ryR0Dw0ITYyekNQWpz6f8dGd7vffGNflQQ3Iqj9NJ6qiZ7ELpZsJ/QBhIVAiDfXdag3+Gp8RvWa62AA==" - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "ssr-window": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/ssr-window/-/ssr-window-4.0.2.tgz", - "integrity": "sha512-ISv/Ch+ig7SOtw7G2+qkwfVASzazUnvlDTwypdLoPoySv+6MqlOV10VwPSE6EWkGjhW50lUmghPmpYZXMu/+AQ==" - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" - }, - "stack-generator": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz", - "integrity": "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==", - "requires": { - "stackframe": "^1.3.4" - } - }, - "stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, - "stackframe": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" - }, - "stacktrace-gps": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz", - "integrity": "sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==", - "requires": { - "source-map": "0.5.6", - "stackframe": "^1.3.4" - }, - "dependencies": { - "source-map": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==" - } - } - }, - "stacktrace-js": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-2.0.2.tgz", - "integrity": "sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==", - "requires": { - "error-stack-parser": "^2.0.6", - "stack-generator": "^2.0.5", - "stacktrace-gps": "^3.0.4" - } - }, - "state-local": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/state-local/-/state-local-1.0.7.tgz", - "integrity": "sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==" - }, - "state-toggle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", - "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==" - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - }, - "std-env": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.2.tgz", - "integrity": "sha512-uUZI65yrV2Qva5gqE0+A7uVAvO40iPo6jGhs7s8keRfHCmtg+uB2X6EiLGCI9IgL1J17xGhvoOqSz79lzICPTA==" - }, - "stickyfill": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stickyfill/-/stickyfill-1.1.1.tgz", - "integrity": "sha512-GCp7vHAfpao+Qh/3Flh9DXEJ/qSi0KJwJw6zYlZOtRYXWUIpMM6mC2rIep/dK8RQqwW0KxGJIllmjPIBOGN8AA==" - }, - "stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "dev": true, - "requires": { - "internal-slot": "^1.0.4" - } - }, - "stream-browserify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", - "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", - "requires": { - "inherits": "~2.0.4", - "readable-stream": "^3.5.0" - } - }, - "stream-http": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", - "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "xtend": "^4.0.2" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true - }, - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "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==" - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" - }, - "strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "requires": { - "min-indent": "^1.0.0" - } - }, - "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==" - }, - "style-loader": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz", - "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^2.7.0" - } - }, - "style-to-object": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", - "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", - "requires": { - "inline-style-parser": "0.1.1" - } - }, - "styled-components": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.3.tgz", - "integrity": "sha512-++4iHwBM7ZN+x6DtPPWkCI4vdtwumQ+inA/DdAsqYd4SVgUKJie5vXyzotA00ttcFdQkCng7zc6grwlfIfw+lw==", - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/traverse": "^7.4.5", - "@emotion/is-prop-valid": "^0.8.8", - "@emotion/stylis": "^0.8.4", - "@emotion/unitless": "^0.7.4", - "babel-plugin-styled-components": ">= 1.12.0", - "css-to-react-native": "^3.0.0", - "hoist-non-react-statics": "^3.0.0", - "shallowequal": "^1.1.0", - "supports-color": "^5.5.0" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "stylehacks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", - "requires": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" - } - }, - "stylis": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", - "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" - }, - "svg-inline-loader": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/svg-inline-loader/-/svg-inline-loader-0.8.2.tgz", - "integrity": "sha512-kbrcEh5n5JkypaSC152eGfGcnT4lkR0eSfvefaUJkLqgGjRQJyKDvvEE/CCv5aTSdfXuc+N98w16iAojhShI3g==", - "dev": true, - "requires": { - "loader-utils": "^1.1.0", - "object-assign": "^4.0.1", - "simple-html-tokenizer": "^0.1.1" - }, - "dependencies": { - "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" - } - }, - "loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - } - } - }, - "svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" - }, - "svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "requires": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - }, - "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - } - }, - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" - } - } - }, - "swagger2openapi": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/swagger2openapi/-/swagger2openapi-7.0.8.tgz", - "integrity": "sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g==", - "requires": { - "call-me-maybe": "^1.0.1", - "node-fetch": "^2.6.1", - "node-fetch-h2": "^2.3.0", - "node-readfiles": "^0.2.0", - "oas-kit-common": "^1.0.8", - "oas-resolver": "^2.5.6", - "oas-schema-walker": "^1.1.5", - "oas-validator": "^5.0.8", - "reftools": "^1.1.9", - "yaml": "^1.10.0", - "yargs": "^17.0.1" - }, - "dependencies": { - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" - } - } - }, - "swiper": { - "version": "8.4.7", - "resolved": "https://registry.npmjs.org/swiper/-/swiper-8.4.7.tgz", - "integrity": "sha512-VwO/KU3i9IV2Sf+W2NqyzwWob4yX9Qdedq6vBtS0rFqJ6Fa5iLUJwxQkuD4I38w0WDJwmFl8ojkdcRFPHWD+2g==", - "requires": { - "dom7": "^4.0.4", - "ssr-window": "^4.0.2" - } - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" - }, - "tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } - }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } - }, - "terser": { - "version": "5.16.5", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.5.tgz", - "integrity": "sha512-qcwfg4+RZa3YvlFh0qjifnzBHjKGNbtDo9yivMqMFDy9Q6FSaQWSB/j1xKhsoUFJIqDOM3TsN6D5xbrMrFcHbg==", - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - } - } - }, - "terser-webpack-plugin": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", - "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", - "requires": { - "@jridgewell/trace-mapping": "^0.3.14", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.14.1" - }, - "dependencies": { - "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "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==" - }, - "throat": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", - "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==", - "dev": true - }, - "throttle-debounce": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-3.0.1.tgz", - "integrity": "sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==" - }, - "throttleit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", - "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "requires": { - "setimmediate": "^1.0.4" - } - }, - "tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" - }, - "tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" - }, - "tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } - }, - "tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" - }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "toggle-selection": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", - "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - }, - "totalist": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", - "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==" - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==" - }, - "trim-trailing-lines": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", - "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==" - }, - "trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" - }, - "ts-easing": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/ts-easing/-/ts-easing-0.2.0.tgz", - "integrity": "sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==" - }, - "ts-keycode-enum": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/ts-keycode-enum/-/ts-keycode-enum-1.0.6.tgz", - "integrity": "sha512-DF8+Cf/FJJnPRxwz8agCoDelQXKZWQOS/gnnwx01nZ106tPJdB3BgJ9QTtLwXgR82D8O+nTjuZzWgf0Rg4vuRA==" - }, - "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "tty-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", - "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==" - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "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==", - "devOptional": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "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" - } - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "peer": true - }, - "ua-parser-js": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.34.tgz", - "integrity": "sha512-cJMeh/eOILyGu0ejgTKB95yKT3zOenSe9UGE3vj6WfiOwgGYnmATUsnDixMFvdU+rNMvWih83hrUP8VwhF9yXQ==" - }, - "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" - } - }, - "unherit": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", - "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", - "requires": { - "inherits": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==" - }, - "unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" - }, - "unified": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", - "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - } - }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "requires": { - "crypto-random-string": "^2.0.0" - } - }, - "unist-builder": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", - "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==" - }, - "unist-util-find-after": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-3.0.0.tgz", - "integrity": "sha512-ojlBqfsBftYXExNu3+hHLfJQ/X1jYY/9vdm4yZWjIbf0VuWF6CRufci1ZyoD/wV2TYMKxXUoNuoqwy+CkgzAiQ==", - "requires": { - "unist-util-is": "^4.0.0" - } - }, - "unist-util-generated": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", - "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==" - }, - "unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==" - }, - "unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==" - }, - "unist-util-remove": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", - "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", - "requires": { - "unist-util-is": "^4.0.0" - } - }, - "unist-util-remove-position": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", - "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", - "requires": { - "unist-util-visit": "^2.0.0" - } - }, - "unist-util-select": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/unist-util-select/-/unist-util-select-4.0.3.tgz", - "integrity": "sha512-1074+K9VyR3NyUz3lgNtHKm7ln+jSZXtLJM4E22uVuoFn88a/Go2pX8dusrt/W+KWH1ncn8jcd8uCQuvXb/fXA==", - "requires": { - "@types/unist": "^2.0.0", - "css-selector-parser": "^1.0.0", - "nth-check": "^2.0.0", - "zwitch": "^2.0.0" - }, - "dependencies": { - "zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==" - } - } - }, - "unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "requires": { - "@types/unist": "^2.0.2" - } - }, - "unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - }, - "unload": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unload/-/unload-2.2.0.tgz", - "integrity": "sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA==", - "requires": { - "@babel/runtime": "^7.6.2", - "detect-node": "^2.0.4" - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" - }, - "untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true - }, - "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "requires": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "dependencies": { - "boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - } - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "requires": { - "ci-info": "^2.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.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==" - }, - "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "requires": { - "string-width": "^4.0.0" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { - "punycode": "^2.1.0" - } - }, - "urijs": { - "version": "1.19.11", - "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", - "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==" - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" - } - } - }, - "url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "requires": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", - "requires": { - "prepend-http": "^2.0.0" - } - }, - "url-template": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", - "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==" - }, - "use-composed-ref": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", - "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", - "requires": {} - }, - "use-isomorphic-layout-effect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", - "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", - "requires": {} - }, - "use-latest": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", - "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", - "requires": { - "use-isomorphic-layout-effect": "^1.1.1" - } - }, - "use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", - "requires": {} - }, - "util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" - }, - "utility-types": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", - "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - }, - "v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true - } - } - }, - "validate.io-array": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz", - "integrity": "sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg==" - }, - "validate.io-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/validate.io-function/-/validate.io-function-1.0.2.tgz", - "integrity": "sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ==" - }, - "validate.io-integer": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/validate.io-integer/-/validate.io-integer-1.0.5.tgz", - "integrity": "sha512-22izsYSLojN/P6bppBqhgUDjCkr5RY2jd+N2a3DCAUey8ydvrZ/OkGvFPR7qfOpwR2LC5p4Ngzxz36g5Vgr/hQ==", - "requires": { - "validate.io-number": "^1.0.3" - } - }, - "validate.io-integer-array": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz", - "integrity": "sha512-mTrMk/1ytQHtCY0oNO3dztafHYyGU88KL+jRxWuzfOmQb+4qqnWmI+gykvGp8usKZOM0H7keJHEbRaFiYA0VrA==", - "requires": { - "validate.io-array": "^1.0.3", - "validate.io-integer": "^1.0.4" - } - }, - "validate.io-number": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz", - "integrity": "sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg==" - }, - "value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - } - }, - "vfile-location": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==" - }, - "vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - } - }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "requires": { - "xml-name-validator": "^3.0.0" - } - }, - "wait-on": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", - "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", - "requires": { - "axios": "^0.25.0", - "joi": "^17.6.0", - "lodash": "^4.17.21", - "minimist": "^1.2.5", - "rxjs": "^7.5.4" - }, - "dependencies": { - "axios": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", - "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", - "requires": { - "follow-redirects": "^1.14.7" - } - } - } - }, - "walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "requires": { - "makeerror": "1.0.12" - } - }, - "watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "web-namespaces": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", - "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==" - }, - "web-streams-polyfill": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", - "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==" - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, - "webpack": { - "version": "5.75.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", - "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", - "requires": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "dependencies": { - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "webpack-bundle-analyzer": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.8.0.tgz", - "integrity": "sha512-ZzoSBePshOKhr+hd8u6oCkZVwpVaXgpw23ScGLFpR6SjYI7+7iIWYarjN6OEYOfRt8o7ZyZZQk0DuMizJ+LEIg==", - "requires": { - "@discoveryjs/json-ext": "0.5.7", - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "chalk": "^4.1.0", - "commander": "^7.2.0", - "gzip-size": "^6.0.0", - "lodash": "^4.17.20", - "opener": "^1.5.2", - "sirv": "^1.0.7", - "ws": "^7.3.1" - }, - "dependencies": { - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" - }, - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - } - } - }, - "webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "requires": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - } - } - }, - "webpack-dev-server": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", - "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", - "requires": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - }, - "ws": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.1.tgz", - "integrity": "sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew==", - "requires": {} - } - } - }, - "webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "requires": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - } - }, - "webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" - }, - "webpackbar": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", - "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", - "requires": { - "chalk": "^4.1.0", - "consola": "^2.15.3", - "pretty-time": "^1.1.0", - "std-env": "^3.0.1" - } - }, - "websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "requires": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "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-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dev": true, - "requires": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - } - }, - "which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - } - }, - "widest-line": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", - "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", - "requires": { - "string-width": "^5.0.1" - } - }, - "wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" - }, - "wolfy87-eventemitter": { - "version": "5.2.9", - "resolved": "https://registry.npmjs.org/wolfy87-eventemitter/-/wolfy87-eventemitter-5.2.9.tgz", - "integrity": "sha512-P+6vtWyuDw+MB01X7UeF8TaHBvbCovf4HPEMF/SV7BdDc1SMTiBy13SRD71lQh4ExFTG1d/WNzDGDCyOKSMblw==" - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "devOptional": true - }, - "wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "requires": {} - }, - "xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" - }, - "xml-formatter": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/xml-formatter/-/xml-formatter-2.6.1.tgz", - "integrity": "sha512-dOiGwoqm8y22QdTNI7A+N03tyVfBlQ0/oehAzxIZtwnFAHGeSlrfjF73YQvzSsa/Kt6+YZasKsrdu6OIpuBggw==", - "requires": { - "xml-parser-xo": "^3.2.0" - } - }, - "xml-js": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", - "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", - "requires": { - "sax": "^1.2.4" - } - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "xml-parser-xo": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/xml-parser-xo/-/xml-parser-xo-3.2.0.tgz", - "integrity": "sha512-8LRU6cq+d7mVsoDaMhnkkt3CTtAs4153p49fRo+HIB3I1FD1o5CeXRjRH29sQevIfVJIcPjKSsPU/+Ujhq09Rg==" - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" - }, - "yaml-ast-parser": { - "version": "0.0.43", - "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", - "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==" - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "dev": true - }, - "zustand": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/zustand/-/zustand-3.7.2.tgz", - "integrity": "sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==", - "requires": {} - }, - "zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==" - } } } diff --git a/website/static/js/headerLinkCopy.js b/website/static/js/headerLinkCopy.js index 66a4800233c..04f716a7641 100644 --- a/website/static/js/headerLinkCopy.js +++ b/website/static/js/headerLinkCopy.js @@ -1,26 +1,25 @@ -import ClipboardJS from 'clipboard'; +/* eslint-disable */ -document.addEventListener("DOMContentLoaded", function () { - // Get all the headers with anchor links - const headers = document.querySelectorAll("a.anchor-header"); - - headers.forEach((header) => { - header.style.cursor = "pointer"; - const clipboard = new ClipboardJS(header, { - text: function(trigger) { - const anchorLink = trigger.getAttribute('href'); - return window.location.href.split('#')[0] + anchorLink; - } - }); - - clipboard.on('success', function(e) { - // Provide user feedback (e.g., alert or tooltip) here - // You can customize the feedback based on your preference - alert("Link copied to clipboard: " + e.text); - }); - - clipboard.on('error', function(e) { - console.error("Unable to copy to clipboard: " + e.text); +window.addEventListener("load", function () { + // Get all the headers with anchor links + const headers = document.querySelectorAll("h2.anchor, h3.anchor"); + console.log("headers",headers); + headers.forEach((header) => { + header.style.cursor = "pointer"; + const clipboard = new ClipboardJS(header, { + text: function(trigger) { + const anchorLink = trigger.getAttribute('href'); + return window.location.href.split('#')[0] + anchorLink; + } + }); + + clipboard.on('success', function(e) { + // Provide user feedback (e.g., alert or tooltip) here + alert("Link copied to clipboard: " + e.text); + }); + + clipboard.on('error', function(e) { + console.error("Unable to copy to clipboard: " + e.text); + }); }); }); -}); From 7c98a9856df3da1291974f7ff8a5cd0ffd9350e8 Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Wed, 8 Nov 2023 10:45:25 -0800 Subject: [PATCH 096/305] movign snowpark --- .../dbt-python-snowpark/1-overview-dbt-python-snowpark.md | 1 + 1 file changed, 1 insertion(+) diff --git a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/1-overview-dbt-python-snowpark.md b/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/1-overview-dbt-python-snowpark.md index b3843d49922..6fb436c5bc4 100644 --- a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/1-overview-dbt-python-snowpark.md +++ b/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/1-overview-dbt-python-snowpark.md @@ -46,3 +46,4 @@ As inputs, we are going to leverage Formula 1 datasets hosted on a dbt Labs publ Overall we are going to set up the environments, build scalable pipelines in dbt, establish data tests, and promote code to production. +;' From a16454eeb692d82d162d422f45e472d9c18e02ed Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Wed, 8 Nov 2023 14:11:13 -0800 Subject: [PATCH 097/305] move more guides --- .../1-what-are-adapters.md | 100 - .../2-prerequisites-for-a-new-adapter.md | 46 - .../3-building-a-new-adapter.md | 411 ---- .../4-testing-a-new-adapter.md | 494 ----- .../adapter-development/adapter-development | 1 - .../adapter-development/create-adapters.md | 1066 +++++++++ .../1-overview-dbt-python-snowpark.md | 49 - .../10-python-transformations.md | 150 -- .../11-machine-learning-prep.md | 225 -- .../12-machine-learning-training-testing.md | 251 --- .../dbt-python-snowpark/13-testing.md | 136 -- .../dbt-python-snowpark/14-documentation.md | 29 - .../dbt-python-snowpark/15-deployment.md | 50 - .../2-snowflake-configuration.md | 27 - .../3-connect-to-data-source.md | 192 -- .../dbt-python-snowpark/4-configure-dbt.md | 27 - .../5-development-schema-name.md | 46 - .../6-foundational-structure.md | 80 - .../dbt-python-snowpark/7-folder-structure.md | 27 - .../8-sources-and-staging.md | 334 --- .../9-sql-transformations.md | 299 --- website/docs/guides/dbt-python-snowpark.md | 1946 +++++++++++++++++ .../sl-partner-integration-guide.md | 17 +- 23 files changed, 3025 insertions(+), 2978 deletions(-) delete mode 100644 website/docs/guides/dbt-ecosystem/adapter-development/1-what-are-adapters.md delete mode 100644 website/docs/guides/dbt-ecosystem/adapter-development/adapter-development create mode 100644 website/docs/guides/dbt-ecosystem/adapter-development/create-adapters.md delete mode 100644 website/docs/guides/dbt-ecosystem/dbt-python-snowpark/1-overview-dbt-python-snowpark.md delete mode 100644 website/docs/guides/dbt-ecosystem/dbt-python-snowpark/10-python-transformations.md delete mode 100644 website/docs/guides/dbt-ecosystem/dbt-python-snowpark/11-machine-learning-prep.md delete mode 100644 website/docs/guides/dbt-ecosystem/dbt-python-snowpark/12-machine-learning-training-testing.md delete mode 100644 website/docs/guides/dbt-ecosystem/dbt-python-snowpark/13-testing.md delete mode 100644 website/docs/guides/dbt-ecosystem/dbt-python-snowpark/14-documentation.md delete mode 100644 website/docs/guides/dbt-ecosystem/dbt-python-snowpark/15-deployment.md delete mode 100644 website/docs/guides/dbt-ecosystem/dbt-python-snowpark/2-snowflake-configuration.md delete mode 100644 website/docs/guides/dbt-ecosystem/dbt-python-snowpark/3-connect-to-data-source.md delete mode 100644 website/docs/guides/dbt-ecosystem/dbt-python-snowpark/4-configure-dbt.md delete mode 100644 website/docs/guides/dbt-ecosystem/dbt-python-snowpark/5-development-schema-name.md delete mode 100644 website/docs/guides/dbt-ecosystem/dbt-python-snowpark/6-foundational-structure.md delete mode 100644 website/docs/guides/dbt-ecosystem/dbt-python-snowpark/7-folder-structure.md delete mode 100644 website/docs/guides/dbt-ecosystem/dbt-python-snowpark/8-sources-and-staging.md delete mode 100644 website/docs/guides/dbt-ecosystem/dbt-python-snowpark/9-sql-transformations.md create mode 100644 website/docs/guides/dbt-python-snowpark.md rename website/docs/guides/{dbt-ecosystem => }/sl-partner-integration-guide.md (97%) diff --git a/website/docs/guides/dbt-ecosystem/adapter-development/1-what-are-adapters.md b/website/docs/guides/dbt-ecosystem/adapter-development/1-what-are-adapters.md deleted file mode 100644 index 0959dbee707..00000000000 --- a/website/docs/guides/dbt-ecosystem/adapter-development/1-what-are-adapters.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: "What are adapters? Why do we need them?" -id: "1-what-are-adapters" ---- - -Adapters are an essential component of dbt. At their most basic level, they are how dbt Core connects with the various supported data platforms. At a higher-level, dbt Core adapters strive to give analytics engineers more transferrable skills as well as standardize how analytics projects are structured. Gone are the days where you have to learn a new language or flavor of SQL when you move to a new job that has a different data platform. That is the power of adapters in dbt Core. - - Navigating and developing around the nuances of different databases can be daunting, but you are not alone. Visit [#adapter-ecosystem](https://getdbt.slack.com/archives/C030A0UF5LM) Slack channel for additional help beyond the documentation. - -## All databases are not the same - -There's a tremendous amount of work that goes into creating a database. Here is a high-level list of typical database layers (from the outermost layer moving inwards): -- SQL API -- Client Library / Driver -- Server Connection Manager -- Query parser -- Query optimizer -- Runtime -- Storage Access Layer -- Storage - -There's a lot more there than just SQL as a language. Databases (and data warehouses) are so popular because you can abstract away a great deal of the complexity from your brain to the database itself. This enables you to focus more on the data. - -dbt allows for further abstraction and standardization of the outermost layers of a database (SQL API, client library, connection manager) into a framework that both: - - Opens database technology to less technical users (a large swath of a DBA's role has been automated, similar to how the vast majority of folks with websites today no longer have to be "[webmasters](https://en.wikipedia.org/wiki/Webmaster)"). - - Enables more meaningful conversations about how data warehousing should be done. - -This is where dbt adapters become critical. - -## What needs to be adapted? - -dbt adapters are responsible for _adapting_ dbt's standard functionality to a particular database. Our prototypical database and adapter are PostgreSQL and dbt-postgres, and most of our adapters are somewhat based on the functionality described in dbt-postgres. - -Connecting dbt to a new database will require a new adapter to be built or an existing adapter to be extended. - -The outermost layers of a database map roughly to the areas in which the dbt adapter framework encapsulates inter-database differences. - -### SQL API - -Even amongst ANSI-compliant databases, there are differences in the SQL grammar. -Here are some categories and examples of SQL statements that can be constructed differently: - - -| Category | Area of differences | Examples | -|----------------------------------------------|--------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Statement syntax | The use of `IF EXISTS` |
  • `IF EXISTS, DROP TABLE`
  • `DROP
  • IF EXISTS` | -| Workflow definition & semantics | Incremental updates |
  • `MERGE`
  • `DELETE; INSERT`
  • | -| Relation and column attributes/configuration | Database-specific materialization configs |
  • `DIST = ROUND_ROBIN` (Synapse)
  • `DIST = EVEN` (Redshift)
  • | -| Permissioning | Grant statements that can only take one grantee at a time vs those that accept lists of grantees |
  • `grant SELECT on table dinner.corn to corn_kid, everyone`
  • `grant SELECT on table dinner.corn to corn_kid; grant SELECT on table dinner.corn to everyone`
  • | - -### Python Client Library & Connection Manager - -The other big category of inter-database differences comes with how the client connects to the database and executes queries against the connection. To integrate with dbt, a data platform must have a pre-existing python client library or support ODBC, using a generic python library like pyodbc. - -| Category | Area of differences | Examples | -|------------------------------|-------------------------------------------|-------------------------------------------------------------------------------------------------------------| -| Credentials & authentication | Authentication |
  • Username & password
  • MFA with `boto3` or Okta token
  • | -| Connection opening/closing | Create a new connection to db |
  • `psycopg2.connect(connection_string)`
  • `google.cloud.bigquery.Client(...)`
  • | -| Inserting local data | Load seed .`csv` files into Python memory |
  • `google.cloud.bigquery.Client.load_table_from_file(...)` (BigQuery)
  • `INSERT ... INTO VALUES ...` prepared statement (most other databases)
  • | - - -## How dbt encapsulates and abstracts these differences - -Differences between databases are encoded into discrete areas: - -| Components | Code Path | Function | -|------------------|---------------------------------------------------|-------------------------------------------------------------------------------| -| Python Classes | `adapters/` | Configuration (See above [Python classes](##python classes) | -| Macros | `include//macros/adapters/` | SQL API & statement syntax (for example, how to create schema or how to get table info) | -| Materializations | `include//macros/materializations/` | Table/view/snapshot/ workflow definitions | - - -### Python Classes - -These classes implement all the methods responsible for: -- Connecting to a database and issuing queries. -- Providing dbt with database-specific configuration information. - -| Class | Description | -|--------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| AdapterClass | High-level configuration type conversion and any database-specific python methods needed | -| AdapterCredentials | Typed dictionary of possible profiles and associated methods | -| AdapterConnectionManager | All the methods responsible for connecting to a database and issuing queries | -| AdapterRelation | How relation names should be rendered, printed, and quoted. Do relation names use all three parts? `catalog.model_name` (two-part name) or `database.schema.model_name` (three-part name) | -| AdapterColumn | How names should be rendered, and database-specific properties | - -### Macros - -A set of *macros* responsible for generating SQL that is compliant with the target database. - -### Materializations - -A set of *materializations* and their corresponding helper macros defined in dbt using jinja and SQL. They codify for dbt how model files should be persisted into the database. - -## Adapter Architecture - - -Below is a diagram of how dbt-postgres, the adapter at the center of dbt-core, works. - - diff --git a/website/docs/guides/dbt-ecosystem/adapter-development/2-prerequisites-for-a-new-adapter.md b/website/docs/guides/dbt-ecosystem/adapter-development/2-prerequisites-for-a-new-adapter.md index 28cd8935937..ca531d04692 100644 --- a/website/docs/guides/dbt-ecosystem/adapter-development/2-prerequisites-for-a-new-adapter.md +++ b/website/docs/guides/dbt-ecosystem/adapter-development/2-prerequisites-for-a-new-adapter.md @@ -3,50 +3,4 @@ title: "Prerequisites for a new adapter" id: "2-prerequisites-for-a-new-adapter" --- -To learn what an adapter is and they role they serve, see [What are adapters?](1-what-are-adapters) -It is very important that make sure that you have the right skills, and to understand the level of difficulty required to make an adapter for your data platform. - -## Pre-Requisite Data Warehouse Features - -The more you can answer Yes to the below questions, the easier your adapter development (and user-) experience will be. See the [New Adapter Information Sheet wiki](https://github.com/dbt-labs/dbt-core/wiki/New-Adapter-Information-Sheet) for even more specific questions. - -### Training -- the developer (and any product managers) ideally will have substantial experience as an end-user of dbt. If not, it is highly advised that you at least take the [dbt Fundamentals](https://courses.getdbt.com/courses/fundamentals) and [Advanced Materializations](https://courses.getdbt.com/courses/advanced-materializations) course. - -### Database -- Does the database complete transactions fast enough for interactive development? -- Can you execute SQL against the data platform? -- Is there a concept of schemas? -- Does the data platform support ANSI SQL, or at least a subset? -### Driver / Connection Library -- Is there a Python-based driver for interacting with the database that is db API 2.0 compliant (e.g. Psycopg2 for Postgres, pyodbc for SQL Server) -- Does it support: prepared statements, multiple statements, or single sign on token authorization to the data platform? - -### Open source software -- Does your organization have an established process for publishing open source software? - - -It is easiest to build an adapter for dbt when the following the /platform in question has: -- a conventional ANSI-SQL interface (or as close to it as possible), -- a mature connection library/SDK that uses ODBC or Python DB 2 API, and -- a way to enable developers to iterate rapidly with both quick reads and writes - - -## Maintaining your new adapter - -When your adapter becomes more popular, and people start using it, you may quickly become the maintainer of an increasingly popular open source project. With this new role, comes some unexpected responsibilities that not only include code maintenance, but also working with a community of users and contributors. To help people understand what to expect of your project, you should communicate your intentions early and often in your adapter documentation or README. Answer questions like, Is this experimental work that people should use at their own risk? Or is this production-grade code that you're committed to maintaining into the future? - -### Keeping the code compatible with dbt Core - -New minor version releases of `dbt-core` may include changes to the Python interface for adapter plugins, as well as new or updated test cases. The maintainers of `dbt-core` will clearly communicate these changes in documentation and release notes, and they will aim for backwards compatibility whenever possible. - -Patch releases of `dbt-core` will _not_ include breaking changes to adapter-facing code. For more details, see ["About dbt Core versions"](/docs/dbt-versions/core). - -### Versioning and releasing your adapter - -We strongly encourage you to adopt the following approach when versioning and releasing your plugin: -- The minor version of your plugin should match the minor version in `dbt-core` (e.g. 1.1.x). -- Aim to release a new version of your plugin for each new minor version of `dbt-core` (once every three months). -- While your plugin is new, and you're iterating on features, aim to offer backwards compatibility and deprecation notices for at least one minor version. As your plugin matures, aim to leave backwards compatibility and deprecation notices in place until the next major version (dbt Core v2). -- Release patch versions of your plugins whenever needed. These patch releases should contain fixes _only_. diff --git a/website/docs/guides/dbt-ecosystem/adapter-development/3-building-a-new-adapter.md b/website/docs/guides/dbt-ecosystem/adapter-development/3-building-a-new-adapter.md index 43826ca4b1d..e882906da75 100644 --- a/website/docs/guides/dbt-ecosystem/adapter-development/3-building-a-new-adapter.md +++ b/website/docs/guides/dbt-ecosystem/adapter-development/3-building-a-new-adapter.md @@ -3,414 +3,3 @@ title: "Building a new adapter" id: "3-building-a-new-adapter" --- -:::tip -Before you build your adapter, we strongly encourage you to first learn dbt as an end user, learn [what an adapter is and the role they serve](1-what-are-adapters), as well as [data platform prerequisites](2-prerequisites-for-a-new-adapter) -::: - - -This guide will walk you through the first creating the necessary adapter classes and macros, and provide some resources to help you validate that your new adapter is working correctly. Once the adapter is passing most of the functional tests (see ["Testing a new adapter"](4-testing-a-new-adapter) -), please let the community know that is available to use by adding the adapter to the ["Supported Data Platforms"](/docs/supported-data-platforms) page by following the steps given in [Documenting your adapter](/guides/dbt-ecosystem/adapter-development/5-documenting-a-new-adapter). - -For any questions you may have, don't hesitate to ask in the [#adapter-ecosystem](https://getdbt.slack.com/archives/C030A0UF5LM) Slack channel. The community is very helpful and likely has experienced a similar issue as you. - -## Scaffolding a new adapter - To create a new adapter plugin from scratch, you can use the [dbt-database-adapter-scaffold](https://github.com/dbt-labs/dbt-database-adapter-scaffold) to trigger an interactive session which will generate a scaffolding for you to build upon. - - Example usage: - - ``` - $ cookiecutter gh:dbt-labs/dbt-database-adapter-scaffold - ``` - -The generated boilerplate starting project will include a basic adapter plugin file structure, examples of macros, high level method descriptions, etc. - -One of the most important choices you will make during the cookiecutter generation will revolve around the field for `is_sql_adapter` which is a boolean used to correctly apply imports for either a `SQLAdapter` or `BaseAdapter`. Knowing which you will need requires a deeper knowledge of your selected database but a few good guides for the choice are. -- Does your database have a complete SQL API? Can it perform tasks using SQL such as creating schemas, dropping schemas, querying an `information_schema` for metadata calls? If so, it is more likely to be a SQLAdapter where you set `is_sql_adapter` to `True`. -- Most adapters do fall under SQL adapters which is why we chose it as the default `True` value. -- It is very possible to build out a fully functional `BaseAdapter`. This will require a little more ground work as it doesn't come with some prebuilt methods the `SQLAdapter` class provides. See `dbt-bigquery` as a good guide. - -## Implementation Details - -Regardless if you decide to use the cookiecutter template or manually create the plugin, this section will go over each method that is required to be implemented. The table below provides a high-level overview of the classes, methods, and macros you may have to define for your data platform. - -| file | component | purpose | -|---------------------------------------------------|-------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `./setup.py` | `setup()` function | adapter meta-data (package name, version, author, homepage, etc) | -| `myadapter/dbt/adapters/myadapter/__init__.py` | `AdapterPlugin` | bundle all the information below into a dbt plugin | -| `myadapter/dbt/adapters/myadapter/connections.py` | `MyAdapterCredentials` class | parameters to connect to and configure the database, via a the chosen Python driver | -| `myadapter/dbt/adapters/myadapter/connections.py` | `MyAdapterConnectionManager` class | telling dbt how to interact with the database w.r.t opening/closing connections, executing queries, and fetching data. Effectively a wrapper around the db API or driver. | -| `myadapter/dbt/include/bigquery/` | a dbt project of macro "overrides" in the format of "myadapter__" | any differences in SQL syntax for regular db operations will be modified here from the global_project (e.g. "Create Table As Select", "Get all relations in the current schema", etc) | -| `myadapter/dbt/adapters/myadapter/impl.py` | `MyAdapterConfig` | database- and relation-level configs and | -| `myadapter/dbt/adapters/myadapter/impl.py` | `MyAdapterAdapter` | for changing _how_ dbt performs operations like macros and other needed Python functionality | -| `myadapter/dbt/adapters/myadapter/column.py` | `MyAdapterColumn` | for defining database-specific column such as datatype mappings | - -### Editing `setup.py` - -Edit the file at `myadapter/setup.py` and fill in the missing information. - -You can skip this step if you passed the arguments for `email`, `url`, `author`, and `dependencies` to the cookiecutter template script. If you plan on having nested macro folder structures, you may need to add entries to `package_data` so your macro source files get installed. - -### Editing the connection manager - -Edit the connection manager at `myadapter/dbt/adapters/myadapter/connections.py`. This file is defined in the sections below. - -#### The Credentials class - -The credentials class defines all of the database-specific credentials (e.g. `username` and `password`) that users will need in the [connection profile](/docs/supported-data-platforms) for your new adapter. Each credentials contract should subclass dbt.adapters.base.Credentials, and be implemented as a python dataclass. - -Note that the base class includes required database and schema fields, as dbt uses those values internally. - -For example, if your adapter requires a host, integer port, username string, and password string, but host is the only required field, you'd add definitions for those new properties to the class as types, like this: - - - -```python - -from dataclasses import dataclass -from typing import Optional - -from dbt.adapters.base import Credentials - - -@dataclass -class MyAdapterCredentials(Credentials): - host: str - port: int = 1337 - username: Optional[str] = None - password: Optional[str] = None - - @property - def type(self): - return 'myadapter' - - @property - def unique_field(self): - """ - Hashed and included in anonymous telemetry to track adapter adoption. - Pick a field that can uniquely identify one team/organization building with this adapter - """ - return self.host - - def _connection_keys(self): - """ - List of keys to display in the `dbt debug` output. - """ - return ('host', 'port', 'database', 'username') -``` - - - -There are a few things you can do to make it easier for users when connecting to your database: -- Be sure to implement the Credentials' `_connection_keys` method shown above. This method will return the keys that should be displayed in the output of the `dbt debug` command. As a general rule, it's good to return all the arguments used in connecting to the actual database except the password (even optional arguments). -- Create a `profile_template.yml` to enable configuration prompts for a brand-new user setting up a connection profile via the [`dbt init` command](/reference/commands/init). See more details [below](#other-files). -- You may also want to define an `ALIASES` mapping on your Credentials class to include any config names you want users to be able to use in place of 'database' or 'schema'. For example if everyone using the MyAdapter database calls their databases "collections", you might do: - - - -```python -@dataclass -class MyAdapterCredentials(Credentials): - host: str - port: int = 1337 - username: Optional[str] = None - password: Optional[str] = None - - ALIASES = { - 'collection': 'database', - } -``` - - - -Then users can use `collection` OR `database` in their `profiles.yml`, `dbt_project.yml`, or `config()` calls to set the database. - -#### `ConnectionManager` class methods - -Once credentials are configured, you'll need to implement some connection-oriented methods. They are enumerated in the SQLConnectionManager docstring, but an overview will also be provided here. - -**Methods to implement:** -- `open` -- `get_response` -- `cancel` -- `exception_handler` -- `standardize_grants_dict` - -##### `open(cls, connection)` - -`open()` is a classmethod that gets a connection object (which could be in any state, but will have a `Credentials` object with the attributes you defined above) and moves it to the 'open' state. - -Generally this means doing the following: - - if the connection is open already, log and return it. - - If a database needed changes to the underlying connection before re-use, that would happen here - - create a connection handle using the underlying database library using the credentials - - on success: - - set connection.state to `'open'` - - set connection.handle to the handle object - - this is what must have a `cursor()` method that returns a cursor! - - on error: - - set connection.state to `'fail'` - - set connection.handle to `None` - - raise a `dbt.exceptions.FailedToConnectException` with the error and any other relevant information - -For example: - - - -```python - @classmethod - def open(cls, connection): - if connection.state == 'open': - logger.debug('Connection is already open, skipping open.') - return connection - - credentials = connection.credentials - - try: - handle = myadapter_library.connect( - host=credentials.host, - port=credentials.port, - username=credentials.username, - password=credentials.password, - catalog=credentials.database - ) - connection.state = 'open' - connection.handle = handle - return connection -``` - - - -##### `get_response(cls, cursor)` - -`get_response` is a classmethod that gets a cursor object and returns adapter-specific information about the last executed command. The return value should be an `AdapterResponse` object that includes items such as `code`, `rows_affected`, `bytes_processed`, and a summary `_message` for logging to stdout. - - - -```python - @classmethod - def get_response(cls, cursor) -> AdapterResponse: - code = cursor.sqlstate or "OK" - rows = cursor.rowcount - status_message = f"{code} {rows}" - return AdapterResponse( - _message=status_message, - code=code, - rows_affected=rows - ) -``` - - - -##### `cancel(self, connection)` - -`cancel` is an instance method that gets a connection object and attempts to cancel any ongoing queries, which is database dependent. Some databases don't support the concept of cancellation, they can simply implement it via 'pass' and their adapter classes should implement an `is_cancelable` that returns False - On ctrl+c connections may remain running. This method must be implemented carefully, as the affected connection will likely be in use in a different thread. - - - -```python - def cancel(self, connection): - tid = connection.handle.transaction_id() - sql = 'select cancel_transaction({})'.format(tid) - logger.debug("Cancelling query '{}' ({})".format(connection_name, pid)) - _, cursor = self.add_query(sql, 'master') - res = cursor.fetchone() - logger.debug("Canceled query '{}': {}".format(connection_name, res)) -``` - - - -##### `exception_handler(self, sql, connection_name='master')` - -`exception_handler` is an instance method that returns a context manager that will handle exceptions raised by running queries, catch them, log appropriately, and then raise exceptions dbt knows how to handle. - -If you use the (highly recommended) `@contextmanager` decorator, you only have to wrap a `yield` inside a `try` block, like so: - - - -```python - @contextmanager - def exception_handler(self, sql: str): - try: - yield - except myadapter_library.DatabaseError as exc: - self.release(connection_name) - - logger.debug('myadapter error: {}'.format(str(e))) - raise dbt.exceptions.DatabaseException(str(exc)) - except Exception as exc: - logger.debug("Error running SQL: {}".format(sql)) - logger.debug("Rolling back transaction.") - self.release(connection_name) - raise dbt.exceptions.RuntimeException(str(exc)) -``` - - - -##### `standardize_grants_dict(self, grants_table: agate.Table) -> dict` - -`standardize_grants_dict` is an method that returns the dbt-standardized grants dictionary that matches how users configure grants now in dbt. The input is the result of `SHOW GRANTS ON {{model}}` call loaded into an agate table. - -If there's any massaging of agate table containing the results, of `SHOW GRANTS ON {{model}}`, that can't easily be accomplished in SQL, it can be done here. For example, the SQL to show grants *should* filter OUT any grants TO the current user/role (e.g. OWNERSHIP). If that's not possible in SQL, it can be done in this method instead. - - - -```python - @available - def standardize_grants_dict(self, grants_table: agate.Table) -> dict: - """ - :param grants_table: An agate table containing the query result of - the SQL returned by get_show_grant_sql - :return: A standardized dictionary matching the `grants` config - :rtype: dict - """ - grants_dict: Dict[str, List[str]] = {} - for row in grants_table: - grantee = row["grantee"] - privilege = row["privilege_type"] - if privilege in grants_dict.keys(): - grants_dict[privilege].append(grantee) - else: - grants_dict.update({privilege: [grantee]}) - return grants_dict -``` - - - -### Editing the adapter implementation - -Edit the connection manager at `myadapter/dbt/adapters/myadapter/impl.py` - -Very little is required to implement the adapter itself. On some adapters, you will not need to override anything. On others, you'll likely need to override some of the ``convert_*`` classmethods, or override the `is_cancelable` classmethod on others to return `False`. - - -#### `datenow()` - -This classmethod provides the adapter's canonical date function. This is not used but is required– anyway on all adapters. - - - -```python - @classmethod - def date_function(cls): - return 'datenow()' -``` - - - -### Editing SQL logic - -dbt implements specific SQL operations using jinja macros. While reasonable defaults are provided for many such operations (like `create_schema`, `drop_schema`, `create_table`, etc), you may need to override one or more of macros when building a new adapter. - -#### Required macros - -The following macros must be implemented, but you can override their behavior for your adapter using the "dispatch" pattern described below. Macros marked (required) do not have a valid default implementation, and are required for dbt to operate. - -- `alter_column_type` ([source](https://github.com/dbt-labs/dbt-core/blob/f988f76fccc1878aaf8d8631c05be3e9104b3b9a/core/dbt/include/global_project/macros/adapters/columns.sql#L37-L55)) -- `check_schema_exists` ([source](https://github.com/dbt-labs/dbt-core/blob/f988f76fccc1878aaf8d8631c05be3e9104b3b9a/core/dbt/include/global_project/macros/adapters/metadata.sql#L43-L55)) -- `create_schema` ([source](https://github.com/dbt-labs/dbt-core/blob/f988f76fccc1878aaf8d8631c05be3e9104b3b9a/core/dbt/include/global_project/macros/adapters/schema.sql#L1-L9)) -- `drop_relation` ([source](https://github.com/dbt-labs/dbt-core/blob/f988f76fccc1878aaf8d8631c05be3e9104b3b9a/core/dbt/include/global_project/macros/adapters/relation.sql#L34-L42)) -- `drop_schema` ([source](https://github.com/dbt-labs/dbt-core/blob/f988f76fccc1878aaf8d8631c05be3e9104b3b9a/core/dbt/include/global_project/macros/adapters/schema.sql#L12-L20)) -- `get_columns_in_relation` ([source](https://github.com/dbt-labs/dbt-core/blob/f988f76fccc1878aaf8d8631c05be3e9104b3b9a/core/dbt/include/global_project/macros/adapters/columns.sql#L1-L8)) (required) -- `list_relations_without_caching` ([source](https://github.com/dbt-labs/dbt-core/blob/f988f76fccc1878aaf8d8631c05be3e9104b3b9a/core/dbt/include/global_project/macros/adapters/metadata.sql#L58-L65)) (required) -- `list_schemas` ([source](https://github.com/dbt-labs/dbt-core/blob/f988f76fccc1878aaf8d8631c05be3e9104b3b9a/core/dbt/include/global_project/macros/adapters/metadata.sql#L29-L40)) -- `rename_relation` ([source](https://github.com/dbt-labs/dbt-core/blob/f988f76fccc1878aaf8d8631c05be3e9104b3b9a/core/dbt/include/global_project/macros/adapters/relation.sql#L56-L65)) -- `truncate_relation` ([source](https://github.com/dbt-labs/dbt-core/blob/f988f76fccc1878aaf8d8631c05be3e9104b3b9a/core/dbt/include/global_project/macros/adapters/relation.sql#L45-L53)) -- `current_timestamp` ([source](https://github.com/dbt-labs/dbt-core/blob/f988f76fccc1878aaf8d8631c05be3e9104b3b9a/core/dbt/include/global_project/macros/adapters/freshness.sql#L1-L8)) (required) -- `copy_grants` - -#### Adapter dispatch - -Most modern databases support a majority of the standard SQL spec. There are some databases that _do not_ support critical aspects of the SQL spec however, or they provide their own nonstandard mechanisms for implementing the same functionality. To account for these variations in SQL support, dbt provides a mechanism called [multiple dispatch](https://en.wikipedia.org/wiki/Multiple_dispatch) for macros. With this feature, macros can be overridden for specific adapters. This makes it possible to implement high-level methods (like "create ") in a database-specific way. - - - -```jinja2 - -{# dbt will call this macro by name, providing any arguments #} -{% macro create_table_as(temporary, relation, sql) -%} - - {# dbt will dispatch the macro call to the relevant macro #} - {{ return( - adapter.dispatch('create_table_as')(temporary, relation, sql) - ) }} -{%- endmacro %} - - - -{# If no macro matches the specified adapter, "default" will be used #} -{% macro default__create_table_as(temporary, relation, sql) -%} - ... -{%- endmacro %} - - - -{# Example which defines special logic for Redshift #} -{% macro redshift__create_table_as(temporary, relation, sql) -%} - ... -{%- endmacro %} - - - -{# Example which defines special logic for BigQuery #} -{% macro bigquery__create_table_as(temporary, relation, sql) -%} - ... -{%- endmacro %} -``` - - - -The `adapter.dispatch()` macro takes a second argument, `packages`, which represents a set of "search namespaces" in which to find potential implementations of a dispatched macro. This allows users of community-supported adapters to extend or "shim" dispatched macros from common packages, such as `dbt-utils`, with adapter-specific versions in their own project or other installed packages. See: -- "Shim" package examples: [`spark-utils`](https://github.com/dbt-labs/spark-utils), [`tsql-utils`](https://github.com/dbt-msft/tsql-utils) -- [`adapter.dispatch` docs](/reference/dbt-jinja-functions/dispatch) - -#### Overriding adapter methods - -While much of dbt's adapter-specific functionality can be modified in adapter macros, it can also make sense to override adapter methods directly. In this example, assume that a database does not support a `cascade` parameter to `drop schema`. Instead, we can implement an approximation where we drop each relation and then drop the schema. - - - -```python - def drop_schema(self, relation: BaseRelation): - relations = self.list_relations( - database=relation.database, - schema=relation.schema - ) - for relation in relations: - self.drop_relation(relation) - super().drop_schema(relation) -``` - - - -#### Grants Macros - -See [this GitHub discussion](https://github.com/dbt-labs/dbt-core/discussions/5468) for information on the macros required for `GRANT` statements: -### Other files - -#### `profile_template.yml` - -In order to enable the [`dbt init` command](/reference/commands/init) to prompt users when setting up a new project and connection profile, you should include a **profile template**. The filepath needs to be `dbt/include//profile_template.yml`. It's possible to provide hints, default values, and conditional prompts based on connection methods that require different supporting attributes. Users will also be able to include custom versions of this file in their own projects, with fixed values specific to their organization, to support their colleagues when using your dbt adapter for the first time. - -See examples: -- [dbt-postgres](https://github.com/dbt-labs/dbt-core/blob/main/plugins/postgres/dbt/include/postgres/profile_template.yml) -- [dbt-redshift](https://github.com/dbt-labs/dbt-redshift/blob/main/dbt/include/redshift/profile_template.yml) -- [dbt-snowflake](https://github.com/dbt-labs/dbt-snowflake/blob/main/dbt/include/snowflake/profile_template.yml) -- [dbt-bigquery](https://github.com/dbt-labs/dbt-bigquery/blob/main/dbt/include/bigquery/profile_template.yml) - -#### `__version__.py` - -To assure that `dbt --version` provides the latest dbt core version the adapter supports, be sure include a `__version__.py` file. The filepath will be `dbt/adapters//__version__.py`. We recommend using the latest dbt core version and as the adapter is made compatible with later versions, this file will need to be updated. For a sample file, check out this [example](https://github.com/dbt-labs/dbt-snowflake/blob/main/dbt/adapters/snowflake/__version__.py). - -It should be noted that both of these files are included in the bootstrapped output of the `dbt-database-adapter-scaffold` so when using the scaffolding, these files will be included. - -## Testing your new adapter - -This has moved to its own page: ["Testing a new adapter"](4-testing-a-new-adapter) - -## Documenting your new adapter - -This has moved to its own page: ["Documenting a new adapter"](/guides/dbt-ecosystem/adapter-development/5-documenting-a-new-adapter) - -## Maintaining your new adapter - -This has moved to a new spot: ["Maintaining your new adapter"](2-prerequisites-for-a-new-adapter##maintaining-your-new-adapter) diff --git a/website/docs/guides/dbt-ecosystem/adapter-development/4-testing-a-new-adapter.md b/website/docs/guides/dbt-ecosystem/adapter-development/4-testing-a-new-adapter.md index b1b5072670a..9b1ec2c7e0e 100644 --- a/website/docs/guides/dbt-ecosystem/adapter-development/4-testing-a-new-adapter.md +++ b/website/docs/guides/dbt-ecosystem/adapter-development/4-testing-a-new-adapter.md @@ -3,497 +3,3 @@ title: "Testing a new adapter" id: "4-testing-a-new-adapter" --- -:::info - -Previously, we offered a packaged suite of tests for dbt adapter functionality: [`pytest-dbt-adapter`](https://github.com/dbt-labs/dbt-adapter-tests). We are deprecating that suite, in favor of the newer testing framework outlined in this document. - -::: - -This document has two sections: - -1. "[About the testing framework](#about-the-testing-framework)" describes the standard framework that we maintain for using pytest together with dbt. It includes an example that shows the anatomy of a simple test case. -2. "[Testing your adapter](#testing-your-adapter)" offers a step-by-step guide for using our out-of-the-box suite of "basic" tests, which will validate that your adapter meets a baseline of dbt functionality. - -## Prerequisites - -- Your adapter must be compatible with dbt-core **v1.1** or newer -- You should be familiar with **pytest**: https://docs.pytest.org/ - -## About the testing framework - -dbt-core offers a standard framework for running pre-built functional tests, and for defining your own tests. The core testing framework is built using `pytest`, a mature and standard library for testing Python projects. - -The **[`tests` module](https://github.com/dbt-labs/dbt-core/tree/HEAD/core/dbt/tests)** within `dbt-core` includes basic utilities for setting up pytest + dbt. These are used by all "pre-built" functional tests, and make it possible to quickly write your own tests. - -Those utilities allow you to do three basic things: -1. **Quickly set up a dbt "project."** Define project resources via methods such as `models()` and `seeds()`. Use `project_config_update()` to pass configurations into `dbt_project.yml`. -2. **Define a sequence of dbt commands.** The most important utility is `run_dbt()`, which returns the [results](/reference/dbt-classes#result-objects) of each dbt command. It takes a list of CLI specifiers (subcommand + flags), as well as an optional second argument, `expect_pass=False`, for cases where you expect the command to fail. -3. **Validate the results of those dbt commands.** For example, `check_relations_equal()` asserts that two database objects have the same structure and content. You can also write your own `assert` statements, by inspecting the results of a dbt command, or querying arbitrary database objects with `project.run_sql()`. - -You can see the full suite of utilities, with arguments and annotations, in [`util.py`](https://github.com/dbt-labs/dbt-core/blob/main/core/dbt/tests/util.py). You'll also see them crop up across a number of test cases. While all utilities are intended to be reusable, you won't need all of them for every test. In the example below, we'll show a simple test case that uses only a few utilities. - -### Example: a simple test case - -This example will show you the anatomy of a test case using dbt + pytest. We will create reusable components, combine them to form a dbt "project", and define a sequence of dbt commands. Then, we'll use Python `assert` statements to ensure those commands succeed (or fail) as we expect. - -In ["Getting started running basic tests,"](#getting-started-running-basic-tests) we'll offer step-by-step instructions for installing and configuring `pytest`, so that you can run it on your own machine. For now, it's more important to see how the pieces of a test case fit together. - -This example includes a seed, a model, and two tests—one of which will fail. - -1. Define Python strings that will represent the file contents in your dbt project. Defining these in a separate file enables you to reuse the same components across different test cases. The pytest name for this type of reusable component is "fixture." - - - -```python -# seeds/my_seed.csv -my_seed_csv = """ -id,name,some_date -1,Easton,1981-05-20T06:46:51 -2,Lillian,1978-09-03T18:10:33 -3,Jeremiah,1982-03-11T03:59:51 -4,Nolan,1976-05-06T20:21:35 -""".lstrip() - -# models/my_model.sql -my_model_sql = """ -select * from {{ ref('my_seed') }} -union all -select null as id, null as name, null as some_date -""" - -# models/my_model.yml -my_model_yml = """ -version: 2 -models: - - name: my_model - columns: - - name: id - tests: - - unique - - not_null # this test will fail -""" -``` - - - -2. Use the "fixtures" to define the project for your test case. These fixtures are always scoped to the **class**, where the class represents one test case—that is, one dbt project or scenario. (The same test case can be used for one or more actual tests, which we'll see in step 3.) Following the default pytest configurations, the file name must begin with `test_`, and the class name must begin with `Test`. - - - -```python -import pytest -from dbt.tests.util import run_dbt - -# our file contents -from tests.functional.example.fixtures import ( - my_seed_csv, - my_model_sql, - my_model_yml, -) - -# class must begin with 'Test' -class TestExample: - """ - Methods in this class will be of two types: - 1. Fixtures defining the dbt "project" for this test case. - These are scoped to the class, and reused for all tests in the class. - 2. Actual tests, whose names begin with 'test_'. - These define sequences of dbt commands and 'assert' statements. - """ - - # configuration in dbt_project.yml - @pytest.fixture(scope="class") - def project_config_update(self): - return { - "name": "example", - "models": {"+materialized": "view"} - } - - # everything that goes in the "seeds" directory - @pytest.fixture(scope="class") - def seeds(self): - return { - "my_seed.csv": my_seed_csv, - } - - # everything that goes in the "models" directory - @pytest.fixture(scope="class") - def models(self): - return { - "my_model.sql": my_model_sql, - "my_model.yml": my_model_yml, - } - - # continues below -``` - - - -3. Now that we've set up our project, it's time to define a sequence of dbt commands and assertions. We define one or more methods in the same file, on the same class (`TestExampleFailingTest`), whose names begin with `test_`. These methods share the same setup (project scenario) from above, but they can be run independently by pytest—so they shouldn't depend on each other in any way. - - - -```python - # continued from above - - # The actual sequence of dbt commands and assertions - # pytest will take care of all "setup" + "teardown" - def test_run_seed_test(self, project): - """ - Seed, then run, then test. We expect one of the tests to fail - An alternative pattern is to use pytest "xfail" (see below) - """ - # seed seeds - results = run_dbt(["seed"]) - assert len(results) == 1 - # run models - results = run_dbt(["run"]) - assert len(results) == 1 - # test tests - results = run_dbt(["test"], expect_pass = False) # expect failing test - assert len(results) == 2 - # validate that the results include one pass and one failure - result_statuses = sorted(r.status for r in results) - assert result_statuses == ["fail", "pass"] - - @pytest.mark.xfail - def test_build(self, project): - """Expect a failing test""" - # do it all - results = run_dbt(["build"]) -``` - - - -3. Our test is ready to run! The last step is to invoke `pytest` from your command line. We'll walk through the actual setup and configuration of `pytest` in the next section. - - - -```sh -$ python3 -m pytest tests/functional/test_example.py -=========================== test session starts ============================ -platform ... -- Python ..., pytest-..., pluggy-... -rootdir: ... -plugins: ... - -tests/functional/test_example.py .X [100%] - -======================= 1 passed, 1 xpassed in 1.38s ======================= -``` - - - -You can find more ways to run tests, along with a full command reference, in the [pytest usage docs](https://docs.pytest.org/how-to/usage.html). - -We've found the `-s` flag (or `--capture=no`) helpful to print logs from the underlying dbt invocations, and to step into an interactive debugger if you've added one. You can also use environment variables to set [global dbt configs](/reference/global-configs/about-global-configs), such as `DBT_DEBUG` (to show debug-level logs). - -## Testing your adapter - -Anyone who installs `dbt-core`, and wishes to define their own test cases, can use the framework presented in the first section. The framework is especially useful for testing standard dbt behavior across different databases. - -To that end, we have built and made available a [package of reusable adapter test cases](https://github.com/dbt-labs/dbt-core/tree/HEAD/tests/adapter), for creators and maintainers of adapter plugins. These test cases cover basic expected functionality, as well as functionality that frequently requires different implementations across databases. - -For the time being, this package is also located within the `dbt-core` repository, but separate from the `dbt-core` Python package. - -### Categories of tests - -In the course of creating and maintaining your adapter, it's likely that you will end up implementing tests that fall into three broad categories: - -1. **Basic tests** that every adapter plugin is expected to pass. These are defined in `tests.adapter.basic`. Given differences across data platforms, these may require slight modification or reimplementation. Significantly overriding or disabling these tests should be with good reason, since each represents basic functionality expected by dbt users. For example, if your adapter does not support incremental models, you should disable the test, [by marking it with `skip` or `xfail`](https://docs.pytest.org/en/latest/how-to/skipping.html), as well as noting that limitation in any documentation, READMEs, and usage guides that accompany your adapter. - -2. **Optional tests**, for second-order functionality that is common across plugins, but not required for basic use. Your plugin can opt into these test cases by inheriting existing ones, or reimplementing them with adjustments. For now, this category includes all tests located outside the `basic` subdirectory. More tests will be added as we convert older tests defined on dbt-core and mature plugins to use the standard framework. - -3. **Custom tests**, for behavior that is specific to your adapter / data platform. Each has its own specialties and idiosyncracies. We encourage you to use the same `pytest`-based framework, utilities, and fixtures to write your own custom tests for functionality that is unique to your adapter. - -If you run into an issue with the core framework, or the basic/optional test cases—or if you've written a custom test that you believe would be relevant and useful for other adapter plugin developers—please open an issue or PR in the `dbt-core` repository on GitHub. - -## Getting started running basic tests - -In this section, we'll walk through the three steps to start running our basic test cases on your adapter plugin: - -1. Install dependencies -2. Set up and configure pytest -3. Define test cases - -### Install dependencies - -You should already have a virtual environment with `dbt-core` and your adapter plugin installed. You'll also need to install: -- [`pytest`](https://pypi.org/project/pytest/) -- [`dbt-tests-adapter`](https://pypi.org/project/dbt-tests-adapter/), the set of common test cases -- (optional) [`pytest` plugins](https://docs.pytest.org/en/7.0.x/reference/plugin_list.html)--we'll use `pytest-dotenv` below - -Or specify all dependencies in a requirements file like: - - -```txt -pytest -pytest-dotenv -dbt-tests-adapter -``` - - -```sh -pip install -r dev_requirements.txt -``` - -### Set up and configure pytest - -First, set yourself up to run `pytest` by creating a file named `pytest.ini` at the root of your repository: - - - -```python -[pytest] -filterwarnings = - ignore:.*'soft_unicode' has been renamed to 'soft_str'*:DeprecationWarning - ignore:unclosed file .*:ResourceWarning -env_files = - test.env # uses pytest-dotenv plugin - # this allows you to store env vars for database connection in a file named test.env - # rather than passing them in every CLI command, or setting in `PYTEST_ADDOPTS` - # be sure to add "test.env" to .gitignore as well! -testpaths = - tests/functional # name per convention -``` - - - -Then, create a configuration file within your tests directory. In it, you'll want to define all necessary profile configuration for connecting to your data platform in local development and continuous integration. We recommend setting these values with environment variables, since this file will be checked into version control. - - - -```python -import pytest -import os - -# Import the standard functional fixtures as a plugin -# Note: fixtures with session scope need to be local -pytest_plugins = ["dbt.tests.fixtures.project"] - -# The profile dictionary, used to write out profiles.yml -# dbt will supply a unique schema per test, so we do not specify 'schema' here -@pytest.fixture(scope="class") -def dbt_profile_target(): - return { - 'type': '', - 'threads': 1, - 'host': os.getenv('HOST_ENV_VAR_NAME'), - 'user': os.getenv('USER_ENV_VAR_NAME'), - ... - } -``` - - - -### Define test cases - -As in the example above, each test case is defined as a class, and has its own "project" setup. To get started, you can import all basic test cases and try running them without changes. - - - -```python -import pytest - -from dbt.tests.adapter.basic.test_base import BaseSimpleMaterializations -from dbt.tests.adapter.basic.test_singular_tests import BaseSingularTests -from dbt.tests.adapter.basic.test_singular_tests_ephemeral import BaseSingularTestsEphemeral -from dbt.tests.adapter.basic.test_empty import BaseEmpty -from dbt.tests.adapter.basic.test_ephemeral import BaseEphemeral -from dbt.tests.adapter.basic.test_incremental import BaseIncremental -from dbt.tests.adapter.basic.test_generic_tests import BaseGenericTests -from dbt.tests.adapter.basic.test_snapshot_check_cols import BaseSnapshotCheckCols -from dbt.tests.adapter.basic.test_snapshot_timestamp import BaseSnapshotTimestamp -from dbt.tests.adapter.basic.test_adapter_methods import BaseAdapterMethod - -class TestSimpleMaterializationsMyAdapter(BaseSimpleMaterializations): - pass - - -class TestSingularTestsMyAdapter(BaseSingularTests): - pass - - -class TestSingularTestsEphemeralMyAdapter(BaseSingularTestsEphemeral): - pass - - -class TestEmptyMyAdapter(BaseEmpty): - pass - - -class TestEphemeralMyAdapter(BaseEphemeral): - pass - - -class TestIncrementalMyAdapter(BaseIncremental): - pass - - -class TestGenericTestsMyAdapter(BaseGenericTests): - pass - - -class TestSnapshotCheckColsMyAdapter(BaseSnapshotCheckCols): - pass - - -class TestSnapshotTimestampMyAdapter(BaseSnapshotTimestamp): - pass - - -class TestBaseAdapterMethod(BaseAdapterMethod): - pass -``` - - - - -Finally, run pytest: -```sh -python3 -m pytest tests/functional -``` - -### Modifying test cases - -You may need to make slight modifications in a specific test case to get it passing on your adapter. The mechanism to do this is simple: rather than simply inheriting the "base" test with `pass`, you can redefine any of its fixtures or test methods. - -For instance, on Redshift, we need to explicitly cast a column in the fixture input seed to use data type `varchar(64)`: - - - -```python -import pytest -from dbt.tests.adapter.basic.files import seeds_base_csv, seeds_added_csv, seeds_newcolumns_csv -from dbt.tests.adapter.basic.test_snapshot_check_cols import BaseSnapshotCheckCols - -# set the datatype of the name column in the 'added' seed so it -# can hold the '_update' that's added -schema_seed_added_yml = """ -version: 2 -seeds: - - name: added - config: - column_types: - name: varchar(64) -""" - -class TestSnapshotCheckColsRedshift(BaseSnapshotCheckCols): - # Redshift defines the 'name' column such that it's not big enough - # to hold the '_update' added in the test. - @pytest.fixture(scope="class") - def models(self): - return { - "base.csv": seeds_base_csv, - "added.csv": seeds_added_csv, - "seeds.yml": schema_seed_added_yml, - } -``` - - - -As another example, the `dbt-bigquery` adapter asks users to "authorize" replacing a with a by supplying the `--full-refresh` flag. The reason: In the table logic, a view by the same name must first be dropped; if the table query fails, the model will be missing. - -Knowing this possibility, the "base" test case offers a `require_full_refresh` switch on the `test_config` fixture class. For BigQuery, we'll switch it on: - - - -```python -import pytest -from dbt.tests.adapter.basic.test_base import BaseSimpleMaterializations - -class TestSimpleMaterializationsBigQuery(BaseSimpleMaterializations): - @pytest.fixture(scope="class") - def test_config(self): - # effect: add '--full-refresh' flag in requisite 'dbt run' step - return {"require_full_refresh": True} -``` - - - -It's always worth asking whether the required modifications represent gaps in perceived or expected dbt functionality. Are these simple implementation details, which any user of this database would understand? Are they limitations worth documenting? - -If, on the other hand, they represent poor assumptions in the "basic" test cases, which fail to account for a common pattern in other types of databases-—please open an issue or PR in the `dbt-core` repository on GitHub. - -### Running with multiple profiles - -Some databases support multiple connection methods, which map to actually different functionality behind the scenes. For instance, the `dbt-spark` adapter supports connections to Apache Spark clusters _and_ Databricks runtimes, which supports additional functionality out of the box, enabled by the Delta file format. - - - -```python -def pytest_addoption(parser): - parser.addoption("--profile", action="store", default="apache_spark", type=str) - - -# Using @pytest.mark.skip_profile('apache_spark') uses the 'skip_by_profile_type' -# autouse fixture below -def pytest_configure(config): - config.addinivalue_line( - "markers", - "skip_profile(profile): skip test for the given profile", - ) - -@pytest.fixture(scope="session") -def dbt_profile_target(request): - profile_type = request.config.getoption("--profile") - elif profile_type == "databricks_sql_endpoint": - target = databricks_sql_endpoint_target() - elif profile_type == "apache_spark": - target = apache_spark_target() - else: - raise ValueError(f"Invalid profile type '{profile_type}'") - return target - -def apache_spark_target(): - return { - "type": "spark", - "host": "localhost", - ... - } - -def databricks_sql_endpoint_target(): - return { - "type": "spark", - "host": os.getenv("DBT_DATABRICKS_HOST_NAME"), - ... - } - -@pytest.fixture(autouse=True) -def skip_by_profile_type(request): - profile_type = request.config.getoption("--profile") - if request.node.get_closest_marker("skip_profile"): - for skip_profile_type in request.node.get_closest_marker("skip_profile").args: - if skip_profile_type == profile_type: - pytest.skip("skipped on '{profile_type}' profile") -``` - - - -If there are tests that _shouldn't_ run for a given profile: - - - -```python -# Snapshots require access to the Delta file format, available on our Databricks connection, -# so let's skip on Apache Spark -@pytest.mark.skip_profile('apache_spark') -class TestSnapshotCheckColsSpark(BaseSnapshotCheckCols): - @pytest.fixture(scope="class") - def project_config_update(self): - return { - "seeds": { - "+file_format": "delta", - }, - "snapshots": { - "+file_format": "delta", - } - } -``` - - - -Finally: -```sh -python3 -m pytest tests/functional --profile apache_spark -python3 -m pytest tests/functional --profile databricks_sql_endpoint -``` diff --git a/website/docs/guides/dbt-ecosystem/adapter-development/adapter-development b/website/docs/guides/dbt-ecosystem/adapter-development/adapter-development deleted file mode 100644 index 8b137891791..00000000000 --- a/website/docs/guides/dbt-ecosystem/adapter-development/adapter-development +++ /dev/null @@ -1 +0,0 @@ - diff --git a/website/docs/guides/dbt-ecosystem/adapter-development/create-adapters.md b/website/docs/guides/dbt-ecosystem/adapter-development/create-adapters.md new file mode 100644 index 00000000000..269a9e1ff6a --- /dev/null +++ b/website/docs/guides/dbt-ecosystem/adapter-development/create-adapters.md @@ -0,0 +1,1066 @@ +--- +title: "Build, test, document, and promote adapters" +id: "adapter-creation" +hoverSnippet: Learn how to +# time_to_complete: '30 minutes' commenting out until we test +icon: 'guides' +hide_table_of_contents: true +tags: ['Adapter creation'] +level: 'Advanced' +recently_updated: true +--- + +## Introduction + +Adapters are an essential component of dbt. At their most basic level, they are how dbt Core connects with the various supported data platforms. At a higher-level, dbt Core adapters strive to give analytics engineers more transferrable skills as well as standardize how analytics projects are structured. Gone are the days where you have to learn a new language or flavor of SQL when you move to a new job that has a different data platform. That is the power of adapters in dbt Core. + + Navigating and developing around the nuances of different databases can be daunting, but you are not alone. Visit [#adapter-ecosystem](https://getdbt.slack.com/archives/C030A0UF5LM) Slack channel for additional help beyond the documentation. + +### All databases are not the same + +There's a tremendous amount of work that goes into creating a database. Here is a high-level list of typical database layers (from the outermost layer moving inwards): +- SQL API +- Client Library / Driver +- Server Connection Manager +- Query parser +- Query optimizer +- Runtime +- Storage Access Layer +- Storage + +There's a lot more there than just SQL as a language. Databases (and data warehouses) are so popular because you can abstract away a great deal of the complexity from your brain to the database itself. This enables you to focus more on the data. + +dbt allows for further abstraction and standardization of the outermost layers of a database (SQL API, client library, connection manager) into a framework that both: + - Opens database technology to less technical users (a large swath of a DBA's role has been automated, similar to how the vast majority of folks with websites today no longer have to be "[webmasters](https://en.wikipedia.org/wiki/Webmaster)"). + - Enables more meaningful conversations about how data warehousing should be done. + +This is where dbt adapters become critical. + +### What needs to be adapted? + +dbt adapters are responsible for _adapting_ dbt's standard functionality to a particular database. Our prototypical database and adapter are PostgreSQL and dbt-postgres, and most of our adapters are somewhat based on the functionality described in dbt-postgres. + +Connecting dbt to a new database will require a new adapter to be built or an existing adapter to be extended. + +The outermost layers of a database map roughly to the areas in which the dbt adapter framework encapsulates inter-database differences. + +### SQL API + +Even amongst ANSI-compliant databases, there are differences in the SQL grammar. +Here are some categories and examples of SQL statements that can be constructed differently: + + +| Category | Area of differences | Examples | +|----------------------------------------------|--------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Statement syntax | The use of `IF EXISTS` |
  • `IF
  • EXISTS, DROP TABLE`
  • `DROP
  • IF EXISTS` | +| Workflow definition & semantics | Incremental updates |
  • `MERGE`
  • `DELETE; INSERT`
  • | +| Relation and column attributes/configuration | Database-specific materialization configs |
  • `DIST = ROUND_ROBIN` (Synapse)
  • `DIST = EVEN` (Redshift)
  • | +| Permissioning | Grant statements that can only take one grantee at a time vs those that accept lists of grantees |
  • `grant SELECT on table dinner.corn to corn_kid, everyone`
  • `grant SELECT on table dinner.corn to corn_kid; grant SELECT on table dinner.corn to everyone`
  • | + +### Python Client Library & Connection Manager + +The other big category of inter-database differences comes with how the client connects to the database and executes queries against the connection. To integrate with dbt, a data platform must have a pre-existing python client library or support ODBC, using a generic python library like pyodbc. + +| Category | Area of differences | Examples | +|------------------------------|-------------------------------------------|-------------------------------------------------------------------------------------------------------------| +| Credentials & authentication | Authentication |
  • Username & password
  • MFA with `boto3` or Okta token
  • | +| Connection opening/closing | Create a new connection to db |
  • `psycopg2.connect(connection_string)`
  • `google.cloud.bigquery.Client(...)`
  • | +| Inserting local data | Load seed .`csv` files into Python memory |
  • `google.cloud.bigquery.Client.load_table_from_file(...)` (BigQuery)
  • `INSERT ... INTO VALUES ...` prepared statement (most other databases)
  • | + + +### How dbt encapsulates and abstracts these differences + +Differences between databases are encoded into discrete areas: + +| Components | Code Path | Function | +|------------------|---------------------------------------------------|-------------------------------------------------------------------------------| +| Python Classes | `adapters/` | Configuration (See above [Python classes](##python classes) | +| Macros | `include//macros/adapters/` | SQL API & statement syntax (for example, how to create schema or how to get table info) | +| Materializations | `include//macros/materializations/` | Table/view/snapshot/ workflow definitions | + + +#### Python Classes + +These classes implement all the methods responsible for: +- Connecting to a database and issuing queries. +- Providing dbt with database-specific configuration information. + +| Class | Description | +|--------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| AdapterClass | High-level configuration type conversion and any database-specific python methods needed | +| AdapterCredentials | Typed dictionary of possible profiles and associated methods | +| AdapterConnectionManager | All the methods responsible for connecting to a database and issuing queries | +| AdapterRelation | How relation names should be rendered, printed, and quoted. Do relation names use all three parts? `catalog.model_name` (two-part name) or `database.schema.model_name` (three-part name) | +| AdapterColumn | How names should be rendered, and database-specific properties | + +#### Macros + +A set of *macros* responsible for generating SQL that is compliant with the target database. + +#### Materializations + +A set of *materializations* and their corresponding helper macros defined in dbt using jinja and SQL. They codify for dbt how model files should be persisted into the database. + +### Adapter Architecture + + +Below is a diagram of how dbt-postgres, the adapter at the center of dbt-core, works. + + + +## Prerequisites + +It is very important that you have the right skills, and understand the level of difficulty required to make an adapter for your data platform. + +The more you can answer Yes to the below questions, the easier your adapter development (and user-) experience will be. See the [New Adapter Information Sheet wiki](https://github.com/dbt-labs/dbt-core/wiki/New-Adapter-Information-Sheet) for even more specific questions. + +### Training + +- the developer (and any product managers) ideally will have substantial experience as an end-user of dbt. If not, it is highly advised that you at least take the [dbt Fundamentals](https://courses.getdbt.com/courses/fundamentals) and [Advanced Materializations](https://courses.getdbt.com/courses/advanced-materializations) course. + +### Database + +- Does the database complete transactions fast enough for interactive development? +- Can you execute SQL against the data platform? +- Is there a concept of schemas? +- Does the data platform support ANSI SQL, or at least a subset? + +### Driver / Connection Library + +- Is there a Python-based driver for interacting with the database that is db API 2.0 compliant (e.g. Psycopg2 for Postgres, pyodbc for SQL Server) +- Does it support: prepared statements, multiple statements, or single sign on token authorization to the data platform? + +### Open source software + +- Does your organization have an established process for publishing open source software? + +It is easiest to build an adapter for dbt when the following the /platform in question has: + +- a conventional ANSI-SQL interface (or as close to it as possible), +- a mature connection library/SDK that uses ODBC or Python DB 2 API, and +- a way to enable developers to iterate rapidly with both quick reads and writes + +### Maintaining your new adapter + +When your adapter becomes more popular, and people start using it, you may quickly become the maintainer of an increasingly popular open source project. With this new role, comes some unexpected responsibilities that not only include code maintenance, but also working with a community of users and contributors. To help people understand what to expect of your project, you should communicate your intentions early and often in your adapter documentation or README. Answer questions like, Is this experimental work that people should use at their own risk? Or is this production-grade code that you're committed to maintaining into the future? + +#### Keeping the code compatible with dbt Core + +New minor version releases of `dbt-core` may include changes to the Python interface for adapter plugins, as well as new or updated test cases. The maintainers of `dbt-core` will clearly communicate these changes in documentation and release notes, and they will aim for backwards compatibility whenever possible. + +Patch releases of `dbt-core` will _not_ include breaking changes to adapter-facing code. For more details, see ["About dbt Core versions"](/docs/dbt-versions/core). + +#### Versioning and releasing your adapter + +We strongly encourage you to adopt the following approach when versioning and releasing your plugin: + +- The minor version of your plugin should match the minor version in `dbt-core` (e.g. 1.1.x). +- Aim to release a new version of your plugin for each new minor version of `dbt-core` (once every three months). +- While your plugin is new, and you're iterating on features, aim to offer backwards compatibility and deprecation notices for at least one minor version. As your plugin matures, aim to leave backwards compatibility and deprecation notices in place until the next major version (dbt Core v2). +- Release patch versions of your plugins whenever needed. These patch releases should contain fixes _only_. + +## Building a new adapter + +This step will walk you through the first creating the necessary adapter classes and macros, and provide some resources to help you validate that your new adapter is working correctly. Make sure you've familiarized yourself with the previous steps in this guide. + +Once the adapter is passing most of the functional tests (see ["Testing a new adapter"](4-testing-a-new-adapter) +), please let the community know that is available to use by adding the adapter to the ["Supported Data Platforms"](/docs/supported-data-platforms) page by following the steps given in [Documenting your adapter](/guides/dbt-ecosystem/adapter-development/5-documenting-a-new-adapter). + +For any questions you may have, don't hesitate to ask in the [#adapter-ecosystem](https://getdbt.slack.com/archives/C030A0UF5LM) Slack channel. The community is very helpful and likely has experienced a similar issue as you. + +### Scaffolding a new adapter + + To create a new adapter plugin from scratch, you can use the [dbt-database-adapter-scaffold](https://github.com/dbt-labs/dbt-database-adapter-scaffold) to trigger an interactive session which will generate a scaffolding for you to build upon. + + Example usage: + + ``` + $ cookiecutter gh:dbt-labs/dbt-database-adapter-scaffold + ``` + +The generated boilerplate starting project will include a basic adapter plugin file structure, examples of macros, high level method descriptions, etc. + +One of the most important choices you will make during the cookiecutter generation will revolve around the field for `is_sql_adapter` which is a boolean used to correctly apply imports for either a `SQLAdapter` or `BaseAdapter`. Knowing which you will need requires a deeper knowledge of your selected database but a few good guides for the choice are. + +- Does your database have a complete SQL API? Can it perform tasks using SQL such as creating schemas, dropping schemas, querying an `information_schema` for metadata calls? If so, it is more likely to be a SQLAdapter where you set `is_sql_adapter` to `True`. +- Most adapters do fall under SQL adapters which is why we chose it as the default `True` value. +- It is very possible to build out a fully functional `BaseAdapter`. This will require a little more ground work as it doesn't come with some prebuilt methods the `SQLAdapter` class provides. See `dbt-bigquery` as a good guide. + +### Implementation Details + +Regardless if you decide to use the cookiecutter template or manually create the plugin, this section will go over each method that is required to be implemented. The table below provides a high-level overview of the classes, methods, and macros you may have to define for your data platform. + +| file | component | purpose | +|---------------------------------------------------|-------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `./setup.py` | `setup()` function | adapter meta-data (package name, version, author, homepage, etc) | +| `myadapter/dbt/adapters/myadapter/__init__.py` | `AdapterPlugin` | bundle all the information below into a dbt plugin | +| `myadapter/dbt/adapters/myadapter/connections.py` | `MyAdapterCredentials` class | parameters to connect to and configure the database, via a the chosen Python driver | +| `myadapter/dbt/adapters/myadapter/connections.py` | `MyAdapterConnectionManager` class | telling dbt how to interact with the database w.r.t opening/closing connections, executing queries, and fetching data. Effectively a wrapper around the db API or driver. | +| `myadapter/dbt/include/bigquery/` | a dbt project of macro "overrides" in the format of "myadapter__" | any differences in SQL syntax for regular db operations will be modified here from the global_project (e.g. "Create Table As Select", "Get all relations in the current schema", etc) | +| `myadapter/dbt/adapters/myadapter/impl.py` | `MyAdapterConfig` | database- and relation-level configs and | +| `myadapter/dbt/adapters/myadapter/impl.py` | `MyAdapterAdapter` | for changing _how_ dbt performs operations like macros and other needed Python functionality | +| `myadapter/dbt/adapters/myadapter/column.py` | `MyAdapterColumn` | for defining database-specific column such as datatype mappings | + +### Editing `setup.py` + +Edit the file at `myadapter/setup.py` and fill in the missing information. + +You can skip this step if you passed the arguments for `email`, `url`, `author`, and `dependencies` to the cookiecutter template script. If you plan on having nested macro folder structures, you may need to add entries to `package_data` so your macro source files get installed. + +### Editing the connection manager + +Edit the connection manager at `myadapter/dbt/adapters/myadapter/connections.py`. This file is defined in the sections below. + +#### The Credentials class + +The credentials class defines all of the database-specific credentials (e.g. `username` and `password`) that users will need in the [connection profile](/docs/supported-data-platforms) for your new adapter. Each credentials contract should subclass dbt.adapters.base.Credentials, and be implemented as a python dataclass. + +Note that the base class includes required database and schema fields, as dbt uses those values internally. + +For example, if your adapter requires a host, integer port, username string, and password string, but host is the only required field, you'd add definitions for those new properties to the class as types, like this: + + + +```python + +from dataclasses import dataclass +from typing import Optional + +from dbt.adapters.base import Credentials + + +@dataclass +class MyAdapterCredentials(Credentials): + host: str + port: int = 1337 + username: Optional[str] = None + password: Optional[str] = None + + @property + def type(self): + return 'myadapter' + + @property + def unique_field(self): + """ + Hashed and included in anonymous telemetry to track adapter adoption. + Pick a field that can uniquely identify one team/organization building with this adapter + """ + return self.host + + def _connection_keys(self): + """ + List of keys to display in the `dbt debug` output. + """ + return ('host', 'port', 'database', 'username') +``` + + + +There are a few things you can do to make it easier for users when connecting to your database: + +- Be sure to implement the Credentials' `_connection_keys` method shown above. This method will return the keys that should be displayed in the output of the `dbt debug` command. As a general rule, it's good to return all the arguments used in connecting to the actual database except the password (even optional arguments). +- Create a `profile_template.yml` to enable configuration prompts for a brand-new user setting up a connection profile via the [`dbt init` command](/reference/commands/init). See more details [below](#other-files). +- You may also want to define an `ALIASES` mapping on your Credentials class to include any config names you want users to be able to use in place of 'database' or 'schema'. For example if everyone using the MyAdapter database calls their databases "collections", you might do: + + + +```python +@dataclass +class MyAdapterCredentials(Credentials): + host: str + port: int = 1337 + username: Optional[str] = None + password: Optional[str] = None + + ALIASES = { + 'collection': 'database', + } +``` + + + +Then users can use `collection` OR `database` in their `profiles.yml`, `dbt_project.yml`, or `config()` calls to set the database. + +#### `ConnectionManager` class methods + +Once credentials are configured, you'll need to implement some connection-oriented methods. They are enumerated in the SQLConnectionManager docstring, but an overview will also be provided here. + +**Methods to implement:** + +- `open` +- `get_response` +- `cancel` +- `exception_handler` +- `standardize_grants_dict` + +##### `open(cls, connection)` + +`open()` is a classmethod that gets a connection object (which could be in any state, but will have a `Credentials` object with the attributes you defined above) and moves it to the 'open' state. + +Generally this means doing the following: + - if the connection is open already, log and return it. + - If a database needed changes to the underlying connection before re-use, that would happen here + - create a connection handle using the underlying database library using the credentials + - on success: + - set connection.state to `'open'` + - set connection.handle to the handle object + - this is what must have a `cursor()` method that returns a cursor! + - on error: + - set connection.state to `'fail'` + - set connection.handle to `None` + - raise a `dbt.exceptions.FailedToConnectException` with the error and any other relevant information + +For example: + + + +```python + @classmethod + def open(cls, connection): + if connection.state == 'open': + logger.debug('Connection is already open, skipping open.') + return connection + + credentials = connection.credentials + + try: + handle = myadapter_library.connect( + host=credentials.host, + port=credentials.port, + username=credentials.username, + password=credentials.password, + catalog=credentials.database + ) + connection.state = 'open' + connection.handle = handle + return connection +``` + + + +##### `get_response(cls, cursor)` + +`get_response` is a classmethod that gets a cursor object and returns adapter-specific information about the last executed command. The return value should be an `AdapterResponse` object that includes items such as `code`, `rows_affected`, `bytes_processed`, and a summary `_message` for logging to stdout. + + + +```python + @classmethod + def get_response(cls, cursor) -> AdapterResponse: + code = cursor.sqlstate or "OK" + rows = cursor.rowcount + status_message = f"{code} {rows}" + return AdapterResponse( + _message=status_message, + code=code, + rows_affected=rows + ) +``` + + + +##### `cancel(self, connection)` + +`cancel` is an instance method that gets a connection object and attempts to cancel any ongoing queries, which is database dependent. Some databases don't support the concept of cancellation, they can simply implement it via 'pass' and their adapter classes should implement an `is_cancelable` that returns False - On ctrl+c connections may remain running. This method must be implemented carefully, as the affected connection will likely be in use in a different thread. + + + +```python + def cancel(self, connection): + tid = connection.handle.transaction_id() + sql = 'select cancel_transaction({})'.format(tid) + logger.debug("Cancelling query '{}' ({})".format(connection_name, pid)) + _, cursor = self.add_query(sql, 'master') + res = cursor.fetchone() + logger.debug("Canceled query '{}': {}".format(connection_name, res)) +``` + + + +##### `exception_handler(self, sql, connection_name='master')` + +`exception_handler` is an instance method that returns a context manager that will handle exceptions raised by running queries, catch them, log appropriately, and then raise exceptions dbt knows how to handle. + +If you use the (highly recommended) `@contextmanager` decorator, you only have to wrap a `yield` inside a `try` block, like so: + + + +```python + @contextmanager + def exception_handler(self, sql: str): + try: + yield + except myadapter_library.DatabaseError as exc: + self.release(connection_name) + + logger.debug('myadapter error: {}'.format(str(e))) + raise dbt.exceptions.DatabaseException(str(exc)) + except Exception as exc: + logger.debug("Error running SQL: {}".format(sql)) + logger.debug("Rolling back transaction.") + self.release(connection_name) + raise dbt.exceptions.RuntimeException(str(exc)) +``` + + + +##### `standardize_grants_dict(self, grants_table: agate.Table) -> dict` + +`standardize_grants_dict` is an method that returns the dbt-standardized grants dictionary that matches how users configure grants now in dbt. The input is the result of `SHOW GRANTS ON {{model}}` call loaded into an agate table. + +If there's any massaging of agate table containing the results, of `SHOW GRANTS ON {{model}}`, that can't easily be accomplished in SQL, it can be done here. For example, the SQL to show grants _should_ filter OUT any grants TO the current user/role (e.g. OWNERSHIP). If that's not possible in SQL, it can be done in this method instead. + + + +```python + @available + def standardize_grants_dict(self, grants_table: agate.Table) -> dict: + """ + :param grants_table: An agate table containing the query result of + the SQL returned by get_show_grant_sql + :return: A standardized dictionary matching the `grants` config + :rtype: dict + """ + grants_dict: Dict[str, List[str]] = {} + for row in grants_table: + grantee = row["grantee"] + privilege = row["privilege_type"] + if privilege in grants_dict.keys(): + grants_dict[privilege].append(grantee) + else: + grants_dict.update({privilege: [grantee]}) + return grants_dict +``` + + + +### Editing the adapter implementation + +Edit the connection manager at `myadapter/dbt/adapters/myadapter/impl.py` + +Very little is required to implement the adapter itself. On some adapters, you will not need to override anything. On others, you'll likely need to override some of the ``convert_*`` classmethods, or override the `is_cancelable` classmethod on others to return `False`. + +#### `datenow()` + +This classmethod provides the adapter's canonical date function. This is not used but is required– anyway on all adapters. + + + +```python + @classmethod + def date_function(cls): + return 'datenow()' +``` + + + +### Editing SQL logic + +dbt implements specific SQL operations using jinja macros. While reasonable defaults are provided for many such operations (like `create_schema`, `drop_schema`, `create_table`, etc), you may need to override one or more of macros when building a new adapter. + +#### Required macros + +The following macros must be implemented, but you can override their behavior for your adapter using the "dispatch" pattern described below. Macros marked (required) do not have a valid default implementation, and are required for dbt to operate. + +- `alter_column_type` ([source](https://github.com/dbt-labs/dbt-core/blob/f988f76fccc1878aaf8d8631c05be3e9104b3b9a/core/dbt/include/global_project/macros/adapters/columns.sql#L37-L55)) +- `check_schema_exists` ([source](https://github.com/dbt-labs/dbt-core/blob/f988f76fccc1878aaf8d8631c05be3e9104b3b9a/core/dbt/include/global_project/macros/adapters/metadata.sql#L43-L55)) +- `create_schema` ([source](https://github.com/dbt-labs/dbt-core/blob/f988f76fccc1878aaf8d8631c05be3e9104b3b9a/core/dbt/include/global_project/macros/adapters/schema.sql#L1-L9)) +- `drop_relation` ([source](https://github.com/dbt-labs/dbt-core/blob/f988f76fccc1878aaf8d8631c05be3e9104b3b9a/core/dbt/include/global_project/macros/adapters/relation.sql#L34-L42)) +- `drop_schema` ([source](https://github.com/dbt-labs/dbt-core/blob/f988f76fccc1878aaf8d8631c05be3e9104b3b9a/core/dbt/include/global_project/macros/adapters/schema.sql#L12-L20)) +- `get_columns_in_relation` ([source](https://github.com/dbt-labs/dbt-core/blob/f988f76fccc1878aaf8d8631c05be3e9104b3b9a/core/dbt/include/global_project/macros/adapters/columns.sql#L1-L8)) (required) +- `list_relations_without_caching` ([source](https://github.com/dbt-labs/dbt-core/blob/f988f76fccc1878aaf8d8631c05be3e9104b3b9a/core/dbt/include/global_project/macros/adapters/metadata.sql#L58-L65)) (required) +- `list_schemas` ([source](https://github.com/dbt-labs/dbt-core/blob/f988f76fccc1878aaf8d8631c05be3e9104b3b9a/core/dbt/include/global_project/macros/adapters/metadata.sql#L29-L40)) +- `rename_relation` ([source](https://github.com/dbt-labs/dbt-core/blob/f988f76fccc1878aaf8d8631c05be3e9104b3b9a/core/dbt/include/global_project/macros/adapters/relation.sql#L56-L65)) +- `truncate_relation` ([source](https://github.com/dbt-labs/dbt-core/blob/f988f76fccc1878aaf8d8631c05be3e9104b3b9a/core/dbt/include/global_project/macros/adapters/relation.sql#L45-L53)) +- `current_timestamp` ([source](https://github.com/dbt-labs/dbt-core/blob/f988f76fccc1878aaf8d8631c05be3e9104b3b9a/core/dbt/include/global_project/macros/adapters/freshness.sql#L1-L8)) (required) +- `copy_grants` + +#### Adapter dispatch + +Most modern databases support a majority of the standard SQL spec. There are some databases that _do not_ support critical aspects of the SQL spec however, or they provide their own nonstandard mechanisms for implementing the same functionality. To account for these variations in SQL support, dbt provides a mechanism called [multiple dispatch](https://en.wikipedia.org/wiki/Multiple_dispatch) for macros. With this feature, macros can be overridden for specific adapters. This makes it possible to implement high-level methods (like "create ") in a database-specific way. + + + +```jinja2 + +{# dbt will call this macro by name, providing any arguments #} +{% macro create_table_as(temporary, relation, sql) -%} + + {# dbt will dispatch the macro call to the relevant macro #} + {{ return( + adapter.dispatch('create_table_as')(temporary, relation, sql) + ) }} +{%- endmacro %} + + + +{# If no macro matches the specified adapter, "default" will be used #} +{% macro default__create_table_as(temporary, relation, sql) -%} + ... +{%- endmacro %} + + + +{# Example which defines special logic for Redshift #} +{% macro redshift__create_table_as(temporary, relation, sql) -%} + ... +{%- endmacro %} + + + +{# Example which defines special logic for BigQuery #} +{% macro bigquery__create_table_as(temporary, relation, sql) -%} + ... +{%- endmacro %} +``` + + + +The `adapter.dispatch()` macro takes a second argument, `packages`, which represents a set of "search namespaces" in which to find potential implementations of a dispatched macro. This allows users of community-supported adapters to extend or "shim" dispatched macros from common packages, such as `dbt-utils`, with adapter-specific versions in their own project or other installed packages. See: + +- "Shim" package examples: [`spark-utils`](https://github.com/dbt-labs/spark-utils), [`tsql-utils`](https://github.com/dbt-msft/tsql-utils) +- [`adapter.dispatch` docs](/reference/dbt-jinja-functions/dispatch) + +#### Overriding adapter methods + +While much of dbt's adapter-specific functionality can be modified in adapter macros, it can also make sense to override adapter methods directly. In this example, assume that a database does not support a `cascade` parameter to `drop schema`. Instead, we can implement an approximation where we drop each relation and then drop the schema. + + + +```python + def drop_schema(self, relation: BaseRelation): + relations = self.list_relations( + database=relation.database, + schema=relation.schema + ) + for relation in relations: + self.drop_relation(relation) + super().drop_schema(relation) +``` + + + +#### Grants Macros + +See [this GitHub discussion](https://github.com/dbt-labs/dbt-core/discussions/5468) for information on the macros required for `GRANT` statements: + +### Other files + +#### `profile_template.yml` + +In order to enable the [`dbt init` command](/reference/commands/init) to prompt users when setting up a new project and connection profile, you should include a **profile template**. The filepath needs to be `dbt/include//profile_template.yml`. It's possible to provide hints, default values, and conditional prompts based on connection methods that require different supporting attributes. Users will also be able to include custom versions of this file in their own projects, with fixed values specific to their organization, to support their colleagues when using your dbt adapter for the first time. + +See examples: + +- [dbt-postgres](https://github.com/dbt-labs/dbt-core/blob/main/plugins/postgres/dbt/include/postgres/profile_template.yml) +- [dbt-redshift](https://github.com/dbt-labs/dbt-redshift/blob/main/dbt/include/redshift/profile_template.yml) +- [dbt-snowflake](https://github.com/dbt-labs/dbt-snowflake/blob/main/dbt/include/snowflake/profile_template.yml) +- [dbt-bigquery](https://github.com/dbt-labs/dbt-bigquery/blob/main/dbt/include/bigquery/profile_template.yml) + +#### `__version__.py` + +To assure that `dbt --version` provides the latest dbt core version the adapter supports, be sure include a `__version__.py` file. The filepath will be `dbt/adapters//__version__.py`. We recommend using the latest dbt core version and as the adapter is made compatible with later versions, this file will need to be updated. For a sample file, check out this [example](https://github.com/dbt-labs/dbt-snowflake/blob/main/dbt/adapters/snowflake/__version__.py). + +It should be noted that both of these files are included in the bootstrapped output of the `dbt-database-adapter-scaffold` so when using the scaffolding, these files will be included. + +## Testing your adapter + +:::info + +Previously, we offered a packaged suite of tests for dbt adapter functionality: [`pytest-dbt-adapter`](https://github.com/dbt-labs/dbt-adapter-tests). We are deprecating that suite, in favor of the newer testing framework outlined in this document. + +::: + +This document has two sections: + +1. "[About the testing framework](#about-the-testing-framework)" describes the standard framework that we maintain for using pytest together with dbt. It includes an example that shows the anatomy of a simple test case. +2. "[Testing your adapter](#testing-your-adapter)" offers a step-by-step guide for using our out-of-the-box suite of "basic" tests, which will validate that your adapter meets a baseline of dbt functionality. + +### Testing prerequisites + +- Your adapter must be compatible with dbt-core **v1.1** or newer +- You should be familiar with **pytest**: + +### About the testing framework + +dbt-core offers a standard framework for running pre-built functional tests, and for defining your own tests. The core testing framework is built using `pytest`, a mature and standard library for testing Python projects. + +The **[`tests` module](https://github.com/dbt-labs/dbt-core/tree/HEAD/core/dbt/tests)** within `dbt-core` includes basic utilities for setting up pytest + dbt. These are used by all "pre-built" functional tests, and make it possible to quickly write your own tests. + +Those utilities allow you to do three basic things: + +1. **Quickly set up a dbt "project."** Define project resources via methods such as `models()` and `seeds()`. Use `project_config_update()` to pass configurations into `dbt_project.yml`. +2. **Define a sequence of dbt commands.** The most important utility is `run_dbt()`, which returns the [results](/reference/dbt-classes#result-objects) of each dbt command. It takes a list of CLI specifiers (subcommand + flags), as well as an optional second argument, `expect_pass=False`, for cases where you expect the command to fail. +3. **Validate the results of those dbt commands.** For example, `check_relations_equal()` asserts that two database objects have the same structure and content. You can also write your own `assert` statements, by inspecting the results of a dbt command, or querying arbitrary database objects with `project.run_sql()`. + +You can see the full suite of utilities, with arguments and annotations, in [`util.py`](https://github.com/dbt-labs/dbt-core/blob/main/core/dbt/tests/util.py). You'll also see them crop up across a number of test cases. While all utilities are intended to be reusable, you won't need all of them for every test. In the example below, we'll show a simple test case that uses only a few utilities. + +#### Example: a simple test case + +This example will show you the anatomy of a test case using dbt + pytest. We will create reusable components, combine them to form a dbt "project", and define a sequence of dbt commands. Then, we'll use Python `assert` statements to ensure those commands succeed (or fail) as we expect. + +In ["Getting started running basic tests,"](#getting-started-running-basic-tests) we'll offer step-by-step instructions for installing and configuring `pytest`, so that you can run it on your own machine. For now, it's more important to see how the pieces of a test case fit together. + +This example includes a seed, a model, and two tests—one of which will fail. + +1. Define Python strings that will represent the file contents in your dbt project. Defining these in a separate file enables you to reuse the same components across different test cases. The pytest name for this type of reusable component is "fixture." + + + +```python +# seeds/my_seed.csv +my_seed_csv = """ +id,name,some_date +1,Easton,1981-05-20T06:46:51 +2,Lillian,1978-09-03T18:10:33 +3,Jeremiah,1982-03-11T03:59:51 +4,Nolan,1976-05-06T20:21:35 +""".lstrip() + +# models/my_model.sql +my_model_sql = """ +select * from {{ ref('my_seed') }} +union all +select null as id, null as name, null as some_date +""" + +# models/my_model.yml +my_model_yml = """ +version: 2 +models: + - name: my_model + columns: + - name: id + tests: + - unique + - not_null # this test will fail +""" +``` + + + +2. Use the "fixtures" to define the project for your test case. These fixtures are always scoped to the **class**, where the class represents one test case—that is, one dbt project or scenario. (The same test case can be used for one or more actual tests, which we'll see in step 3.) Following the default pytest configurations, the file name must begin with `test_`, and the class name must begin with `Test`. + + + +```python +import pytest +from dbt.tests.util import run_dbt + +# our file contents +from tests.functional.example.fixtures import ( + my_seed_csv, + my_model_sql, + my_model_yml, +) + +# class must begin with 'Test' +class TestExample: + """ + Methods in this class will be of two types: + 1. Fixtures defining the dbt "project" for this test case. + These are scoped to the class, and reused for all tests in the class. + 2. Actual tests, whose names begin with 'test_'. + These define sequences of dbt commands and 'assert' statements. + """ + + # configuration in dbt_project.yml + @pytest.fixture(scope="class") + def project_config_update(self): + return { + "name": "example", + "models": {"+materialized": "view"} + } + + # everything that goes in the "seeds" directory + @pytest.fixture(scope="class") + def seeds(self): + return { + "my_seed.csv": my_seed_csv, + } + + # everything that goes in the "models" directory + @pytest.fixture(scope="class") + def models(self): + return { + "my_model.sql": my_model_sql, + "my_model.yml": my_model_yml, + } + + # continues below +``` + + + +3. Now that we've set up our project, it's time to define a sequence of dbt commands and assertions. We define one or more methods in the same file, on the same class (`TestExampleFailingTest`), whose names begin with `test_`. These methods share the same setup (project scenario) from above, but they can be run independently by pytest—so they shouldn't depend on each other in any way. + + + +```python + # continued from above + + # The actual sequence of dbt commands and assertions + # pytest will take care of all "setup" + "teardown" + def test_run_seed_test(self, project): + """ + Seed, then run, then test. We expect one of the tests to fail + An alternative pattern is to use pytest "xfail" (see below) + """ + # seed seeds + results = run_dbt(["seed"]) + assert len(results) == 1 + # run models + results = run_dbt(["run"]) + assert len(results) == 1 + # test tests + results = run_dbt(["test"], expect_pass = False) # expect failing test + assert len(results) == 2 + # validate that the results include one pass and one failure + result_statuses = sorted(r.status for r in results) + assert result_statuses == ["fail", "pass"] + + @pytest.mark.xfail + def test_build(self, project): + """Expect a failing test""" + # do it all + results = run_dbt(["build"]) +``` + + + +3. Our test is ready to run! The last step is to invoke `pytest` from your command line. We'll walk through the actual setup and configuration of `pytest` in the next section. + + + +```sh +$ python3 -m pytest tests/functional/test_example.py +=========================== test session starts ============================ +platform ... -- Python ..., pytest-..., pluggy-... +rootdir: ... +plugins: ... + +tests/functional/test_example.py .X [100%] + +======================= 1 passed, 1 xpassed in 1.38s ======================= +``` + + + +You can find more ways to run tests, along with a full command reference, in the [pytest usage docs](https://docs.pytest.org/how-to/usage.html). + +We've found the `-s` flag (or `--capture=no`) helpful to print logs from the underlying dbt invocations, and to step into an interactive debugger if you've added one. You can also use environment variables to set [global dbt configs](/reference/global-configs/about-global-configs), such as `DBT_DEBUG` (to show debug-level logs). + +### Testing this adapter + +Anyone who installs `dbt-core`, and wishes to define their own test cases, can use the framework presented in the first section. The framework is especially useful for testing standard dbt behavior across different databases. + +To that end, we have built and made available a [package of reusable adapter test cases](https://github.com/dbt-labs/dbt-core/tree/HEAD/tests/adapter), for creators and maintainers of adapter plugins. These test cases cover basic expected functionality, as well as functionality that frequently requires different implementations across databases. + +For the time being, this package is also located within the `dbt-core` repository, but separate from the `dbt-core` Python package. + +### Categories of tests + +In the course of creating and maintaining your adapter, it's likely that you will end up implementing tests that fall into three broad categories: + +1. **Basic tests** that every adapter plugin is expected to pass. These are defined in `tests.adapter.basic`. Given differences across data platforms, these may require slight modification or reimplementation. Significantly overriding or disabling these tests should be with good reason, since each represents basic functionality expected by dbt users. For example, if your adapter does not support incremental models, you should disable the test, [by marking it with `skip` or `xfail`](https://docs.pytest.org/en/latest/how-to/skipping.html), as well as noting that limitation in any documentation, READMEs, and usage guides that accompany your adapter. + +2. **Optional tests**, for second-order functionality that is common across plugins, but not required for basic use. Your plugin can opt into these test cases by inheriting existing ones, or reimplementing them with adjustments. For now, this category includes all tests located outside the `basic` subdirectory. More tests will be added as we convert older tests defined on dbt-core and mature plugins to use the standard framework. + +3. **Custom tests**, for behavior that is specific to your adapter / data platform. Each has its own specialties and idiosyncracies. We encourage you to use the same `pytest`-based framework, utilities, and fixtures to write your own custom tests for functionality that is unique to your adapter. + +If you run into an issue with the core framework, or the basic/optional test cases—or if you've written a custom test that you believe would be relevant and useful for other adapter plugin developers—please open an issue or PR in the `dbt-core` repository on GitHub. + +### Getting started running basic tests + +In this section, we'll walk through the three steps to start running our basic test cases on your adapter plugin: + +1. Install dependencies +2. Set up and configure pytest +3. Define test cases + +### Install dependencies + +You should already have a virtual environment with `dbt-core` and your adapter plugin installed. You'll also need to install: + +- [`pytest`](https://pypi.org/project/pytest/) +- [`dbt-tests-adapter`](https://pypi.org/project/dbt-tests-adapter/), the set of common test cases +- (optional) [`pytest` plugins](https://docs.pytest.org/en/7.0.x/reference/plugin_list.html)--we'll use `pytest-dotenv` below + +Or specify all dependencies in a requirements file like: + + +```txt +pytest +pytest-dotenv +dbt-tests-adapter +``` + + + +```sh +pip install -r dev_requirements.txt +``` + +### Set up and configure pytest + +First, set yourself up to run `pytest` by creating a file named `pytest.ini` at the root of your repository: + + + +```python +[pytest] +filterwarnings = + ignore:.*'soft_unicode' has been renamed to 'soft_str'*:DeprecationWarning + ignore:unclosed file .*:ResourceWarning +env_files = + test.env # uses pytest-dotenv plugin + # this allows you to store env vars for database connection in a file named test.env + # rather than passing them in every CLI command, or setting in `PYTEST_ADDOPTS` + # be sure to add "test.env" to .gitignore as well! +testpaths = + tests/functional # name per convention +``` + + + +Then, create a configuration file within your tests directory. In it, you'll want to define all necessary profile configuration for connecting to your data platform in local development and continuous integration. We recommend setting these values with environment variables, since this file will be checked into version control. + + + +```python +import pytest +import os + +# Import the standard functional fixtures as a plugin +# Note: fixtures with session scope need to be local +pytest_plugins = ["dbt.tests.fixtures.project"] + +# The profile dictionary, used to write out profiles.yml +# dbt will supply a unique schema per test, so we do not specify 'schema' here +@pytest.fixture(scope="class") +def dbt_profile_target(): + return { + 'type': '', + 'threads': 1, + 'host': os.getenv('HOST_ENV_VAR_NAME'), + 'user': os.getenv('USER_ENV_VAR_NAME'), + ... + } +``` + + + +### Define test cases + +As in the example above, each test case is defined as a class, and has its own "project" setup. To get started, you can import all basic test cases and try running them without changes. + + + +```python +import pytest + +from dbt.tests.adapter.basic.test_base import BaseSimpleMaterializations +from dbt.tests.adapter.basic.test_singular_tests import BaseSingularTests +from dbt.tests.adapter.basic.test_singular_tests_ephemeral import BaseSingularTestsEphemeral +from dbt.tests.adapter.basic.test_empty import BaseEmpty +from dbt.tests.adapter.basic.test_ephemeral import BaseEphemeral +from dbt.tests.adapter.basic.test_incremental import BaseIncremental +from dbt.tests.adapter.basic.test_generic_tests import BaseGenericTests +from dbt.tests.adapter.basic.test_snapshot_check_cols import BaseSnapshotCheckCols +from dbt.tests.adapter.basic.test_snapshot_timestamp import BaseSnapshotTimestamp +from dbt.tests.adapter.basic.test_adapter_methods import BaseAdapterMethod + +class TestSimpleMaterializationsMyAdapter(BaseSimpleMaterializations): + pass + + +class TestSingularTestsMyAdapter(BaseSingularTests): + pass + + +class TestSingularTestsEphemeralMyAdapter(BaseSingularTestsEphemeral): + pass + + +class TestEmptyMyAdapter(BaseEmpty): + pass + + +class TestEphemeralMyAdapter(BaseEphemeral): + pass + + +class TestIncrementalMyAdapter(BaseIncremental): + pass + + +class TestGenericTestsMyAdapter(BaseGenericTests): + pass + + +class TestSnapshotCheckColsMyAdapter(BaseSnapshotCheckCols): + pass + + +class TestSnapshotTimestampMyAdapter(BaseSnapshotTimestamp): + pass + + +class TestBaseAdapterMethod(BaseAdapterMethod): + pass +``` + + + +Finally, run pytest: + +```sh +python3 -m pytest tests/functional +``` + +### Modifying test cases + +You may need to make slight modifications in a specific test case to get it passing on your adapter. The mechanism to do this is simple: rather than simply inheriting the "base" test with `pass`, you can redefine any of its fixtures or test methods. + +For instance, on Redshift, we need to explicitly cast a column in the fixture input seed to use data type `varchar(64)`: + + + +```python +import pytest +from dbt.tests.adapter.basic.files import seeds_base_csv, seeds_added_csv, seeds_newcolumns_csv +from dbt.tests.adapter.basic.test_snapshot_check_cols import BaseSnapshotCheckCols + +# set the datatype of the name column in the 'added' seed so it +# can hold the '_update' that's added +schema_seed_added_yml = """ +version: 2 +seeds: + - name: added + config: + column_types: + name: varchar(64) +""" + +class TestSnapshotCheckColsRedshift(BaseSnapshotCheckCols): + # Redshift defines the 'name' column such that it's not big enough + # to hold the '_update' added in the test. + @pytest.fixture(scope="class") + def models(self): + return { + "base.csv": seeds_base_csv, + "added.csv": seeds_added_csv, + "seeds.yml": schema_seed_added_yml, + } +``` + + + +As another example, the `dbt-bigquery` adapter asks users to "authorize" replacing a with a by supplying the `--full-refresh` flag. The reason: In the table logic, a view by the same name must first be dropped; if the table query fails, the model will be missing. + +Knowing this possibility, the "base" test case offers a `require_full_refresh` switch on the `test_config` fixture class. For BigQuery, we'll switch it on: + + + +```python +import pytest +from dbt.tests.adapter.basic.test_base import BaseSimpleMaterializations + +class TestSimpleMaterializationsBigQuery(BaseSimpleMaterializations): + @pytest.fixture(scope="class") + def test_config(self): + # effect: add '--full-refresh' flag in requisite 'dbt run' step + return {"require_full_refresh": True} +``` + + + +It's always worth asking whether the required modifications represent gaps in perceived or expected dbt functionality. Are these simple implementation details, which any user of this database would understand? Are they limitations worth documenting? + +If, on the other hand, they represent poor assumptions in the "basic" test cases, which fail to account for a common pattern in other types of databases-—please open an issue or PR in the `dbt-core` repository on GitHub. + +### Running with multiple profiles + +Some databases support multiple connection methods, which map to actually different functionality behind the scenes. For instance, the `dbt-spark` adapter supports connections to Apache Spark clusters _and_ Databricks runtimes, which supports additional functionality out of the box, enabled by the Delta file format. + + + +```python +def pytest_addoption(parser): + parser.addoption("--profile", action="store", default="apache_spark", type=str) + + +# Using @pytest.mark.skip_profile('apache_spark') uses the 'skip_by_profile_type' +# autouse fixture below +def pytest_configure(config): + config.addinivalue_line( + "markers", + "skip_profile(profile): skip test for the given profile", + ) + +@pytest.fixture(scope="session") +def dbt_profile_target(request): + profile_type = request.config.getoption("--profile") + elif profile_type == "databricks_sql_endpoint": + target = databricks_sql_endpoint_target() + elif profile_type == "apache_spark": + target = apache_spark_target() + else: + raise ValueError(f"Invalid profile type '{profile_type}'") + return target + +def apache_spark_target(): + return { + "type": "spark", + "host": "localhost", + ... + } + +def databricks_sql_endpoint_target(): + return { + "type": "spark", + "host": os.getenv("DBT_DATABRICKS_HOST_NAME"), + ... + } + +@pytest.fixture(autouse=True) +def skip_by_profile_type(request): + profile_type = request.config.getoption("--profile") + if request.node.get_closest_marker("skip_profile"): + for skip_profile_type in request.node.get_closest_marker("skip_profile").args: + if skip_profile_type == profile_type: + pytest.skip("skipped on '{profile_type}' profile") +``` + + + +If there are tests that _shouldn't_ run for a given profile: + + + +```python +# Snapshots require access to the Delta file format, available on our Databricks connection, +# so let's skip on Apache Spark +@pytest.mark.skip_profile('apache_spark') +class TestSnapshotCheckColsSpark(BaseSnapshotCheckCols): + @pytest.fixture(scope="class") + def project_config_update(self): + return { + "seeds": { + "+file_format": "delta", + }, + "snapshots": { + "+file_format": "delta", + } + } +``` + + + +Finally: + +```sh +python3 -m pytest tests/functional --profile apache_spark +python3 -m pytest tests/functional --profile databricks_sql_endpoint +``` diff --git a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/1-overview-dbt-python-snowpark.md b/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/1-overview-dbt-python-snowpark.md deleted file mode 100644 index 6fb436c5bc4..00000000000 --- a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/1-overview-dbt-python-snowpark.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: "Leverage dbt Cloud to generate analytics and ML-ready pipelines with SQL and Python with Snowflake" -id: "dbt-python-snowpark" -description: "Leverage dbt Cloud to generate analytics and ML-ready pipelines with SQL and Python with Snowflake" -hoverSnippet: Learn how to use a webhook or Slack message to trigger Zapier to post error context in Slack when a job fails. -# time_to_complete: '30 minutes' commenting out until we test -icon: 'guides' -hide_table_of_contents: true -tags: ['Webhooks'] -level: 'Advanced' -recently_updated: true ---- - -## Introduction - -The focus of this workshop will be to demonstrate how we can use both *SQL and python together* in the same workflow to run *both analytics and machine learning models* on dbt Cloud. - -All code in today’s workshop can be found on [GitHub](https://github.com/dbt-labs/python-snowpark-formula1/tree/python-formula1). - -### What you'll use during the lab - -- A [Snowflake account](https://trial.snowflake.com/) with ACCOUNTADMIN access -- A [dbt Cloud account](https://www.getdbt.com/signup/) - -### What you'll learn - -- How to build scalable data transformation pipelines using dbt, and Snowflake using SQL and Python -- How to leverage copying data into Snowflake from a public S3 bucket - -### What you need to know - -- Basic to intermediate SQL and python. -- Basic understanding of dbt fundamentals. We recommend the [dbt Fundamentals course](https://courses.getdbt.com/collections) if you're interested. -- High level machine learning process (encoding, training, testing) -- Simple ML algorithms — we will use logistic regression to keep the focus on the *workflow*, not algorithms! - -### What you'll build - -- A set of data analytics and prediction pipelines using Formula 1 data leveraging dbt and Snowflake, making use of best practices like data quality tests and code promotion between environments -- We will create insights for: - 1. Finding the lap time average and rolling average through the years (is it generally trending up or down)? - 2. Which constructor has the fastest pit stops in 2021? - 3. Predicting the position of each driver given using a decade of data (2010 - 2020) - -As inputs, we are going to leverage Formula 1 datasets hosted on a dbt Labs public S3 bucket. We will create a Snowflake Stage for our CSV files then use Snowflake’s `COPY INTO` function to copy the data in from our CSV files into tables. The Formula 1 is available on [Kaggle](https://www.kaggle.com/datasets/rohanrao/formula-1-world-championship-1950-2020). The data is originally compiled from the [Ergast Developer API](http://ergast.com/mrd/). - -Overall we are going to set up the environments, build scalable pipelines in dbt, establish data tests, and promote code to production. - -;' diff --git a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/10-python-transformations.md b/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/10-python-transformations.md deleted file mode 100644 index 446981214e3..00000000000 --- a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/10-python-transformations.md +++ /dev/null @@ -1,150 +0,0 @@ ---- -title: "Python transformations!" -id: "10-python-transformations" -description: "Python transformations" ---- - -Up until now, SQL has been driving the project (car pun intended) for data cleaning and hierarchical joining. Now it’s time for Python to take the wheel (car pun still intended) for the rest of our lab! For more information about running Python models on dbt, check out our [docs](/docs/build/python-models). To learn more about dbt python works under the hood, check out [Snowpark for Python](https://docs.snowflake.com/en/developer-guide/snowpark/python/index.html), which makes running dbt Python models possible. - -There are quite a few differences between SQL and Python in terms of the dbt syntax and DDL, so we’ll be breaking our code and model runs down further for our python models. - -## Pit stop analysis - -First, we want to find out: which constructor had the fastest pit stops in 2021? (constructor is a Formula 1 team that builds or “constructs” the car). - -1. Create a new file called `fastest_pit_stops_by_constructor.py` in our `aggregates` (this is the first time we are using the `.py` extension!). -2. Copy the following code into the file: - ```python - import numpy as np - import pandas as pd - - def model(dbt, session): - # dbt configuration - dbt.config(packages=["pandas","numpy"]) - - # get upstream data - pit_stops_joined = dbt.ref("pit_stops_joined").to_pandas() - - # provide year so we do not hardcode dates - year=2021 - - # describe the data - pit_stops_joined["PIT_STOP_SECONDS"] = pit_stops_joined["PIT_STOP_MILLISECONDS"]/1000 - fastest_pit_stops = pit_stops_joined[(pit_stops_joined["RACE_YEAR"]==year)].groupby(by="CONSTRUCTOR_NAME")["PIT_STOP_SECONDS"].describe().sort_values(by='mean') - fastest_pit_stops.reset_index(inplace=True) - fastest_pit_stops.columns = fastest_pit_stops.columns.str.upper() - - return fastest_pit_stops.round(2) - ``` - -3. Let’s break down what this code is doing step by step: - - First, we are importing the Python libraries that we are using. A *library* is a reusable chunk of code that someone else wrote that you may want to include in your programs/projects. We are using `numpy` and `pandas`in this Python model. This is similar to a dbt *package*, but our Python libraries do *not* persist across the entire project. - - Defining a function called `model` with the parameter `dbt` and `session`. The parameter `dbt` is a class compiled by dbt, which enables you to run your Python code in the context of your dbt project and DAG. The parameter `session` is a class representing your Snowflake’s connection to the Python backend. The `model` function *must return a single DataFrame*. You can see that all the data transformation happening is within the body of the `model` function that the `return` statement is tied to. - - Then, within the context of our dbt model library, we are passing in a configuration of which packages we need using `dbt.config(packages=["pandas","numpy"])`. - - Use the `.ref()` function to retrieve the data frame `pit_stops_joined` that we created in our last step using SQL. We cast this to a pandas dataframe (by default it's a Snowpark Dataframe). - - Create a variable named `year` so we aren’t passing a hardcoded value. - - Generate a new column called `PIT_STOP_SECONDS` by dividing the value of `PIT_STOP_MILLISECONDS` by 1000. - - Create our final data frame `fastest_pit_stops` that holds the records where year is equal to our year variable (2021 in this case), then group the data frame by `CONSTRUCTOR_NAME` and use the `describe()` and `sort_values()` and in descending order. This will make our first row in the new aggregated data frame the team with the fastest pit stops over an entire competition year. - - Finally, it resets the index of the `fastest_pit_stops` data frame. The `reset_index()` method allows you to reset the index back to the default 0, 1, 2, etc indexes. By default, this method will keep the "old" indexes in a column named "index"; to avoid this, use the drop parameter. Think of this as keeping your data “flat and square” as opposed to “tiered”. If you are new to Python, now might be a good time to [learn about indexes for 5 minutes](https://towardsdatascience.com/the-basics-of-indexing-and-slicing-python-lists-2d12c90a94cf) since it's the foundation of how Python retrieves, slices, and dices data. The `inplace` argument means we override the existing data frame permanently. Not to fear! This is what we want to do to avoid dealing with multi-indexed dataframes! - - Convert our Python column names to all uppercase using `.upper()`, so Snowflake recognizes them. - - Finally we are returning our dataframe with 2 decimal places for all the columns using the `round()` method. -4. Zooming out a bit, what are we doing differently here in Python from our typical SQL code: - - Method chaining is a technique in which multiple methods are called on an object in a single statement, with each method call modifying the result of the previous one. The methods are called in a chain, with the output of one method being used as the input for the next one. The technique is used to simplify the code and make it more readable by eliminating the need for intermediate variables to store the intermediate results. - - The way you see method chaining in Python is the syntax `.().()`. For example, `.describe().sort_values(by='mean')` where the `.describe()` method is chained to `.sort_values()`. - - The `.describe()` method is used to generate various summary statistics of the dataset. It's used on pandas dataframe. It gives a quick and easy way to get the summary statistics of your dataset without writing multiple lines of code. - - The `.sort_values()` method is used to sort a pandas dataframe or a series by one or multiple columns. The method sorts the data by the specified column(s) in ascending or descending order. It is the pandas equivalent to `order by` in SQL. - - We won’t go as in depth for our subsequent scripts, but will continue to explain at a high level what new libraries, functions, and methods are doing. - -5. Build the model using the UI which will **execute**: - ```bash - dbt run --select fastest_pit_stops_by_constructor - ``` - in the command bar. - - Let’s look at some details of our first Python model to see what our model executed. There two major differences we can see while running a Python model compared to an SQL model: - - - Our Python model was executed as a stored procedure. Snowflake needs a way to know that it's meant to execute this code in a Python runtime, instead of interpreting in a SQL runtime. We do this by creating a Python stored proc, called by a SQL command. - - The `snowflake-snowpark-python` library has been picked up to execute our Python code. Even though this wasn’t explicitly stated this is picked up by the dbt class object because we need our Snowpark package to run Python! - - Python models take a bit longer to run than SQL models, however we could always speed this up by using [Snowpark-optimized Warehouses](https://docs.snowflake.com/en/user-guide/warehouses-snowpark-optimized.html) if we wanted to. Our data is sufficiently small, so we won’t worry about creating a separate warehouse for Python versus SQL files today. - - - The rest of our **Details** output gives us information about how dbt and Snowpark for Python are working together to define class objects and apply a specific set of methods to run our models. - - So which constructor had the fastest pit stops in 2021? Let’s look at our data to find out! - -6. We can't preview Python models directly, so let’s create a new file using the **+** button or the Control-n shortcut to create a new scratchpad. -7. Reference our Python model: - ```sql - select * from {{ ref('fastest_pit_stops_by_constructor') }} - ``` - and preview the output: - - - Not only did Red Bull have the fastest average pit stops by nearly 40 seconds, they also had the smallest standard deviation, meaning they are both fastest and most consistent teams in pit stops. By using the `.describe()` method we were able to avoid verbose SQL requiring us to create a line of code per column and repetitively use the `PERCENTILE_COUNT()` function. - - Now we want to find the lap time average and rolling average through the years (is it generally trending up or down)? - -8. Create a new file called `lap_times_moving_avg.py` in our `aggregates` folder. -9. Copy the following code into the file: - ```python - import pandas as pd - - def model(dbt, session): - # dbt configuration - dbt.config(packages=["pandas"]) - - # get upstream data - lap_times = dbt.ref("int_lap_times_years").to_pandas() - - # describe the data - lap_times["LAP_TIME_SECONDS"] = lap_times["LAP_TIME_MILLISECONDS"]/1000 - lap_time_trends = lap_times.groupby(by="RACE_YEAR")["LAP_TIME_SECONDS"].mean().to_frame() - lap_time_trends.reset_index(inplace=True) - lap_time_trends["LAP_MOVING_AVG_5_YEARS"] = lap_time_trends["LAP_TIME_SECONDS"].rolling(5).mean() - lap_time_trends.columns = lap_time_trends.columns.str.upper() - - return lap_time_trends.round(1) - ``` - -10. Breaking down our code a bit: - - We’re only using the `pandas` library for this model and casting it to a pandas data frame `.to_pandas()`. - - Generate a new column called `LAP_TIMES_SECONDS` by dividing the value of `LAP_TIME_MILLISECONDS` by 1000. - - Create the final dataframe. Get the lap time per year. Calculate the mean series and convert to a data frame. - - Reset the index. - - Calculate the rolling 5 year mean. - - Round our numeric columns to one decimal place. -11. Now, run this model by using the UI **Run model** or - ```bash - dbt run --select lap_times_moving_avg - ``` - in the command bar. - -12. Once again previewing the output of our data using the same steps for our `fastest_pit_stops_by_constructor` model. - - - We can see that it looks like lap times are getting consistently faster over time. Then in 2010 we see an increase occur! Using outside subject matter context, we know that significant rule changes were introduced to Formula 1 in 2010 and 2011 causing slower lap times. - -13. Now is a good time to checkpoint and commit our work to Git. Click **Commit and push** and give your commit a message like `aggregate python models` before moving on. - -## The dbt model, .source(), .ref() and .config() functions - -Let’s take a step back before starting machine learning to both review and go more in-depth at the methods that make running dbt python models possible. If you want to know more outside of this lab’s explanation read the documentation [here](/docs/build/python-models?version=1.3). - -- dbt model(dbt, session). For starters, each Python model lives in a .py file in your models/ folder. It defines a function named `model()`, which takes two parameters: - - dbt — A class compiled by dbt Core, unique to each model, enables you to run your Python code in the context of your dbt project and DAG. - - session — A class representing your data platform’s connection to the Python backend. The session is needed to read in tables as DataFrames and to write DataFrames back to tables. In PySpark, by convention, the SparkSession is named spark, and available globally. For consistency across platforms, we always pass it into the model function as an explicit argument called session. -- The `model()` function must return a single DataFrame. On Snowpark (Snowflake), this can be a Snowpark or pandas DataFrame. -- `.source()` and `.ref()` functions. Python models participate fully in dbt's directed acyclic graph (DAG) of transformations. If you want to read directly from a raw source table, use `dbt.source()`. We saw this in our earlier section using SQL with the source function. These functions have the same execution, but with different syntax. Use the `dbt.ref()` method within a Python model to read data from other models (SQL or Python). These methods return DataFrames pointing to the upstream source, model, seed, or snapshot. -- `.config()`. Just like SQL models, there are three ways to configure Python models: - - In a dedicated `.yml` file, within the `models/` directory - - Within the model's `.py` file, using the `dbt.config()` method - - Calling the `dbt.config()` method will set configurations for your model within your `.py` file, similar to the `{{ config() }} macro` in `.sql` model files: - ```python - def model(dbt, session): - - # setting configuration - dbt.config(materialized="table") - ``` - - There's a limit to how complex you can get with the `dbt.config()` method. It accepts only literal values (strings, booleans, and numeric types). Passing another function or a more complex data structure is not possible. The reason is that dbt statically analyzes the arguments to `.config()` while parsing your model without executing your Python code. If you need to set a more complex configuration, we recommend you define it using the config property in a [YAML file](/reference/resource-properties/config). Learn more about configurations [here](/reference/model-configs). diff --git a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/11-machine-learning-prep.md b/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/11-machine-learning-prep.md deleted file mode 100644 index bde163b59db..00000000000 --- a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/11-machine-learning-prep.md +++ /dev/null @@ -1,225 +0,0 @@ ---- -title: "Machine Learning prep: cleaning, encoding, and splits, oh my!" -id: "11-machine-learning-prep" -description: "Machine Learning prep" ---- -Now that we’ve gained insights and business intelligence about Formula 1 at a descriptive level, we want to extend our capabilities into prediction. We’re going to take the scenario where we censor the data. This means that we will pretend that we will train a model using earlier data and apply it to future data. In practice, this means we’ll take data from 2010-2019 to train our model and then predict 2020 data. - -In this section, we’ll be preparing our data to predict the final race position of a driver. - -At a high level we’ll be: - -- Creating new prediction features and filtering our dataset to active drivers -- Encoding our data (algorithms like numbers) and simplifying our target variable called `position` -- Splitting our dataset into training, testing, and validation - -## ML data prep - -1. To keep our project organized, we’ll need to create two new subfolders in our `ml` directory. Under the `ml` folder, make the subfolders `prep` and `train_predict`. -2. Create a new file under `ml/prep` called `ml_data_prep`. Copy the following code into the file and **Save**. - ```python - import pandas as pd - - def model(dbt, session): - # dbt configuration - dbt.config(packages=["pandas"]) - - # get upstream data - fct_results = dbt.ref("fct_results").to_pandas() - - # provide years so we do not hardcode dates in filter command - start_year=2010 - end_year=2020 - - # describe the data for a full decade - data = fct_results.loc[fct_results['RACE_YEAR'].between(start_year, end_year)] - - # convert string to an integer - data['POSITION'] = data['POSITION'].astype(float) - - # we cannot have nulls if we want to use total pit stops - data['TOTAL_PIT_STOPS_PER_RACE'] = data['TOTAL_PIT_STOPS_PER_RACE'].fillna(0) - - # some of the constructors changed their name over the year so replacing old names with current name - mapping = {'Force India': 'Racing Point', 'Sauber': 'Alfa Romeo', 'Lotus F1': 'Renault', 'Toro Rosso': 'AlphaTauri'} - data['CONSTRUCTOR_NAME'].replace(mapping, inplace=True) - - # create confidence metrics for drivers and constructors - dnf_by_driver = data.groupby('DRIVER').sum()['DNF_FLAG'] - driver_race_entered = data.groupby('DRIVER').count()['DNF_FLAG'] - driver_dnf_ratio = (dnf_by_driver/driver_race_entered) - driver_confidence = 1-driver_dnf_ratio - driver_confidence_dict = dict(zip(driver_confidence.index,driver_confidence)) - - dnf_by_constructor = data.groupby('CONSTRUCTOR_NAME').sum()['DNF_FLAG'] - constructor_race_entered = data.groupby('CONSTRUCTOR_NAME').count()['DNF_FLAG'] - constructor_dnf_ratio = (dnf_by_constructor/constructor_race_entered) - constructor_relaiblity = 1-constructor_dnf_ratio - constructor_relaiblity_dict = dict(zip(constructor_relaiblity.index,constructor_relaiblity)) - - data['DRIVER_CONFIDENCE'] = data['DRIVER'].apply(lambda x:driver_confidence_dict[x]) - data['CONSTRUCTOR_RELAIBLITY'] = data['CONSTRUCTOR_NAME'].apply(lambda x:constructor_relaiblity_dict[x]) - - #removing retired drivers and constructors - active_constructors = ['Renault', 'Williams', 'McLaren', 'Ferrari', 'Mercedes', - 'AlphaTauri', 'Racing Point', 'Alfa Romeo', 'Red Bull', - 'Haas F1 Team'] - active_drivers = ['Daniel Ricciardo', 'Kevin Magnussen', 'Carlos Sainz', - 'Valtteri Bottas', 'Lance Stroll', 'George Russell', - 'Lando Norris', 'Sebastian Vettel', 'Kimi Räikkönen', - 'Charles Leclerc', 'Lewis Hamilton', 'Daniil Kvyat', - 'Max Verstappen', 'Pierre Gasly', 'Alexander Albon', - 'Sergio Pérez', 'Esteban Ocon', 'Antonio Giovinazzi', - 'Romain Grosjean','Nicholas Latifi'] - - # create flags for active drivers and constructors so we can filter downstream - data['ACTIVE_DRIVER'] = data['DRIVER'].apply(lambda x: int(x in active_drivers)) - data['ACTIVE_CONSTRUCTOR'] = data['CONSTRUCTOR_NAME'].apply(lambda x: int(x in active_constructors)) - - return data - ``` -3. As usual, let’s break down what we are doing in this Python model: - - We’re first referencing our upstream `fct_results` table and casting it to a pandas dataframe. - - Filtering on years 2010-2020 since we’ll need to clean all our data we are using for prediction (both training and testing). - - Filling in empty data for `total_pit_stops` and making a mapping active constructors and drivers to avoid erroneous predictions - - ⚠️ You might be wondering why we didn’t do this upstream in our `fct_results` table! The reason for this is that we want our machine learning cleanup to reflect the year 2020 for our predictions and give us an up-to-date team name. However, for business intelligence purposes we can keep the historical data at that point in time. Instead of thinking of one table as “one source of truth” we are creating different datasets fit for purpose: one for historical descriptions and reporting and another for relevant predictions. - - Create new confidence features for drivers and constructors - - Generate flags for the constructors and drivers that were active in 2020 -4. Execute the following in the command bar: - ```bash - dbt run --select ml_data_prep - ``` -5. There are more aspects we could consider for this project, such as normalizing the driver confidence by the number of races entered. Including this would help account for a driver’s history and consider whether they are a new or long-time driver. We’re going to keep it simple for now, but these are some of the ways we can expand and improve our machine learning dbt projects. Breaking down our machine learning prep model: - - Lambda functions — We use some lambda functions to transform our data without having to create a fully-fledged function using the `def` notation. So what exactly are lambda functions? - - In Python, a lambda function is a small, anonymous function defined using the keyword "lambda". Lambda functions are used to perform a quick operation, such as a mathematical calculation or a transformation on a list of elements. They are often used in conjunction with higher-order functions, such as `apply`, `map`, `filter`, and `reduce`. - - `.apply()` method — We used `.apply()` to pass our functions into our lambda expressions to the columns and perform this multiple times in our code. Let’s explain apply a little more: - - The `.apply()` function in the pandas library is used to apply a function to a specified axis of a DataFrame or a Series. In our case the function we used was our lambda function! - - The `.apply()` function takes two arguments: the first is the function to be applied, and the second is the axis along which the function should be applied. The axis can be specified as 0 for rows or 1 for columns. We are using the default value of 0 so we aren’t explicitly writing it in the code. This means that the function will be applied to each *row* of the DataFrame or Series. -6. Let’s look at the preview of our clean dataframe after running our `ml_data_prep` model: - - -## Covariate encoding - -In this next part, we’ll be performing covariate encoding. Breaking down this phrase a bit, a *covariate* is a variable that is relevant to the outcome of a study or experiment, and *encoding* refers to the process of converting data (such as text or categorical variables) into a numerical format that can be used as input for a model. This is necessary because most machine learning algorithms can only work with numerical data. Algorithms don’t speak languages, have eyes to see images, etc. so we encode our data into numbers so algorithms can perform tasks by using calculations they otherwise couldn’t. - -🧠 We’ll think about this as : “algorithms like numbers”. - -1. Create a new file under `ml/prep` called `covariate_encoding` copy the code below and save. - ```python - import pandas as pd - import numpy as np - from sklearn.preprocessing import StandardScaler,LabelEncoder,OneHotEncoder - from sklearn.linear_model import LogisticRegression - - def model(dbt, session): - # dbt configuration - dbt.config(packages=["pandas","numpy","scikit-learn"]) - - # get upstream data - data = dbt.ref("ml_data_prep").to_pandas() - - # list out covariates we want to use in addition to outcome variable we are modeling - position - covariates = data[['RACE_YEAR','CIRCUIT_NAME','GRID','CONSTRUCTOR_NAME','DRIVER','DRIVERS_AGE_YEARS','DRIVER_CONFIDENCE','CONSTRUCTOR_RELAIBLITY','TOTAL_PIT_STOPS_PER_RACE','ACTIVE_DRIVER','ACTIVE_CONSTRUCTOR', 'POSITION']] - - # filter covariates on active drivers and constructors - # use fil_cov as short for "filtered_covariates" - fil_cov = covariates[(covariates['ACTIVE_DRIVER']==1)&(covariates['ACTIVE_CONSTRUCTOR']==1)] - - # Encode categorical variables using LabelEncoder - # TODO: we'll update this to both ohe in the future for non-ordinal variables! - le = LabelEncoder() - fil_cov['CIRCUIT_NAME'] = le.fit_transform(fil_cov['CIRCUIT_NAME']) - fil_cov['CONSTRUCTOR_NAME'] = le.fit_transform(fil_cov['CONSTRUCTOR_NAME']) - fil_cov['DRIVER'] = le.fit_transform(fil_cov['DRIVER']) - fil_cov['TOTAL_PIT_STOPS_PER_RACE'] = le.fit_transform(fil_cov['TOTAL_PIT_STOPS_PER_RACE']) - - # Simply target variable "position" to represent 3 meaningful categories in Formula1 - # 1. Podium position 2. Points for team 3. Nothing - no podium or points! - def position_index(x): - if x<4: - return 1 - if x>10: - return 3 - else : - return 2 - - # we are dropping the columns that we filtered on in addition to our training variable - encoded_data = fil_cov.drop(['ACTIVE_DRIVER','ACTIVE_CONSTRUCTOR'],1) - encoded_data['POSITION_LABEL']= encoded_data['POSITION'].apply(lambda x: position_index(x)) - encoded_data_grouped_target = encoded_data.drop(['POSITION'],1) - - return encoded_data_grouped_target - ``` -2. Execute the following in the command bar: - ```bash - dbt run --select covariate_encoding - ``` -3. In this code, we are using a ton of functions from libraries! This is really cool, because we can utilize code other people have developed and bring it into our project simply by using the `import` function. [Scikit-learn](https://scikit-learn.org/stable/), “sklearn” for short, is an extremely popular data science library. Sklearn contains a wide range of machine learning techniques, including supervised and unsupervised learning algorithms, feature scaling and imputation, as well as tools model evaluation and selection. We’ll be using Sklearn for both preparing our covariates and creating models (our next section). -4. Our dataset is pretty small data so we are good to use pandas and `sklearn`. If you have larger data for your own project in mind, consider `dask` or `category_encoders`. -5. Breaking it down a bit more: - - We’re selecting a subset of variables that will be used as predictors for a driver’s position. - - Filter the dataset to only include rows using the active driver and constructor flags we created in the last step. - - The next step is to use the `LabelEncoder` from scikit-learn to convert the categorical variables `CIRCUIT_NAME`, `CONSTRUCTOR_NAME`, `DRIVER`, and `TOTAL_PIT_STOPS_PER_RACE` into numerical values. - - Create a new variable called `POSITION_LABEL`, which is a derived from our position variable. - - 💭 Why are we changing our position variable? There are 20 total positions in Formula 1 and we are grouping them together to simplify the classification and improve performance. We also want to demonstrate you can create a new function within your dbt model! - - Our new `position_label` variable has meaning: - - In Formula1 if you are in: - - Top 3 you get a “podium” position - - Top 10 you gain points that add to your overall season total - - Below top 10 you get no points! - - We are mapping our original variable position to `position_label` to the corresponding places above to 1,2, and 3 respectively. - - Drop the active driver and constructor flags since they were filter criteria and additionally drop our original position variable. - -## Splitting into training and testing datasets - -Now that we’ve cleaned and encoded our data, we are going to further split in by time. In this step, we will create dataframes to use for training and prediction. We’ll be creating two dataframes 1) using data from 2010-2019 for training, and 2) data from 2020 for new prediction inferences. We’ll create variables called `start_year` and `end_year` so we aren’t filtering on hardcasted values (and can more easily swap them out in the future if we want to retrain our model on different timeframes). - -1. Create a file called `train_test_dataset` copy and save the following code: - ```python - import pandas as pd - - def model(dbt, session): - - # dbt configuration - dbt.config(packages=["pandas"], tags="train") - - # get upstream data - encoding = dbt.ref("covariate_encoding").to_pandas() - - # provide years so we do not hardcode dates in filter command - start_year=2010 - end_year=2019 - - # describe the data for a full decade - train_test_dataset = encoding.loc[encoding['RACE_YEAR'].between(start_year, end_year)] - - return train_test_dataset - ``` - -2. Create a file called `hold_out_dataset_for_prediction` copy and save the following code below. Now we’ll have a dataset with only the year 2020 that we’ll keep as a hold out set that we are going to use similar to a deployment use case. - ```python - import pandas as pd - - def model(dbt, session): - # dbt configuration - dbt.config(packages=["pandas"], tags="predict") - - # get upstream data - encoding = dbt.ref("covariate_encoding").to_pandas() - - # variable for year instead of hardcoding it - year=2020 - - # filter the data based on the specified year - hold_out_dataset = encoding.loc[encoding['RACE_YEAR'] == year] - - return hold_out_dataset - ``` -3. Execute the following in the command bar: - ```bash - dbt run --select train_test_dataset hold_out_dataset_for_prediction - ``` - To run our temporal data split models, we can use this syntax in the command line to run them both at once. Make sure you use a *space* [syntax](/reference/node-selection/syntax) between the model names to indicate you want to run both! -4. **Commit and push** our changes to keep saving our work as we go using `ml data prep and splits` before moving on. - -👏 Now that we’ve finished our machine learning prep work we can move onto the fun part — training and prediction! diff --git a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/12-machine-learning-training-testing.md b/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/12-machine-learning-training-testing.md deleted file mode 100644 index 8b353a85fa3..00000000000 --- a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/12-machine-learning-training-testing.md +++ /dev/null @@ -1,251 +0,0 @@ ---- -title: "Machine Learning: training and prediction " -id: "12-machine-learning-training-prediction" -description: "Machine Learning: training and prediction" ---- - -We’re ready to start training a model to predict the driver’s position. Now is a good time to pause and take a step back and say, usually in ML projects you’ll try multiple algorithms during development and use an evaluation method such as cross validation to determine which algorithm to use. You can definitely do this in your dbt project, but for the content of this lab we’ll have decided on using a logistic regression to predict position (we actually tried some other algorithms using cross validation outside of this lab such as k-nearest neighbors and a support vector classifier but that didn’t perform as well as the logistic regression and a decision tree that overfit). - -There are 3 areas to break down as we go since we are working at the intersection all within one model file: -1. Machine Learning -2. Snowflake and Snowpark -3. dbt Python models - -If you haven’t seen code like this before or use joblib files to save machine learning models, we’ll be going over them at a high level and you can explore the links for more technical in-depth along the way! Because Snowflake and dbt have abstracted away a lot of the nitty gritty about serialization and storing our model object to be called again, we won’t go into too much detail here. There’s *a lot* going on here so take it at your pace! - -## Training and saving a machine learning model - -1. Project organization remains key, so let’s make a new subfolder called `train_predict` under the `ml` folder. -2. Now create a new file called `train_test_position` and copy and save the following code: - - ```python - import snowflake.snowpark.functions as F - from sklearn.model_selection import train_test_split - import pandas as pd - from sklearn.metrics import confusion_matrix, balanced_accuracy_score - import io - from sklearn.linear_model import LogisticRegression - from joblib import dump, load - import joblib - import logging - import sys - from joblib import dump, load - - logger = logging.getLogger("mylog") - - def save_file(session, model, path, dest_filename): - input_stream = io.BytesIO() - joblib.dump(model, input_stream) - session._conn.upload_stream(input_stream, path, dest_filename) - return "successfully created file: " + path - - def model(dbt, session): - dbt.config( - packages = ['numpy','scikit-learn','pandas','numpy','joblib','cachetools'], - materialized = "table", - tags = "train" - ) - # Create a stage in Snowflake to save our model file - session.sql('create or replace stage MODELSTAGE').collect() - - #session._use_scoped_temp_objects = False - version = "1.0" - logger.info('Model training version: ' + version) - - # read in our training and testing upstream dataset - test_train_df = dbt.ref("train_test_dataset") - - # cast snowpark df to pandas df - test_train_pd_df = test_train_df.to_pandas() - target_col = "POSITION_LABEL" - - # split out covariate predictors, x, from our target column position_label, y. - split_X = test_train_pd_df.drop([target_col], axis=1) - split_y = test_train_pd_df[target_col] - - # Split out our training and test data into proportions - X_train, X_test, y_train, y_test = train_test_split(split_X, split_y, train_size=0.7, random_state=42) - train = [X_train, y_train] - test = [X_test, y_test] - # now we are only training our one model to deploy - # we are keeping the focus on the workflows and not algorithms for this lab! - model = LogisticRegression() - - # fit the preprocessing pipeline and the model together - model.fit(X_train, y_train) - y_pred = model.predict_proba(X_test)[:,1] - predictions = [round(value) for value in y_pred] - balanced_accuracy = balanced_accuracy_score(y_test, predictions) - - # Save the model to a stage - save_file(session, model, "@MODELSTAGE/driver_position_"+version, "driver_position_"+version+".joblib" ) - logger.info('Model artifact:' + "@MODELSTAGE/driver_position_"+version+".joblib") - - # Take our pandas training and testing dataframes and put them back into snowpark dataframes - snowpark_train_df = session.write_pandas(pd.concat(train, axis=1, join='inner'), "train_table", auto_create_table=True, create_temp_table=True) - snowpark_test_df = session.write_pandas(pd.concat(test, axis=1, join='inner'), "test_table", auto_create_table=True, create_temp_table=True) - - # Union our training and testing data together and add a column indicating train vs test rows - return snowpark_train_df.with_column("DATASET_TYPE", F.lit("train")).union(snowpark_test_df.with_column("DATASET_TYPE", F.lit("test"))) - ``` - -3. Execute the following in the command bar: - ```bash - dbt run --select train_test_position - ``` -4. Breaking down our Python script here: - - We’re importing some helpful libraries. - - Defining a function called `save_file()` that takes four parameters: `session`, `model`, `path` and `dest_filename` that will save our logistic regression model file. - - `session` — an object representing a connection to Snowflake. - - `model` — an object that needs to be saved. In this case, it's a Python object that is a scikit-learn that can be serialized with joblib. - - `path` — a string representing the directory or bucket location where the file should be saved. - - `dest_filename` — a string representing the desired name of the file. - - Creating our dbt model - - Within this model we are creating a stage called `MODELSTAGE` to place our logistic regression `joblib` model file. This is really important since we need a place to keep our model to reuse and want to ensure it's there. When using Snowpark commands, it's common to see the `.collect()` method to ensure the action is performed. Think of the session as our “start” and collect as our “end” when [working with Snowpark](https://docs.snowflake.com/en/developer-guide/snowpark/python/working-with-dataframes.html) (you can use other ending methods other than collect). - - Using `.ref()` to connect into our `train_test_dataset` model. - - Now we see the machine learning part of our analysis: - - Create new dataframes for our prediction features from our target variable `position_label`. - - Split our dataset into 70% training (and 30% testing), train_size=0.7 with a `random_state` specified to have repeatable results. - - Specify our model is a logistic regression. - - Fit our model. In a logistic regression this means finding the coefficients that will give the least classification error. - - Round our predictions to the nearest integer since logistic regression creates a probability between for each class and calculate a balanced accuracy to account for imbalances in the target variable. - - Right now our model is only in memory, so we need to use our nifty function `save_file` to save our model file to our Snowflake stage. We save our model as a joblib file so Snowpark can easily call this model object back to create predictions. We really don’t need to know much else as a data practitioner unless we want to. It’s worth noting that joblib files aren’t able to be queried directly by SQL. To do this, we would need to transform the joblib file to an SQL querable format such as JSON or CSV (out of scope for this workshop). - - Finally we want to return our dataframe, but create a new column indicating what rows were used for training and those for training. -5. Viewing our output of this model: - - -6. Let’s pop back over to Snowflake and check that our logistic regression model has been stored in our `MODELSTAGE` using the command: - ```sql - list @modelstage - ``` - - -7. To investigate the commands run as part of `train_test_position` script, navigate to Snowflake query history to view it **Activity > Query History**. We can view the portions of query that we wrote such as `create or replace stage MODELSTAGE`, but we also see additional queries that Snowflake uses to interpret python code. - - -## Predicting on new data - -1. Create a new file called `predict_position` and copy and save the following code: - ```python - import logging - import joblib - import pandas as pd - import os - from snowflake.snowpark import types as T - - DB_STAGE = 'MODELSTAGE' - version = '1.0' - # The name of the model file - model_file_path = 'driver_position_'+version - model_file_packaged = 'driver_position_'+version+'.joblib' - - # This is a local directory, used for storing the various artifacts locally - LOCAL_TEMP_DIR = f'/tmp/driver_position' - DOWNLOAD_DIR = os.path.join(LOCAL_TEMP_DIR, 'download') - TARGET_MODEL_DIR_PATH = os.path.join(LOCAL_TEMP_DIR, 'ml_model') - TARGET_LIB_PATH = os.path.join(LOCAL_TEMP_DIR, 'lib') - - # The feature columns that were used during model training - # and that will be used during prediction - FEATURE_COLS = [ - "RACE_YEAR" - ,"CIRCUIT_NAME" - ,"GRID" - ,"CONSTRUCTOR_NAME" - ,"DRIVER" - ,"DRIVERS_AGE_YEARS" - ,"DRIVER_CONFIDENCE" - ,"CONSTRUCTOR_RELAIBLITY" - ,"TOTAL_PIT_STOPS_PER_RACE"] - - def register_udf_for_prediction(p_predictor ,p_session ,p_dbt): - - # The prediction udf - - def predict_position(p_df: T.PandasDataFrame[int, int, int, int, - int, int, int, int, int]) -> T.PandasSeries[int]: - # Snowpark currently does not set the column name in the input dataframe - # The default col names are like 0,1,2,... Hence we need to reset the column - # names to the features that we initially used for training. - p_df.columns = [*FEATURE_COLS] - - # Perform prediction. this returns an array object - pred_array = p_predictor.predict(p_df) - # Convert to series - df_predicted = pd.Series(pred_array) - return df_predicted - - # The list of packages that will be used by UDF - udf_packages = p_dbt.config.get('packages') - - predict_position_udf = p_session.udf.register( - predict_position - ,name=f'predict_position' - ,packages = udf_packages - ) - return predict_position_udf - - def download_models_and_libs_from_stage(p_session): - p_session.file.get(f'@{DB_STAGE}/{model_file_path}/{model_file_packaged}', DOWNLOAD_DIR) - - def load_model(p_session): - # Load the model and initialize the predictor - model_fl_path = os.path.join(DOWNLOAD_DIR, model_file_packaged) - predictor = joblib.load(model_fl_path) - return predictor - - # ------------------------------- - def model(dbt, session): - dbt.config( - packages = ['snowflake-snowpark-python' ,'scipy','scikit-learn' ,'pandas' ,'numpy'], - materialized = "table", - tags = "predict" - ) - session._use_scoped_temp_objects = False - download_models_and_libs_from_stage(session) - predictor = load_model(session) - predict_position_udf = register_udf_for_prediction(predictor, session ,dbt) - - # Retrieve the data, and perform the prediction - hold_out_df = (dbt.ref("hold_out_dataset_for_prediction") - .select(*FEATURE_COLS) - ) - - # Perform prediction. - new_predictions_df = hold_out_df.withColumn("position_predicted" - ,predict_position_udf(*FEATURE_COLS) - ) - - return new_predictions_df - ``` -2. Execute the following in the command bar: - ```bash - dbt run --select predict_position - ``` -3. **Commit and push** our changes to keep saving our work as we go using the commit message `logistic regression model training and application` before moving on. -4. At a high level in this script, we are: - - Retrieving our staged logistic regression model - - Loading the model in - - Placing the model within a user defined function (UDF) to call in line predictions on our driver’s position -5. At a more detailed level: - - Import our libraries. - - Create variables to reference back to the `MODELSTAGE` we just created and stored our model to. - - The temporary file paths we created might look intimidating, but all we’re doing here is programmatically using an initial file path and adding to it to create the following directories: - - LOCAL_TEMP_DIR ➡️ /tmp/driver_position - - DOWNLOAD_DIR ➡️ /tmp/driver_position/download - - TARGET_MODEL_DIR_PATH ➡️ /tmp/driver_position/ml_model - - TARGET_LIB_PATH ➡️ /tmp/driver_position/lib - - Provide a list of our feature columns that we used for model training and will now be used on new data for prediction. - - Next, we are creating our main function `register_udf_for_prediction(p_predictor ,p_session ,p_dbt):`. This function is used to register a user-defined function (UDF) that performs the machine learning prediction. It takes three parameters: `p_predictor` is an instance of the machine learning model, `p_session` is an instance of the Snowflake session, and `p_dbt` is an instance of the dbt library. The function creates a UDF named `predict_churn` which takes a pandas dataframe with the input features and returns a pandas series with the predictions. - - ⚠️ Pay close attention to the whitespace here. We are using a function within a function for this script. - - We have 2 simple functions that are programmatically retrieving our file paths to first get our stored model out of our `MODELSTAGE` and downloaded into the session `download_models_and_libs_from_stage` and then to load the contents of our model in (parameters) in `load_model` to use for prediction. - - Take the model we loaded in and call it `predictor` and wrap it in a UDF. - - Return our dataframe with both the features used to predict and the new label. - -🧠 Another way to read this script is from the bottom up. This can help us progressively see what is going into our final dbt model and work backwards to see how the other functions are being referenced. - -6. Let’s take a look at our predicted position alongside our feature variables. Open a new scratchpad and use the following query. I chose to order by the prediction of who would obtain a podium position: - ```sql - select * from {{ ref('predict_position') }} order by position_predicted - ``` -7. We can see that we created predictions in our final dataset, we are ready to move on to testing! diff --git a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/13-testing.md b/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/13-testing.md deleted file mode 100644 index bcda9a775fb..00000000000 --- a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/13-testing.md +++ /dev/null @@ -1,136 +0,0 @@ ---- -title: "Testing" -id: "13-testing" -description: "Testing" ---- -We have now completed building all the models for today’s lab, but how do we know if they meet our assertions? Put another way, how do we know the quality of our data models are any good? This brings us to testing! - -We test data models for mainly two reasons: - -- Ensure that our source data is clean on ingestion before we start data modeling/transformation (aka avoid garbage in, garbage out problem). -- Make sure we don’t introduce bugs in the transformation code we wrote (stop ourselves from creating bad joins/fanouts). - -Testing in dbt comes in two flavors: [generic](/docs/build/tests#generic-tests) and [singular](/docs/build/tests#singular-tests). - -You define them in a test block (similar to a macro) and once defined, you can reference them by name in your `.yml` files (applying them to models, columns, sources, snapshots, and seeds). - -You might be wondering: *what about testing Python models?* - -Since the output of our Python models are tables, we can test SQL and Python models the same way! We don’t have to worry about any syntax differences when testing SQL versus Python data models. This means we use `.yml` and `.sql` files to test our entities (tables, views, etc.). Under the hood, dbt is running an SQL query on our tables to see if they meet assertions. If no rows are returned, dbt will surface a passed test. Conversely, if a test results in returned rows, it will fail or warn depending on the configuration (more on that later). - -## Generic tests - -1. To implement generic out-of-the-box tests dbt comes with, we can use YAML files to specify information about our models. To add generic tests to our aggregates model, create a file called `aggregates.yml`, copy the code block below into the file, and save. - - - ```yaml - version: 2 - - models: - - name: fastest_pit_stops_by_constructor - description: Use the python .describe() method to retrieve summary statistics table about pit stops by constructor. Sort by average stop time ascending so the first row returns the fastest constructor. - columns: - - name: constructor_name - description: team that makes the car - tests: - - unique - - - name: lap_times_moving_avg - description: Use the python .rolling() method to calculate the 5 year rolling average of pit stop times alongside the average for each year. - columns: - - name: race_year - description: year of the race - tests: - - relationships: - to: ref('int_lap_times_years') - field: race_year - ``` - -2. Let’s unpack the code we have here. We have both our aggregates models with the model name to know the object we are referencing and the description of the model that we’ll populate in our documentation. At the column level (a level below our model), we are providing the column name followed by our tests. We want to ensure our `constructor_name` is unique since we used a pandas `groupby` on `constructor_name` in the model `fastest_pit_stops_by_constructor`. Next, we want to ensure our `race_year` has referential integrity from the model we selected from `int_lap_times_years` into our subsequent `lap_times_moving_avg` model. -3. Finally, if we want to see how tests were deployed on sources and SQL models, we can look at other files in our project such as the `f1_sources.yml` we created in our Sources and staging section. - -## Using macros for testing - -1. Under your `macros` folder, create a new file and name it `test_all_values_gte_zero.sql`. Copy the code block below and save the file. For clarity, “gte” is an abbreviation for greater than or equal to. - - - ```sql - {% macro test_all_values_gte_zero(table, column) %} - - select * from {{ ref(table) }} where {{ column }} < 0 - - {% endmacro %} - ``` - -2. Macros in Jinja are pieces of code that can be reused multiple times in our SQL models — they are analogous to "functions" in other programming languages, and are extremely useful if you find yourself repeating code across multiple models. -3. We use the `{% macro %}` to indicate the start of the macro and `{% endmacro %}` for the end. The text after the beginning of the macro block is the name we are giving the macro to later call it. In this case, our macro is called `test_all_values_gte_zero`. Macros take in *arguments* to pass through, in this case the `table` and the `column`. In the body of the macro, we see an SQL statement that is using the `ref` function to dynamically select the table and then the column. You can always view macros without having to run them by using `dbt run-operation`. You can learn more [here](https://docs.getdbt.com/reference/commands/run-operation). -4. Great, now we want to reference this macro as a test! Let’s create a new test file called `macro_pit_stops_mean_is_positive.sql` in our `tests` folder. - - - -5. Copy the following code into the file and save: - - ```sql - {{ - config( - enabled=true, - severity='warn', - tags = ['bi'] - ) - }} - - {{ test_all_values_gte_zero('fastest_pit_stops_by_constructor', 'mean') }} - ``` - -6. In our testing file, we are applying some configurations to the test including `enabled`, which is an optional configuration for disabling models, seeds, snapshots, and tests. Our severity is set to `warn` instead of `error`, which means our pipeline will still continue to run. We have tagged our test with `bi` since we are applying this test to one of our bi models. - -Then, in our final line, we are calling the `test_all_values_gte_zero` macro that takes in our table and column arguments and inputting our table `'fastest_pit_stops_by_constructor'` and the column `'mean'`. - -## Custom singular tests to validate Python models - -The simplest way to define a test is by writing the exact SQL that will return failing records. We call these "singular" tests, because they're one-off assertions usable for a single purpose. - -These tests are defined in `.sql` files, typically in your `tests` directory (as defined by your test-paths config). You can use Jinja in SQL models (including ref and source) in the test definition, just like you can when creating models. Each `.sql` file contains one select statement, and it defines one test. - -Let’s add a custom test that asserts that the moving average of the lap time over the last 5 years is greater than zero (it’s impossible to have time less than 0!). It is easy to assume if this is not the case the data has been corrupted. - -1. Create a file `lap_times_moving_avg_assert_positive_or_null.sql` under the `tests` folder. - - -2. Copy the following code and save the file: - - ```sql - {{ - config( - enabled=true, - severity='error', - tags = ['bi'] - ) - }} - - with lap_times_moving_avg as ( select * from {{ ref('lap_times_moving_avg') }} ) - - select * - from lap_times_moving_avg - where lap_moving_avg_5_years < 0 and lap_moving_avg_5_years is not null - ``` - -## Putting all our tests together - -1. Time to run our tests! Altogether, we have created 4 tests for our 2 Python models: - - `fastest_pit_stops_by_constructor` - - Unique `constructor_name` - - Lap times are greater than 0 or null (to allow for the first leading values in a rolling calculation) - - `lap_times_moving_avg` - - Referential test on `race_year` - - Mean pit stop times are greater than or equal to 0 (no negative time values) -2. To run the tests on both our models, we can use this syntax in the command line to run them both at once, similar to how we did our data splits earlier. - Execute the following in the command bar: - ```bash - dbt test --select fastest_pit_stops_by_constructor lap_times_moving_avg - ``` - - -3. All 4 of our tests passed (yay for clean data)! To understand the SQL being run against each of our tables, we can click into the details of the test. -4. Navigating into the **Details** of the `unique_fastest_pit_stops_by_constructor_name`, we can see that each line `constructor_name` should only have one row. - \ No newline at end of file diff --git a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/14-documentation.md b/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/14-documentation.md deleted file mode 100644 index 95ec8ad242f..00000000000 --- a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/14-documentation.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "Documentation" -id: "14-documentation" -description: "Documentation" ---- -When it comes to documentation, dbt brings together both column and model level descriptions that you can provide as well as details from your Snowflake information schema in a static site for consumption by other data team members and stakeholders. - -We are going to revisit 2 areas of our project to understand our documentation: - -- `intermediate.md` file -- `dbt_project.yml` file - -To start, let’s look back at our `intermediate.md` file. We can see that we provided multi-line descriptions for the models in our intermediate models using [docs blocks](/docs/collaborate/documentation#using-docs-blocks). Then we reference these docs blocks in our `.yml` file. Building descriptions with doc blocks in Markdown files gives you the ability to format your descriptions with Markdown and are particularly helpful when building long descriptions, either at the column or model level. In our `dbt_project.yml`, we added `node_colors` at folder levels. - -1. To see all these pieces come together, execute this in the command bar: - ```bash - dbt docs generate - ``` - This will generate the documentation for your project. Click the book button, as shown in the screenshot below to access the docs. - - -2. Go to our project area and view `int_results`. View the description that we created in our doc block. - - -3. View the mini-lineage that looks at the model we are currently selected on (`int_results` in this case). - - -4. In our `dbt_project.yml`, we configured `node_colors` depending on the file directory. Starting in dbt v1.3, we can see how our lineage in our docs looks. By color coding your project, it can help you cluster together similar models or steps and more easily troubleshoot. - \ No newline at end of file diff --git a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/15-deployment.md b/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/15-deployment.md deleted file mode 100644 index d9cedb60861..00000000000 --- a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/15-deployment.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: "Deployment" -id: "15-deployment" -description: "Deployment" ---- - -Before we jump into deploying our code, let's have a quick primer on environments. Up to this point, all of the work we've done in the dbt Cloud IDE has been in our development environment, with code committed to a feature branch and the models we've built created in our development schema in Snowflake as defined in our Development environment connection. Doing this work on a feature branch, allows us to separate our code from what other coworkers are building and code that is already deemed production ready. Building models in a development schema in Snowflake allows us to separate the database objects we might still be modifying and testing from the database objects running production dashboards or other downstream dependencies. Together, the combination of a Git branch and Snowflake database objects form our environment. - -Now that we've completed testing and documenting our work, we're ready to deploy our code from our development environment to our production environment and this involves two steps: - -- Promoting code from our feature branch to the production branch in our repository. - - Generally, the production branch is going to be named your main branch and there's a review process to go through before merging code to the main branch of a repository. Here we are going to merge without review for ease of this workshop. -- Deploying code to our production environment. - - Once our code is merged to the main branch, we'll need to run dbt in our production environment to build all of our models and run all of our tests. This will allow us to build production-ready objects into our production environment in Snowflake. Luckily for us, the Partner Connect flow has already created our deployment environment and job to facilitate this step. - -1. Before getting started, let's make sure that we've committed all of our work to our feature branch. If you still have work to commit, you'll be able to select the **Commit and push**, provide a message, and then select **Commit** again. -2. Once all of your work is committed, the git workflow button will now appear as **Merge to main**. Select **Merge to main** and the merge process will automatically run in the background. - - -3. When it's completed, you should see the git button read **Create branch** and the branch you're currently looking at will become **main**. -4. Now that all of our development work has been merged to the main branch, we can build our deployment job. Given that our production environment and production job were created automatically for us through Partner Connect, all we need to do here is update some default configurations to meet our needs. -5. In the menu, select **Deploy** **> Environments** - - -6. You should see two environments listed and you'll want to select the **Deployment** environment then **Settings** to modify it. -7. Before making any changes, let's touch on what is defined within this environment. The Snowflake connection shows the credentials that dbt Cloud is using for this environment and in our case they are the same as what was created for us through Partner Connect. Our deployment job will build in our `PC_DBT_DB` database and use the default Partner Connect role and warehouse to do so. The deployment credentials section also uses the info that was created in our Partner Connect job to create the credential connection. However, it is using the same default schema that we've been using as the schema for our development environment. -8. Let's update the schema to create a new schema specifically for our production environment. Click **Edit** to allow you to modify the existing field values. Navigate to **Deployment Credentials >** **schema.** -9. Update the schema name to **production**. Remember to select **Save** after you've made the change. - -10. By updating the schema for our production environment to **production**, it ensures that our deployment job for this environment will build our dbt models in the **production** schema within the `PC_DBT_DB` database as defined in the Snowflake Connection section. -11. Now let's switch over to our production job. Click on the deploy tab again and then select **Jobs**. You should see an existing and preconfigured **Partner Connect Trial Job**. Similar to the environment, click on the job, then select **Settings** to modify it. Let's take a look at the job to understand it before making changes. - - - The Environment section is what connects this job with the environment we want it to run in. This job is already defaulted to use the Deployment environment that we just updated and the rest of the settings we can keep as is. - - The Execution settings section gives us the option to generate docs, run source freshness, and defer to a previous run state. For the purposes of our lab, we're going to keep these settings as is as well and stick with just generating docs. - - The Commands section is where we specify exactly which commands we want to run during this job, and we also want to keep this as is. We want our seed to be uploaded first, then run our models, and finally test them. The order of this is important as well, considering that we need our seed to be created before we can run our incremental model, and we need our models to be created before we can test them. - - Finally, we have the Triggers section, where we have a number of different options for scheduling our job. Given that our data isn't updating regularly here and we're running this job manually for now, we're also going to leave this section alone. - - So, what are we changing then? Just the name! Click **Edit** to allow you to make changes. Then update the name of the job to **Production Job** to denote this as our production deployment job. After that's done, click **Save**. -12. Now let's go to run our job. Clicking on the job name in the path at the top of the screen will take you back to the job run history page where you'll be able to click **Run run** to kick off the job. If you encounter any job failures, try running the job again before further troubleshooting. - - - -13. Let's go over to Snowflake to confirm that everything built as expected in our production schema. Refresh the database objects in your Snowflake account and you should see the production schema now within our default Partner Connect database. If you click into the schema and everything ran successfully, you should be able to see all of the models we developed. - - -## Conclusion - -Fantastic! You’ve finished the workshop! We hope you feel empowered in using both SQL and Python in your dbt Cloud workflows with Snowflake. Having a reliable pipeline to surface both analytics and machine learning is crucial to creating tangible business value from your data. - -For more help and information join our [dbt community Slack](https://www.getdbt.com/community/) which contains more than 50,000 data practitioners today. We have a dedicated slack channel #db-snowflake to Snowflake related content. Happy dbt'ing! \ No newline at end of file diff --git a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/2-snowflake-configuration.md b/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/2-snowflake-configuration.md deleted file mode 100644 index e864c363a44..00000000000 --- a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/2-snowflake-configuration.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: "Configure Snowflake" -id: "2-snowflake-configuration" -description: "Configure Snowflake" ---- - - -1. Log in to your trial Snowflake account. You can [sign up for a Snowflake Trial Account using this form](https://signup.snowflake.com/) if you don’t have one. -2. Ensure that your account is set up using **AWS** in the **US East (N. Virginia)**. We will be copying the data from a public AWS S3 bucket hosted by dbt Labs in the us-east-1 region. By ensuring our Snowflake environment setup matches our bucket region, we avoid any multi-region data copy and retrieval latency issues. - - - -3. After creating your account and verifying it from your sign-up email, Snowflake will direct you back to the UI called Snowsight. - -4. When Snowsight first opens, your window should look like the following, with you logged in as the ACCOUNTADMIN with demo worksheets open: - - - - -5. Navigate to **Admin > Billing & Terms**. Click **Enable > Acknowledge & Continue** to enable Anaconda Python Packages to run in Snowflake. - - - - - -6. Finally, create a new Worksheet by selecting **+ Worksheet** in the upper right corner. - diff --git a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/3-connect-to-data-source.md b/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/3-connect-to-data-source.md deleted file mode 100644 index 9a41e7f45c5..00000000000 --- a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/3-connect-to-data-source.md +++ /dev/null @@ -1,192 +0,0 @@ ---- -title: "Connect to data source" -id: "3-connect-to-data-source" -description: "Connect to data source" ---- - -We need to obtain our data source by copying our Formula 1 data into Snowflake tables from a public S3 bucket that dbt Labs hosts. - -1. When a new Snowflake account is created, there should be a preconfigured warehouse in your account named `COMPUTE_WH`. -2. If for any reason your account doesn’t have this warehouse, we can create a warehouse using the following script: - - ```sql - create or replace warehouse COMPUTE_WH with warehouse_size=XSMALL - ``` -3. Rename the worksheet to `data setup script` since we will be placing code in this worksheet to ingest the Formula 1 data. Make sure you are still logged in as the **ACCOUNTADMIN** and select the **COMPUTE_WH** warehouse. - - - -4. Copy the following code into the main body of the Snowflake worksheet. You can also find this setup script under the `setup` folder in the [Git repository](https://github.com/dbt-labs/python-snowpark-formula1/blob/main/setup/setup_script_s3_to_snowflake.sql). The script is long since it's bring in all of the data we'll need today! - - ```sql - -- create and define our formula1 database - create or replace database formula1; - use database formula1; - create or replace schema raw; - use schema raw; - - -- define our file format for reading in the csvs - create or replace file format csvformat - type = csv - field_delimiter =',' - field_optionally_enclosed_by = '"', - skip_header=1; - - -- - create or replace stage formula1_stage - file_format = csvformat - url = 's3://formula1-dbt-cloud-python-demo/formula1-kaggle-data/'; - - -- load in the 8 tables we need for our demo - -- we are first creating the table then copying our data in from s3 - -- think of this as an empty container or shell that we are then filling - create or replace table formula1.raw.circuits ( - CIRCUITID NUMBER(38,0), - CIRCUITREF VARCHAR(16777216), - NAME VARCHAR(16777216), - LOCATION VARCHAR(16777216), - COUNTRY VARCHAR(16777216), - LAT FLOAT, - LNG FLOAT, - ALT NUMBER(38,0), - URL VARCHAR(16777216) - ); - -- copy our data from public s3 bucket into our tables - copy into circuits - from @formula1_stage/circuits.csv - on_error='continue'; - - create or replace table formula1.raw.constructors ( - CONSTRUCTORID NUMBER(38,0), - CONSTRUCTORREF VARCHAR(16777216), - NAME VARCHAR(16777216), - NATIONALITY VARCHAR(16777216), - URL VARCHAR(16777216) - ); - copy into constructors - from @formula1_stage/constructors.csv - on_error='continue'; - - create or replace table formula1.raw.drivers ( - DRIVERID NUMBER(38,0), - DRIVERREF VARCHAR(16777216), - NUMBER VARCHAR(16777216), - CODE VARCHAR(16777216), - FORENAME VARCHAR(16777216), - SURNAME VARCHAR(16777216), - DOB DATE, - NATIONALITY VARCHAR(16777216), - URL VARCHAR(16777216) - ); - copy into drivers - from @formula1_stage/drivers.csv - on_error='continue'; - - create or replace table formula1.raw.lap_times ( - RACEID NUMBER(38,0), - DRIVERID NUMBER(38,0), - LAP NUMBER(38,0), - POSITION FLOAT, - TIME VARCHAR(16777216), - MILLISECONDS NUMBER(38,0) - ); - copy into lap_times - from @formula1_stage/lap_times.csv - on_error='continue'; - - create or replace table formula1.raw.pit_stops ( - RACEID NUMBER(38,0), - DRIVERID NUMBER(38,0), - STOP NUMBER(38,0), - LAP NUMBER(38,0), - TIME VARCHAR(16777216), - DURATION VARCHAR(16777216), - MILLISECONDS NUMBER(38,0) - ); - copy into pit_stops - from @formula1_stage/pit_stops.csv - on_error='continue'; - - create or replace table formula1.raw.races ( - RACEID NUMBER(38,0), - YEAR NUMBER(38,0), - ROUND NUMBER(38,0), - CIRCUITID NUMBER(38,0), - NAME VARCHAR(16777216), - DATE DATE, - TIME VARCHAR(16777216), - URL VARCHAR(16777216), - FP1_DATE VARCHAR(16777216), - FP1_TIME VARCHAR(16777216), - FP2_DATE VARCHAR(16777216), - FP2_TIME VARCHAR(16777216), - FP3_DATE VARCHAR(16777216), - FP3_TIME VARCHAR(16777216), - QUALI_DATE VARCHAR(16777216), - QUALI_TIME VARCHAR(16777216), - SPRINT_DATE VARCHAR(16777216), - SPRINT_TIME VARCHAR(16777216) - ); - copy into races - from @formula1_stage/races.csv - on_error='continue'; - - create or replace table formula1.raw.results ( - RESULTID NUMBER(38,0), - RACEID NUMBER(38,0), - DRIVERID NUMBER(38,0), - CONSTRUCTORID NUMBER(38,0), - NUMBER NUMBER(38,0), - GRID NUMBER(38,0), - POSITION FLOAT, - POSITIONTEXT VARCHAR(16777216), - POSITIONORDER NUMBER(38,0), - POINTS NUMBER(38,0), - LAPS NUMBER(38,0), - TIME VARCHAR(16777216), - MILLISECONDS NUMBER(38,0), - FASTESTLAP NUMBER(38,0), - RANK NUMBER(38,0), - FASTESTLAPTIME VARCHAR(16777216), - FASTESTLAPSPEED FLOAT, - STATUSID NUMBER(38,0) - ); - copy into results - from @formula1_stage/results.csv - on_error='continue'; - - create or replace table formula1.raw.status ( - STATUSID NUMBER(38,0), - STATUS VARCHAR(16777216) - ); - copy into status - from @formula1_stage/status.csv - on_error='continue'; - - ``` -5. Ensure all the commands are selected before running the query — an easy way to do this is to use Ctrl-a to highlight all of the code in the worksheet. Select **run** (blue triangle icon). Notice how the dot next to your **COMPUTE_WH** turns from gray to green as you run the query. The **status** table is the final table of all 8 tables loaded in. - - - -6. Let’s unpack that pretty long query we ran into component parts. We ran this query to load in our 8 Formula 1 tables from a public S3 bucket. To do this, we: - - Created a new database called `formula1` and a schema called `raw` to place our raw (untransformed) data into. - - Defined our file format for our CSV files. Importantly, here we use a parameter called `field_optionally_enclosed_by =` since the string columns in our Formula 1 csv files use quotes. Quotes are used around string values to avoid parsing issues where commas `,` and new lines `/n` in data values could cause data loading errors. - - Created a stage to locate our data we are going to load in. Snowflake Stages are locations where data files are stored. Stages are used to both load and unload data to and from Snowflake locations. Here we are using an external stage, by referencing an S3 bucket. - - Created our tables for our data to be copied into. These are empty tables with the column name and data type. Think of this as creating an empty container that the data will then fill into. - - Used the `copy into` statement for each of our tables. We reference our staged location we created and upon loading errors continue to load in the rest of the data. You should not have data loading errors but if you do, those rows will be skipped and Snowflake will tell you which rows caused errors - -7. Now let's take a look at some of our cool Formula 1 data we just loaded up! - 1. Create a new worksheet by selecting the **+** then **New Worksheet**. - - 2. Navigate to **Database > Formula1 > RAW > Tables**. - 3. Query the data using the following code. There are only 76 rows in the circuits table, so we don’t need to worry about limiting the amount of data we query. - ```sql - select * from formula1.raw.circuits - ``` - 4. Run the query. From here on out, we’ll use the keyboard shortcuts Command-Enter or Control-Enter to run queries and won’t explicitly call out this step. - 5. Review the query results, you should see information about Formula 1 circuits, starting with Albert Park in Australia! - 6. Finally, ensure you have all 8 tables starting with `CIRCUITS` and ending with `STATUS`. Now we are ready to connect into dbt Cloud! - - - - \ No newline at end of file diff --git a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/4-configure-dbt.md b/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/4-configure-dbt.md deleted file mode 100644 index 21eaa7e8d7f..00000000000 --- a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/4-configure-dbt.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: "Configure dbt" -id: "4-configure-dbt" -description: "Configure dbt" ---- - -1. We are going to be using [Snowflake Partner Connect](https://docs.snowflake.com/en/user-guide/ecosystem-partner-connect.html) to set up a dbt Cloud account. Using this method will allow you to spin up a fully fledged dbt account with your [Snowflake connection](/docs/cloud/connect-data-platform/connect-snowflake), [managed repository](/docs/collaborate/git/managed-repository), environments, and credentials already established. -2. Navigate out of your worksheet back by selecting **home**. -3. In Snowsight, confirm that you are using the **ACCOUNTADMIN** role. -4. Navigate to the **Admin** **> Partner Connect**. Find **dbt** either by using the search bar or navigating the **Data Integration**. Select the **dbt** tile. - -5. You should now see a new window that says **Connect to dbt**. Select **Optional Grant** and add the `FORMULA1` database. This will grant access for your new dbt user role to the FORMULA1 database. - - -6. Ensure the `FORMULA1` is present in your optional grant before clicking **Connect**.  This will create a dedicated dbt user, database, warehouse, and role for your dbt Cloud trial. - - - -7. When you see the **Your partner account has been created** window, click **Activate**. - -8. You should be redirected to a dbt Cloud registration page. Fill out the form. Make sure to save the password somewhere for login in the future. - - - -9. Select **Complete Registration**. You should now be redirected to your dbt Cloud account, complete with a connection to your Snowflake account, a deployment and a development environment, and a sample job. - -10. To help you version control your dbt project, we have connected it to a [managed repository](/docs/collaborate/git/managed-repository), which means that dbt Labs will be hosting your repository for you. This will give you access to a Git workflow without you having to create and host the repository yourself. You will not need to know Git for this workshop; dbt Cloud will help guide you through the workflow. In the future, when you’re developing your own project, [feel free to use your own repository](/docs/cloud/git/connect-github). This will allow you to learn more about features like [Slim CI](/docs/deploy/continuous-integration) builds after this workshop. diff --git a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/5-development-schema-name.md b/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/5-development-schema-name.md deleted file mode 100644 index f098c47bdad..00000000000 --- a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/5-development-schema-name.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: "Development schema name and IDE walkthrough" -id: "5-development-schema-name" -description: "Development schema name and IDE walkthrough" ---- - -1. First we are going to change the name of our default schema to where our dbt models will build. By default, the name is `dbt_`. We will change this to `dbt_` to create your own personal development schema. To do this, select **Profile Settings** from the gear icon in the upper right. - - - -2. Navigate to the **Credentials** menu and select **Partner Connect Trial**, which will expand the credentials menu. - - - -3. Click **Edit** and change the name of your schema from `dbt_` to `dbt_YOUR_NAME` replacing `YOUR_NAME` with your initials and name (`hwatson` is used in the lab screenshots). Be sure to click **Save** for your changes! - - -4. We now have our own personal development schema, amazing! When we run our first dbt models they will build into this schema. -5. Let’s open up dbt Cloud’s Integrated Development Environment (IDE) and familiarize ourselves. Choose **Develop** at the top of the UI. - -6. When the IDE is done loading, click **Initialize dbt project**. The initialization process creates a collection of files and folders necessary to run your dbt project. - - -7. After the initialization is finished, you can view the files and folders in the file tree menu. As we move through the workshop we'll be sure to touch on a few key files and folders that we'll work with to build out our project. -8. Next click **Commit and push** to commit the new files and folders from the initialize step. We always want our commit messages to be relevant to the work we're committing, so be sure to provide a message like `initialize project` and select **Commit Changes**. - - - - - -9. [Committing](https://www.atlassian.com/git/tutorials/saving-changes/git-commit) your work here will save it to the managed git repository that was created during the Partner Connect signup. This initial commit is the only commit that will be made directly to our `main` branch and from *here on out we'll be doing all of our work on a development branch*. This allows us to keep our development work separate from our production code. -10. There are a couple of key features to point out about the IDE before we get to work. It is a text editor, an SQL and Python runner, and a CLI with Git version control all baked into one package! This allows you to focus on editing your SQL and Python files, previewing the results with the SQL runner (it even runs Jinja!), and building models at the command line without having to move between different applications. The Git workflow in dbt Cloud allows both Git beginners and experts alike to be able to easily version control all of their work with a couple clicks. - - - -11. Let's run our first dbt models! Two example models are included in your dbt project in the `models/examples` folder that we can use to illustrate how to run dbt at the command line. Type `dbt run` into the command line and click **Enter** on your keyboard. When the run bar expands you'll be able to see the results of the run, where you should see the run complete successfully. - - - -12. The run results allow you to see the code that dbt compiles and sends to Snowflake for execution. To view the logs for this run, select one of the model tabs using the  **>** icon and then **Details**. If you scroll down a bit you'll be able to see the compiled code and how dbt interacts with Snowflake. Given that this run took place in our development environment, the models were created in your development schema. - - - - -13. Now let's switch over to Snowflake to confirm that the objects were actually created. Click on the three dots **…** above your database objects and then **Refresh**. Expand the **PC_DBT_DB** database and you should see your development schema. Select the schema, then **Tables**  and **Views**. Now you should be able to see `MY_FIRST_DBT_MODEL` as a table and `MY_SECOND_DBT_MODEL` as a view. - \ No newline at end of file diff --git a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/6-foundational-structure.md b/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/6-foundational-structure.md deleted file mode 100644 index 8a938e10c34..00000000000 --- a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/6-foundational-structure.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: "Foundational structure" -id: "6-foundational-structure" -description: "Foundational structure" ---- - -In this step, we’ll need to create a development branch and set up project level configurations. - -1. To get started with development for our project, we'll need to create a new Git branch for our work. Select **create branch** and name your development branch. We'll call our branch `snowpark_python_workshop` then click **Submit**. -2. The first piece of development we'll do on the project is to update the `dbt_project.yml` file. Every dbt project requires a `dbt_project.yml` file — this is how dbt knows a directory is a dbt project. The [dbt_project.yml](/reference/dbt_project.yml) file also contains important information that tells dbt how to operate on your project. -3. Select the `dbt_project.yml` file from the file tree to open it and replace all of the existing contents with the following code below. When you're done, save the file by clicking **save**. You can also use the Command-S or Control-S shortcut from here on out. - - ```yaml - # Name your project! Project names should contain only lowercase characters - # and underscores. A good package name should reflect your organization's - # name or the intended use of these models - name: 'snowflake_dbt_python_formula1' - version: '1.3.0' - require-dbt-version: '>=1.3.0' - config-version: 2 - - # This setting configures which "profile" dbt uses for this project. - profile: 'default' - - # These configurations specify where dbt should look for different types of files. - # The `model-paths` config, for example, states that models in this project can be - # found in the "models/" directory. You probably won't need to change these! - model-paths: ["models"] - analysis-paths: ["analyses"] - test-paths: ["tests"] - seed-paths: ["seeds"] - macro-paths: ["macros"] - snapshot-paths: ["snapshots"] - - target-path: "target" # directory which will store compiled SQL files - clean-targets: # directories to be removed by `dbt clean` - - "target" - - "dbt_packages" - - models: - snowflake_dbt_python_formula1: - staging: - - +docs: - node_color: "CadetBlue" - marts: - +materialized: table - aggregates: - +docs: - node_color: "Maroon" - +tags: "bi" - - core: - +docs: - node_color: "#800080" - intermediate: - +docs: - node_color: "MediumSlateBlue" - ml: - prep: - +docs: - node_color: "Indigo" - train_predict: - +docs: - node_color: "#36454f" - - ``` - -4. The key configurations to point out in the file with relation to the work that we're going to do are in the `models` section. - - `require-dbt-version` — Tells dbt which version of dbt to use for your project. We are requiring 1.3.0 and any newer version to run python models and node colors. - - `materialized` — Tells dbt how to materialize models when compiling the code before it pushes it down to Snowflake. All models in the `marts` folder will be built as tables. - - `tags` — Applies tags at a directory level to all models. All models in the `aggregates` folder will be tagged as `bi` (abbreviation for business intelligence). - - `docs` — Specifies the `node_color` either by the plain color name or a hex value. -5. [Materializations](/docs/build/materializations) are strategies for persisting dbt models in a warehouse, with `tables` and `views` being the most commonly utilized types. By default, all dbt models are materialized as views and other materialization types can be configured in the `dbt_project.yml` file or in a model itself. It’s very important to note *Python models can only be materialized as tables or incremental models.* Since all our Python models exist under `marts`, the following portion of our `dbt_project.yml` ensures no errors will occur when we run our Python models. Starting with [dbt version 1.4](/docs/dbt-versions/core-upgrade/upgrading-to-v1.4#updates-to-python-models), Python files will automatically get materialized as tables even if not explicitly specified. - - ```yaml - marts:     - +materialized: table - ``` - diff --git a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/7-folder-structure.md b/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/7-folder-structure.md deleted file mode 100644 index c4e3e94b03a..00000000000 --- a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/7-folder-structure.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: "Folder structure" -id: "7-folder-structure" -description: "Folder structure" ---- -dbt Labs has developed a [project structure guide](/best-practices/how-we-structure/1-guide-overview/) that contains a number of recommendations for how to build the folder structure for your project. Do check out that guide if you want to learn more. Right now we are going to create some folders to organize our files: - -- Sources — This is our Formula 1 dataset and it will be defined in a source YAML file. -- Staging models — These models have a 1:1 with their source table. -- Intermediate — This is where we will be joining some Formula staging models. -- Marts models — Here is where we perform our major transformations. It contains these subfolders: - - aggregates - - core - - ml -1. In your file tree, use your cursor and hover over the `models` subdirectory, click the three dots **…** that appear to the right of the folder name, then select **Create Folder**. We're going to add two new folders to the file path, `staging` and `formula1` (in that order) by typing `staging/formula1` into the file path. - - - - - - If you click into your `models` directory now, you should see the new `staging` folder nested within `models` and the `formula1` folder nested within `staging`. -2. Create two additional folders the same as the last step. Within the `models` subdirectory, create new directories `marts/core`. - -3. We will need to create a few more folders and subfolders using the UI. After you create all the necessary folders, your folder tree should look like this when it's all done: - - - -Remember you can always reference the entire project in [GitHub](https://github.com/dbt-labs/python-snowpark-formula1/tree/python-formula1) to view the complete folder and file strucutre. diff --git a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/8-sources-and-staging.md b/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/8-sources-and-staging.md deleted file mode 100644 index c56284f5168..00000000000 --- a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/8-sources-and-staging.md +++ /dev/null @@ -1,334 +0,0 @@ ---- -title: "Sources and staging" -id: "8-sources-and-staging" -description: "Sources and staging" ---- - -In this section, we are going to create our source and staging models. - -Sources allow us to create a dependency between our source database object and our staging models which will help us when we look at later. Also, if your source changes database or schema, you only have to update it in your `f1_sources.yml` file rather than updating all of the models it might be used in. - -Staging models are the base of our project, where we bring all the individual components we're going to use to build our more complex and useful models into the project. - -Since we want to focus on dbt and Python in this workshop, check out our [sources](/docs/build/sources) and [staging](/best-practices/how-we-structure/2-staging) docs if you want to learn more (or take our [dbt Fundamentals](https://courses.getdbt.com/collections) course which covers all of our core functionality). - -## Create sources - -We're going to be using each of our 8 Formula 1 tables from our `formula1` database under the `raw`  schema for our transformations and we want to create those tables as sources in our project. - -1. Create a new file called `f1_sources.yml` with the following file path: `models/staging/formula1/f1_sources.yml`. -2. Then, paste the following code into the file before saving it: - -```yaml -version: 2 - -sources: - - name: formula1 - description: formula 1 datasets with normalized tables - database: formula1 - schema: raw - tables: - - name: circuits - description: One record per circuit, which is the specific race course. - columns: - - name: circuitid - tests: - - unique - - not_null - - name: constructors - description: One record per constructor. Constructors are the teams that build their formula 1 cars. - columns: - - name: constructorid - tests: - - unique - - not_null - - name: drivers - description: One record per driver. This table gives details about the driver. - columns: - - name: driverid - tests: - - unique - - not_null - - name: lap_times - description: One row per lap in each race. Lap times started being recorded in this dataset in 1984 and joined through driver_id. - - name: pit_stops - description: One row per pit stop. Pit stops do not have their own id column, the combination of the race_id and driver_id identify the pit stop. - columns: - - name: stop - tests: - - accepted_values: - values: [1,2,3,4,5,6,7,8] - quote: false - - name: races - description: One race per row. Importantly this table contains the race year to understand trends. - columns: - - name: raceid - tests: - - unique - - not_null - - name: results - columns: - - name: resultid - tests: - - unique - - not_null - description: One row per result. The main table that we join out for grid and position variables. - - name: status - description: One status per row. The status contextualizes whether the race was finished or what issues arose e.g. collisions, engine, etc. - columns: - - name: statusid - tests: - - unique - - not_null -``` - -## Create staging models - -The next step is to set up the staging models for each of the 8 source tables. Given the one-to-one relationship between staging models and their corresponding source tables, we'll build 8 staging models here. We know it’s a lot and in the future, we will seek to update the workshop to make this step less repetitive and more efficient. This step is also a good representation of the real world of data, where you have multiple hierarchical tables that you will need to join together! - -1. Let's go in alphabetical order to easily keep track of all our staging models! Create a new file called `stg_f1_circuits.sql` with this file path `models/staging/formula1/stg_f1_circuits.sql`. Then, paste the following code into the file before saving it: - - ```sql - with - - source as ( - - select * from {{ source('formula1','circuits') }} - - ), - - renamed as ( - select - circuitid as circuit_id, - circuitref as circuit_ref, - name as circuit_name, - location, - country, - lat as latitude, - lng as longitude, - alt as altitude - -- omit the url - from source - ) - select * from renamed - ``` - - All we're doing here is pulling the source data into the model using the `source` function, renaming some columns, and omitting the column `url` with a commented note since we don’t need it for our analysis. - -1. Create `stg_f1_constructors.sql` with this file path `models/staging/formula1/stg_f1_constructors.sql`. Paste the following code into it before saving the file: - - ```sql - with - - source as ( - - select * from {{ source('formula1','constructors') }} - - ), - - renamed as ( - select - constructorid as constructor_id, - constructorref as constructor_ref, - name as constructor_name, - nationality as constructor_nationality - -- omit the url - from source - ) - - select * from renamed - ``` - - We have 6 other stages models to create. We can do this by creating new files, then copy and paste the code into our `staging` folder. - -1. Create `stg_f1_drivers.sql` with this file path `models/staging/formula1/stg_f1_drivers.sql`: - - ```sql - with - - source as ( - - select * from {{ source('formula1','drivers') }} - - ), - - renamed as ( - select - driverid as driver_id, - driverref as driver_ref, - number as driver_number, - code as driver_code, - forename, - surname, - dob as date_of_birth, - nationality as driver_nationality - -- omit the url - from source - ) - - select * from renamed - ``` -1. Create `stg_f1_lap_times.sql` with this file path `models/staging/formula1/stg_f1_lap_times.sql`: - - ```sql - with - - source as ( - - select * from {{ source('formula1','lap_times') }} - - ), - - renamed as ( - select - raceid as race_id, - driverid as driver_id, - lap, - position, - time as lap_time_formatted, - milliseconds as lap_time_milliseconds - from source - ) - - select * from renamed - ``` -1. Create `stg_f1_pit_stops.sql` with this file path `models/staging/formula1/stg_f1_pit_stops.sql`: - - ```sql - with - - source as ( - - select * from {{ source('formula1','pit_stops') }} - - ), - - renamed as ( - select - raceid as race_id, - driverid as driver_id, - stop as stop_number, - lap, - time as lap_time_formatted, - duration as pit_stop_duration_seconds, - milliseconds as pit_stop_milliseconds - from source - ) - - select * from renamed - order by pit_stop_duration_seconds desc - ``` - -1. Create ` stg_f1_races.sql` with this file path `models/staging/formula1/stg_f1_races.sql`: - - ```sql - with - - source as ( - - select * from {{ source('formula1','races') }} - - ), - - renamed as ( - select - raceid as race_id, - year as race_year, - round as race_round, - circuitid as circuit_id, - name as circuit_name, - date as race_date, - to_time(time) as race_time, - -- omit the url - fp1_date as free_practice_1_date, - fp1_time as free_practice_1_time, - fp2_date as free_practice_2_date, - fp2_time as free_practice_2_time, - fp3_date as free_practice_3_date, - fp3_time as free_practice_3_time, - quali_date as qualifying_date, - quali_time as qualifying_time, - sprint_date, - sprint_time - from source - ) - - select * from renamed - ``` -1. Create `stg_f1_results.sql` with this file path `models/staging/formula1/stg_f1_results.sql`: - - ```sql - with - - source as ( - - select * from {{ source('formula1','results') }} - - ), - - renamed as ( - select - resultid as result_id, - raceid as race_id, - driverid as driver_id, - constructorid as constructor_id, - number as driver_number, - grid, - position::int as position, - positiontext as position_text, - positionorder as position_order, - points, - laps, - time as results_time_formatted, - milliseconds as results_milliseconds, - fastestlap as fastest_lap, - rank as results_rank, - fastestlaptime as fastest_lap_time_formatted, - fastestlapspeed::decimal(6,3) as fastest_lap_speed, - statusid as status_id - from source - ) - - select * from renamed - ``` -1. Last one! Create `stg_f1_status.sql` with this file path: `models/staging/formula1/stg_f1_status.sql`: - - ```sql - with - - source as ( - - select * from {{ source('formula1','status') }} - - ), - - renamed as ( - select - statusid as status_id, - status - from source - ) - - select * from renamed - ``` - After the source and all the staging models are complete for each of the 8 tables, your staging folder should look like this: - - - -1. It’s a good time to delete our example folder since these two models are extraneous to our formula1 pipeline and `my_first_model` fails a `not_null` test that we won’t spend time investigating. dbt Cloud will warn us that this folder will be permanently deleted, and we are okay with that so select **Delete**. - - - -1. Now that the staging models are built and saved, it's time to create the models in our development schema in Snowflake. To do this we're going to enter into the command line `dbt build` to run all of the models in our project, which includes the 8 new staging models and the existing example models. - - Your run should complete successfully and you should see green checkmarks next to all of your models in the run results. We built our 8 staging models as views and ran 13 source tests that we configured in the `f1_sources.yml` file with not that much code, pretty cool! - - - - Let's take a quick look in Snowflake, refresh database objects, open our development schema, and confirm that the new models are there. If you can see them, then we're good to go! - - - - Before we move onto the next section, be sure to commit your new models to your Git branch. Click **Commit and push** and give your commit a message like `profile, sources, and staging setup` before moving on. - - \ No newline at end of file diff --git a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/9-sql-transformations.md b/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/9-sql-transformations.md deleted file mode 100644 index 262bf0e5e52..00000000000 --- a/website/docs/guides/dbt-ecosystem/dbt-python-snowpark/9-sql-transformations.md +++ /dev/null @@ -1,299 +0,0 @@ ---- -title: "SQL transformations" -id: "9-sql-transformations" -description: "SQL transformations" ---- - -Now that we have all our sources and staging models done, it's time to move into where dbt shines — transformation! - -We need to: - -- Create some intermediate tables to join tables that aren’t hierarchical -- Create core tables for business intelligence (BI) tool ingestion -- Answer the two questions about: - - fastest pit stops - - lap time trends about our Formula 1 data by creating aggregate models using python! - -## Intermediate models - -We need to join lots of reference tables to our results table to create a human readable dataframe. What does this mean? For example, we don’t only want to have the numeric `status_id` in our table, we want to be able to read in a row of data that a driver could not finish a race due to engine failure (`status_id=5`). - -By now, we are pretty good at creating new files in the correct directories so we won’t cover this in detail. All intermediate models should be created in the path `models/intermediate`. - -1. Create a new file called `int_lap_times_years.sql`. In this model, we are joining our lap time and race information so we can look at lap times over years. In earlier Formula 1 eras, lap times were not recorded (only final results), so we filter out records where lap times are null. - - ```sql - with lap_times as ( - - select * from {{ ref('stg_f1_lap_times') }} - - ), - - races as ( - - select * from {{ ref('stg_f1_races') }} - - ), - - expanded_lap_times_by_year as ( - select - lap_times.race_id, - driver_id, - race_year, - lap, - lap_time_milliseconds - from lap_times - left join races - on lap_times.race_id = races.race_id - where lap_time_milliseconds is not null - ) - - select * from expanded_lap_times_by_year - ``` - -2. Create a file called `in_pit_stops.sql`. Pit stops are a many-to-one (M:1) relationship with our races. We are creating a feature called `total_pit_stops_per_race` by partitioning over our `race_id` and `driver_id`, while preserving individual level pit stops for rolling average in our next section. - - ```sql - with stg_f1__pit_stops as - ( - select * from {{ ref('stg_f1_pit_stops') }} - ), - - pit_stops_per_race as ( - select - race_id, - driver_id, - stop_number, - lap, - lap_time_formatted, - pit_stop_duration_seconds, - pit_stop_milliseconds, - max(stop_number) over (partition by race_id,driver_id) as total_pit_stops_per_race - from stg_f1__pit_stops - ) - - select * from pit_stops_per_race - ``` - -3. Create a file called `int_results.sql`. Here we are using 4 of our tables — `races`, `drivers`, `constructors`, and `status` — to give context to our `results` table. We are now able to calculate a new feature `drivers_age_years` by bringing the `date_of_birth` and `race_year` into the same table. We are also creating a column to indicate if the driver did not finish (dnf) the race, based upon if their `position` was null called, `dnf_flag`. - - ```sql - with results as ( - - select * from {{ ref('stg_f1_results') }} - - ), - - races as ( - - select * from {{ ref('stg_f1_races') }} - - ), - - drivers as ( - - select * from {{ ref('stg_f1_drivers') }} - - ), - - constructors as ( - - select * from {{ ref('stg_f1_constructors') }} - ), - - status as ( - - select * from {{ ref('stg_f1_status') }} - ), - - int_results as ( - select - result_id, - results.race_id, - race_year, - race_round, - circuit_id, - circuit_name, - race_date, - race_time, - results.driver_id, - results.driver_number, - forename ||' '|| surname as driver, - cast(datediff('year', date_of_birth, race_date) as int) as drivers_age_years, - driver_nationality, - results.constructor_id, - constructor_name, - constructor_nationality, - grid, - position, - position_text, - position_order, - points, - laps, - results_time_formatted, - results_milliseconds, - fastest_lap, - results_rank, - fastest_lap_time_formatted, - fastest_lap_speed, - results.status_id, - status, - case when position is null then 1 else 0 end as dnf_flag - from results - left join races - on results.race_id=races.race_id - left join drivers - on results.driver_id = drivers.driver_id - left join constructors - on results.constructor_id = constructors.constructor_id - left join status - on results.status_id = status.status_id - ) - - select * from int_results - ``` -1. Create a *Markdown* file `intermediate.md` that we will go over in depth during the [Testing](/guides/dbt-ecosystem/dbt-python-snowpark/13-testing) and [Documentation](/guides/dbt-ecosystem/dbt-python-snowpark/14-documentation) sections. - - ```markdown - # the intent of this .md is to allow for multi-line long form explanations for our intermediate transformations - - # below are descriptions - {% docs int_results %} In this query we want to join out other important information about the race results to have a human readable table about results, races, drivers, constructors, and status. - We will have 4 left joins onto our results table. {% enddocs %} - - {% docs int_pit_stops %} There are many pit stops within one race, aka a M:1 relationship. - We want to aggregate this so we can properly join pit stop information without creating a fanout. {% enddocs %} - - {% docs int_lap_times_years %} Lap times are done per lap. We need to join them out to the race year to understand yearly lap time trends. {% enddocs %} - ``` -1. Create a *YAML* file `intermediate.yml` that we will go over in depth during the [Testing](/guides/dbt-ecosystem/dbt-python-snowpark/13-testing) and [Documentation](/guides/dbt-ecosystem/dbt-python-snowpark/14-documentation) sections. - - ```yaml - version: 2 - - models: - - name: int_results - description: '{{ doc("int_results") }}' - - name: int_pit_stops - description: '{{ doc("int_pit_stops") }}' - - name: int_lap_times_years - description: '{{ doc("int_lap_times_years") }}' - ``` - That wraps up the intermediate models we need to create our core models! - -## Core models - -1. Create a file `fct_results.sql`. This is what I like to refer to as the “mega table” — a really large denormalized table with all our context added in at row level for human readability. Importantly, we have a table `circuits` that is linked through the table `races`. When we joined `races` to `results` in `int_results.sql` we allowed our tables to make the connection from `circuits` to `results` in `fct_results.sql`. We are only taking information about pit stops at the result level so our join would not cause a [fanout](https://community.looker.com/technical-tips-tricks-1021/what-is-a-fanout-23327). - - ```sql - with int_results as ( - - select * from {{ ref('int_results') }} - - ), - - int_pit_stops as ( - select - race_id, - driver_id, - max(total_pit_stops_per_race) as total_pit_stops_per_race - from {{ ref('int_pit_stops') }} - group by 1,2 - ), - - circuits as ( - - select * from {{ ref('stg_f1_circuits') }} - ), - base_results as ( - select - result_id, - int_results.race_id, - race_year, - race_round, - int_results.circuit_id, - int_results.circuit_name, - circuit_ref, - location, - country, - latitude, - longitude, - altitude, - total_pit_stops_per_race, - race_date, - race_time, - int_results.driver_id, - driver, - driver_number, - drivers_age_years, - driver_nationality, - constructor_id, - constructor_name, - constructor_nationality, - grid, - position, - position_text, - position_order, - points, - laps, - results_time_formatted, - results_milliseconds, - fastest_lap, - results_rank, - fastest_lap_time_formatted, - fastest_lap_speed, - status_id, - status, - dnf_flag - from int_results - left join circuits - on int_results.circuit_id=circuits.circuit_id - left join int_pit_stops - on int_results.driver_id=int_pit_stops.driver_id and int_results.race_id=int_pit_stops.race_id - ) - - select * from base_results - ``` - -1. Create the file `pit_stops_joined.sql`. Our results and pit stops are at different levels of dimensionality (also called grain). Simply put, we have multiple pit stops per a result. Since we are interested in understanding information at the pit stop level with information about race year and constructor, we will create a new table `pit_stops_joined.sql` where each row is per pit stop. Our new table tees up our aggregation in Python. - - ```sql - with base_results as ( - - select * from {{ ref('fct_results') }} - - ), - - pit_stops as ( - - select * from {{ ref('int_pit_stops') }} - - ), - - pit_stops_joined as ( - - select - base_results.race_id, - race_year, - base_results.driver_id, - constructor_id, - constructor_name, - stop_number, - lap, - lap_time_formatted, - pit_stop_duration_seconds, - pit_stop_milliseconds - from base_results - left join pit_stops - on base_results.race_id=pit_stops.race_id and base_results.driver_id=pit_stops.driver_id - ) - select * from pit_stops_joined - ``` - -1. Enter in the command line and execute `dbt build` to build out our entire pipeline to up to this point. Don’t worry about “overriding” your previous models – dbt workflows are designed to be idempotent so we can run them again and expect the same results. - -1. Let’s talk about our lineage so far. It’s looking good 😎. We’ve shown how SQL can be used to make data type, column name changes, and handle hierarchical joins really well; all while building out our automated lineage! - - - -1. Time to **Commit and push** our changes and give your commit a message like `intermediate and fact models` before moving on. diff --git a/website/docs/guides/dbt-python-snowpark.md b/website/docs/guides/dbt-python-snowpark.md new file mode 100644 index 00000000000..8417ec9177b --- /dev/null +++ b/website/docs/guides/dbt-python-snowpark.md @@ -0,0 +1,1946 @@ +--- +title: "Leverage dbt Cloud to generate analytics and ML-ready pipelines with SQL and Python with Snowflake" +id: "dbt-python-snowpark" +description: "Leverage dbt Cloud to generate analytics and ML-ready pipelines with SQL and Python with Snowflake" +hoverSnippet: Learn how to leverage dbt Cloud to generate analytics and ML-ready pipelines with SQL and Python with Snowflake. +# time_to_complete: '30 minutes' commenting out until we test +icon: 'guides' +hide_table_of_contents: true +tags: ['Snowflake'] +level: 'Intermediate' +recently_updated: true +--- + +## Introduction + +The focus of this workshop will be to demonstrate how we can use both *SQL and python together* in the same workflow to run *both analytics and machine learning models* on dbt Cloud. + +All code in today’s workshop can be found on [GitHub](https://github.com/dbt-labs/python-snowpark-formula1/tree/python-formula1). + +### What you'll use during the lab + +- A [Snowflake account](https://trial.snowflake.com/) with ACCOUNTADMIN access +- A [dbt Cloud account](https://www.getdbt.com/signup/) + +### What you'll learn + +- How to build scalable data transformation pipelines using dbt, and Snowflake using SQL and Python +- How to leverage copying data into Snowflake from a public S3 bucket + +### What you need to know + +- Basic to intermediate SQL and python. +- Basic understanding of dbt fundamentals. We recommend the [dbt Fundamentals course](https://courses.getdbt.com/collections) if you're interested. +- High level machine learning process (encoding, training, testing) +- Simple ML algorithms — we will use logistic regression to keep the focus on the *workflow*, not algorithms! + +### What you'll build + +- A set of data analytics and prediction pipelines using Formula 1 data leveraging dbt and Snowflake, making use of best practices like data quality tests and code promotion between environments +- We will create insights for: + 1. Finding the lap time average and rolling average through the years (is it generally trending up or down)? + 2. Which constructor has the fastest pit stops in 2021? + 3. Predicting the position of each driver given using a decade of data (2010 - 2020) + +As inputs, we are going to leverage Formula 1 datasets hosted on a dbt Labs public S3 bucket. We will create a Snowflake Stage for our CSV files then use Snowflake’s `COPY INTO` function to copy the data in from our CSV files into tables. The Formula 1 is available on [Kaggle](https://www.kaggle.com/datasets/rohanrao/formula-1-world-championship-1950-2020). The data is originally compiled from the [Ergast Developer API](http://ergast.com/mrd/). + +Overall we are going to set up the environments, build scalable pipelines in dbt, establish data tests, and promote code to production. + +## Configure Snowflake + +1. Log in to your trial Snowflake account. You can [sign up for a Snowflake Trial Account using this form](https://signup.snowflake.com/) if you don’t have one. +2. Ensure that your account is set up using **AWS** in the **US East (N. Virginia)**. We will be copying the data from a public AWS S3 bucket hosted by dbt Labs in the us-east-1 region. By ensuring our Snowflake environment setup matches our bucket region, we avoid any multi-region data copy and retrieval latency issues. + + + +3. After creating your account and verifying it from your sign-up email, Snowflake will direct you back to the UI called Snowsight. + +4. When Snowsight first opens, your window should look like the following, with you logged in as the ACCOUNTADMIN with demo worksheets open: + + + +5. Navigate to **Admin > Billing & Terms**. Click **Enable > Acknowledge & Continue** to enable Anaconda Python Packages to run in Snowflake. + + + + + +6. Finally, create a new Worksheet by selecting **+ Worksheet** in the upper right corner. + + +33 1. Log in to your trial Snowflake account. You can [sign up for a Snowflake Trial Account using this form](https://signup.snowflake.com/) if you don’t have one. +2. Ensure that your account is set up using **AWS** in the **US East (N. Virginia)**. We will be copying the data from a public AWS S3 bucket hosted by dbt Labs in the us-east-1 region. By ensuring our Snowflake environment setup matches our bucket region, we avoid any multi-region data copy and retrieval latency issues. + + + +3. After creating your account and verifying it from your sign-up email, Snowflake will direct you back to the UI called Snowsight. + +4. When Snowsight first opens, your window should look like the following, with you logged in as the ACCOUNTADMIN with demo worksheets open: + + + + +5. Navigate to **Admin > Billing & Terms**. Click **Enable > Acknowledge & Continue** to enable Anaconda Python Packages to run in Snowflake. + + + + + +6. Finally, create a new Worksheet by selecting **+ Worksheet** in the upper right corner. + +## Connect to data source + +We need to obtain our data source by copying our Formula 1 data into Snowflake tables from a public S3 bucket that dbt Labs hosts. + +1. When a new Snowflake account is created, there should be a preconfigured warehouse in your account named `COMPUTE_WH`. +2. If for any reason your account doesn’t have this warehouse, we can create a warehouse using the following script: + + ```sql + create or replace warehouse COMPUTE_WH with warehouse_size=XSMALL + ``` + +3. Rename the worksheet to `data setup script` since we will be placing code in this worksheet to ingest the Formula 1 data. Make sure you are still logged in as the **ACCOUNTADMIN** and select the **COMPUTE_WH** warehouse. + + + +4. Copy the following code into the main body of the Snowflake worksheet. You can also find this setup script under the `setup` folder in the [Git repository](https://github.com/dbt-labs/python-snowpark-formula1/blob/main/setup/setup_script_s3_to_snowflake.sql). The script is long since it's bring in all of the data we'll need today! + + ```sql + -- create and define our formula1 database + create or replace database formula1; + use database formula1; + create or replace schema raw; + use schema raw; + + -- define our file format for reading in the csvs + create or replace file format csvformat + type = csv + field_delimiter =',' + field_optionally_enclosed_by = '"', + skip_header=1; + + -- + create or replace stage formula1_stage + file_format = csvformat + url = 's3://formula1-dbt-cloud-python-demo/formula1-kaggle-data/'; + + -- load in the 8 tables we need for our demo + -- we are first creating the table then copying our data in from s3 + -- think of this as an empty container or shell that we are then filling + create or replace table formula1.raw.circuits ( + CIRCUITID NUMBER(38,0), + CIRCUITREF VARCHAR(16777216), + NAME VARCHAR(16777216), + LOCATION VARCHAR(16777216), + COUNTRY VARCHAR(16777216), + LAT FLOAT, + LNG FLOAT, + ALT NUMBER(38,0), + URL VARCHAR(16777216) + ); + -- copy our data from public s3 bucket into our tables + copy into circuits + from @formula1_stage/circuits.csv + on_error='continue'; + + create or replace table formula1.raw.constructors ( + CONSTRUCTORID NUMBER(38,0), + CONSTRUCTORREF VARCHAR(16777216), + NAME VARCHAR(16777216), + NATIONALITY VARCHAR(16777216), + URL VARCHAR(16777216) + ); + copy into constructors + from @formula1_stage/constructors.csv + on_error='continue'; + + create or replace table formula1.raw.drivers ( + DRIVERID NUMBER(38,0), + DRIVERREF VARCHAR(16777216), + NUMBER VARCHAR(16777216), + CODE VARCHAR(16777216), + FORENAME VARCHAR(16777216), + SURNAME VARCHAR(16777216), + DOB DATE, + NATIONALITY VARCHAR(16777216), + URL VARCHAR(16777216) + ); + copy into drivers + from @formula1_stage/drivers.csv + on_error='continue'; + + create or replace table formula1.raw.lap_times ( + RACEID NUMBER(38,0), + DRIVERID NUMBER(38,0), + LAP NUMBER(38,0), + POSITION FLOAT, + TIME VARCHAR(16777216), + MILLISECONDS NUMBER(38,0) + ); + copy into lap_times + from @formula1_stage/lap_times.csv + on_error='continue'; + + create or replace table formula1.raw.pit_stops ( + RACEID NUMBER(38,0), + DRIVERID NUMBER(38,0), + STOP NUMBER(38,0), + LAP NUMBER(38,0), + TIME VARCHAR(16777216), + DURATION VARCHAR(16777216), + MILLISECONDS NUMBER(38,0) + ); + copy into pit_stops + from @formula1_stage/pit_stops.csv + on_error='continue'; + + create or replace table formula1.raw.races ( + RACEID NUMBER(38,0), + YEAR NUMBER(38,0), + ROUND NUMBER(38,0), + CIRCUITID NUMBER(38,0), + NAME VARCHAR(16777216), + DATE DATE, + TIME VARCHAR(16777216), + URL VARCHAR(16777216), + FP1_DATE VARCHAR(16777216), + FP1_TIME VARCHAR(16777216), + FP2_DATE VARCHAR(16777216), + FP2_TIME VARCHAR(16777216), + FP3_DATE VARCHAR(16777216), + FP3_TIME VARCHAR(16777216), + QUALI_DATE VARCHAR(16777216), + QUALI_TIME VARCHAR(16777216), + SPRINT_DATE VARCHAR(16777216), + SPRINT_TIME VARCHAR(16777216) + ); + copy into races + from @formula1_stage/races.csv + on_error='continue'; + + create or replace table formula1.raw.results ( + RESULTID NUMBER(38,0), + RACEID NUMBER(38,0), + DRIVERID NUMBER(38,0), + CONSTRUCTORID NUMBER(38,0), + NUMBER NUMBER(38,0), + GRID NUMBER(38,0), + POSITION FLOAT, + POSITIONTEXT VARCHAR(16777216), + POSITIONORDER NUMBER(38,0), + POINTS NUMBER(38,0), + LAPS NUMBER(38,0), + TIME VARCHAR(16777216), + MILLISECONDS NUMBER(38,0), + FASTESTLAP NUMBER(38,0), + RANK NUMBER(38,0), + FASTESTLAPTIME VARCHAR(16777216), + FASTESTLAPSPEED FLOAT, + STATUSID NUMBER(38,0) + ); + copy into results + from @formula1_stage/results.csv + on_error='continue'; + + create or replace table formula1.raw.status ( + STATUSID NUMBER(38,0), + STATUS VARCHAR(16777216) + ); + copy into status + from @formula1_stage/status.csv + on_error='continue'; + + ``` + +5. Ensure all the commands are selected before running the query — an easy way to do this is to use Ctrl-a to highlight all of the code in the worksheet. Select **run** (blue triangle icon). Notice how the dot next to your **COMPUTE_WH** turns from gray to green as you run the query. The **status** table is the final table of all 8 tables loaded in. + + + +6. Let’s unpack that pretty long query we ran into component parts. We ran this query to load in our 8 Formula 1 tables from a public S3 bucket. To do this, we: + - Created a new database called `formula1` and a schema called `raw` to place our raw (untransformed) data into. + - Defined our file format for our CSV files. Importantly, here we use a parameter called `field_optionally_enclosed_by =` since the string columns in our Formula 1 csv files use quotes. Quotes are used around string values to avoid parsing issues where commas `,` and new lines `/n` in data values could cause data loading errors. + - Created a stage to locate our data we are going to load in. Snowflake Stages are locations where data files are stored. Stages are used to both load and unload data to and from Snowflake locations. Here we are using an external stage, by referencing an S3 bucket. + - Created our tables for our data to be copied into. These are empty tables with the column name and data type. Think of this as creating an empty container that the data will then fill into. + - Used the `copy into` statement for each of our tables. We reference our staged location we created and upon loading errors continue to load in the rest of the data. You should not have data loading errors but if you do, those rows will be skipped and Snowflake will tell you which rows caused errors + +7. Now let's take a look at some of our cool Formula 1 data we just loaded up! + 1. Create a new worksheet by selecting the **+** then **New Worksheet**. + + 2. Navigate to **Database > Formula1 > RAW > Tables**. + 3. Query the data using the following code. There are only 76 rows in the circuits table, so we don’t need to worry about limiting the amount of data we query. + + ```sql + select * from formula1.raw.circuits + ``` + + 4. Run the query. From here on out, we’ll use the keyboard shortcuts Command-Enter or Control-Enter to run queries and won’t explicitly call out this step. + 5. Review the query results, you should see information about Formula 1 circuits, starting with Albert Park in Australia! + 6. Finally, ensure you have all 8 tables starting with `CIRCUITS` and ending with `STATUS`. Now we are ready to connect into dbt Cloud! + + + +## Configure dbt Cloud + +1. We are going to be using [Snowflake Partner Connect](https://docs.snowflake.com/en/user-guide/ecosystem-partner-connect.html) to set up a dbt Cloud account. Using this method will allow you to spin up a fully fledged dbt account with your [Snowflake connection](/docs/cloud/connect-data-platform/connect-snowflake), [managed repository](/docs/collaborate/git/managed-repository), environments, and credentials already established. +2. Navigate out of your worksheet back by selecting **home**. +3. In Snowsight, confirm that you are using the **ACCOUNTADMIN** role. +4. Navigate to the **Admin** **> Partner Connect**. Find **dbt** either by using the search bar or navigating the **Data Integration**. Select the **dbt** tile. + +5. You should now see a new window that says **Connect to dbt**. Select **Optional Grant** and add the `FORMULA1` database. This will grant access for your new dbt user role to the FORMULA1 database. + + +6. Ensure the `FORMULA1` is present in your optional grant before clicking **Connect**.  This will create a dedicated dbt user, database, warehouse, and role for your dbt Cloud trial. + + + +7. When you see the **Your partner account has been created** window, click **Activate**. + +8. You should be redirected to a dbt Cloud registration page. Fill out the form. Make sure to save the password somewhere for login in the future. + + + +9. Select **Complete Registration**. You should now be redirected to your dbt Cloud account, complete with a connection to your Snowflake account, a deployment and a development environment, and a sample job. + +10. To help you version control your dbt project, we have connected it to a [managed repository](/docs/collaborate/git/managed-repository), which means that dbt Labs will be hosting your repository for you. This will give you access to a Git workflow without you having to create and host the repository yourself. You will not need to know Git for this workshop; dbt Cloud will help guide you through the workflow. In the future, when you’re developing your own project, [feel free to use your own repository](/docs/cloud/git/connect-github). This will allow you to learn more about features like [Slim CI](/docs/deploy/continuous-integration) builds after this workshop. + +## Change development schema name navigate the IDE + +1. First we are going to change the name of our default schema to where our dbt models will build. By default, the name is `dbt_`. We will change this to `dbt_` to create your own personal development schema. To do this, select **Profile Settings** from the gear icon in the upper right. + + + +2. Navigate to the **Credentials** menu and select **Partner Connect Trial**, which will expand the credentials menu. + + + +3. Click **Edit** and change the name of your schema from `dbt_` to `dbt_YOUR_NAME` replacing `YOUR_NAME` with your initials and name (`hwatson` is used in the lab screenshots). Be sure to click **Save** for your changes! + + +4. We now have our own personal development schema, amazing! When we run our first dbt models they will build into this schema. +5. Let’s open up dbt Cloud’s Integrated Development Environment (IDE) and familiarize ourselves. Choose **Develop** at the top of the UI. + +6. When the IDE is done loading, click **Initialize dbt project**. The initialization process creates a collection of files and folders necessary to run your dbt project. + + +7. After the initialization is finished, you can view the files and folders in the file tree menu. As we move through the workshop we'll be sure to touch on a few key files and folders that we'll work with to build out our project. +8. Next click **Commit and push** to commit the new files and folders from the initialize step. We always want our commit messages to be relevant to the work we're committing, so be sure to provide a message like `initialize project` and select **Commit Changes**. + + + + + +9. [Committing](https://www.atlassian.com/git/tutorials/saving-changes/git-commit) your work here will save it to the managed git repository that was created during the Partner Connect signup. This initial commit is the only commit that will be made directly to our `main` branch and from *here on out we'll be doing all of our work on a development branch*. This allows us to keep our development work separate from our production code. +10. There are a couple of key features to point out about the IDE before we get to work. It is a text editor, an SQL and Python runner, and a CLI with Git version control all baked into one package! This allows you to focus on editing your SQL and Python files, previewing the results with the SQL runner (it even runs Jinja!), and building models at the command line without having to move between different applications. The Git workflow in dbt Cloud allows both Git beginners and experts alike to be able to easily version control all of their work with a couple clicks. + + + +11. Let's run our first dbt models! Two example models are included in your dbt project in the `models/examples` folder that we can use to illustrate how to run dbt at the command line. Type `dbt run` into the command line and click **Enter** on your keyboard. When the run bar expands you'll be able to see the results of the run, where you should see the run complete successfully. + + + +12. The run results allow you to see the code that dbt compiles and sends to Snowflake for execution. To view the logs for this run, select one of the model tabs using the  **>** icon and then **Details**. If you scroll down a bit you'll be able to see the compiled code and how dbt interacts with Snowflake. Given that this run took place in our development environment, the models were created in your development schema. + + + +13. Now let's switch over to Snowflake to confirm that the objects were actually created. Click on the three dots **…** above your database objects and then **Refresh**. Expand the **PC_DBT_DB** database and you should see your development schema. Select the schema, then **Tables**  and **Views**. Now you should be able to see `MY_FIRST_DBT_MODEL` as a table and `MY_SECOND_DBT_MODEL` as a view. + + +## Create branch and set up project configs + +In this step, we’ll need to create a development branch and set up project level configurations. + +1. To get started with development for our project, we'll need to create a new Git branch for our work. Select **create branch** and name your development branch. We'll call our branch `snowpark_python_workshop` then click **Submit**. +2. The first piece of development we'll do on the project is to update the `dbt_project.yml` file. Every dbt project requires a `dbt_project.yml` file — this is how dbt knows a directory is a dbt project. The [dbt_project.yml](/reference/dbt_project.yml) file also contains important information that tells dbt how to operate on your project. +3. Select the `dbt_project.yml` file from the file tree to open it and replace all of the existing contents with the following code below. When you're done, save the file by clicking **save**. You can also use the Command-S or Control-S shortcut from here on out. + + ```yaml + # Name your project! Project names should contain only lowercase characters + # and underscores. A good package name should reflect your organization's + # name or the intended use of these models + name: 'snowflake_dbt_python_formula1' + version: '1.3.0' + require-dbt-version: '>=1.3.0' + config-version: 2 + + # This setting configures which "profile" dbt uses for this project. + profile: 'default' + + # These configurations specify where dbt should look for different types of files. + # The `model-paths` config, for example, states that models in this project can be + # found in the "models/" directory. You probably won't need to change these! + model-paths: ["models"] + analysis-paths: ["analyses"] + test-paths: ["tests"] + seed-paths: ["seeds"] + macro-paths: ["macros"] + snapshot-paths: ["snapshots"] + + target-path: "target" # directory which will store compiled SQL files + clean-targets: # directories to be removed by `dbt clean` + - "target" + - "dbt_packages" + + models: + snowflake_dbt_python_formula1: + staging: + + +docs: + node_color: "CadetBlue" + marts: + +materialized: table + aggregates: + +docs: + node_color: "Maroon" + +tags: "bi" + + core: + +docs: + node_color: "#800080" + intermediate: + +docs: + node_color: "MediumSlateBlue" + ml: + prep: + +docs: + node_color: "Indigo" + train_predict: + +docs: + node_color: "#36454f" + + ``` + +4. The key configurations to point out in the file with relation to the work that we're going to do are in the `models` section. + - `require-dbt-version` — Tells dbt which version of dbt to use for your project. We are requiring 1.3.0 and any newer version to run python models and node colors. + - `materialized` — Tells dbt how to materialize models when compiling the code before it pushes it down to Snowflake. All models in the `marts` folder will be built as tables. + - `tags` — Applies tags at a directory level to all models. All models in the `aggregates` folder will be tagged as `bi` (abbreviation for business intelligence). + - `docs` — Specifies the `node_color` either by the plain color name or a hex value. +5. [Materializations](/docs/build/materializations) are strategies for persisting dbt models in a warehouse, with `tables` and `views` being the most commonly utilized types. By default, all dbt models are materialized as views and other materialization types can be configured in the `dbt_project.yml` file or in a model itself. It’s very important to note *Python models can only be materialized as tables or incremental models.* Since all our Python models exist under `marts`, the following portion of our `dbt_project.yml` ensures no errors will occur when we run our Python models. Starting with [dbt version 1.4](/docs/dbt-versions/core-upgrade/upgrading-to-v1.4#updates-to-python-models), Python files will automatically get materialized as tables even if not explicitly specified. + + ```yaml + marts:     + +materialized: table + ``` + +## Create folders and organize files + +dbt Labs has developed a [project structure guide](/best-practices/how-we-structure/1-guide-overview/) that contains a number of recommendations for how to build the folder structure for your project. Do check out that guide if you want to learn more. Right now we are going to create some folders to organize our files: + +- Sources — This is our Formula 1 dataset and it will be defined in a source YAML file. +- Staging models — These models have a 1:1 with their source table. +- Intermediate — This is where we will be joining some Formula staging models. +- Marts models — Here is where we perform our major transformations. It contains these subfolders: + - aggregates + - core + - ml + +1. In your file tree, use your cursor and hover over the `models` subdirectory, click the three dots **…** that appear to the right of the folder name, then select **Create Folder**. We're going to add two new folders to the file path, `staging` and `formula1` (in that order) by typing `staging/formula1` into the file path. + + + + + - If you click into your `models` directory now, you should see the new `staging` folder nested within `models` and the `formula1` folder nested within `staging`. +2. Create two additional folders the same as the last step. Within the `models` subdirectory, create new directories `marts/core`. + +3. We will need to create a few more folders and subfolders using the UI. After you create all the necessary folders, your folder tree should look like this when it's all done: + + + +Remember you can always reference the entire project in [GitHub](https://github.com/dbt-labs/python-snowpark-formula1/tree/python-formula1) to view the complete folder and file strucutre. + +## Create source and staging models + +In this section, we are going to create our source and staging models. + +Sources allow us to create a dependency between our source database object and our staging models which will help us when we look at later. Also, if your source changes database or schema, you only have to update it in your `f1_sources.yml` file rather than updating all of the models it might be used in. + +Staging models are the base of our project, where we bring all the individual components we're going to use to build our more complex and useful models into the project. + +Since we want to focus on dbt and Python in this workshop, check out our [sources](/docs/build/sources) and [staging](/best-practices/how-we-structure/2-staging) docs if you want to learn more (or take our [dbt Fundamentals](https://courses.getdbt.com/collections) course which covers all of our core functionality). + +### 1. Create sources + +We're going to be using each of our 8 Formula 1 tables from our `formula1` database under the `raw`  schema for our transformations and we want to create those tables as sources in our project. + +1. Create a new file called `f1_sources.yml` with the following file path: `models/staging/formula1/f1_sources.yml`. +2. Then, paste the following code into the file before saving it: + +```yaml +version: 2 + +sources: + - name: formula1 + description: formula 1 datasets with normalized tables + database: formula1 + schema: raw + tables: + - name: circuits + description: One record per circuit, which is the specific race course. + columns: + - name: circuitid + tests: + - unique + - not_null + - name: constructors + description: One record per constructor. Constructors are the teams that build their formula 1 cars. + columns: + - name: constructorid + tests: + - unique + - not_null + - name: drivers + description: One record per driver. This table gives details about the driver. + columns: + - name: driverid + tests: + - unique + - not_null + - name: lap_times + description: One row per lap in each race. Lap times started being recorded in this dataset in 1984 and joined through driver_id. + - name: pit_stops + description: One row per pit stop. Pit stops do not have their own id column, the combination of the race_id and driver_id identify the pit stop. + columns: + - name: stop + tests: + - accepted_values: + values: [1,2,3,4,5,6,7,8] + quote: false + - name: races + description: One race per row. Importantly this table contains the race year to understand trends. + columns: + - name: raceid + tests: + - unique + - not_null + - name: results + columns: + - name: resultid + tests: + - unique + - not_null + description: One row per result. The main table that we join out for grid and position variables. + - name: status + description: One status per row. The status contextualizes whether the race was finished or what issues arose e.g. collisions, engine, etc. + columns: + - name: statusid + tests: + - unique + - not_null +``` + +### 2. Create staging models + +The next step is to set up the staging models for each of the 8 source tables. Given the one-to-one relationship between staging models and their corresponding source tables, we'll build 8 staging models here. We know it’s a lot and in the future, we will seek to update the workshop to make this step less repetitive and more efficient. This step is also a good representation of the real world of data, where you have multiple hierarchical tables that you will need to join together! + +1. Let's go in alphabetical order to easily keep track of all our staging models! Create a new file called `stg_f1_circuits.sql` with this file path `models/staging/formula1/stg_f1_circuits.sql`. Then, paste the following code into the file before saving it: + + ```sql + with + + source as ( + + select * from {{ source('formula1','circuits') }} + + ), + + renamed as ( + select + circuitid as circuit_id, + circuitref as circuit_ref, + name as circuit_name, + location, + country, + lat as latitude, + lng as longitude, + alt as altitude + -- omit the url + from source + ) + select * from renamed + ``` + + All we're doing here is pulling the source data into the model using the `source` function, renaming some columns, and omitting the column `url` with a commented note since we don’t need it for our analysis. + +1. Create `stg_f1_constructors.sql` with this file path `models/staging/formula1/stg_f1_constructors.sql`. Paste the following code into it before saving the file: + + ```sql + with + + source as ( + + select * from {{ source('formula1','constructors') }} + + ), + + renamed as ( + select + constructorid as constructor_id, + constructorref as constructor_ref, + name as constructor_name, + nationality as constructor_nationality + -- omit the url + from source + ) + + select * from renamed + ``` + + We have 6 other stages models to create. We can do this by creating new files, then copy and paste the code into our `staging` folder. + +1. Create `stg_f1_drivers.sql` with this file path `models/staging/formula1/stg_f1_drivers.sql`: + + ```sql + with + + source as ( + + select * from {{ source('formula1','drivers') }} + + ), + + renamed as ( + select + driverid as driver_id, + driverref as driver_ref, + number as driver_number, + code as driver_code, + forename, + surname, + dob as date_of_birth, + nationality as driver_nationality + -- omit the url + from source + ) + + select * from renamed + ``` + +1. Create `stg_f1_lap_times.sql` with this file path `models/staging/formula1/stg_f1_lap_times.sql`: + + ```sql + with + + source as ( + + select * from {{ source('formula1','lap_times') }} + + ), + + renamed as ( + select + raceid as race_id, + driverid as driver_id, + lap, + position, + time as lap_time_formatted, + milliseconds as lap_time_milliseconds + from source + ) + + select * from renamed + ``` + +1. Create `stg_f1_pit_stops.sql` with this file path `models/staging/formula1/stg_f1_pit_stops.sql`: + + ```sql + with + + source as ( + + select * from {{ source('formula1','pit_stops') }} + + ), + + renamed as ( + select + raceid as race_id, + driverid as driver_id, + stop as stop_number, + lap, + time as lap_time_formatted, + duration as pit_stop_duration_seconds, + milliseconds as pit_stop_milliseconds + from source + ) + + select * from renamed + order by pit_stop_duration_seconds desc + ``` + +1. Create `stg_f1_races.sql` with this file path `models/staging/formula1/stg_f1_races.sql`: + + ```sql + with + + source as ( + + select * from {{ source('formula1','races') }} + + ), + + renamed as ( + select + raceid as race_id, + year as race_year, + round as race_round, + circuitid as circuit_id, + name as circuit_name, + date as race_date, + to_time(time) as race_time, + -- omit the url + fp1_date as free_practice_1_date, + fp1_time as free_practice_1_time, + fp2_date as free_practice_2_date, + fp2_time as free_practice_2_time, + fp3_date as free_practice_3_date, + fp3_time as free_practice_3_time, + quali_date as qualifying_date, + quali_time as qualifying_time, + sprint_date, + sprint_time + from source + ) + + select * from renamed + ``` + +1. Create `stg_f1_results.sql` with this file path `models/staging/formula1/stg_f1_results.sql`: + + ```sql + with + + source as ( + + select * from {{ source('formula1','results') }} + + ), + + renamed as ( + select + resultid as result_id, + raceid as race_id, + driverid as driver_id, + constructorid as constructor_id, + number as driver_number, + grid, + position::int as position, + positiontext as position_text, + positionorder as position_order, + points, + laps, + time as results_time_formatted, + milliseconds as results_milliseconds, + fastestlap as fastest_lap, + rank as results_rank, + fastestlaptime as fastest_lap_time_formatted, + fastestlapspeed::decimal(6,3) as fastest_lap_speed, + statusid as status_id + from source + ) + + select * from renamed + ``` + +1. Last one! Create `stg_f1_status.sql` with this file path: `models/staging/formula1/stg_f1_status.sql`: + + ```sql + with + + source as ( + + select * from {{ source('formula1','status') }} + + ), + + renamed as ( + select + statusid as status_id, + status + from source + ) + + select * from renamed + ``` + + After the source and all the staging models are complete for each of the 8 tables, your staging folder should look like this: + + + +1. It’s a good time to delete our example folder since these two models are extraneous to our formula1 pipeline and `my_first_model` fails a `not_null` test that we won’t spend time investigating. dbt Cloud will warn us that this folder will be permanently deleted, and we are okay with that so select **Delete**. + + + +1. Now that the staging models are built and saved, it's time to create the models in our development schema in Snowflake. To do this we're going to enter into the command line `dbt build` to run all of the models in our project, which includes the 8 new staging models and the existing example models. + + Your run should complete successfully and you should see green checkmarks next to all of your models in the run results. We built our 8 staging models as views and ran 13 source tests that we configured in the `f1_sources.yml` file with not that much code, pretty cool! + + + + Let's take a quick look in Snowflake, refresh database objects, open our development schema, and confirm that the new models are there. If you can see them, then we're good to go! + + + + Before we move onto the next section, be sure to commit your new models to your Git branch. Click **Commit and push** and give your commit a message like `profile, sources, and staging setup` before moving on. + +## Transform SQL + +Now that we have all our sources and staging models done, it's time to move into where dbt shines — transformation! + +We need to: + +- Create some intermediate tables to join tables that aren’t hierarchical +- Create core tables for business intelligence (BI) tool ingestion +- Answer the two questions about: + - fastest pit stops + - lap time trends about our Formula 1 data by creating aggregate models using python! + +### Intermediate models + +We need to join lots of reference tables to our results table to create a human readable dataframe. What does this mean? For example, we don’t only want to have the numeric `status_id` in our table, we want to be able to read in a row of data that a driver could not finish a race due to engine failure (`status_id=5`). + +By now, we are pretty good at creating new files in the correct directories so we won’t cover this in detail. All intermediate models should be created in the path `models/intermediate`. + +1. Create a new file called `int_lap_times_years.sql`. In this model, we are joining our lap time and race information so we can look at lap times over years. In earlier Formula 1 eras, lap times were not recorded (only final results), so we filter out records where lap times are null. + + ```sql + with lap_times as ( + + select * from {{ ref('stg_f1_lap_times') }} + + ), + + races as ( + + select * from {{ ref('stg_f1_races') }} + + ), + + expanded_lap_times_by_year as ( + select + lap_times.race_id, + driver_id, + race_year, + lap, + lap_time_milliseconds + from lap_times + left join races + on lap_times.race_id = races.race_id + where lap_time_milliseconds is not null + ) + + select * from expanded_lap_times_by_year + ``` + +2. Create a file called `in_pit_stops.sql`. Pit stops are a many-to-one (M:1) relationship with our races. We are creating a feature called `total_pit_stops_per_race` by partitioning over our `race_id` and `driver_id`, while preserving individual level pit stops for rolling average in our next section. + + ```sql + with stg_f1__pit_stops as + ( + select * from {{ ref('stg_f1_pit_stops') }} + ), + + pit_stops_per_race as ( + select + race_id, + driver_id, + stop_number, + lap, + lap_time_formatted, + pit_stop_duration_seconds, + pit_stop_milliseconds, + max(stop_number) over (partition by race_id,driver_id) as total_pit_stops_per_race + from stg_f1__pit_stops + ) + + select * from pit_stops_per_race + ``` + +3. Create a file called `int_results.sql`. Here we are using 4 of our tables — `races`, `drivers`, `constructors`, and `status` — to give context to our `results` table. We are now able to calculate a new feature `drivers_age_years` by bringing the `date_of_birth` and `race_year` into the same table. We are also creating a column to indicate if the driver did not finish (dnf) the race, based upon if their `position` was null called, `dnf_flag`. + + ```sql + with results as ( + + select * from {{ ref('stg_f1_results') }} + + ), + + races as ( + + select * from {{ ref('stg_f1_races') }} + + ), + + drivers as ( + + select * from {{ ref('stg_f1_drivers') }} + + ), + + constructors as ( + + select * from {{ ref('stg_f1_constructors') }} + ), + + status as ( + + select * from {{ ref('stg_f1_status') }} + ), + + int_results as ( + select + result_id, + results.race_id, + race_year, + race_round, + circuit_id, + circuit_name, + race_date, + race_time, + results.driver_id, + results.driver_number, + forename ||' '|| surname as driver, + cast(datediff('year', date_of_birth, race_date) as int) as drivers_age_years, + driver_nationality, + results.constructor_id, + constructor_name, + constructor_nationality, + grid, + position, + position_text, + position_order, + points, + laps, + results_time_formatted, + results_milliseconds, + fastest_lap, + results_rank, + fastest_lap_time_formatted, + fastest_lap_speed, + results.status_id, + status, + case when position is null then 1 else 0 end as dnf_flag + from results + left join races + on results.race_id=races.race_id + left join drivers + on results.driver_id = drivers.driver_id + left join constructors + on results.constructor_id = constructors.constructor_id + left join status + on results.status_id = status.status_id + ) + + select * from int_results + ``` + +1. Create a *Markdown* file `intermediate.md` that we will go over in depth during the [Testing](/guides/dbt-ecosystem/dbt-python-snowpark/13-testing) and [Documentation](/guides/dbt-ecosystem/dbt-python-snowpark/14-documentation) sections. + + ```markdown + # the intent of this .md is to allow for multi-line long form explanations for our intermediate transformations + + # below are descriptions + {% docs int_results %} In this query we want to join out other important information about the race results to have a human readable table about results, races, drivers, constructors, and status. + We will have 4 left joins onto our results table. {% enddocs %} + + {% docs int_pit_stops %} There are many pit stops within one race, aka a M:1 relationship. + We want to aggregate this so we can properly join pit stop information without creating a fanout. {% enddocs %} + + {% docs int_lap_times_years %} Lap times are done per lap. We need to join them out to the race year to understand yearly lap time trends. {% enddocs %} + ``` + +1. Create a *YAML* file `intermediate.yml` that we will go over in depth during the [Testing](/guides/dbt-ecosystem/dbt-python-snowpark/13-testing) and [Documentation](/guides/dbt-ecosystem/dbt-python-snowpark/14-documentation) sections. + + ```yaml + version: 2 + + models: + - name: int_results + description: '{{ doc("int_results") }}' + - name: int_pit_stops + description: '{{ doc("int_pit_stops") }}' + - name: int_lap_times_years + description: '{{ doc("int_lap_times_years") }}' + ``` + + That wraps up the intermediate models we need to create our core models! + +### Core models + +1. Create a file `fct_results.sql`. This is what I like to refer to as the “mega table” — a really large denormalized table with all our context added in at row level for human readability. Importantly, we have a table `circuits` that is linked through the table `races`. When we joined `races` to `results` in `int_results.sql` we allowed our tables to make the connection from `circuits` to `results` in `fct_results.sql`. We are only taking information about pit stops at the result level so our join would not cause a [fanout](https://community.looker.com/technical-tips-tricks-1021/what-is-a-fanout-23327). + + ```sql + with int_results as ( + + select * from {{ ref('int_results') }} + + ), + + int_pit_stops as ( + select + race_id, + driver_id, + max(total_pit_stops_per_race) as total_pit_stops_per_race + from {{ ref('int_pit_stops') }} + group by 1,2 + ), + + circuits as ( + + select * from {{ ref('stg_f1_circuits') }} + ), + base_results as ( + select + result_id, + int_results.race_id, + race_year, + race_round, + int_results.circuit_id, + int_results.circuit_name, + circuit_ref, + location, + country, + latitude, + longitude, + altitude, + total_pit_stops_per_race, + race_date, + race_time, + int_results.driver_id, + driver, + driver_number, + drivers_age_years, + driver_nationality, + constructor_id, + constructor_name, + constructor_nationality, + grid, + position, + position_text, + position_order, + points, + laps, + results_time_formatted, + results_milliseconds, + fastest_lap, + results_rank, + fastest_lap_time_formatted, + fastest_lap_speed, + status_id, + status, + dnf_flag + from int_results + left join circuits + on int_results.circuit_id=circuits.circuit_id + left join int_pit_stops + on int_results.driver_id=int_pit_stops.driver_id and int_results.race_id=int_pit_stops.race_id + ) + + select * from base_results + ``` + +1. Create the file `pit_stops_joined.sql`. Our results and pit stops are at different levels of dimensionality (also called grain). Simply put, we have multiple pit stops per a result. Since we are interested in understanding information at the pit stop level with information about race year and constructor, we will create a new table `pit_stops_joined.sql` where each row is per pit stop. Our new table tees up our aggregation in Python. + + ```sql + with base_results as ( + + select * from {{ ref('fct_results') }} + + ), + + pit_stops as ( + + select * from {{ ref('int_pit_stops') }} + + ), + + pit_stops_joined as ( + + select + base_results.race_id, + race_year, + base_results.driver_id, + constructor_id, + constructor_name, + stop_number, + lap, + lap_time_formatted, + pit_stop_duration_seconds, + pit_stop_milliseconds + from base_results + left join pit_stops + on base_results.race_id=pit_stops.race_id and base_results.driver_id=pit_stops.driver_id + ) + select * from pit_stops_joined + ``` + +1. Enter in the command line and execute `dbt build` to build out our entire pipeline to up to this point. Don’t worry about “overriding” your previous models – dbt workflows are designed to be idempotent so we can run them again and expect the same results. + +1. Let’s talk about our lineage so far. It’s looking good 😎. We’ve shown how SQL can be used to make data type, column name changes, and handle hierarchical joins really well; all while building out our automated lineage! + + + +1. Time to **Commit and push** our changes and give your commit a message like `intermediate and fact models` before moving on. + +## Running dbt Python models + +Up until now, SQL has been driving the project (car pun intended) for data cleaning and hierarchical joining. Now it’s time for Python to take the wheel (car pun still intended) for the rest of our lab! For more information about running Python models on dbt, check out our [docs](/docs/build/python-models). To learn more about dbt python works under the hood, check out [Snowpark for Python](https://docs.snowflake.com/en/developer-guide/snowpark/python/index.html), which makes running dbt Python models possible. + +There are quite a few differences between SQL and Python in terms of the dbt syntax and DDL, so we’ll be breaking our code and model runs down further for our python models. + +### Pit stop analysis + +First, we want to find out: which constructor had the fastest pit stops in 2021? (constructor is a Formula 1 team that builds or “constructs” the car). + +1. Create a new file called `fastest_pit_stops_by_constructor.py` in our `aggregates` (this is the first time we are using the `.py` extension!). +2. Copy the following code into the file: + + ```python + import numpy as np + import pandas as pd + + def model(dbt, session): + # dbt configuration + dbt.config(packages=["pandas","numpy"]) + + # get upstream data + pit_stops_joined = dbt.ref("pit_stops_joined").to_pandas() + + # provide year so we do not hardcode dates + year=2021 + + # describe the data + pit_stops_joined["PIT_STOP_SECONDS"] = pit_stops_joined["PIT_STOP_MILLISECONDS"]/1000 + fastest_pit_stops = pit_stops_joined[(pit_stops_joined["RACE_YEAR"]==year)].groupby(by="CONSTRUCTOR_NAME")["PIT_STOP_SECONDS"].describe().sort_values(by='mean') + fastest_pit_stops.reset_index(inplace=True) + fastest_pit_stops.columns = fastest_pit_stops.columns.str.upper() + + return fastest_pit_stops.round(2) + ``` + +3. Let’s break down what this code is doing step by step: + - First, we are importing the Python libraries that we are using. A *library* is a reusable chunk of code that someone else wrote that you may want to include in your programs/projects. We are using `numpy` and `pandas`in this Python model. This is similar to a dbt *package*, but our Python libraries do *not* persist across the entire project. + - Defining a function called `model` with the parameter `dbt` and `session`. The parameter `dbt` is a class compiled by dbt, which enables you to run your Python code in the context of your dbt project and DAG. The parameter `session` is a class representing your Snowflake’s connection to the Python backend. The `model` function *must return a single DataFrame*. You can see that all the data transformation happening is within the body of the `model` function that the `return` statement is tied to. + - Then, within the context of our dbt model library, we are passing in a configuration of which packages we need using `dbt.config(packages=["pandas","numpy"])`. + - Use the `.ref()` function to retrieve the data frame `pit_stops_joined` that we created in our last step using SQL. We cast this to a pandas dataframe (by default it's a Snowpark Dataframe). + - Create a variable named `year` so we aren’t passing a hardcoded value. + - Generate a new column called `PIT_STOP_SECONDS` by dividing the value of `PIT_STOP_MILLISECONDS` by 1000. + - Create our final data frame `fastest_pit_stops` that holds the records where year is equal to our year variable (2021 in this case), then group the data frame by `CONSTRUCTOR_NAME` and use the `describe()` and `sort_values()` and in descending order. This will make our first row in the new aggregated data frame the team with the fastest pit stops over an entire competition year. + - Finally, it resets the index of the `fastest_pit_stops` data frame. The `reset_index()` method allows you to reset the index back to the default 0, 1, 2, etc indexes. By default, this method will keep the "old" indexes in a column named "index"; to avoid this, use the drop parameter. Think of this as keeping your data “flat and square” as opposed to “tiered”. If you are new to Python, now might be a good time to [learn about indexes for 5 minutes](https://towardsdatascience.com/the-basics-of-indexing-and-slicing-python-lists-2d12c90a94cf) since it's the foundation of how Python retrieves, slices, and dices data. The `inplace` argument means we override the existing data frame permanently. Not to fear! This is what we want to do to avoid dealing with multi-indexed dataframes! + - Convert our Python column names to all uppercase using `.upper()`, so Snowflake recognizes them. + - Finally we are returning our dataframe with 2 decimal places for all the columns using the `round()` method. +4. Zooming out a bit, what are we doing differently here in Python from our typical SQL code: + - Method chaining is a technique in which multiple methods are called on an object in a single statement, with each method call modifying the result of the previous one. The methods are called in a chain, with the output of one method being used as the input for the next one. The technique is used to simplify the code and make it more readable by eliminating the need for intermediate variables to store the intermediate results. + - The way you see method chaining in Python is the syntax `.().()`. For example, `.describe().sort_values(by='mean')` where the `.describe()` method is chained to `.sort_values()`. + - The `.describe()` method is used to generate various summary statistics of the dataset. It's used on pandas dataframe. It gives a quick and easy way to get the summary statistics of your dataset without writing multiple lines of code. + - The `.sort_values()` method is used to sort a pandas dataframe or a series by one or multiple columns. The method sorts the data by the specified column(s) in ascending or descending order. It is the pandas equivalent to `order by` in SQL. + + We won’t go as in depth for our subsequent scripts, but will continue to explain at a high level what new libraries, functions, and methods are doing. + +5. Build the model using the UI which will **execute**: + + ```bash + dbt run --select fastest_pit_stops_by_constructor + ``` + + in the command bar. + + Let’s look at some details of our first Python model to see what our model executed. There two major differences we can see while running a Python model compared to an SQL model: + + - Our Python model was executed as a stored procedure. Snowflake needs a way to know that it's meant to execute this code in a Python runtime, instead of interpreting in a SQL runtime. We do this by creating a Python stored proc, called by a SQL command. + - The `snowflake-snowpark-python` library has been picked up to execute our Python code. Even though this wasn’t explicitly stated this is picked up by the dbt class object because we need our Snowpark package to run Python! + + Python models take a bit longer to run than SQL models, however we could always speed this up by using [Snowpark-optimized Warehouses](https://docs.snowflake.com/en/user-guide/warehouses-snowpark-optimized.html) if we wanted to. Our data is sufficiently small, so we won’t worry about creating a separate warehouse for Python versus SQL files today. + + + The rest of our **Details** output gives us information about how dbt and Snowpark for Python are working together to define class objects and apply a specific set of methods to run our models. + + So which constructor had the fastest pit stops in 2021? Let’s look at our data to find out! + +6. We can't preview Python models directly, so let’s create a new file using the **+** button or the Control-n shortcut to create a new scratchpad. +7. Reference our Python model: + + ```sql + select * from {{ ref('fastest_pit_stops_by_constructor') }} + ``` + + and preview the output: + + + Not only did Red Bull have the fastest average pit stops by nearly 40 seconds, they also had the smallest standard deviation, meaning they are both fastest and most consistent teams in pit stops. By using the `.describe()` method we were able to avoid verbose SQL requiring us to create a line of code per column and repetitively use the `PERCENTILE_COUNT()` function. + + Now we want to find the lap time average and rolling average through the years (is it generally trending up or down)? + +8. Create a new file called `lap_times_moving_avg.py` in our `aggregates` folder. +9. Copy the following code into the file: + + ```python + import pandas as pd + + def model(dbt, session): + # dbt configuration + dbt.config(packages=["pandas"]) + + # get upstream data + lap_times = dbt.ref("int_lap_times_years").to_pandas() + + # describe the data + lap_times["LAP_TIME_SECONDS"] = lap_times["LAP_TIME_MILLISECONDS"]/1000 + lap_time_trends = lap_times.groupby(by="RACE_YEAR")["LAP_TIME_SECONDS"].mean().to_frame() + lap_time_trends.reset_index(inplace=True) + lap_time_trends["LAP_MOVING_AVG_5_YEARS"] = lap_time_trends["LAP_TIME_SECONDS"].rolling(5).mean() + lap_time_trends.columns = lap_time_trends.columns.str.upper() + + return lap_time_trends.round(1) + ``` + +10. Breaking down our code a bit: + - We’re only using the `pandas` library for this model and casting it to a pandas data frame `.to_pandas()`. + - Generate a new column called `LAP_TIMES_SECONDS` by dividing the value of `LAP_TIME_MILLISECONDS` by 1000. + - Create the final dataframe. Get the lap time per year. Calculate the mean series and convert to a data frame. + - Reset the index. + - Calculate the rolling 5 year mean. + - Round our numeric columns to one decimal place. +11. Now, run this model by using the UI **Run model** or + + ```bash + dbt run --select lap_times_moving_avg + ``` + + in the command bar. + +12. Once again previewing the output of our data using the same steps for our `fastest_pit_stops_by_constructor` model. + + + We can see that it looks like lap times are getting consistently faster over time. Then in 2010 we see an increase occur! Using outside subject matter context, we know that significant rule changes were introduced to Formula 1 in 2010 and 2011 causing slower lap times. + +13. Now is a good time to checkpoint and commit our work to Git. Click **Commit and push** and give your commit a message like `aggregate python models` before moving on. + +### The dbt model, .source(), .ref() and .config() functions + +Let’s take a step back before starting machine learning to both review and go more in-depth at the methods that make running dbt python models possible. If you want to know more outside of this lab’s explanation read the documentation [here](/docs/build/python-models?version=1.3). + +- dbt model(dbt, session). For starters, each Python model lives in a .py file in your models/ folder. It defines a function named `model()`, which takes two parameters: + - dbt — A class compiled by dbt Core, unique to each model, enables you to run your Python code in the context of your dbt project and DAG. + - session — A class representing your data platform’s connection to the Python backend. The session is needed to read in tables as DataFrames and to write DataFrames back to tables. In PySpark, by convention, the SparkSession is named spark, and available globally. For consistency across platforms, we always pass it into the model function as an explicit argument called session. +- The `model()` function must return a single DataFrame. On Snowpark (Snowflake), this can be a Snowpark or pandas DataFrame. +- `.source()` and `.ref()` functions. Python models participate fully in dbt's directed acyclic graph (DAG) of transformations. If you want to read directly from a raw source table, use `dbt.source()`. We saw this in our earlier section using SQL with the source function. These functions have the same execution, but with different syntax. Use the `dbt.ref()` method within a Python model to read data from other models (SQL or Python). These methods return DataFrames pointing to the upstream source, model, seed, or snapshot. +- `.config()`. Just like SQL models, there are three ways to configure Python models: + - In a dedicated `.yml` file, within the `models/` directory + - Within the model's `.py` file, using the `dbt.config()` method + - Calling the `dbt.config()` method will set configurations for your model within your `.py` file, similar to the `{{ config() }} macro` in `.sql` model files: + + ```python + def model(dbt, session): + + # setting configuration + dbt.config(materialized="table") + ``` + - There's a limit to how complex you can get with the `dbt.config()` method. It accepts only literal values (strings, booleans, and numeric types). Passing another function or a more complex data structure is not possible. The reason is that dbt statically analyzes the arguments to `.config()` while parsing your model without executing your Python code. If you need to set a more complex configuration, we recommend you define it using the config property in a [YAML file](/reference/resource-properties/config). Learn more about configurations [here](/reference/model-configs). + +## Prepare for machine learning: cleaning, encoding, and splits + +Now that we’ve gained insights and business intelligence about Formula 1 at a descriptive level, we want to extend our capabilities into prediction. We’re going to take the scenario where we censor the data. This means that we will pretend that we will train a model using earlier data and apply it to future data. In practice, this means we’ll take data from 2010-2019 to train our model and then predict 2020 data. + +In this section, we’ll be preparing our data to predict the final race position of a driver. + +At a high level we’ll be: + +- Creating new prediction features and filtering our dataset to active drivers +- Encoding our data (algorithms like numbers) and simplifying our target variable called `position` +- Splitting our dataset into training, testing, and validation + +### ML data prep + +1. To keep our project organized, we’ll need to create two new subfolders in our `ml` directory. Under the `ml` folder, make the subfolders `prep` and `train_predict`. +2. Create a new file under `ml/prep` called `ml_data_prep`. Copy the following code into the file and **Save**. + + ```python + import pandas as pd + + def model(dbt, session): + # dbt configuration + dbt.config(packages=["pandas"]) + + # get upstream data + fct_results = dbt.ref("fct_results").to_pandas() + + # provide years so we do not hardcode dates in filter command + start_year=2010 + end_year=2020 + + # describe the data for a full decade + data = fct_results.loc[fct_results['RACE_YEAR'].between(start_year, end_year)] + + # convert string to an integer + data['POSITION'] = data['POSITION'].astype(float) + + # we cannot have nulls if we want to use total pit stops + data['TOTAL_PIT_STOPS_PER_RACE'] = data['TOTAL_PIT_STOPS_PER_RACE'].fillna(0) + + # some of the constructors changed their name over the year so replacing old names with current name + mapping = {'Force India': 'Racing Point', 'Sauber': 'Alfa Romeo', 'Lotus F1': 'Renault', 'Toro Rosso': 'AlphaTauri'} + data['CONSTRUCTOR_NAME'].replace(mapping, inplace=True) + + # create confidence metrics for drivers and constructors + dnf_by_driver = data.groupby('DRIVER').sum()['DNF_FLAG'] + driver_race_entered = data.groupby('DRIVER').count()['DNF_FLAG'] + driver_dnf_ratio = (dnf_by_driver/driver_race_entered) + driver_confidence = 1-driver_dnf_ratio + driver_confidence_dict = dict(zip(driver_confidence.index,driver_confidence)) + + dnf_by_constructor = data.groupby('CONSTRUCTOR_NAME').sum()['DNF_FLAG'] + constructor_race_entered = data.groupby('CONSTRUCTOR_NAME').count()['DNF_FLAG'] + constructor_dnf_ratio = (dnf_by_constructor/constructor_race_entered) + constructor_relaiblity = 1-constructor_dnf_ratio + constructor_relaiblity_dict = dict(zip(constructor_relaiblity.index,constructor_relaiblity)) + + data['DRIVER_CONFIDENCE'] = data['DRIVER'].apply(lambda x:driver_confidence_dict[x]) + data['CONSTRUCTOR_RELAIBLITY'] = data['CONSTRUCTOR_NAME'].apply(lambda x:constructor_relaiblity_dict[x]) + + #removing retired drivers and constructors + active_constructors = ['Renault', 'Williams', 'McLaren', 'Ferrari', 'Mercedes', + 'AlphaTauri', 'Racing Point', 'Alfa Romeo', 'Red Bull', + 'Haas F1 Team'] + active_drivers = ['Daniel Ricciardo', 'Kevin Magnussen', 'Carlos Sainz', + 'Valtteri Bottas', 'Lance Stroll', 'George Russell', + 'Lando Norris', 'Sebastian Vettel', 'Kimi Räikkönen', + 'Charles Leclerc', 'Lewis Hamilton', 'Daniil Kvyat', + 'Max Verstappen', 'Pierre Gasly', 'Alexander Albon', + 'Sergio Pérez', 'Esteban Ocon', 'Antonio Giovinazzi', + 'Romain Grosjean','Nicholas Latifi'] + + # create flags for active drivers and constructors so we can filter downstream + data['ACTIVE_DRIVER'] = data['DRIVER'].apply(lambda x: int(x in active_drivers)) + data['ACTIVE_CONSTRUCTOR'] = data['CONSTRUCTOR_NAME'].apply(lambda x: int(x in active_constructors)) + + return data + ``` + +3. As usual, let’s break down what we are doing in this Python model: + - We’re first referencing our upstream `fct_results` table and casting it to a pandas dataframe. + - Filtering on years 2010-2020 since we’ll need to clean all our data we are using for prediction (both training and testing). + - Filling in empty data for `total_pit_stops` and making a mapping active constructors and drivers to avoid erroneous predictions + - ⚠️ You might be wondering why we didn’t do this upstream in our `fct_results` table! The reason for this is that we want our machine learning cleanup to reflect the year 2020 for our predictions and give us an up-to-date team name. However, for business intelligence purposes we can keep the historical data at that point in time. Instead of thinking of one table as “one source of truth” we are creating different datasets fit for purpose: one for historical descriptions and reporting and another for relevant predictions. + - Create new confidence features for drivers and constructors + - Generate flags for the constructors and drivers that were active in 2020 +4. Execute the following in the command bar: + + ```bash + dbt run --select ml_data_prep + ``` + +5. There are more aspects we could consider for this project, such as normalizing the driver confidence by the number of races entered. Including this would help account for a driver’s history and consider whether they are a new or long-time driver. We’re going to keep it simple for now, but these are some of the ways we can expand and improve our machine learning dbt projects. Breaking down our machine learning prep model: + - Lambda functions — We use some lambda functions to transform our data without having to create a fully-fledged function using the `def` notation. So what exactly are lambda functions? + - In Python, a lambda function is a small, anonymous function defined using the keyword "lambda". Lambda functions are used to perform a quick operation, such as a mathematical calculation or a transformation on a list of elements. They are often used in conjunction with higher-order functions, such as `apply`, `map`, `filter`, and `reduce`. + - `.apply()` method — We used `.apply()` to pass our functions into our lambda expressions to the columns and perform this multiple times in our code. Let’s explain apply a little more: + - The `.apply()` function in the pandas library is used to apply a function to a specified axis of a DataFrame or a Series. In our case the function we used was our lambda function! + - The `.apply()` function takes two arguments: the first is the function to be applied, and the second is the axis along which the function should be applied. The axis can be specified as 0 for rows or 1 for columns. We are using the default value of 0 so we aren’t explicitly writing it in the code. This means that the function will be applied to each *row* of the DataFrame or Series. +6. Let’s look at the preview of our clean dataframe after running our `ml_data_prep` model: + + +### Covariate encoding + +In this next part, we’ll be performing covariate encoding. Breaking down this phrase a bit, a *covariate* is a variable that is relevant to the outcome of a study or experiment, and *encoding* refers to the process of converting data (such as text or categorical variables) into a numerical format that can be used as input for a model. This is necessary because most machine learning algorithms can only work with numerical data. Algorithms don’t speak languages, have eyes to see images, etc. so we encode our data into numbers so algorithms can perform tasks by using calculations they otherwise couldn’t. + +🧠 We’ll think about this as : “algorithms like numbers”. + +1. Create a new file under `ml/prep` called `covariate_encoding` copy the code below and save. + + ```python + import pandas as pd + import numpy as np + from sklearn.preprocessing import StandardScaler,LabelEncoder,OneHotEncoder + from sklearn.linear_model import LogisticRegression + + def model(dbt, session): + # dbt configuration + dbt.config(packages=["pandas","numpy","scikit-learn"]) + + # get upstream data + data = dbt.ref("ml_data_prep").to_pandas() + + # list out covariates we want to use in addition to outcome variable we are modeling - position + covariates = data[['RACE_YEAR','CIRCUIT_NAME','GRID','CONSTRUCTOR_NAME','DRIVER','DRIVERS_AGE_YEARS','DRIVER_CONFIDENCE','CONSTRUCTOR_RELAIBLITY','TOTAL_PIT_STOPS_PER_RACE','ACTIVE_DRIVER','ACTIVE_CONSTRUCTOR', 'POSITION']] + + # filter covariates on active drivers and constructors + # use fil_cov as short for "filtered_covariates" + fil_cov = covariates[(covariates['ACTIVE_DRIVER']==1)&(covariates['ACTIVE_CONSTRUCTOR']==1)] + + # Encode categorical variables using LabelEncoder + # TODO: we'll update this to both ohe in the future for non-ordinal variables! + le = LabelEncoder() + fil_cov['CIRCUIT_NAME'] = le.fit_transform(fil_cov['CIRCUIT_NAME']) + fil_cov['CONSTRUCTOR_NAME'] = le.fit_transform(fil_cov['CONSTRUCTOR_NAME']) + fil_cov['DRIVER'] = le.fit_transform(fil_cov['DRIVER']) + fil_cov['TOTAL_PIT_STOPS_PER_RACE'] = le.fit_transform(fil_cov['TOTAL_PIT_STOPS_PER_RACE']) + + # Simply target variable "position" to represent 3 meaningful categories in Formula1 + # 1. Podium position 2. Points for team 3. Nothing - no podium or points! + def position_index(x): + if x<4: + return 1 + if x>10: + return 3 + else : + return 2 + + # we are dropping the columns that we filtered on in addition to our training variable + encoded_data = fil_cov.drop(['ACTIVE_DRIVER','ACTIVE_CONSTRUCTOR'],1) + encoded_data['POSITION_LABEL']= encoded_data['POSITION'].apply(lambda x: position_index(x)) + encoded_data_grouped_target = encoded_data.drop(['POSITION'],1) + + return encoded_data_grouped_target + ``` + +2. Execute the following in the command bar: + + ```bash + dbt run --select covariate_encoding + ``` + +3. In this code, we are using a ton of functions from libraries! This is really cool, because we can utilize code other people have developed and bring it into our project simply by using the `import` function. [Scikit-learn](https://scikit-learn.org/stable/), “sklearn” for short, is an extremely popular data science library. Sklearn contains a wide range of machine learning techniques, including supervised and unsupervised learning algorithms, feature scaling and imputation, as well as tools model evaluation and selection. We’ll be using Sklearn for both preparing our covariates and creating models (our next section). +4. Our dataset is pretty small data so we are good to use pandas and `sklearn`. If you have larger data for your own project in mind, consider `dask` or `category_encoders`. +5. Breaking it down a bit more: + - We’re selecting a subset of variables that will be used as predictors for a driver’s position. + - Filter the dataset to only include rows using the active driver and constructor flags we created in the last step. + - The next step is to use the `LabelEncoder` from scikit-learn to convert the categorical variables `CIRCUIT_NAME`, `CONSTRUCTOR_NAME`, `DRIVER`, and `TOTAL_PIT_STOPS_PER_RACE` into numerical values. + - Create a new variable called `POSITION_LABEL`, which is a derived from our position variable. + - 💭 Why are we changing our position variable? There are 20 total positions in Formula 1 and we are grouping them together to simplify the classification and improve performance. We also want to demonstrate you can create a new function within your dbt model! + - Our new `position_label` variable has meaning: + - In Formula1 if you are in: + - Top 3 you get a “podium” position + - Top 10 you gain points that add to your overall season total + - Below top 10 you get no points! + - We are mapping our original variable position to `position_label` to the corresponding places above to 1,2, and 3 respectively. + - Drop the active driver and constructor flags since they were filter criteria and additionally drop our original position variable. + +### Splitting into training and testing datasets + +Now that we’ve cleaned and encoded our data, we are going to further split in by time. In this step, we will create dataframes to use for training and prediction. We’ll be creating two dataframes 1) using data from 2010-2019 for training, and 2) data from 2020 for new prediction inferences. We’ll create variables called `start_year` and `end_year` so we aren’t filtering on hardcasted values (and can more easily swap them out in the future if we want to retrain our model on different timeframes). + +1. Create a file called `train_test_dataset` copy and save the following code: + + ```python + import pandas as pd + + def model(dbt, session): + + # dbt configuration + dbt.config(packages=["pandas"], tags="train") + + # get upstream data + encoding = dbt.ref("covariate_encoding").to_pandas() + + # provide years so we do not hardcode dates in filter command + start_year=2010 + end_year=2019 + + # describe the data for a full decade + train_test_dataset = encoding.loc[encoding['RACE_YEAR'].between(start_year, end_year)] + + return train_test_dataset + ``` + +2. Create a file called `hold_out_dataset_for_prediction` copy and save the following code below. Now we’ll have a dataset with only the year 2020 that we’ll keep as a hold out set that we are going to use similar to a deployment use case. + + ```python + import pandas as pd + + def model(dbt, session): + # dbt configuration + dbt.config(packages=["pandas"], tags="predict") + + # get upstream data + encoding = dbt.ref("covariate_encoding").to_pandas() + + # variable for year instead of hardcoding it + year=2020 + + # filter the data based on the specified year + hold_out_dataset = encoding.loc[encoding['RACE_YEAR'] == year] + + return hold_out_dataset + ``` + +3. Execute the following in the command bar: + + ```bash + dbt run --select train_test_dataset hold_out_dataset_for_prediction + ``` + + To run our temporal data split models, we can use this syntax in the command line to run them both at once. Make sure you use a *space* [syntax](/reference/node-selection/syntax) between the model names to indicate you want to run both! +4. **Commit and push** our changes to keep saving our work as we go using `ml data prep and splits` before moving on. + +👏 Now that we’ve finished our machine learning prep work we can move onto the fun part — training and prediction! + + +## Training a model to predict in machine learning + +We’re ready to start training a model to predict the driver’s position. Now is a good time to pause and take a step back and say, usually in ML projects you’ll try multiple algorithms during development and use an evaluation method such as cross validation to determine which algorithm to use. You can definitely do this in your dbt project, but for the content of this lab we’ll have decided on using a logistic regression to predict position (we actually tried some other algorithms using cross validation outside of this lab such as k-nearest neighbors and a support vector classifier but that didn’t perform as well as the logistic regression and a decision tree that overfit). + +There are 3 areas to break down as we go since we are working at the intersection all within one model file: + +1. Machine Learning +2. Snowflake and Snowpark +3. dbt Python models + +If you haven’t seen code like this before or use joblib files to save machine learning models, we’ll be going over them at a high level and you can explore the links for more technical in-depth along the way! Because Snowflake and dbt have abstracted away a lot of the nitty gritty about serialization and storing our model object to be called again, we won’t go into too much detail here. There’s *a lot* going on here so take it at your pace! + +### Training and saving a machine learning model + +1. Project organization remains key, so let’s make a new subfolder called `train_predict` under the `ml` folder. +2. Now create a new file called `train_test_position` and copy and save the following code: + + ```python + import snowflake.snowpark.functions as F + from sklearn.model_selection import train_test_split + import pandas as pd + from sklearn.metrics import confusion_matrix, balanced_accuracy_score + import io + from sklearn.linear_model import LogisticRegression + from joblib import dump, load + import joblib + import logging + import sys + from joblib import dump, load + + logger = logging.getLogger("mylog") + + def save_file(session, model, path, dest_filename): + input_stream = io.BytesIO() + joblib.dump(model, input_stream) + session._conn.upload_stream(input_stream, path, dest_filename) + return "successfully created file: " + path + + def model(dbt, session): + dbt.config( + packages = ['numpy','scikit-learn','pandas','numpy','joblib','cachetools'], + materialized = "table", + tags = "train" + ) + # Create a stage in Snowflake to save our model file + session.sql('create or replace stage MODELSTAGE').collect() + + #session._use_scoped_temp_objects = False + version = "1.0" + logger.info('Model training version: ' + version) + + # read in our training and testing upstream dataset + test_train_df = dbt.ref("train_test_dataset") + + # cast snowpark df to pandas df + test_train_pd_df = test_train_df.to_pandas() + target_col = "POSITION_LABEL" + + # split out covariate predictors, x, from our target column position_label, y. + split_X = test_train_pd_df.drop([target_col], axis=1) + split_y = test_train_pd_df[target_col] + + # Split out our training and test data into proportions + X_train, X_test, y_train, y_test = train_test_split(split_X, split_y, train_size=0.7, random_state=42) + train = [X_train, y_train] + test = [X_test, y_test] + # now we are only training our one model to deploy + # we are keeping the focus on the workflows and not algorithms for this lab! + model = LogisticRegression() + + # fit the preprocessing pipeline and the model together + model.fit(X_train, y_train) + y_pred = model.predict_proba(X_test)[:,1] + predictions = [round(value) for value in y_pred] + balanced_accuracy = balanced_accuracy_score(y_test, predictions) + + # Save the model to a stage + save_file(session, model, "@MODELSTAGE/driver_position_"+version, "driver_position_"+version+".joblib" ) + logger.info('Model artifact:' + "@MODELSTAGE/driver_position_"+version+".joblib") + + # Take our pandas training and testing dataframes and put them back into snowpark dataframes + snowpark_train_df = session.write_pandas(pd.concat(train, axis=1, join='inner'), "train_table", auto_create_table=True, create_temp_table=True) + snowpark_test_df = session.write_pandas(pd.concat(test, axis=1, join='inner'), "test_table", auto_create_table=True, create_temp_table=True) + + # Union our training and testing data together and add a column indicating train vs test rows + return snowpark_train_df.with_column("DATASET_TYPE", F.lit("train")).union(snowpark_test_df.with_column("DATASET_TYPE", F.lit("test"))) + ``` + +3. Execute the following in the command bar: + + ```bash + dbt run --select train_test_position + ``` + +4. Breaking down our Python script here: + - We’re importing some helpful libraries. + - Defining a function called `save_file()` that takes four parameters: `session`, `model`, `path` and `dest_filename` that will save our logistic regression model file. + - `session` — an object representing a connection to Snowflake. + - `model` — an object that needs to be saved. In this case, it's a Python object that is a scikit-learn that can be serialized with joblib. + - `path` — a string representing the directory or bucket location where the file should be saved. + - `dest_filename` — a string representing the desired name of the file. + - Creating our dbt model + - Within this model we are creating a stage called `MODELSTAGE` to place our logistic regression `joblib` model file. This is really important since we need a place to keep our model to reuse and want to ensure it's there. When using Snowpark commands, it's common to see the `.collect()` method to ensure the action is performed. Think of the session as our “start” and collect as our “end” when [working with Snowpark](https://docs.snowflake.com/en/developer-guide/snowpark/python/working-with-dataframes.html) (you can use other ending methods other than collect). + - Using `.ref()` to connect into our `train_test_dataset` model. + - Now we see the machine learning part of our analysis: + - Create new dataframes for our prediction features from our target variable `position_label`. + - Split our dataset into 70% training (and 30% testing), train_size=0.7 with a `random_state` specified to have repeatable results. + - Specify our model is a logistic regression. + - Fit our model. In a logistic regression this means finding the coefficients that will give the least classification error. + - Round our predictions to the nearest integer since logistic regression creates a probability between for each class and calculate a balanced accuracy to account for imbalances in the target variable. + - Right now our model is only in memory, so we need to use our nifty function `save_file` to save our model file to our Snowflake stage. We save our model as a joblib file so Snowpark can easily call this model object back to create predictions. We really don’t need to know much else as a data practitioner unless we want to. It’s worth noting that joblib files aren’t able to be queried directly by SQL. To do this, we would need to transform the joblib file to an SQL querable format such as JSON or CSV (out of scope for this workshop). + - Finally we want to return our dataframe, but create a new column indicating what rows were used for training and those for training. +5. Viewing our output of this model: + + +6. Let’s pop back over to Snowflake and check that our logistic regression model has been stored in our `MODELSTAGE` using the command: + + ```sql + list @modelstage + ``` + + + +7. To investigate the commands run as part of `train_test_position` script, navigate to Snowflake query history to view it **Activity > Query History**. We can view the portions of query that we wrote such as `create or replace stage MODELSTAGE`, but we also see additional queries that Snowflake uses to interpret python code. + + +### Predicting on new data + +1. Create a new file called `predict_position` and copy and save the following code: + + ```python + import logging + import joblib + import pandas as pd + import os + from snowflake.snowpark import types as T + + DB_STAGE = 'MODELSTAGE' + version = '1.0' + # The name of the model file + model_file_path = 'driver_position_'+version + model_file_packaged = 'driver_position_'+version+'.joblib' + + # This is a local directory, used for storing the various artifacts locally + LOCAL_TEMP_DIR = f'/tmp/driver_position' + DOWNLOAD_DIR = os.path.join(LOCAL_TEMP_DIR, 'download') + TARGET_MODEL_DIR_PATH = os.path.join(LOCAL_TEMP_DIR, 'ml_model') + TARGET_LIB_PATH = os.path.join(LOCAL_TEMP_DIR, 'lib') + + # The feature columns that were used during model training + # and that will be used during prediction + FEATURE_COLS = [ + "RACE_YEAR" + ,"CIRCUIT_NAME" + ,"GRID" + ,"CONSTRUCTOR_NAME" + ,"DRIVER" + ,"DRIVERS_AGE_YEARS" + ,"DRIVER_CONFIDENCE" + ,"CONSTRUCTOR_RELAIBLITY" + ,"TOTAL_PIT_STOPS_PER_RACE"] + + def register_udf_for_prediction(p_predictor ,p_session ,p_dbt): + + # The prediction udf + + def predict_position(p_df: T.PandasDataFrame[int, int, int, int, + int, int, int, int, int]) -> T.PandasSeries[int]: + # Snowpark currently does not set the column name in the input dataframe + # The default col names are like 0,1,2,... Hence we need to reset the column + # names to the features that we initially used for training. + p_df.columns = [*FEATURE_COLS] + + # Perform prediction. this returns an array object + pred_array = p_predictor.predict(p_df) + # Convert to series + df_predicted = pd.Series(pred_array) + return df_predicted + + # The list of packages that will be used by UDF + udf_packages = p_dbt.config.get('packages') + + predict_position_udf = p_session.udf.register( + predict_position + ,name=f'predict_position' + ,packages = udf_packages + ) + return predict_position_udf + + def download_models_and_libs_from_stage(p_session): + p_session.file.get(f'@{DB_STAGE}/{model_file_path}/{model_file_packaged}', DOWNLOAD_DIR) + + def load_model(p_session): + # Load the model and initialize the predictor + model_fl_path = os.path.join(DOWNLOAD_DIR, model_file_packaged) + predictor = joblib.load(model_fl_path) + return predictor + + # ------------------------------- + def model(dbt, session): + dbt.config( + packages = ['snowflake-snowpark-python' ,'scipy','scikit-learn' ,'pandas' ,'numpy'], + materialized = "table", + tags = "predict" + ) + session._use_scoped_temp_objects = False + download_models_and_libs_from_stage(session) + predictor = load_model(session) + predict_position_udf = register_udf_for_prediction(predictor, session ,dbt) + + # Retrieve the data, and perform the prediction + hold_out_df = (dbt.ref("hold_out_dataset_for_prediction") + .select(*FEATURE_COLS) + ) + + # Perform prediction. + new_predictions_df = hold_out_df.withColumn("position_predicted" + ,predict_position_udf(*FEATURE_COLS) + ) + + return new_predictions_df + ``` + +2. Execute the following in the command bar: + + ```bash + dbt run --select predict_position + ``` + +3. **Commit and push** our changes to keep saving our work as we go using the commit message `logistic regression model training and application` before moving on. +4. At a high level in this script, we are: + - Retrieving our staged logistic regression model + - Loading the model in + - Placing the model within a user defined function (UDF) to call in line predictions on our driver’s position +5. At a more detailed level: + - Import our libraries. + - Create variables to reference back to the `MODELSTAGE` we just created and stored our model to. + - The temporary file paths we created might look intimidating, but all we’re doing here is programmatically using an initial file path and adding to it to create the following directories: + - LOCAL_TEMP_DIR ➡️ /tmp/driver_position + - DOWNLOAD_DIR ➡️ /tmp/driver_position/download + - TARGET_MODEL_DIR_PATH ➡️ /tmp/driver_position/ml_model + - TARGET_LIB_PATH ➡️ /tmp/driver_position/lib + - Provide a list of our feature columns that we used for model training and will now be used on new data for prediction. + - Next, we are creating our main function `register_udf_for_prediction(p_predictor ,p_session ,p_dbt):`. This function is used to register a user-defined function (UDF) that performs the machine learning prediction. It takes three parameters: `p_predictor` is an instance of the machine learning model, `p_session` is an instance of the Snowflake session, and `p_dbt` is an instance of the dbt library. The function creates a UDF named `predict_churn` which takes a pandas dataframe with the input features and returns a pandas series with the predictions. + - ⚠️ Pay close attention to the whitespace here. We are using a function within a function for this script. + - We have 2 simple functions that are programmatically retrieving our file paths to first get our stored model out of our `MODELSTAGE` and downloaded into the session `download_models_and_libs_from_stage` and then to load the contents of our model in (parameters) in `load_model` to use for prediction. + - Take the model we loaded in and call it `predictor` and wrap it in a UDF. + - Return our dataframe with both the features used to predict and the new label. + +🧠 Another way to read this script is from the bottom up. This can help us progressively see what is going into our final dbt model and work backwards to see how the other functions are being referenced. + +6. Let’s take a look at our predicted position alongside our feature variables. Open a new scratchpad and use the following query. I chose to order by the prediction of who would obtain a podium position: + + ```sql + select * from {{ ref('predict_position') }} order by position_predicted + ``` + +7. We can see that we created predictions in our final dataset, we are ready to move on to testing! + +## Test your data models + +We have now completed building all the models for today’s lab, but how do we know if they meet our assertions? Put another way, how do we know the quality of our data models are any good? This brings us to testing! + +We test data models for mainly two reasons: + +- Ensure that our source data is clean on ingestion before we start data modeling/transformation (aka avoid garbage in, garbage out problem). +- Make sure we don’t introduce bugs in the transformation code we wrote (stop ourselves from creating bad joins/fanouts). + +Testing in dbt comes in two flavors: [generic](/docs/build/tests#generic-tests) and [singular](/docs/build/tests#singular-tests). + +You define them in a test block (similar to a macro) and once defined, you can reference them by name in your `.yml` files (applying them to models, columns, sources, snapshots, and seeds). + +You might be wondering: *what about testing Python models?* + +Since the output of our Python models are tables, we can test SQL and Python models the same way! We don’t have to worry about any syntax differences when testing SQL versus Python data models. This means we use `.yml` and `.sql` files to test our entities (tables, views, etc.). Under the hood, dbt is running an SQL query on our tables to see if they meet assertions. If no rows are returned, dbt will surface a passed test. Conversely, if a test results in returned rows, it will fail or warn depending on the configuration (more on that later). + +### Generic tests + +1. To implement generic out-of-the-box tests dbt comes with, we can use YAML files to specify information about our models. To add generic tests to our aggregates model, create a file called `aggregates.yml`, copy the code block below into the file, and save. + + + ```yaml + version: 2 + + models: + - name: fastest_pit_stops_by_constructor + description: Use the python .describe() method to retrieve summary statistics table about pit stops by constructor. Sort by average stop time ascending so the first row returns the fastest constructor. + columns: + - name: constructor_name + description: team that makes the car + tests: + - unique + + - name: lap_times_moving_avg + description: Use the python .rolling() method to calculate the 5 year rolling average of pit stop times alongside the average for each year. + columns: + - name: race_year + description: year of the race + tests: + - relationships: + to: ref('int_lap_times_years') + field: race_year + ``` + +2. Let’s unpack the code we have here. We have both our aggregates models with the model name to know the object we are referencing and the description of the model that we’ll populate in our documentation. At the column level (a level below our model), we are providing the column name followed by our tests. We want to ensure our `constructor_name` is unique since we used a pandas `groupby` on `constructor_name` in the model `fastest_pit_stops_by_constructor`. Next, we want to ensure our `race_year` has referential integrity from the model we selected from `int_lap_times_years` into our subsequent `lap_times_moving_avg` model. +3. Finally, if we want to see how tests were deployed on sources and SQL models, we can look at other files in our project such as the `f1_sources.yml` we created in our Sources and staging section. + +### Using macros for testing + +1. Under your `macros` folder, create a new file and name it `test_all_values_gte_zero.sql`. Copy the code block below and save the file. For clarity, “gte” is an abbreviation for greater than or equal to. + + + ```sql + {% macro test_all_values_gte_zero(table, column) %} + + select * from {{ ref(table) }} where {{ column }} < 0 + + {% endmacro %} + ``` + +2. Macros in Jinja are pieces of code that can be reused multiple times in our SQL models — they are analogous to "functions" in other programming languages, and are extremely useful if you find yourself repeating code across multiple models. +3. We use the `{% macro %}` to indicate the start of the macro and `{% endmacro %}` for the end. The text after the beginning of the macro block is the name we are giving the macro to later call it. In this case, our macro is called `test_all_values_gte_zero`. Macros take in *arguments* to pass through, in this case the `table` and the `column`. In the body of the macro, we see an SQL statement that is using the `ref` function to dynamically select the table and then the column. You can always view macros without having to run them by using `dbt run-operation`. You can learn more [here](https://docs.getdbt.com/reference/commands/run-operation). +4. Great, now we want to reference this macro as a test! Let’s create a new test file called `macro_pit_stops_mean_is_positive.sql` in our `tests` folder. + + + +5. Copy the following code into the file and save: + + ```sql + {{ + config( + enabled=true, + severity='warn', + tags = ['bi'] + ) + }} + + {{ test_all_values_gte_zero('fastest_pit_stops_by_constructor', 'mean') }} + ``` + +6. In our testing file, we are applying some configurations to the test including `enabled`, which is an optional configuration for disabling models, seeds, snapshots, and tests. Our severity is set to `warn` instead of `error`, which means our pipeline will still continue to run. We have tagged our test with `bi` since we are applying this test to one of our bi models. + +Then, in our final line, we are calling the `test_all_values_gte_zero` macro that takes in our table and column arguments and inputting our table `'fastest_pit_stops_by_constructor'` and the column `'mean'`. + +### Custom singular tests to validate Python models + +The simplest way to define a test is by writing the exact SQL that will return failing records. We call these "singular" tests, because they're one-off assertions usable for a single purpose. + +These tests are defined in `.sql` files, typically in your `tests` directory (as defined by your test-paths config). You can use Jinja in SQL models (including ref and source) in the test definition, just like you can when creating models. Each `.sql` file contains one select statement, and it defines one test. + +Let’s add a custom test that asserts that the moving average of the lap time over the last 5 years is greater than zero (it’s impossible to have time less than 0!). It is easy to assume if this is not the case the data has been corrupted. + +1. Create a file `lap_times_moving_avg_assert_positive_or_null.sql` under the `tests` folder. + + +2. Copy the following code and save the file: + + ```sql + {{ + config( + enabled=true, + severity='error', + tags = ['bi'] + ) + }} + + with lap_times_moving_avg as ( select * from {{ ref('lap_times_moving_avg') }} ) + + select * + from lap_times_moving_avg + where lap_moving_avg_5_years < 0 and lap_moving_avg_5_years is not null + ``` + +### Putting all our tests together + +1. Time to run our tests! Altogether, we have created 4 tests for our 2 Python models: + - `fastest_pit_stops_by_constructor` + - Unique `constructor_name` + - Lap times are greater than 0 or null (to allow for the first leading values in a rolling calculation) + - `lap_times_moving_avg` + - Referential test on `race_year` + - Mean pit stop times are greater than or equal to 0 (no negative time values) +2. To run the tests on both our models, we can use this syntax in the command line to run them both at once, similar to how we did our data splits earlier. + Execute the following in the command bar: + + ```bash + dbt test --select fastest_pit_stops_by_constructor lap_times_moving_avg + ``` + + + +3. All 4 of our tests passed (yay for clean data)! To understand the SQL being run against each of our tables, we can click into the details of the test. +4. Navigating into the **Details** of the `unique_fastest_pit_stops_by_constructor_name`, we can see that each line `constructor_name` should only have one row. + + +## Document your dbt project + +When it comes to documentation, dbt brings together both column and model level descriptions that you can provide as well as details from your Snowflake information schema in a static site for consumption by other data team members and stakeholders. + +We are going to revisit 2 areas of our project to understand our documentation: + +- `intermediate.md` file +- `dbt_project.yml` file + +To start, let’s look back at our `intermediate.md` file. We can see that we provided multi-line descriptions for the models in our intermediate models using [docs blocks](/docs/collaborate/documentation#using-docs-blocks). Then we reference these docs blocks in our `.yml` file. Building descriptions with doc blocks in Markdown files gives you the ability to format your descriptions with Markdown and are particularly helpful when building long descriptions, either at the column or model level. In our `dbt_project.yml`, we added `node_colors` at folder levels. + +1. To see all these pieces come together, execute this in the command bar: + + ```bash + dbt docs generate + ``` + + This will generate the documentation for your project. Click the book button, as shown in the screenshot below to access the docs. + + +2. Go to our project area and view `int_results`. View the description that we created in our doc block. + + +3. View the mini-lineage that looks at the model we are currently selected on (`int_results` in this case). + + +4. In our `dbt_project.yml`, we configured `node_colors` depending on the file directory. Starting in dbt v1.3, we can see how our lineage in our docs looks. By color coding your project, it can help you cluster together similar models or steps and more easily troubleshoot. + + + +## Deploy your code + +Before we jump into deploying our code, let's have a quick primer on environments. Up to this point, all of the work we've done in the dbt Cloud IDE has been in our development environment, with code committed to a feature branch and the models we've built created in our development schema in Snowflake as defined in our Development environment connection. Doing this work on a feature branch, allows us to separate our code from what other coworkers are building and code that is already deemed production ready. Building models in a development schema in Snowflake allows us to separate the database objects we might still be modifying and testing from the database objects running production dashboards or other downstream dependencies. Together, the combination of a Git branch and Snowflake database objects form our environment. + +Now that we've completed testing and documenting our work, we're ready to deploy our code from our development environment to our production environment and this involves two steps: + +- Promoting code from our feature branch to the production branch in our repository. + - Generally, the production branch is going to be named your main branch and there's a review process to go through before merging code to the main branch of a repository. Here we are going to merge without review for ease of this workshop. +- Deploying code to our production environment. + - Once our code is merged to the main branch, we'll need to run dbt in our production environment to build all of our models and run all of our tests. This will allow us to build production-ready objects into our production environment in Snowflake. Luckily for us, the Partner Connect flow has already created our deployment environment and job to facilitate this step. + +1. Before getting started, let's make sure that we've committed all of our work to our feature branch. If you still have work to commit, you'll be able to select the **Commit and push**, provide a message, and then select **Commit** again. +2. Once all of your work is committed, the git workflow button will now appear as **Merge to main**. Select **Merge to main** and the merge process will automatically run in the background. + + +3. When it's completed, you should see the git button read **Create branch** and the branch you're currently looking at will become **main**. +4. Now that all of our development work has been merged to the main branch, we can build our deployment job. Given that our production environment and production job were created automatically for us through Partner Connect, all we need to do here is update some default configurations to meet our needs. +5. In the menu, select **Deploy** **> Environments** + + +6. You should see two environments listed and you'll want to select the **Deployment** environment then **Settings** to modify it. +7. Before making any changes, let's touch on what is defined within this environment. The Snowflake connection shows the credentials that dbt Cloud is using for this environment and in our case they are the same as what was created for us through Partner Connect. Our deployment job will build in our `PC_DBT_DB` database and use the default Partner Connect role and warehouse to do so. The deployment credentials section also uses the info that was created in our Partner Connect job to create the credential connection. However, it is using the same default schema that we've been using as the schema for our development environment. +8. Let's update the schema to create a new schema specifically for our production environment. Click **Edit** to allow you to modify the existing field values. Navigate to **Deployment Credentials >** **schema.** +9. Update the schema name to **production**. Remember to select **Save** after you've made the change. + +10. By updating the schema for our production environment to **production**, it ensures that our deployment job for this environment will build our dbt models in the **production** schema within the `PC_DBT_DB` database as defined in the Snowflake Connection section. +11. Now let's switch over to our production job. Click on the deploy tab again and then select **Jobs**. You should see an existing and preconfigured **Partner Connect Trial Job**. Similar to the environment, click on the job, then select **Settings** to modify it. Let's take a look at the job to understand it before making changes. + + - The Environment section is what connects this job with the environment we want it to run in. This job is already defaulted to use the Deployment environment that we just updated and the rest of the settings we can keep as is. + - The Execution settings section gives us the option to generate docs, run source freshness, and defer to a previous run state. For the purposes of our lab, we're going to keep these settings as is as well and stick with just generating docs. + - The Commands section is where we specify exactly which commands we want to run during this job, and we also want to keep this as is. We want our seed to be uploaded first, then run our models, and finally test them. The order of this is important as well, considering that we need our seed to be created before we can run our incremental model, and we need our models to be created before we can test them. + - Finally, we have the Triggers section, where we have a number of different options for scheduling our job. Given that our data isn't updating regularly here and we're running this job manually for now, we're also going to leave this section alone. + + So, what are we changing then? Just the name! Click **Edit** to allow you to make changes. Then update the name of the job to **Production Job** to denote this as our production deployment job. After that's done, click **Save**. +12. Now let's go to run our job. Clicking on the job name in the path at the top of the screen will take you back to the job run history page where you'll be able to click **Run run** to kick off the job. If you encounter any job failures, try running the job again before further troubleshooting. + + + +13. Let's go over to Snowflake to confirm that everything built as expected in our production schema. Refresh the database objects in your Snowflake account and you should see the production schema now within our default Partner Connect database. If you click into the schema and everything ran successfully, you should be able to see all of the models we developed. + + +### Conclusion + +Fantastic! You’ve finished the workshop! We hope you feel empowered in using both SQL and Python in your dbt Cloud workflows with Snowflake. Having a reliable pipeline to surface both analytics and machine learning is crucial to creating tangible business value from your data. + +For more help and information join our [dbt community Slack](https://www.getdbt.com/community/) which contains more than 50,000 data practitioners today. We have a dedicated slack channel #db-snowflake to Snowflake related content. Happy dbt'ing! diff --git a/website/docs/guides/dbt-ecosystem/sl-partner-integration-guide.md b/website/docs/guides/sl-partner-integration-guide.md similarity index 97% rename from website/docs/guides/dbt-ecosystem/sl-partner-integration-guide.md rename to website/docs/guides/sl-partner-integration-guide.md index 936a54465e8..41a5135bb7d 100644 --- a/website/docs/guides/dbt-ecosystem/sl-partner-integration-guide.md +++ b/website/docs/guides/sl-partner-integration-guide.md @@ -2,8 +2,17 @@ title: "dbt Semantic Layer integration best practices" id: "sl-partner-integration-guide" description: Learn about partner integration guidelines, roadmap, and connectivity. +hoverSnippet: Learn how to +# time_to_complete: '30 minutes' commenting out until we test +icon: 'guides' +hide_table_of_contents: true +tags: ['Semantic layer'] +level: 'Advanced' +recently_updated: true --- +## Introduction + To fit your tool within the world of the Semantic Layer, dbt Labs offers some best practice recommendations for how to expose metrics and allow users to interact with them seamlessly. :::note @@ -11,7 +20,7 @@ This is an evolving guide that is meant to provide recommendations based on our ::: -## Requirements +### Prerequisites To build a dbt Semantic Layer integration: @@ -37,7 +46,7 @@ When building an integration, we recommend you expose certain metadata in the re - The version of dbt they are on. -## Best practices on exposing metrics +## Use best practices when exposing metrics Best practices for exposing metrics are summarized into five themes: @@ -121,7 +130,7 @@ For transparency and additional context, we recommend you have an easy way for t In the cases where our APIs support either a string or a filter list for the `where` clause, we always recommend that your application utilizes the filter list in order to gain maximum pushdown benefits. The `where` string may be more intuitive for users writing queries during testing, but it will not have the performance benefits of the filter list in a production environment. -## Example stages of an integration +## Understand stages of an integration These are recommendations on how to evolve a Semantic Layer integration and not a strict runbook. @@ -149,7 +158,7 @@ These are recommendations on how to evolve a Semantic Layer integration and not * Suggest metrics to users based on teams/identity, and so on. -## Related docs +### Related docs - [Use the dbt Semantic Layer](/docs/use-dbt-semantic-layer/dbt-sl) to learn about the product. - [Build your metrics](/docs/build/build-metrics-intro) for more info about MetricFlow and its components. From cef4f21f834a4d78054bd862d2664bbd9bdb3747 Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Wed, 8 Nov 2023 14:33:40 -0800 Subject: [PATCH 098/305] moving and deleting adapter stuff --- .../create-adapters.md | 291 +++++++++++++++++- .../2-prerequisites-for-a-new-adapter.md | 6 - .../3-building-a-new-adapter.md | 5 - .../4-testing-a-new-adapter.md | 5 - .../5-documenting-a-new-adapter.md | 60 ---- .../6-promoting-a-new-adapter.md | 120 -------- .../7-verifying-a-new-adapter.md | 41 --- .../8-building-a-trusted-adapter.md | 79 ----- 8 files changed, 289 insertions(+), 318 deletions(-) rename website/docs/guides/{dbt-ecosystem/adapter-development => }/create-adapters.md (72%) delete mode 100644 website/docs/guides/dbt-ecosystem/adapter-development/2-prerequisites-for-a-new-adapter.md delete mode 100644 website/docs/guides/dbt-ecosystem/adapter-development/3-building-a-new-adapter.md delete mode 100644 website/docs/guides/dbt-ecosystem/adapter-development/4-testing-a-new-adapter.md delete mode 100644 website/docs/guides/dbt-ecosystem/adapter-development/5-documenting-a-new-adapter.md delete mode 100644 website/docs/guides/dbt-ecosystem/adapter-development/6-promoting-a-new-adapter.md delete mode 100644 website/docs/guides/dbt-ecosystem/adapter-development/7-verifying-a-new-adapter.md delete mode 100644 website/docs/guides/dbt-ecosystem/adapter-development/8-building-a-trusted-adapter.md diff --git a/website/docs/guides/dbt-ecosystem/adapter-development/create-adapters.md b/website/docs/guides/create-adapters.md similarity index 72% rename from website/docs/guides/dbt-ecosystem/adapter-development/create-adapters.md rename to website/docs/guides/create-adapters.md index 269a9e1ff6a..deb2764edc6 100644 --- a/website/docs/guides/dbt-ecosystem/adapter-development/create-adapters.md +++ b/website/docs/guides/create-adapters.md @@ -1,6 +1,7 @@ --- title: "Build, test, document, and promote adapters" id: "adapter-creation" +description: hoverSnippet: Learn how to # time_to_complete: '30 minutes' commenting out until we test icon: 'guides' @@ -159,7 +160,7 @@ We strongly encourage you to adopt the following approach when versioning and re - While your plugin is new, and you're iterating on features, aim to offer backwards compatibility and deprecation notices for at least one minor version. As your plugin matures, aim to leave backwards compatibility and deprecation notices in place until the next major version (dbt Core v2). - Release patch versions of your plugins whenever needed. These patch releases should contain fixes _only_. -## Building a new adapter +## Build a new adapter This step will walk you through the first creating the necessary adapter classes and macros, and provide some resources to help you validate that your new adapter is working correctly. Make sure you've familiarized yourself with the previous steps in this guide. @@ -564,7 +565,7 @@ To assure that `dbt --version` provides the latest dbt core version the adapter It should be noted that both of these files are included in the bootstrapped output of the `dbt-database-adapter-scaffold` so when using the scaffolding, these files will be included. -## Testing your adapter +## Test your adapter :::info @@ -1064,3 +1065,289 @@ Finally: python3 -m pytest tests/functional --profile apache_spark python3 -m pytest tests/functional --profile databricks_sql_endpoint ``` + +## Document a new adapter + +If you've already [built](3-building-a-new-adapter), and [tested](4-testing-a-new-adapter) your adapter, it's time to document it so the dbt community will know that it exists and how to use it. + +### Making your adapter available + +Many community members maintain their adapter plugins under open source licenses. If you're interested in doing this, we recommend: + +- Hosting on a public git provider (for example, GitHub or Gitlab) +- Publishing to [PyPI](https://pypi.org/) +- Adding to the list of ["Supported Data Platforms"](/docs/supported-data-platforms#community-supported) (more info below) + +### General Guidelines + +To best inform the dbt community of the new adapter, you should contribute to the dbt's open-source documentation site, which uses the [Docusaurus project](https://docusaurus.io/). This is the site you're currently on! + +### Conventions + +Each `.md` file you create needs a header as shown below. The document id will also need to be added to the config file: `website/sidebars.js`. + +```md +--- +title: "Documenting a new adapter" +id: "documenting-a-new-adapter" +--- +``` + +### Single Source of Truth + +We ask our adapter maintainers to use the [docs.getdbt.com repo](https://github.com/dbt-labs/docs.getdbt.com) (i.e. this site) as the single-source-of-truth for documentation rather than having to maintain the same set of information in three different places. The adapter repo's `README.md` and the data platform's documentation pages should simply link to the corresponding page on this docs site. Keep reading for more information on what should and shouldn't be included on the dbt docs site. + +### Assumed Knowledge + +To simplify things, assume the reader of this documentation already knows how both dbt and your data platform works. There's already great material for how to learn dbt and the data platform out there. The documentation we're asking you to add should be what a user who is already profiecient in both dbt and your data platform would need to know in order to use both. Effectively that boils down to two things: how to connect, and how to configure. + +### Topics and Pages to Cover + +The following subjects need to be addressed across three pages of this docs site to have your data platform be listed on our documentation. After the corresponding pull request is merged, we ask that you link to these pages from your adapter repo's `REAMDE` as well as from your product documentation. + + To contribute, all you will have to do make the changes listed in the table below. + +| How To... | File to change within `/website/docs/` | Action | Info to Include | +|----------------------|--------------------------------------------------------------|--------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Connect | `/docs/core/connect-data-platform/{MY-DATA-PLATFORM}-setup.md` | Create | Give all information needed to define a target in `~/.dbt/profiles.yml` and get `dbt debug` to connect to the database successfully. All possible configurations should be mentioned. | +| Configure | `reference/resource-configs/{MY-DATA-PLATFORM}-configs.md` | Create | What options and configuration specific to your data platform do users need to know? e.g. table distribution and indexing options, column_quoting policy, which incremental strategies are supported | +| Discover and Install | `docs/supported-data-platforms.md` | Modify | Is it a vendor- or community- supported adapter? How to install Python adapter package? Ideally with pip and PyPI hosted package, but can also use `git+` link to GitHub Repo | +| Add link to sidebar | `website/sidebars.js` | Modify | Add the document id to the correct location in the sidebar menu | + +For example say I want to document my new adapter: `dbt-ders`. For the "Connect" page, I will make a new Markdown file, `ders-setup.md` and add it to the `/website/docs/core/connect-data-platform/` directory. + +### Example PRs to add new adapter documentation + +Below are some recent pull requests made by partners to document their data platform's adapter: + +- [TiDB](https://github.com/dbt-labs/docs.getdbt.com/pull/1309) +- [SingleStore](https://github.com/dbt-labs/docs.getdbt.com/pull/1044) +- [Firebolt](https://github.com/dbt-labs/docs.getdbt.com/pull/941) + +## Promote a new adapter + +The most important thing here is recognizing that people are successful in the community when they join, first and foremost, to engage authentically. + +What does authentic engagement look like? It’s challenging to define explicit rules. One good rule of thumb is to treat people with dignity and respect. + +Contributors to the community should think of contribution _as the end itself,_ not a means toward other business KPIs (leads, community members, etc.). [We are a mission-driven company.](https://www.getdbt.com/dbt-labs/values/) Some ways to know if you’re authentically engaging: + +- Is an engagement’s _primary_ purpose of sharing knowledge and resources or building brand engagement? +- Imagine you didn’t work at the org you do — can you imagine yourself still writing this? +- Is it written in formal / marketing language, or does it sound like you, the human? + +### Who should join the dbt community slack? + +- People who have insight into what it means to do hands-on [analytics engineering](https://www.getdbt.com/analytics-engineering/) work + The dbt Community Slack workspace is fundamentally a place for analytics practitioners to interact with each other — the closer the users are in the community to actual data/analytics engineering work, the more natural their engagement will be (leading to better outcomes for partners and the community). + +- DevRel practitioners with strong focus + DevRel practitioners often have a strong analytics background and a good understanding of the community. It’s essential to be sure they are focused on _contributing,_ not on driving community metrics for partner org (such as signing people up for their slack or events). The metrics will rise naturally through authentic engagement. + +- Founder and executives who are interested in directly engaging with the community + This is either incredibly successful or not at all depending on the profile of the founder. Typically, this works best when the founder has a practitioner-level of technical understanding and is interested in joining not to promote, but to learn and hear from users. + +- Software Engineers at partner products that are building and supporting integrations with either dbt Core or dbt Cloud + This is successful when the engineers are familiar with dbt as a product or at least have taken our training course. The Slack is often a place where end-user questions and feedback is initially shared, so it is recommended that someone technical from the team be present. There are also a handful of channels aimed at those building integrations, which tend to be a font of knowledge. + +### Who might struggle in the dbt community + +- People in marketing roles + dbt Slack is not a marketing channel. Attempts to use it as such invariably fall flat and can even lead to people having a negative view of a product. This doesn’t mean that dbt can’t serve marketing objectives, but a long-term commitment to engagement is the only proven method to do this sustainably. + +- People in product roles + The dbt Community can be an invaluable source of feedback on a product. There are two primary ways this can happen — organically (community members proactively suggesting a new feature) and via direct calls for feedback and user research. Immediate calls for engagement must be done in your dedicated #tools channel. Direct calls should be used sparingly, as they can overwhelm more organic discussions and feedback. + +### Who is the audience for an adapter release? + + A new adapter is likely to drive huge community interest from several groups of people: + - People who are currently using the database that the adapter is supporting + - People who may be adopting the database in the near future. + - People who are interested in dbt development in general. + +The database users will be your primary audience and the most helpful in achieving success. Engage them directly in the adapter’s dedicated Slack channel. If one does not exist already, reach out in #channel-requests, and we will get one made for you and include it in an announcement about new channels. + +The final group is where non-slack community engagement becomes important. Twitter and LinkedIn are both great places to interact with a broad audience. A well-orchestrated adapter release can generate impactful and authentic engagement. + +### How to message the initial rollout and follow-up content + +Tell a story that engages dbt users and the community. Highlight new use cases and functionality unlocked by the adapter in a way that will resonate with each segment. + +- Existing users of your technology who are new to dbt + - Provide a general overview of the value dbt will deliver to your users. This can lean on dbt's messaging and talking points which are laid out in the [dbt viewpoint.](/community/resources/viewpoint) + - Give examples of a rollout that speaks to the overall value of dbt and your product. + +- Users who are already familiar with dbt and the community + - Consider unique use cases or advantages your adapter provide over existing adapters. Who will be excited for this? + - Contribute to the dbt Community and ensure that dbt users on your adapter are well supported (tutorial content, packages, documentation, etc). + - Example of a rollout that is compelling for those familiar with dbt: [Firebolt](https://www.linkedin.com/feed/update/urn:li:activity:6879090752459182080/) + +### Tactically manage distribution of content about new or existing adapters + +There are tactical pieces on how and where to share that help ensure success. + +- On slack: + - #i-made-this channel — this channel has a policy against “marketing” and “content marketing” posts, but it should be successful if you write your content with the above guidelines in mind. Even with that, it’s important to post here sparingly. + - Your own database / tool channel — this is where the people who have opted in to receive communications from you and always a great place to share things that are relevant to them. + +- On social media: + - Twitter + - LinkedIn + - Social media posts _from the author_ or an individual connected to the project tend to have better engagement than posts from a company or organization account. + - Ask your partner representative about: + - Retweets and shares from the official dbt Labs accounts. + - Flagging posts internally at dbt Labs to get individual employees to share. + +#### Measuring engagement + +You don’t need 1000 people in a channel to succeed, but you need at least a few active participants who can make it feel lived in. If you’re comfortable working in public, this could be members of your team, or it can be a few people who you know that are highly engaged and would be interested in participating. Having even 2 or 3 regulars hanging out in a channel is all that’s needed for a successful start and is, in fact, much more impactful than 250 people that never post. + +### How to announce a new adapter + +We’d recommend _against_ boilerplate announcements and encourage finding a unique voice. That being said, there are a couple of things that we’d want to include: + +- A summary of the value prop of your database / technology for users who aren’t familiar. +- The personas that might be interested in this news. +- A description of what the adapter _is_. For example: + > With the release of our new dbt adapter, you’ll be able to to use dbt to model and transform your data in [name-of-your-org] +- Particular or unique use cases or functionality unlocked by the adapter. +- Plans for future / ongoing support / development. +- The link to the documentation for using the adapter on the dbt Labs docs site. +- An announcement blog. + +#### Announcing new release versions of existing adapters + +This can vary substantially depending on the nature of the release but a good baseline is the types of release messages that [we put out in the #dbt-releases](https://getdbt.slack.com/archives/C37J8BQEL/p1651242161526509) channel. + +![Full Release Post](/img/adapter-guide/0-full-release-notes.png) + +Breaking this down: + +- Visually distinctive announcement - make it clear this is a release + +- Short written description of what is in the release + +- Links to additional resources + +- Implementation instructions: + +- Future plans + +- Contributor recognition (if applicable) + + + +## Verify a new adapter + +The very first data platform dbt supported was Redshift followed quickly by Postgres (([dbt-core#174](https://github.com/dbt-labs/dbt-core/pull/174)). In 2017, back when dbt Labs (née Fishtown Analytics) was still a data consultancy, we added support for Snowflake and BigQuery. We also turned dbt's database support into an adapter framework ([dbt-core#259](https://github.com/dbt-labs/dbt-core/pull/259/)), and a plugin system a few years later. For years, dbt Labs specialized in those four data platforms and became experts in them. However, the surface area of all possible databases, their respective nuances, and keeping them up-to-date and bug-free is a Herculean and/or Sisyphean task that couldn't be done by a single person or even a single team! Enter the dbt community which enables dbt Core to work on more than 30 different databases (32 as of Sep '22)! + +Free and open-source tools for the data professional are increasingly abundant. This is by-and-large a _good thing_, however it requires due dilligence that wasn't required in a paid-license, closed-source software world. Before taking a dependency on an open-source projet is is important to determine the answer to the following questions: + +1. Does it work? +2. Does it meet my team's specific use case? +3. Does anyone "own" the code, or is anyone liable for ensuring it works? +4. Do bugs get fixed quickly? +5. Does it stay up-to-date with new Core features? +6. Is the usage substantial enough to self-sustain? +7. What risks do I take on by taking a dependency on this library? + +These are valid, important questions to answer—especially given that `dbt-core` itself only put out its first stable release (major version v1.0) in December 2021! Indeed, up until now, the majority of new user questions in database-specific channels are some form of: + +- "How mature is `dbt-`? Any gotchas I should be aware of before I start exploring?" +- "has anyone here used `dbt-` for production models?" +- "I've been playing with `dbt-` -- I was able to install and run my initial experiments. I noticed that there are certain features mentioned on the documentation that are marked as 'not ok' or 'not tested'. What are the risks? +I'd love to make a statement on my team to adopt DBT [sic], but I'm pretty sure questions will be asked around the possible limitations of the adapter or if there are other companies out there using dbt [sic] with Oracle DB in production, etc." + +There has been a tendency to trust the dbt Labs-maintained adapters over community- and vendor-supported adapters, but repo ownership is only one among many indicators of software quality. We aim to help our users feel well-informed as to the caliber of an adapter with a new program. + +### Verified by dbt Labs + +The adapter verification program aims to quickly indicate to users which adapters can be trusted to use in production. Previously, doing so was uncharted territory for new users and complicated making the business case to their leadership team. We plan to give quality assurances by: + +1. appointing a key stakeholder for the adapter repository, +2. ensuring that the chosen stakeholder fixes bugs and cuts new releases in a timely manner see maintainer your adapter (["Maintaining your new adapter"](2-prerequisites-for-a-new-adapter#maintaining-your-new-adapter)), +3. demonstrating that it passes our adapter pytest suite tests, +4. assuring that it works for us internally and ideally an existing team using the adapter in production . + +Every major & minor version of a adapter will be verified internally and given an official :white_check_mark: (custom emoji coming soon), on the ["Supported Data Platforms"](/docs/supported-data-platforms) page. + +### How to get an adapter verified? + +We envision that data platform vendors will be most interested in having their adapter versions verified, however we are open to community adapter verification. If interested, please reach out either to the `partnerships` at `dbtlabs.com` or post in the [#adapter-ecosystem Slack channel](https://getdbt.slack.com/archives/C030A0UF5LM). + +## Build a trusted adapter + +The Trusted adapter program exists to allow adapter maintainers to demonstrate to the dbt community that your adapter is trusted to be used in production. + +### What it means to be trusted + +By opting into the below, you agree to this, and we take you at your word. dbt Labs reserves the right to remove an adapter from the trusted adapter list at any time, should any of the below guidelines not be met. + +### Feature Completeness + +To be considered for the Trusted Adapter program, the adapter must cover the essential functionality of dbt Core given below, with best effort given to support the entire feature set. + +Essential functionality includes (but is not limited to the following features): + +- table, view, and seed materializations +- dbt tests + +The adapter should have the required documentation for connecting and configuring the adapter. The dbt docs site should be the single source of truth for this information. These docs should be kept up-to-date. + +See [Documenting a new adapter](/guides/dbt-ecosystem/adapter-development/5-documenting-a-new-adapter) for more information. + +### Release Cadence + +Keeping an adapter up-to-date with dbt Core is an integral part of being a trusted adapter. Therefore, we ask that adapter maintainers: + +- Release of new minor versions of the adapter with all tests passing within four weeks of dbt Core's release cut. +- Release of new major versions of the adapter with all tests passing within eight weeks of dbt Core's release cut. + +### Community Responsiveness + +On a best effort basis, active participation and engagement with the dbt Community across the following forums: + +- Being responsive to feedback and supporting user enablement in dbt Community’s Slack workspace +- Responding with comments to issues raised in public dbt adapter code repository +- Merging in code contributions from community members as deemed appropriate + +### Security Practices + +Trusted adapters will not do any of the following: + +- Output to logs or file either access credentials information to or data from the underlying data platform itself. +- Make API calls other than those expressly required for using dbt features (adapters may not add additional logging) +- Obfuscate code and/or functionality so as to avoid detection + +Additionally, to avoid supply-chain attacks: + +- Use an automated service to keep Python dependencies up-to-date (such as Dependabot or similar), +- Publish directly to PyPI from the dbt adapter code repository by using trusted CI/CD process (such as GitHub actions) +- Restrict admin access to both the respective code (GitHub) and package (PyPI) repositories +- Identify and mitigate security vulnerabilities by use of a static code analyzing tool (such as Snyk) as part of a CI/CD process + +### Other considerations + +The adapter repository is: + +- open-souce licensed, +- published to PyPI, and +- automatically tests the codebase against dbt Lab's provided adapter test suite + +### How to get an adapter verified + +Open an issue on the [docs.getdbt.com GitHub repository](https://github.com/dbt-labs/docs.getdbt.com) using the "Add adapter to Trusted list" template. In addition to contact information, it will ask confirm that you agree to the following. + +1. my adapter meet the guidelines given above +2. I will make best reasonable effort that this continues to be so +3. checkbox: I acknowledge that dbt Labs reserves the right to remove an adapter from the trusted adapter list at any time, should any of the above guidelines not be met. + +The approval workflow is as follows: + +1. create and populate the template-created issue +2. dbt Labs will respond as quickly as possible (maximally four weeks, though likely faster) +3. If approved, dbt Labs will create and merge a Pull request to formally add the adapter to the list. + +### Getting help for my trusted adapter + +Ask your question in #adapter-ecosystem channel of the dbt community Slack. diff --git a/website/docs/guides/dbt-ecosystem/adapter-development/2-prerequisites-for-a-new-adapter.md b/website/docs/guides/dbt-ecosystem/adapter-development/2-prerequisites-for-a-new-adapter.md deleted file mode 100644 index ca531d04692..00000000000 --- a/website/docs/guides/dbt-ecosystem/adapter-development/2-prerequisites-for-a-new-adapter.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Prerequisites for a new adapter" -id: "2-prerequisites-for-a-new-adapter" ---- - - diff --git a/website/docs/guides/dbt-ecosystem/adapter-development/3-building-a-new-adapter.md b/website/docs/guides/dbt-ecosystem/adapter-development/3-building-a-new-adapter.md deleted file mode 100644 index e882906da75..00000000000 --- a/website/docs/guides/dbt-ecosystem/adapter-development/3-building-a-new-adapter.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "Building a new adapter" -id: "3-building-a-new-adapter" ---- - diff --git a/website/docs/guides/dbt-ecosystem/adapter-development/4-testing-a-new-adapter.md b/website/docs/guides/dbt-ecosystem/adapter-development/4-testing-a-new-adapter.md deleted file mode 100644 index 9b1ec2c7e0e..00000000000 --- a/website/docs/guides/dbt-ecosystem/adapter-development/4-testing-a-new-adapter.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "Testing a new adapter" -id: "4-testing-a-new-adapter" ---- - diff --git a/website/docs/guides/dbt-ecosystem/adapter-development/5-documenting-a-new-adapter.md b/website/docs/guides/dbt-ecosystem/adapter-development/5-documenting-a-new-adapter.md deleted file mode 100644 index 80b994aefb0..00000000000 --- a/website/docs/guides/dbt-ecosystem/adapter-development/5-documenting-a-new-adapter.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: "Documenting a new adapter" -id: "5-documenting-a-new-adapter" ---- - -If you've already [built](3-building-a-new-adapter), and [tested](4-testing-a-new-adapter) your adapter, it's time to document it so the dbt community will know that it exists and how to use it. - -## Making your adapter available - -Many community members maintain their adapter plugins under open source licenses. If you're interested in doing this, we recommend: - -- Hosting on a public git provider (for example, GitHub or Gitlab) -- Publishing to [PyPI](https://pypi.org/) -- Adding to the list of ["Supported Data Platforms"](/docs/supported-data-platforms#community-supported) (more info below) - -## General Guidelines - -To best inform the dbt community of the new adapter, you should contribute to the dbt's open-source documentation site, which uses the [Docusaurus project](https://docusaurus.io/). This is the site you're currently on! - -### Conventions - -Each `.md` file you create needs a header as shown below. The document id will also need to be added to the config file: `website/sidebars.js`. - -```md ---- -title: "Documenting a new adapter" -id: "documenting-a-new-adapter" ---- -``` - -### Single Source of Truth - -We ask our adapter maintainers to use the [docs.getdbt.com repo](https://github.com/dbt-labs/docs.getdbt.com) (i.e. this site) as the single-source-of-truth for documentation rather than having to maintain the same set of information in three different places. The adapter repo's `README.md` and the data platform's documentation pages should simply link to the corresponding page on this docs site. Keep reading for more information on what should and shouldn't be included on the dbt docs site. - -### Assumed Knowledge - -To simplify things, assume the reader of this documentation already knows how both dbt and your data platform works. There's already great material for how to learn dbt and the data platform out there. The documentation we're asking you to add should be what a user who is already profiecient in both dbt and your data platform would need to know in order to use both. Effectively that boils down to two things: how to connect, and how to configure. - -## Topics and Pages to Cover - -The following subjects need to be addressed across three pages of this docs site to have your data platform be listed on our documentation. After the corresponding pull request is merged, we ask that you link to these pages from your adapter repo's `REAMDE` as well as from your product documentation. - - To contribute, all you will have to do make the changes listed in the table below. - -| How To... | File to change within `/website/docs/` | Action | Info to Include | -|----------------------|--------------------------------------------------------------|--------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Connect | `/docs/core/connect-data-platform/{MY-DATA-PLATFORM}-setup.md` | Create | Give all information needed to define a target in `~/.dbt/profiles.yml` and get `dbt debug` to connect to the database successfully. All possible configurations should be mentioned. | -| Configure | `reference/resource-configs/{MY-DATA-PLATFORM}-configs.md` | Create | What options and configuration specific to your data platform do users need to know? e.g. table distribution and indexing options, column_quoting policy, which incremental strategies are supported | -| Discover and Install | `docs/supported-data-platforms.md` | Modify | Is it a vendor- or community- supported adapter? How to install Python adapter package? Ideally with pip and PyPI hosted package, but can also use `git+` link to GitHub Repo | -| Add link to sidebar | `website/sidebars.js` | Modify | Add the document id to the correct location in the sidebar menu | - -For example say I want to document my new adapter: `dbt-ders`. For the "Connect" page, I will make a new Markdown file, `ders-setup.md` and add it to the `/website/docs/core/connect-data-platform/` directory. - -## Example PRs to add new adapter documentation - -Below are some recent pull requests made by partners to document their data platform's adapter: - -- [TiDB](https://github.com/dbt-labs/docs.getdbt.com/pull/1309) -- [SingleStore](https://github.com/dbt-labs/docs.getdbt.com/pull/1044) -- [Firebolt](https://github.com/dbt-labs/docs.getdbt.com/pull/941) diff --git a/website/docs/guides/dbt-ecosystem/adapter-development/6-promoting-a-new-adapter.md b/website/docs/guides/dbt-ecosystem/adapter-development/6-promoting-a-new-adapter.md deleted file mode 100644 index 9bf2f949bef..00000000000 --- a/website/docs/guides/dbt-ecosystem/adapter-development/6-promoting-a-new-adapter.md +++ /dev/null @@ -1,120 +0,0 @@ ---- -title: "Promoting a new adapter" -id: "6-promoting-a-new-adapter" ---- - -## Model for engagement in the dbt community - -The most important thing here is recognizing that people are successful in the community when they join, first and foremost, to engage authentically. - -What does authentic engagement look like? It’s challenging to define explicit rules. One good rule of thumb is to treat people with dignity and respect. - -Contributors to the community should think of contribution *as the end itself,* not a means toward other business KPIs (leads, community members, etc.). [We are a mission-driven company.](https://www.getdbt.com/dbt-labs/values/) Some ways to know if you’re authentically engaging: - -- Is an engagement’s *primary* purpose of sharing knowledge and resources or building brand engagement? -- Imagine you didn’t work at the org you do — can you imagine yourself still writing this? -- Is it written in formal / marketing language, or does it sound like you, the human? - -## Who should join the dbt community slack - -### People who have insight into what it means to do hands-on [analytics engineering](https://www.getdbt.com/analytics-engineering/) work - -The dbt Community Slack workspace is fundamentally a place for analytics practitioners to interact with each other — the closer the users are in the community to actual data/analytics engineering work, the more natural their engagement will be (leading to better outcomes for partners and the community). - -### DevRel practitioners with strong focus - -DevRel practitioners often have a strong analytics background and a good understanding of the community. It’s essential to be sure they are focused on *contributing,* not on driving community metrics for partner org (such as signing people up for their slack or events). The metrics will rise naturally through authentic engagement. - -### Founder and executives who are interested in directly engaging with the community - -This is either incredibly successful or not at all depending on the profile of the founder. Typically, this works best when the founder has a practitioner-level of technical understanding and is interested in joining not to promote, but to learn and hear from users. - -### Software Engineers at partner products that are building and supporting integrations with either dbt Core or dbt Cloud - -This is successful when the engineers are familiar with dbt as a product or at least have taken our training course. The Slack is often a place where end-user questions and feedback is initially shared, so it is recommended that someone technical from the team be present. There are also a handful of channels aimed at those building integrations, which tend to be a font of knowledge. - -### Who might struggle in the dbt community -#### People in marketing roles -dbt Slack is not a marketing channel. Attempts to use it as such invariably fall flat and can even lead to people having a negative view of a product. This doesn’t mean that dbt can’t serve marketing objectives, but a long-term commitment to engagement is the only proven method to do this sustainably. - -#### People in product roles -The dbt Community can be an invaluable source of feedback on a product. There are two primary ways this can happen — organically (community members proactively suggesting a new feature) and via direct calls for feedback and user research. Immediate calls for engagement must be done in your dedicated #tools channel. Direct calls should be used sparingly, as they can overwhelm more organic discussions and feedback. - -## Who is the audience for an adapter release - -A new adapter is likely to drive huge community interest from several groups of people: -- People who are currently using the database that the adapter is supporting -- People who may be adopting the database in the near future. -- People who are interested in dbt development in general. - -The database users will be your primary audience and the most helpful in achieving success. Engage them directly in the adapter’s dedicated Slack channel. If one does not exist already, reach out in #channel-requests, and we will get one made for you and include it in an announcement about new channels. - -The final group is where non-slack community engagement becomes important. Twitter and LinkedIn are both great places to interact with a broad audience. A well-orchestrated adapter release can generate impactful and authentic engagement. - -## How to message the initial rollout and follow-up content - -Tell a story that engages dbt users and the community. Highlight new use cases and functionality unlocked by the adapter in a way that will resonate with each segment. - -### Existing users of your technology who are new to dbt - -- Provide a general overview of the value dbt will deliver to your users. This can lean on dbt's messaging and talking points which are laid out in the [dbt viewpoint.](/community/resources/viewpoint) - - Give examples of a rollout that speaks to the overall value of dbt and your product. - -### Users who are already familiar with dbt and the community -- Consider unique use cases or advantages your adapter provide over existing adapters. Who will be excited for this? -- Contribute to the dbt Community and ensure that dbt users on your adapter are well supported (tutorial content, packages, documentation, etc). -- Example of a rollout that is compelling for those familiar with dbt: [Firebolt](https://www.linkedin.com/feed/update/urn:li:activity:6879090752459182080/) - -## Tactically manage distribution of content about new or existing adapters - -There are tactical pieces on how and where to share that help ensure success. - -### On slack: -- #i-made-this channel — this channel has a policy against “marketing” and “content marketing” posts, but it should be successful if you write your content with the above guidelines in mind. Even with that, it’s important to post here sparingly. -- Your own database / tool channel — this is where the people who have opted in to receive communications from you and always a great place to share things that are relevant to them. - -### On social media: -- Twitter -- LinkedIn -- Social media posts *from the author* or an individual connected to the project tend to have better engagement than posts from a company or organization account. -- Ask your partner representative about: - - Retweets and shares from the official dbt Labs accounts. - - Flagging posts internally at dbt Labs to get individual employees to share. - -## Measuring engagement - -You don’t need 1000 people in a channel to succeed, but you need at least a few active participants who can make it feel lived in. If you’re comfortable working in public, this could be members of your team, or it can be a few people who you know that are highly engaged and would be interested in participating. Having even 2 or 3 regulars hanging out in a channel is all that’s needed for a successful start and is, in fact, much more impactful than 250 people that never post. - -## How to announce a new adapter - -We’d recommend *against* boilerplate announcements and encourage finding a unique voice. That being said, there are a couple of things that we’d want to include: - -- A summary of the value prop of your database / technology for users who aren’t familiar. -- The personas that might be interested in this news. -- A description of what the adapter *is*. For example: - > With the release of our new dbt adapter, you’ll be able to to use dbt to model and transform your data in [name-of-your-org] -- Particular or unique use cases or functionality unlocked by the adapter. -- Plans for future / ongoing support / development. -- The link to the documentation for using the adapter on the dbt Labs docs site. -- An announcement blog. - -## Announcing new release versions of existing adapters - -This can vary substantially depending on the nature of the release but a good baseline is the types of release messages that [we put out in the #dbt-releases](https://getdbt.slack.com/archives/C37J8BQEL/p1651242161526509) channel. - -![Full Release Post](/img/adapter-guide/0-full-release-notes.png) - -Breaking this down: - -- Visually distinctive announcement - make it clear this is a release - -- Short written description of what is in the release - -- Links to additional resources - -- Implementation instructions: - -- Future plans - -- Contributor recognition (if applicable) - diff --git a/website/docs/guides/dbt-ecosystem/adapter-development/7-verifying-a-new-adapter.md b/website/docs/guides/dbt-ecosystem/adapter-development/7-verifying-a-new-adapter.md deleted file mode 100644 index 6310569dfad..00000000000 --- a/website/docs/guides/dbt-ecosystem/adapter-development/7-verifying-a-new-adapter.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: "Verifying a new adapter" -id: "7-verifying-a-new-adapter" ---- - -## Why verify an adapter? - -The very first data platform dbt supported was Redshift followed quickly by Postgres (([dbt-core#174](https://github.com/dbt-labs/dbt-core/pull/174)). In 2017, back when dbt Labs (née Fishtown Analytics) was still a data consultancy, we added support for Snowflake and BigQuery. We also turned dbt's database support into an adapter framework ([dbt-core#259](https://github.com/dbt-labs/dbt-core/pull/259/)), and a plugin system a few years later. For years, dbt Labs specialized in those four data platforms and became experts in them. However, the surface area of all possible databases, their respective nuances, and keeping them up-to-date and bug-free is a Herculean and/or Sisyphean task that couldn't be done by a single person or even a single team! Enter the dbt community which enables dbt Core to work on more than 30 different databases (32 as of Sep '22)! - -Free and open-source tools for the data professional are increasingly abundant. This is by-and-large a *good thing*, however it requires due dilligence that wasn't required in a paid-license, closed-source software world. Before taking a dependency on an open-source projet is is important to determine the answer to the following questions: - -1. Does it work? -2. Does it meet my team's specific use case? -3. Does anyone "own" the code, or is anyone liable for ensuring it works? -4. Do bugs get fixed quickly? -5. Does it stay up-to-date with new Core features? -6. Is the usage substantial enough to self-sustain? -7. What risks do I take on by taking a dependency on this library? - -These are valid, important questions to answer—especially given that `dbt-core` itself only put out its first stable release (major version v1.0) in December 2021! Indeed, up until now, the majority of new user questions in database-specific channels are some form of: -- "How mature is `dbt-`? Any gotchas I should be aware of before I start exploring?" -- "has anyone here used `dbt-` for production models?" -- "I've been playing with `dbt-` -- I was able to install and run my initial experiments. I noticed that there are certain features mentioned on the documentation that are marked as 'not ok' or 'not tested'. What are the risks? -I'd love to make a statement on my team to adopt DBT [sic], but I'm pretty sure questions will be asked around the possible limitations of the adapter or if there are other companies out there using dbt [sic] with Oracle DB in production, etc." - -There has been a tendency to trust the dbt Labs-maintained adapters over community- and vendor-supported adapters, but repo ownership is only one among many indicators of software quality. We aim to help our users feel well-informed as to the caliber of an adapter with a new program. - -## Verified by dbt Labs - -The adapter verification program aims to quickly indicate to users which adapters can be trusted to use in production. Previously, doing so was uncharted territory for new users and complicated making the business case to their leadership team. We plan to give quality assurances by: -1. appointing a key stakeholder for the adapter repository, -2. ensuring that the chosen stakeholder fixes bugs and cuts new releases in a timely manner see maintainer your adapter (["Maintaining your new adapter"](2-prerequisites-for-a-new-adapter#maintaining-your-new-adapter)), -3. demonstrating that it passes our adapter pytest suite tests, -4. assuring that it works for us internally and ideally an existing team using the adapter in production . - - -Every major & minor version of a adapter will be verified internally and given an official :white_check_mark: (custom emoji coming soon), on the ["Supported Data Platforms"](/docs/supported-data-platforms) page. - -## How to get an adapter verified? - -We envision that data platform vendors will be most interested in having their adapter versions verified, however we are open to community adapter verification. If interested, please reach out either to the `partnerships` at `dbtlabs.com` or post in the [#adapter-ecosystem Slack channel](https://getdbt.slack.com/archives/C030A0UF5LM). diff --git a/website/docs/guides/dbt-ecosystem/adapter-development/8-building-a-trusted-adapter.md b/website/docs/guides/dbt-ecosystem/adapter-development/8-building-a-trusted-adapter.md deleted file mode 100644 index 9783ec66460..00000000000 --- a/website/docs/guides/dbt-ecosystem/adapter-development/8-building-a-trusted-adapter.md +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: "Building a Trusted Adapter" -id: "8-building-a-trusted-adapter" ---- - -The Trusted adapter program exists to allow adapter maintainers to demonstrate to the dbt community that your adapter is trusted to be used in production. - -## What does it mean to be trusted - -By opting into the below, you agree to this, and we take you at your word. dbt Labs reserves the right to remove an adapter from the trusted adapter list at any time, should any of the below guidelines not be met. - -### Feature Completeness - -To be considered for the Trusted Adapter program, the adapter must cover the essential functionality of dbt Core given below, with best effort given to support the entire feature set. - -Essential functionality includes (but is not limited to the following features): - -- table, view, and seed materializations -- dbt tests - -The adapter should have the required documentation for connecting and configuring the adapter. The dbt docs site should be the single source of truth for this information. These docs should be kept up-to-date. - -See [Documenting a new adapter](/guides/dbt-ecosystem/adapter-development/5-documenting-a-new-adapter) for more information. - -### Release Cadence - -Keeping an adapter up-to-date with dbt Core is an integral part of being a trusted adapter. Therefore, we ask that adapter maintainers: - -- Release of new minor versions of the adapter with all tests passing within four weeks of dbt Core's release cut. -- Release of new major versions of the adapter with all tests passing within eight weeks of dbt Core's release cut. - -### Community Responsiveness - -On a best effort basis, active participation and engagement with the dbt Community across the following forums: - -- Being responsive to feedback and supporting user enablement in dbt Community’s Slack workspace -- Responding with comments to issues raised in public dbt adapter code repository -- Merging in code contributions from community members as deemed appropriate - -### Security Practices - -Trusted adapters will not do any of the following: - -- Output to logs or file either access credentials information to or data from the underlying data platform itself. -- Make API calls other than those expressly required for using dbt features (adapters may not add additional logging) -- Obfuscate code and/or functionality so as to avoid detection - -Additionally, to avoid supply-chain attacks: - -- Use an automated service to keep Python dependencies up-to-date (such as Dependabot or similar), -- Publish directly to PyPI from the dbt adapter code repository by using trusted CI/CD process (such as GitHub actions) -- Restrict admin access to both the respective code (GitHub) and package (PyPI) repositories -- Identify and mitigate security vulnerabilities by use of a static code analyzing tool (such as Snyk) as part of a CI/CD process - -### Other considerations - -The adapter repository is: - -- open-souce licensed, -- published to PyPI, and -- automatically tests the codebase against dbt Lab's provided adapter test suite - -## How to get an adapter verified? - -Open an issue on the [docs.getdbt.com GitHub repository](https://github.com/dbt-labs/docs.getdbt.com) using the "Add adapter to Trusted list" template. In addition to contact information, it will ask confirm that you agree to the following. - -1. my adapter meet the guidelines given above -2. I will make best reasonable effort that this continues to be so -3. checkbox: I acknowledge that dbt Labs reserves the right to remove an adapter from the trusted adapter list at any time, should any of the above guidelines not be met. - -The approval workflow is as follows: - -1. create and populate the template-created issue -2. dbt Labs will respond as quickly as possible (maximally four weeks, though likely faster) -3. If approved, dbt Labs will create and merge a Pull request to formally add the adapter to the list. - -## How to get help with my trusted adapter? - -Ask your question in #adapter-ecosystem channel of the community Slack. From 231aa0c87465f8a417008a679ab86565c89ebb82 Mon Sep 17 00:00:00 2001 From: Ly Nguyen Date: Wed, 8 Nov 2023 15:02:12 -0800 Subject: [PATCH 099/305] Update prereqs for webhooks --- website/docs/docs/deploy/webhooks.md | 1 - 1 file changed, 1 deletion(-) diff --git a/website/docs/docs/deploy/webhooks.md b/website/docs/docs/deploy/webhooks.md index 069e7a3e283..bf12a8d9ca8 100644 --- a/website/docs/docs/deploy/webhooks.md +++ b/website/docs/docs/deploy/webhooks.md @@ -31,7 +31,6 @@ You can also check out the free [dbt Fundamentals course](https://courses.getdbt - For `write` access to webhooks: - **Enterprise plan accounts** — Permission sets are the same for both API service tokens and the dbt Cloud UI. You, or the API service token, must have the [Account Admin](/docs/cloud/manage-access/enterprise-permissions#account-admin), [Admin](/docs/cloud/manage-access/enterprise-permissions#admin), or [Developer](/docs/cloud/manage-access/enterprise-permissions#developer) permission set. - **Team plan accounts** — For the dbt Cloud UI, you need to have a [Developer license](/docs/cloud/manage-access/self-service-permissions). For API service tokens, you must assign the service token to have the [Account Admin or Member](/docs/dbt-cloud-apis/service-tokens#team-plans-using-service-account-tokens) permission set. -- You have a multi-tenant deployment model in dbt Cloud. For more information, refer to [Tenancy](/docs/cloud/about-cloud/tenancy). ## Create a webhook subscription {#create-a-webhook-subscription} From 40e3ebffec8e24c204c7943a1b5cbac70b88a86a Mon Sep 17 00:00:00 2001 From: Ly Nguyen Date: Wed, 8 Nov 2023 15:07:16 -0800 Subject: [PATCH 100/305] Clarify tenancy --- website/docs/docs/deploy/webhooks.md | 1 + 1 file changed, 1 insertion(+) diff --git a/website/docs/docs/deploy/webhooks.md b/website/docs/docs/deploy/webhooks.md index bf12a8d9ca8..123cb6ef39f 100644 --- a/website/docs/docs/deploy/webhooks.md +++ b/website/docs/docs/deploy/webhooks.md @@ -31,6 +31,7 @@ You can also check out the free [dbt Fundamentals course](https://courses.getdbt - For `write` access to webhooks: - **Enterprise plan accounts** — Permission sets are the same for both API service tokens and the dbt Cloud UI. You, or the API service token, must have the [Account Admin](/docs/cloud/manage-access/enterprise-permissions#account-admin), [Admin](/docs/cloud/manage-access/enterprise-permissions#admin), or [Developer](/docs/cloud/manage-access/enterprise-permissions#developer) permission set. - **Team plan accounts** — For the dbt Cloud UI, you need to have a [Developer license](/docs/cloud/manage-access/self-service-permissions). For API service tokens, you must assign the service token to have the [Account Admin or Member](/docs/dbt-cloud-apis/service-tokens#team-plans-using-service-account-tokens) permission set. +- You have a multi-tenant or an AWS single-tenant deployment model in dbt Cloud. For more information, refer to [Tenancy](/docs/cloud/about-cloud/tenancy). ## Create a webhook subscription {#create-a-webhook-subscription} From 6be2182a6fe069598537f327f1147726e05a507c Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Wed, 8 Nov 2023 15:18:40 -0800 Subject: [PATCH 101/305] adding tags --- website/docs/guides/create-adapters.md | 6 +++--- website/docs/guides/debug-schema-names.md | 2 +- website/docs/guides/sl-partner-integration-guide.md | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/website/docs/guides/create-adapters.md b/website/docs/guides/create-adapters.md index deb2764edc6..ad3f16ef831 100644 --- a/website/docs/guides/create-adapters.md +++ b/website/docs/guides/create-adapters.md @@ -1,8 +1,8 @@ --- title: "Build, test, document, and promote adapters" id: "adapter-creation" -description: -hoverSnippet: Learn how to +description: Create an adapter that connects dbt to you platform, and learn how to maintain and version that adapter. +hoverSnippet: Learn how to build, test, document, and promote adapters as well as maintaining and versioning an adapter. # time_to_complete: '30 minutes' commenting out until we test icon: 'guides' hide_table_of_contents: true @@ -13,7 +13,7 @@ recently_updated: true ## Introduction -Adapters are an essential component of dbt. At their most basic level, they are how dbt Core connects with the various supported data platforms. At a higher-level, dbt Core adapters strive to give analytics engineers more transferrable skills as well as standardize how analytics projects are structured. Gone are the days where you have to learn a new language or flavor of SQL when you move to a new job that has a different data platform. That is the power of adapters in dbt Core. +Adapters are an essential component of dbt. At their most basic level, they are how dbt connects with the various supported data platforms. At a higher-level, dbt Core adapters strive to give analytics engineers more transferrable skills as well as standardize how analytics projects are structured. Gone are the days where you have to learn a new language or flavor of SQL when you move to a new job that has a different data platform. That is the power of adapters in dbt Core. Navigating and developing around the nuances of different databases can be daunting, but you are not alone. Visit [#adapter-ecosystem](https://getdbt.slack.com/archives/C030A0UF5LM) Slack channel for additional help beyond the documentation. diff --git a/website/docs/guides/debug-schema-names.md b/website/docs/guides/debug-schema-names.md index 7f40576d7a9..ee5156c578b 100644 --- a/website/docs/guides/debug-schema-names.md +++ b/website/docs/guides/debug-schema-names.md @@ -8,7 +8,7 @@ hoverSnippet: Learn how to debug schema names in dbt. platform: 'dbt-core' icon: 'guides' hide_table_of_contents: true -tags: ['dbt Core'] +tags: ['dbt Core','Troubleshooting'] level: 'Advanced' recently_updated: true --- diff --git a/website/docs/guides/sl-partner-integration-guide.md b/website/docs/guides/sl-partner-integration-guide.md index 41a5135bb7d..e547b206aeb 100644 --- a/website/docs/guides/sl-partner-integration-guide.md +++ b/website/docs/guides/sl-partner-integration-guide.md @@ -1,19 +1,19 @@ --- -title: "dbt Semantic Layer integration best practices" +title: "Integrate with dbt Semantic Layer using best practices" id: "sl-partner-integration-guide" description: Learn about partner integration guidelines, roadmap, and connectivity. -hoverSnippet: Learn how to +hoverSnippet: Learn how to integrate with the Semantic Layer using best practices # time_to_complete: '30 minutes' commenting out until we test icon: 'guides' hide_table_of_contents: true -tags: ['Semantic layer'] +tags: ['Semantic layer','Best practices'] level: 'Advanced' recently_updated: true --- ## Introduction -To fit your tool within the world of the Semantic Layer, dbt Labs offers some best practice recommendations for how to expose metrics and allow users to interact with them seamlessly. +To fit your tool within the world of the Semantic Layer, dbt Labs offers some best practice recommendations for how to expose metrics and allow users to interact with them seamlessly. :::note This is an evolving guide that is meant to provide recommendations based on our experience. If you have any feedback, we'd love to hear it! From 4808d3e338f417c06fd54cda0e578ad9f4b4132a Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Wed, 8 Nov 2023 16:47:42 -0800 Subject: [PATCH 102/305] fixing details --- .../dbt-unity-catalog-best-practices.md | 11 +++++++++-- .../{create-adapters.md => adapter-creation.md} | 8 ++++---- website/docs/guides/bigquery-qs.md | 2 +- website/docs/guides/building-packages.md | 6 +++--- website/docs/guides/codespace-qs.md | 2 +- website/docs/guides/custom-cicd-pipelines.md | 2 +- website/docs/guides/databricks-qs.md | 2 +- .../debugging-errors.md => guides/debug-errors.md} | 11 ++++++++--- website/docs/guides/debug-schema-names.md | 1 - .../productionize-your-dbt-databricks-project.md | 2 +- website/docs/guides/redshift-qs.md | 4 ++-- website/docs/guides/set-up-ci.md | 8 ++++---- website/docs/guides/sl-migration.md | 2 +- website/docs/guides/sl-partner-integration-guide.md | 2 +- website/docs/guides/snowflake-qs.md | 2 +- website/docs/guides/zapier-ms-teams.md | 3 +-- website/sidebars.js | 2 +- website/src/components/quickstartGuideList/index.js | 2 +- 18 files changed, 41 insertions(+), 31 deletions(-) rename website/docs/guides/{create-adapters.md => adapter-creation.md} (99%) rename website/docs/{best-practices/debugging-errors.md => guides/debug-errors.md} (98%) diff --git a/website/docs/best-practices/dbt-unity-catalog-best-practices.md b/website/docs/best-practices/dbt-unity-catalog-best-practices.md index b60e1b912c7..0d24cc320ec 100644 --- a/website/docs/best-practices/dbt-unity-catalog-best-practices.md +++ b/website/docs/best-practices/dbt-unity-catalog-best-practices.md @@ -1,6 +1,13 @@ -# Best practices for dbt and Unity Catalog +--- +title: "Best practices for dbt and Unity Catalog" +id: "dbt-unity-catalog-best-practices" +description: Learn how to configure your. +displayText: Writing custom generic tests +hoverSnippet: Learn how to define your own custom generic tests. +--- -Your Databricks dbt project should be configured after following the ["How to set up your databricks dbt project guide"](how-to-set-up-your-databricks-dbt-project). Now we’re ready to start building a dbt project using Unity Catalog. However, we should first consider how we want to allow dbt users to interact with our different catalogs. We recommend the following best practices to ensure the integrity of your production data: + +Your Databricks dbt project should be configured after following the ["How to set up your databricks dbt project guide"](/guides/set-up-your-databricks-dbt-project). Now we’re ready to start building a dbt project using Unity Catalog. However, we should first consider how we want to allow dbt users to interact with our different catalogs. We recommend the following best practices to ensure the integrity of your production data: ## Isolate your Bronze (aka source) data diff --git a/website/docs/guides/create-adapters.md b/website/docs/guides/adapter-creation.md similarity index 99% rename from website/docs/guides/create-adapters.md rename to website/docs/guides/adapter-creation.md index ad3f16ef831..cd18a413b10 100644 --- a/website/docs/guides/create-adapters.md +++ b/website/docs/guides/adapter-creation.md @@ -1,8 +1,8 @@ --- -title: "Build, test, document, and promote adapters" -id: "adapter-creation" -description: Create an adapter that connects dbt to you platform, and learn how to maintain and version that adapter. -hoverSnippet: Learn how to build, test, document, and promote adapters as well as maintaining and versioning an adapter. +title: Build, test, document, and promote adapters +id: adapter-creation +description: "Create an adapter that connects dbt to you platform, and learn how to maintain and version that adapter." +hoverSnippet: "Learn how to build, test, document, and promote adapters as well as maintaining and versioning an adapter." # time_to_complete: '30 minutes' commenting out until we test icon: 'guides' hide_table_of_contents: true diff --git a/website/docs/guides/bigquery-qs.md b/website/docs/guides/bigquery-qs.md index f13749333f5..c1f632f0621 100644 --- a/website/docs/guides/bigquery-qs.md +++ b/website/docs/guides/bigquery-qs.md @@ -5,7 +5,7 @@ id: "bigquery" level: 'Beginner' icon: 'bigquery' hide_table_of_contents: true -tags: ['BigQuery', 'dbt Cloud'] +tags: ['BigQuery', 'dbt Cloud','Quickstart'] recently_updated: true --- diff --git a/website/docs/guides/building-packages.md b/website/docs/guides/building-packages.md index ed22ae2fa12..641a1c6af6d 100644 --- a/website/docs/guides/building-packages.md +++ b/website/docs/guides/building-packages.md @@ -1,7 +1,7 @@ --- -title: "Building dbt packages" -id: "building-packages" -description: When you have dbt code that might help others, you can create a package for dbt using a GitHub repository. +title: Building dbt packages +id: building-packages +description: "When you have dbt code that might help others, you can create a package for dbt using a GitHub repository." displayText: Building dbt packages hoverSnippet: Learn how to create packages for dbt. # time_to_complete: '30 minutes' commenting out until we test diff --git a/website/docs/guides/codespace-qs.md b/website/docs/guides/codespace-qs.md index 2f5f57677af..7712ed8f8e8 100644 --- a/website/docs/guides/codespace-qs.md +++ b/website/docs/guides/codespace-qs.md @@ -1,5 +1,5 @@ --- -title: "Quickstart for dbt Core using GitHub Codespaces" +title: Quickstart for dbt Core using GitHub Codespaces id: codespace platform: 'dbt-core' icon: 'fa-github' diff --git a/website/docs/guides/custom-cicd-pipelines.md b/website/docs/guides/custom-cicd-pipelines.md index df3d30e7c27..bf781204fc5 100644 --- a/website/docs/guides/custom-cicd-pipelines.md +++ b/website/docs/guides/custom-cicd-pipelines.md @@ -7,7 +7,7 @@ hoverSnippet: Learn version-controlled code, custom pipelines, and enhanced code # time_to_complete: '30 minutes' commenting out until we test icon: 'guides' hide_table_of_contents: true -tags: ['dbt Cloud', 'Orchestration'] +tags: ['dbt Cloud', 'Orchestration', 'CI'] level: 'Intermediate' recently_updated: true --- diff --git a/website/docs/guides/databricks-qs.md b/website/docs/guides/databricks-qs.md index 0aadf79c18e..5a0c5536e7f 100644 --- a/website/docs/guides/databricks-qs.md +++ b/website/docs/guides/databricks-qs.md @@ -5,7 +5,7 @@ level: 'Beginner' icon: 'databricks' hide_table_of_contents: true recently_updated: true -tags: ['dbt Cloud', 'Quickstart'] +tags: ['dbt Cloud', 'Quickstart','Databricks'] --- ## Introduction diff --git a/website/docs/best-practices/debugging-errors.md b/website/docs/guides/debug-errors.md similarity index 98% rename from website/docs/best-practices/debugging-errors.md rename to website/docs/guides/debug-errors.md index fe600ec4f67..febfb6ac422 100644 --- a/website/docs/best-practices/debugging-errors.md +++ b/website/docs/guides/debug-errors.md @@ -1,13 +1,18 @@ --- -title: "Debugging errors" -id: "debugging-errors" +title: "Debug errors" +id: "debug-errors" description: Learn about errors and the art of debugging them. displayText: Debugging errors hoverSnippet: Learn about errors and the art of debugging those errors. +icon: 'guides' +hide_table_of_contents: true +tags: ['Troubleshooting', 'dbt Core', 'dbt Cloud'] +level: 'Beginner' +recently_updated: true --- - ## General process of debugging + Learning how to debug is a skill, and one that will make you great at your role! 1. Read the error message — when writing the code behind dbt, we try our best to make error messages as useful as we can. The error message dbt produces will normally contain the type of error (more on these error types below), and the file where the error occurred. 2. Inspect the file that was known to cause the issue, and see if there's an immediate fix. diff --git a/website/docs/guides/debug-schema-names.md b/website/docs/guides/debug-schema-names.md index ee5156c578b..de713e07df7 100644 --- a/website/docs/guides/debug-schema-names.md +++ b/website/docs/guides/debug-schema-names.md @@ -5,7 +5,6 @@ description: Learn how to debug schema names when models build under unexpected displayText: Debug schema names hoverSnippet: Learn how to debug schema names in dbt. # time_to_complete: '30 minutes' commenting out until we test -platform: 'dbt-core' icon: 'guides' hide_table_of_contents: true tags: ['dbt Core','Troubleshooting'] diff --git a/website/docs/guides/productionize-your-dbt-databricks-project.md b/website/docs/guides/productionize-your-dbt-databricks-project.md index ce4e73b567b..12060da999d 100644 --- a/website/docs/guides/productionize-your-dbt-databricks-project.md +++ b/website/docs/guides/productionize-your-dbt-databricks-project.md @@ -1,6 +1,6 @@ --- title: Productionize your dbt Databricks project -id: "productionize-your-dbt-databricks-project" +id: productionize-your-dbt-databricks-project description: "Learn how to deliver models to end users and use best practices to maintain production data" displayText: Productionize your dbt Databricks project hoverSnippet: Learn how to Productionize your dbt Databricks project. diff --git a/website/docs/guides/redshift-qs.md b/website/docs/guides/redshift-qs.md index d9f41be939c..9296e6c6568 100644 --- a/website/docs/guides/redshift-qs.md +++ b/website/docs/guides/redshift-qs.md @@ -1,10 +1,10 @@ --- title: "Quickstart for dbt Cloud and Redshift" -id: "redshift" +id: redshift level: 'Beginner' icon: 'redshift' hide_table_of_contents: true -tags: ['Redshift', 'dbt Cloud'] +tags: ['Redshift', 'dbt Cloud','Quickstart'] --- ## Introduction diff --git a/website/docs/guides/set-up-ci.md b/website/docs/guides/set-up-ci.md index 1dfe7270708..c6bcf316952 100644 --- a/website/docs/guides/set-up-ci.md +++ b/website/docs/guides/set-up-ci.md @@ -1,16 +1,16 @@ --- title: "Get started with Continuous Integration tests" -description: How to implement a CI environment for safe project validation. -displayText: -hoverSnippet: Learn how to +description: Implement a CI environment for safe project validation. +hoverSnippet: Learn how to implement a CI environment for safe project validation. id: set-up-ci # time_to_complete: '30 minutes' commenting out until we test icon: 'guides' hide_table_of_contents: true -tags: ['dbt Cloud', 'Orchestration'] +tags: ['dbt Cloud', 'Orchestration', 'CI'] level: 'Intermediate' recently_updated: true --- + ## Introduction By validating your code _before_ it goes into production, you don't need to spend your afternoon fielding messages from people whose reports are suddenly broken. diff --git a/website/docs/guides/sl-migration.md b/website/docs/guides/sl-migration.md index b0605ece333..0cfde742af2 100644 --- a/website/docs/guides/sl-migration.md +++ b/website/docs/guides/sl-migration.md @@ -6,7 +6,7 @@ hoverSnippet: Migrate from the legacy dbt Semantic Layer to the latest one. # time_to_complete: '30 minutes' commenting out until we test icon: 'guides' hide_table_of_contents: true -tags: ['Semantic Layer'] +tags: ['Semantic Layer','Migration'] level: 'Intermediate' recently_updated: true --- diff --git a/website/docs/guides/sl-partner-integration-guide.md b/website/docs/guides/sl-partner-integration-guide.md index e547b206aeb..04f58f525bd 100644 --- a/website/docs/guides/sl-partner-integration-guide.md +++ b/website/docs/guides/sl-partner-integration-guide.md @@ -6,7 +6,7 @@ hoverSnippet: Learn how to integrate with the Semantic Layer using best practice # time_to_complete: '30 minutes' commenting out until we test icon: 'guides' hide_table_of_contents: true -tags: ['Semantic layer','Best practices'] +tags: ['Semantic Layer','Best practices'] level: 'Advanced' recently_updated: true --- diff --git a/website/docs/guides/snowflake-qs.md b/website/docs/guides/snowflake-qs.md index 4488d6b3097..abb18276b97 100644 --- a/website/docs/guides/snowflake-qs.md +++ b/website/docs/guides/snowflake-qs.md @@ -3,7 +3,7 @@ title: "Quickstart for dbt Cloud and Snowflake" id: "snowflake" level: 'Beginner' icon: 'snowflake' -tags: ['dbt Cloud','Quickstart'] +tags: ['dbt Cloud','Quickstart','Snowflake'] hide_table_of_contents: true --- ## Introduction diff --git a/website/docs/guides/zapier-ms-teams.md b/website/docs/guides/zapier-ms-teams.md index cb62a0edc33..bd8bdd4aca2 100644 --- a/website/docs/guides/zapier-ms-teams.md +++ b/website/docs/guides/zapier-ms-teams.md @@ -1,7 +1,6 @@ --- title: "Post to Microsoft Teams when a job finishes" -id: webhooks-guide-zapier-ms-teams -slug: zapier-ms-teams +id: zapier-ms-teams description: Use Zapier and dbt Cloud webhooks to post to Microsoft Teams when a job finishes running hoverSnippet: Learn how to use Zapier with dbt Cloud webhooks to post in Microsoft Teams when a job finishes running. # time_to_complete: '30 minutes' commenting out until we test diff --git a/website/sidebars.js b/website/sidebars.js index 504be383845..66ba731fb1b 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -1049,9 +1049,9 @@ const sidebarSettings = { "best-practices/materializations/materializations-guide-7-conclusion", ], }, - "best-practices/debugging-errors", "best-practices/writing-custom-generic-tests", "best-practices/best-practice-workflows", + "best-practices/dbt-unity-catalog-best-practices", ], }, ], diff --git a/website/src/components/quickstartGuideList/index.js b/website/src/components/quickstartGuideList/index.js index 5d7c8f4c498..05c8c041a0e 100644 --- a/website/src/components/quickstartGuideList/index.js +++ b/website/src/components/quickstartGuideList/index.js @@ -86,7 +86,7 @@ function QuickstartList({ quickstartData }) { {levelOptions && levelOptions.length > 0 && ( )} - setSearchInput(value)} placeholder='Search Quickstarts' /> + setSearchInput(value)} placeholder='Search Guides' />
    {filteredData && filteredData.length > 0 ? ( From ab9a16c28f4b68a502b74b2aec716059a7417c8d Mon Sep 17 00:00:00 2001 From: Joel Labes Date: Thu, 9 Nov 2023 14:21:03 +1300 Subject: [PATCH 103/305] Update regions-ip-addresses.md --- website/docs/docs/cloud/about-cloud/regions-ip-addresses.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/cloud/about-cloud/regions-ip-addresses.md b/website/docs/docs/cloud/about-cloud/regions-ip-addresses.md index 4fcabbb3585..70875cb4223 100644 --- a/website/docs/docs/cloud/about-cloud/regions-ip-addresses.md +++ b/website/docs/docs/cloud/about-cloud/regions-ip-addresses.md @@ -12,7 +12,7 @@ dbt Cloud is [hosted](/docs/cloud/about-cloud/architecture) in multiple regions | Region | Location | Access URL | IP addresses | Developer plan | Team plan | Enterprise plan | |--------|----------|------------|--------------|----------------|-----------|-----------------| | North America multi-tenant [^1] | AWS us-east-1 (N. Virginia) | cloud.getdbt.com | 52.45.144.63
    54.81.134.249
    52.22.161.231 | ✅ | ✅ | ✅ | -| North America Cell 1 [^1] | AWS use-east-1 (N.Virginia) | {account prefix}.us1.dbt.com | [Located in Account Settings](#locating-your-dbt-cloud-ip-addresses) | ❌ | ❌ | ❌ | +| North America Cell 1 [^1] | AWS us-east-1 (N.Virginia) | {account prefix}.us1.dbt.com | [Located in Account Settings](#locating-your-dbt-cloud-ip-addresses) | ❌ | ❌ | ❌ | | EMEA [^1] | AWS eu-central-1 (Frankfurt) | emea.dbt.com | 3.123.45.39
    3.126.140.248
    3.72.153.148 | ❌ | ❌ | ✅ | | APAC [^1] | AWS ap-southeast-2 (Sydney)| au.dbt.com | 52.65.89.235
    3.106.40.33
    13.239.155.206
    | ❌ | ❌ | ✅ | | Virtual Private dbt or Single tenant | Customized | Customized | Ask [Support](/community/resources/getting-help#dbt-cloud-support) for your IPs | ❌ | ❌ | ✅ | From 903a4fcb98d12718af444effb5567ac5b7462e06 Mon Sep 17 00:00:00 2001 From: Joel Labes Date: Thu, 9 Nov 2023 14:24:28 +1300 Subject: [PATCH 104/305] fix m-dash entity --- website/docs/docs/cloud/about-cloud/regions-ip-addresses.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/cloud/about-cloud/regions-ip-addresses.md b/website/docs/docs/cloud/about-cloud/regions-ip-addresses.md index 70875cb4223..64743f85afa 100644 --- a/website/docs/docs/cloud/about-cloud/regions-ip-addresses.md +++ b/website/docs/docs/cloud/about-cloud/regions-ip-addresses.md @@ -34,4 +34,4 @@ dbt Cloud, like many cloud services, relies on underlying AWS cloud infrastructu * Using hostnames for consistent access — To ensure uninterrupted access, we recommend that you dbt Cloud services using hostnames. Hostnames provide a consistent reference point, regardless of any changes in underlying IP addresses. We are aligning with an industry-standard practice employed by organizations such as Snowflake. -* Optimizing VPN connections &mdash: You should integrate a proxy alongside VPN for users who leverage VPN connections. This strategy enables steady IP addresses for your connections, facilitating smooth traffic flow through the VPN and onward to dbt Cloud. By employing a proxy and a VPN, you can direct traffic through the VPN and then to dbt Cloud. It's crucial to set up the proxy if you need to integrate with additional services. +* Optimizing VPN connections — You should integrate a proxy alongside VPN for users who leverage VPN connections. This strategy enables steady IP addresses for your connections, facilitating smooth traffic flow through the VPN and onward to dbt Cloud. By employing a proxy and a VPN, you can direct traffic through the VPN and then to dbt Cloud. It's crucial to set up the proxy if you need to integrate with additional services. From a6c73591918086fe1fa3607c321b53a098ace688 Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Wed, 8 Nov 2023 17:30:13 -0800 Subject: [PATCH 105/305] fixing links --- ...5-how-to-build-a-mature-dbt-project-from-scratch.md | 2 +- .../blog/2023-04-24-framework-refactor-alteryx-dbt.md | 4 ++-- .../materializations-guide-1-guide-overview.md | 2 +- .../release-notes/09-April-2023/product-docs.md | 6 +++--- website/docs/docs/deploy/webhooks.md | 4 ++-- .../productionize-your-dbt-databricks-project.md | 2 +- website/src/pages/index.js | 6 +++--- website/vercel.json | 10 +++++----- 8 files changed, 18 insertions(+), 18 deletions(-) diff --git a/website/blog/2021-12-05-how-to-build-a-mature-dbt-project-from-scratch.md b/website/blog/2021-12-05-how-to-build-a-mature-dbt-project-from-scratch.md index c4de04a48c3..8ea387cf00c 100644 --- a/website/blog/2021-12-05-how-to-build-a-mature-dbt-project-from-scratch.md +++ b/website/blog/2021-12-05-how-to-build-a-mature-dbt-project-from-scratch.md @@ -69,7 +69,7 @@ In addition to learning the basic pieces of dbt, we're familiarizing ourselves w If we decide not to do this, we end up missing out on what the dbt workflow has to offer. If you want to learn more about why we think analytics engineering with dbt is the way to go, I encourage you to read the [dbt Viewpoint](/community/resources/viewpoint#analytics-is-collaborative)! -In order to learn the basics, we’re going to [port over the SQL file](/guides/migration/tools/refactoring-legacy-sql) that powers our existing "patient_claim_summary" report that we use in our KPI dashboard in parallel to our old transformation process. We’re not ripping out the old plumbing just yet. In doing so, we're going to try dbt on for size and get used to interfacing with a dbt project. +In order to learn the basics, we’re going to [port over the SQL file](/guides/refactoring-legacy-sql) that powers our existing "patient_claim_summary" report that we use in our KPI dashboard in parallel to our old transformation process. We’re not ripping out the old plumbing just yet. In doing so, we're going to try dbt on for size and get used to interfacing with a dbt project. **Project Appearance** diff --git a/website/blog/2023-04-24-framework-refactor-alteryx-dbt.md b/website/blog/2023-04-24-framework-refactor-alteryx-dbt.md index c5b677f7f3e..9b6135b0984 100644 --- a/website/blog/2023-04-24-framework-refactor-alteryx-dbt.md +++ b/website/blog/2023-04-24-framework-refactor-alteryx-dbt.md @@ -94,7 +94,7 @@ It is essential to click on each data source (the green book icons on the leftmo For this step, we identified which operators were used in the data source (for example, joining data, order columns, group by, etc). Usually the Alteryx operators are pretty self-explanatory and all the information needed for understanding appears on the left side of the menu. We also checked the documentation to understand how each Alteryx operator works behind the scenes. -We followed dbt Labs' guide on how to refactor legacy SQL queries in dbt and some [best practices](https://docs.getdbt.com/guides/migration/tools/refactoring-legacy-sql). After we finished refactoring all the Alteryx workflows, we checked if the Alteryx output matched the output of the refactored model built on dbt. +We followed dbt Labs' guide on how to refactor legacy SQL queries in dbt and some [best practices](https://docs.getdbt.com/guides/refactoring-legacy-sql). After we finished refactoring all the Alteryx workflows, we checked if the Alteryx output matched the output of the refactored model built on dbt. #### Step 3: Use the `audit_helper` package to audit refactored data models @@ -131,4 +131,4 @@ As we can see, refactoring Alteryx to dbt was an important step in the direction > > [Audit_helper in dbt: Bringing data auditing to a higher level](https://docs.getdbt.com/blog/audit-helper-for-migration) > -> [Refactoring legacy SQL to dbt](https://docs.getdbt.com/guides/migration/tools/refactoring-legacy-sql) +> [Refactoring legacy SQL to dbt](https://docs.getdbt.com/guides/refactoring-legacy-sql) diff --git a/website/docs/best-practices/materializations/materializations-guide-1-guide-overview.md b/website/docs/best-practices/materializations/materializations-guide-1-guide-overview.md index 467d58ce4a9..248b4c4749b 100644 --- a/website/docs/best-practices/materializations/materializations-guide-1-guide-overview.md +++ b/website/docs/best-practices/materializations/materializations-guide-1-guide-overview.md @@ -28,7 +28,7 @@ By the end of this guide you should have a solid understanding of: - 📒 You’ll want to have worked through the [quickstart guide](/guides) and have a project setup to work through these concepts. - 🏃🏻‍♀️ Concepts like dbt runs, `ref()` statements, and models should be familiar to you. -- 🔧 [**Optional**] Reading through the [How we structure our dbt projects](guides/best-practices/how-we-structure/1-guide-overview) Guide will be beneficial for the last section of this guide, when we review best practices for materializations using the dbt project approach of staging models and marts. +- 🔧 [**Optional**] Reading through the [How we structure our dbt projects](/best-practices/how-we-structure/1-guide-overview) Guide will be beneficial for the last section of this guide, when we review best practices for materializations using the dbt project approach of staging models and marts. ### Guiding principle diff --git a/website/docs/docs/dbt-versions/release-notes/09-April-2023/product-docs.md b/website/docs/docs/dbt-versions/release-notes/09-April-2023/product-docs.md index 84b962c56d2..5082699619b 100644 --- a/website/docs/docs/dbt-versions/release-notes/09-April-2023/product-docs.md +++ b/website/docs/docs/dbt-versions/release-notes/09-April-2023/product-docs.md @@ -32,9 +32,9 @@ Hello from the dbt Docs team: @mirnawong1, @matthewshaver, @nghi-ly, and @runleo ## New 📚 Guides and ✏️ blog posts - [Use Databricks workflows to run dbt Cloud jobs](/guides/orchestration/how-to-use-databricks-workflows-to-run-dbt-cloud-jobs) -- [Refresh Tableau workbook with extracts after a job finishes](/guides/orchestration/webhooks/zapier-refresh-tableau-workbook) -- [dbt Python Snowpark workshop/tutorial](/guides/dbt-ecosystem/dbt-python-snowpark/1-overview-dbt-python-snowpark) -- [How to optimize and troubleshoot dbt Models on Databricks](/guides/dbt-ecosystem/databricks-guides/how_to_optimize_dbt_models_on_databricks) +- [Refresh Tableau workbook with extracts after a job finishes](/guides/zapier-refresh-tableau-workbook) +- [dbt Python Snowpark workshop/tutorial](/guides/dbt-python-snowpark) +- [How to optimize and troubleshoot dbt Models on Databricks](/guides/optimize-dbt-models-on-databricks) - [The missing guide to debug() in dbt](https://docs.getdbt.com/blog/guide-to-jinja-debug) - [dbt Squared: Leveraging dbt Core and dbt Cloud together at scale](https://docs.getdbt.com/blog/dbt-squared) - [Audit_helper in dbt: Bringing data auditing to a higher level](https://docs.getdbt.com/blog/audit-helper-for-migration) diff --git a/website/docs/docs/deploy/webhooks.md b/website/docs/docs/deploy/webhooks.md index 069e7a3e283..25e16e201c1 100644 --- a/website/docs/docs/deploy/webhooks.md +++ b/website/docs/docs/deploy/webhooks.md @@ -8,7 +8,7 @@ With dbt Cloud, you can create outbound webhooks to send events (notifications) A webhook is an HTTP-based callback function that allows event-driven communication between two different web applications. This allows you to get the latest information on your dbt jobs in real time. Without it, you would need to make API calls repeatedly to check if there are any updates that you need to account for (polling). Because of this, webhooks are also called _push APIs_ or _reverse APIs_ and are often used for infrastructure development. -dbt Cloud sends a JSON payload to your application's endpoint URL when your webhook is triggered. You can send a [Slack](/guides/orchestration/webhooks/zapier-slack) notification, a [Microsoft Teams](/guides/orchestration/webhooks/zapier-ms-teams) notification, [open a PagerDuty incident](/guides/orchestration/webhooks/serverless-pagerduty) when a dbt job fails, [and more](/guides/orchestration/webhooks). +dbt Cloud sends a JSON payload to your application's endpoint URL when your webhook is triggered. You can send a [Slack](/guides/zapier-slack) notification, a [Microsoft Teams](/guides/zapier-ms-teams) notification, [open a PagerDuty incident](/guides/serverless-pagerduty) when a dbt job fails. You can create webhooks for these events from the [dbt Cloud web-based UI](#create-a-webhook-subscription) and by using the [dbt Cloud API](#api-for-webhooks): @@ -549,5 +549,5 @@ DELETE https://{your access URL}/api/v3/accounts/{account_id}/webhooks/subscript ## Related docs - [dbt Cloud CI](/docs/deploy/continuous-integration) -- [Use dbt Cloud's webhooks with other SaaS apps](/guides/orchestration/webhooks) +- [Use dbt Cloud's webhooks with other SaaS apps](/guides) diff --git a/website/docs/guides/productionize-your-dbt-databricks-project.md b/website/docs/guides/productionize-your-dbt-databricks-project.md index 12060da999d..fdadcef6d34 100644 --- a/website/docs/guides/productionize-your-dbt-databricks-project.md +++ b/website/docs/guides/productionize-your-dbt-databricks-project.md @@ -117,7 +117,7 @@ Setting up [notifications](/docs/deploy/job-notifications) in dbt Cloud allows y 2. Select the **Notifications** tab. 3. Choose the desired notification type (Email or Slack) and configure the relevant settings. -If you require notifications through other means than email or Slack, you can use dbt Cloud's outbound [webhooks](/docs/deploy/webhooks) feature to relay job events to other tools. Webhooks enable you to [integrate dbt Cloud with a wide range of SaaS applications](/guides/orchestration/webhooks), extending your pipeline’s automation into other systems. +If you require notifications through other means than email or Slack, you can use dbt Cloud's outbound [webhooks](/docs/deploy/webhooks) feature to relay job events to other tools. Webhooks enable you to integrate dbt Cloud with a wide range of SaaS applications, extending your pipeline’s automation into other systems. ## Troubleshooting diff --git a/website/src/pages/index.js b/website/src/pages/index.js index cee3796133f..7285bad7182 100644 --- a/website/src/pages/index.js +++ b/website/src/pages/index.js @@ -34,7 +34,7 @@ function Home() { const featuredResource = { title: "How we structure our dbt projects", description: "Our hands-on learnings for how to structure your dbt project for success and gain insights into the principles of analytics engineering.", - link: "/guides/best-practices/how-we-structure/1-guide-overview", + link: "/best-practices/how-we-structure/1-guide-overview", image: "/img/structure-dbt-projects.png", sectionTitle: 'Featured resource' } @@ -146,9 +146,9 @@ function Home() {
    diff --git a/website/vercel.json b/website/vercel.json index c73534da7c2..3c2c0c6e3ce 100644 --- a/website/vercel.json +++ b/website/vercel.json @@ -2,6 +2,11 @@ "cleanUrls": true, "trailingSlash": false, "redirects": [ + { + "source": "/faqs/Project/docs-for-multiple-projects", + "destination": "/docs/collaborate/explore-projects#about-project-level-lineage", + "permanent": true + }, { "source": "/faqs/Project/docs-for-multiple-projects", "destination": "/docs/collaborate/explore-projects#about-project-level-lineage", @@ -4181,11 +4186,6 @@ "source": "/quickstarts/manual-install", "destination": "/guides/manual-install", "permanent": true - }, - { - "source": "TODO", - "destination": "TODO", - "permanent": true } ] } From b24d3162e78931a662f8c0b7574241fd1b60d8ef Mon Sep 17 00:00:00 2001 From: nataliefiann <120089939+nataliefiann@users.noreply.github.com> Date: Thu, 9 Nov 2023 10:32:44 +0000 Subject: [PATCH 106/305] Update dbt-cloud-environments.md Updating to refer per style guide --- website/docs/docs/dbt-cloud-environments.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/dbt-cloud-environments.md b/website/docs/docs/dbt-cloud-environments.md index 8fa4522d47c..49e644b872b 100644 --- a/website/docs/docs/dbt-cloud-environments.md +++ b/website/docs/docs/dbt-cloud-environments.md @@ -45,4 +45,4 @@ To use the dbt Cloud IDE or dbt Cloud CLI, each developer will need to set up [p Deployment environments in dbt Cloud are necessary to execute scheduled jobs and use other features. A dbt Cloud project can have multiple deployment environments, allowing for flexibility and customization. However, a dbt Cloud project can only have one deployment environment that represents the production source of truth. -To learn more about dbt Cloud deployment environments and how to configure them, visit the [Deployment environments](/docs/deploy/deploy-environments) page. For our best practices guide, read [dbt Cloud environment best practices](https://docs.getdbt.com/guides/best-practices/environment-setup/1-env-guide-overview) for more info. +To learn more about dbt Cloud deployment environments and how to configure them, refer to the [Deployment environments](/docs/deploy/deploy-environments) page. For our best practices guide, read [dbt Cloud environment best practices](/guides/best-practices/environment-setup/1-env-guide-overview) for more info. From aebcf601d5f2ceb372052588075f396fabe09d49 Mon Sep 17 00:00:00 2001 From: nataliefiann <120089939+nataliefiann@users.noreply.github.com> Date: Thu, 9 Nov 2023 10:51:38 +0000 Subject: [PATCH 107/305] Update website/docs/docs/dbt-cloud-environments.md Co-authored-by: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> --- website/docs/docs/dbt-cloud-environments.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/dbt-cloud-environments.md b/website/docs/docs/dbt-cloud-environments.md index 49e644b872b..cd0d7f6858f 100644 --- a/website/docs/docs/dbt-cloud-environments.md +++ b/website/docs/docs/dbt-cloud-environments.md @@ -45,4 +45,4 @@ To use the dbt Cloud IDE or dbt Cloud CLI, each developer will need to set up [p Deployment environments in dbt Cloud are necessary to execute scheduled jobs and use other features. A dbt Cloud project can have multiple deployment environments, allowing for flexibility and customization. However, a dbt Cloud project can only have one deployment environment that represents the production source of truth. -To learn more about dbt Cloud deployment environments and how to configure them, refer to the [Deployment environments](/docs/deploy/deploy-environments) page. For our best practices guide, read [dbt Cloud environment best practices](/guides/best-practices/environment-setup/1-env-guide-overview) for more info. +To learn more about dbt Cloud deployment environments and how to configure them, refer to the [Deployment environments](/docs/deploy/deploy-environments) page. For our best practices guide, read [dbt Cloud environment best practices](/guides/orchestration/set-up-ci/overview) for more info. From bb20a8361db93f8e28d6083e3b7b9854743e6a81 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Thu, 9 Nov 2023 11:51:04 +0000 Subject: [PATCH 108/305] Update metricflow-commands.md clarify mf command examples avail in cloud --- website/docs/docs/build/metricflow-commands.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/website/docs/docs/build/metricflow-commands.md b/website/docs/docs/build/metricflow-commands.md index 2386dab4ba2..fd120591900 100644 --- a/website/docs/docs/build/metricflow-commands.md +++ b/website/docs/docs/build/metricflow-commands.md @@ -180,9 +180,9 @@ Options: ### Validate-configs This command performs validations against the defined semantic model configurations: + ```bash -dbt sl validate-configs # In dbt Cloud mf validate-configs # In dbt Core @@ -206,20 +206,18 @@ Options: ### Health checks This command performs a health check against the data platform you provided in the configs: + ```bash -dbt sl health-checks #in dbt Cloud - mf health-checks #in dbt Core ``` ### Tutorial Follow the dedicated MetricFlow tutorial to help you get started: + ```bash -dbt sl tutorial # In dbt Cloud - mf tutorial # In dbt Core ``` @@ -522,7 +520,7 @@ mf query --metrics revenue --group-by metric_time__month # In dbt Core To add a dimension filter to a where filter, you have to indicate that the filter item is part of your model and use a template wrapper: {{Dimension('primary_entity__dimension_name')}}. -Here's an example query: dbt sl query --metrics order_total --group-by metric_time --where "{{Dimension('order_id__is_food_order')}} = True".

    Before using the template wrapper, however, you will need to set up your terminal to escape curly braces for the filter template to work. +Here's an example query: dbt sl query --metrics order_total --group-by metric_time --where "{{Dimension('order_id__is_food_order')}} = True".

    Before using the template wrapper, however, set up your terminal to escape curly braces for the filter template to work.
    How to set up your terminal to escape curly braces? From 0dd1d2863907a7e847d11a14e9c28d72608a4beb Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Thu, 9 Nov 2023 12:43:08 +0000 Subject: [PATCH 109/305] add callout for deprecation --- website/docs/docs/build/metrics.md | 14 +++----------- .../avail-sl-integrations.md | 4 ++-- website/docs/docs/use-dbt-semantic-layer/dbt-sl.md | 4 ++-- .../docs/use-dbt-semantic-layer/quickstart-sl.md | 4 ++-- .../docs/docs/use-dbt-semantic-layer/setup-sl.md | 4 ++-- .../docs/use-dbt-semantic-layer/sl-architecture.md | 4 ++++ website/snippets/sl-deprecation-notice.md | 8 ++++++++ 7 files changed, 23 insertions(+), 19 deletions(-) create mode 100644 website/snippets/sl-deprecation-notice.md diff --git a/website/docs/docs/build/metrics.md b/website/docs/docs/build/metrics.md index 7a505fdad14..6d4e0fec893 100644 --- a/website/docs/docs/build/metrics.md +++ b/website/docs/docs/build/metrics.md @@ -7,13 +7,9 @@ keywords: tags: [Metrics] --- -:::caution Upgrade to access MetricFlow and the new dbt Semantic Layer +import DeprecationNotice from '/snippets/sl-deprecation-notice.md'; -The dbt_metrics package has been deprecated and replaced with [MetricFlow](/docs/build/about-metricflow?version=1.6). If you're using the dbt_metrics package or the legacy Semantic Layer (available on v1.5 or lower), we **highly** recommend [upgrading your dbt version](/docs/dbt-versions/upgrade-core-in-cloud) to dbt v1.6 or higher to access MetricFlow and the new [dbt Semantic Layer](/docs/use-dbt-semantic-layer/dbt-sl?version=1.6). - -To migrate to the new Semantic Layer, refer to the dedicated [migration guide](/guides/migration/sl-migration) for more info. - -::: + @@ -38,11 +34,7 @@ A metric is an aggregation over a that supports zero or more - active users - monthly recurring revenue (mrr) -In v1.0, dbt supports metric definitions as a new node type. Like [exposures](exposures), metrics appear as nodes in the directed acyclic graph (DAG) and can be expressed in YAML files. Defining metrics in dbt projects encodes crucial business logic in tested, version-controlled code. Further, you can expose these metrics definitions to downstream tooling, which drives consistency and precision in metric reporting. - -Review the video below to learn more about metrics, why they're important, and how to get started: - - +In v1.0, dbt supports metric definitions as a new node type. Like [exposures](exposures), metrics appear as nodes in the directed acyclic graph (DAG) and can be expressed in YAML files. Defining metrics in dbt projects encodes crucial business logic in tested, version-controlled code. Further, you can expose these metrics definitions to downstream tooling, which drives consistency and precision in metric reporting. ### Benefits of defining metrics diff --git a/website/docs/docs/use-dbt-semantic-layer/avail-sl-integrations.md b/website/docs/docs/use-dbt-semantic-layer/avail-sl-integrations.md index 22178a14b5b..4f009db1819 100644 --- a/website/docs/docs/use-dbt-semantic-layer/avail-sl-integrations.md +++ b/website/docs/docs/use-dbt-semantic-layer/avail-sl-integrations.md @@ -38,9 +38,9 @@ import AvailIntegrations from '/snippets/_sl-partner-links.md'; -import LegacyInfo from '/snippets/_legacy-sl-callout.md'; +import DeprecationNotice from '/snippets/sl-deprecation-notice.md'; - + A wide variety of data applications across the modern data stack natively integrate with the dbt Semantic Layer and dbt metrics — from Business Intelligence tools to notebooks, data catalogs, and more. diff --git a/website/docs/docs/use-dbt-semantic-layer/dbt-sl.md b/website/docs/docs/use-dbt-semantic-layer/dbt-sl.md index 8c78d556a67..b1a2c2ecaa9 100644 --- a/website/docs/docs/use-dbt-semantic-layer/dbt-sl.md +++ b/website/docs/docs/use-dbt-semantic-layer/dbt-sl.md @@ -67,9 +67,9 @@ plan="dbt Cloud Team or Enterprise" -import LegacyInfo from '/snippets/_legacy-sl-callout.md'; +import DeprecationNotice from '/snippets/sl-deprecation-notice.md'; - + The dbt Semantic Layer allows your data teams to centrally define essential business metrics like `revenue`, `customer`, and `churn` in the modeling layer (your dbt project) for consistent self-service within downstream data tools like BI and metadata management solutions. The dbt Semantic Layer provides the flexibility to define metrics on top of your existing models and then query those metrics and models in your analysis tools of choice. diff --git a/website/docs/docs/use-dbt-semantic-layer/quickstart-sl.md b/website/docs/docs/use-dbt-semantic-layer/quickstart-sl.md index 42f08a90401..f68b0e144d1 100644 --- a/website/docs/docs/use-dbt-semantic-layer/quickstart-sl.md +++ b/website/docs/docs/use-dbt-semantic-layer/quickstart-sl.md @@ -114,9 +114,9 @@ User data passes through the Semantic Layer on its way back from the warehouse. -import LegacyInfo from '/snippets/_legacy-sl-callout.md'; +import DeprecationNotice from '/snippets/sl-deprecation-notice.md'; - + To try out the features of the dbt Semantic Layer, you first need to have a dbt project set up. This quickstart guide will lay out the following steps, and recommends a workflow that demonstrates some of its essential features: diff --git a/website/docs/docs/use-dbt-semantic-layer/setup-sl.md b/website/docs/docs/use-dbt-semantic-layer/setup-sl.md index 4c88ee50b25..6fc7a018b8b 100644 --- a/website/docs/docs/use-dbt-semantic-layer/setup-sl.md +++ b/website/docs/docs/use-dbt-semantic-layer/setup-sl.md @@ -39,9 +39,9 @@ import SlSetUp from '/snippets/_new-sl-setup.md'; -import LegacyInfo from '/snippets/_legacy-sl-callout.md'; +import DeprecationNotice from '/snippets/sl-deprecation-notice.md'; - + With the dbt Semantic Layer, you can define business metrics, reduce code duplication and inconsistency, create self-service in downstream tools, and more. Configure the dbt Semantic Layer in dbt Cloud to connect with your integrated partner tool. diff --git a/website/docs/docs/use-dbt-semantic-layer/sl-architecture.md b/website/docs/docs/use-dbt-semantic-layer/sl-architecture.md index 9e8737c68d3..a1a19ead040 100644 --- a/website/docs/docs/use-dbt-semantic-layer/sl-architecture.md +++ b/website/docs/docs/use-dbt-semantic-layer/sl-architecture.md @@ -56,6 +56,10 @@ The dbt Semantic Layer is proprietary; however, some components of the dbt Seman +import DeprecationNotice from '/snippets/sl-deprecation-notice.md'; + + + ## Product architecture The dbt Semantic Layer product architecture includes four primary components: diff --git a/website/snippets/sl-deprecation-notice.md b/website/snippets/sl-deprecation-notice.md new file mode 100644 index 00000000000..ec49fd28fbf --- /dev/null +++ b/website/snippets/sl-deprecation-notice.md @@ -0,0 +1,8 @@ +:::info Deprecation of dbt Metrics and the legacy dbt Semantic Layer +If you're reading this message, you're either using an older version of our documentation or currently use the legacy Semantic Layer. + +As of December 15th, 2023, dbt Metrics and the legacy dbt Semantic Layer (v1.5 and lower) will no longer be supported. To benefit from the latest features, upgrade to the most [recent version](/guides/migration/sl-migration) of dbt and embrace the enhanced dbt Semantic Layer, powered by MetricFlow. + +After this date, dbt Labs won't offer support, bug fixes, or security updates for these deprecated features. Documentation for them will be discontinued, and they will be removed from the dbt Cloud user interface. + +::: From 6c5ab74eca9b6c13401b5b0328f11aa9f7ef62e9 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Thu, 9 Nov 2023 12:50:41 +0000 Subject: [PATCH 110/305] adding bullets for consistency --- website/docs/docs/use-dbt-semantic-layer/gsheets.md | 8 ++++---- website/docs/docs/use-dbt-semantic-layer/tableau.md | 9 +++++---- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/website/docs/docs/use-dbt-semantic-layer/gsheets.md b/website/docs/docs/use-dbt-semantic-layer/gsheets.md index ee391c91b70..2bbba70f98e 100644 --- a/website/docs/docs/use-dbt-semantic-layer/gsheets.md +++ b/website/docs/docs/use-dbt-semantic-layer/gsheets.md @@ -13,10 +13,10 @@ The dbt Semantic Layer offers a seamless integration with Google Sheets through ## Prerequisites -1. You have a Google account with access to Google Sheets. -2. You can install Google add-ons. -3. You have [set up the dbt Semantic Layer](/docs/use-dbt-semantic-layer/setup-sl). -4. You have a dbt Cloud Environment ID and a [service token](/docs/dbt-cloud-apis/service-tokens) to authenticate with from a dbt Cloud account. +- You have [configured the dbt Semantic Layer](/docs/use-dbt-semantic-layer/setup-sl) and are using the latest version. +- You have a Google account with access to Google Sheets. +- You can install Google add-ons. +- You have a dbt Cloud Environment ID and a [service token](/docs/dbt-cloud-apis/service-tokens) to authenticate with from a dbt Cloud account. ## Installing the add-on diff --git a/website/docs/docs/use-dbt-semantic-layer/tableau.md b/website/docs/docs/use-dbt-semantic-layer/tableau.md index c93643354aa..fe02b33d89d 100644 --- a/website/docs/docs/use-dbt-semantic-layer/tableau.md +++ b/website/docs/docs/use-dbt-semantic-layer/tableau.md @@ -16,11 +16,12 @@ This integration provides a live connection to the dbt Semantic Layer through Ta ## Prerequisites -1. You must have [Tableau Desktop](https://www.tableau.com/en-gb/products/desktop) installed with version 2021.1 or greater +- You have [configured the dbt Semantic Layer](/docs/use-dbt-semantic-layer/setup-sl) and are using the latest version. +- You must have [Tableau Desktop](https://www.tableau.com/en-gb/products/desktop) installed with version 2021.1 or greater - Note that Tableau Online does not currently support custom connectors natively. -2. Log in to Tableau Desktop using either your license or the login details you use for Tableau Server or Tableau Online. -3. You need your dbt Cloud host, [Environment ID](/docs/use-dbt-semantic-layer/setup-sl#set-up-dbt-semantic-layer) and [service token](/docs/dbt-cloud-apis/service-tokens) to log in. This account should be set up with the dbt Semantic Layer. -4. You must have a dbt Cloud Team or Enterprise [account](https://www.getdbt.com/pricing) and multi-tenant [deployment](/docs/cloud/about-cloud/regions-ip-addresses). (Single-Tenant coming soon) +- Log in to Tableau Desktop using either your license or the login details you use for Tableau Server or Tableau Online. +- You need your dbt Cloud host, [Environment ID](/docs/use-dbt-semantic-layer/setup-sl#set-up-dbt-semantic-layer) and [service token](/docs/dbt-cloud-apis/service-tokens) to log in. This account should be set up with the dbt Semantic Layer. +- You must have a dbt Cloud Team or Enterprise [account](https://www.getdbt.com/pricing) and multi-tenant [deployment](/docs/cloud/about-cloud/regions-ip-addresses). (Single-Tenant coming soon) ## Installing From d106cb5aaac4c5320c7df6afda44f8cf7dd37bb1 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Thu, 9 Nov 2023 12:59:22 +0000 Subject: [PATCH 111/305] update api callout --- website/snippets/_legacy-sl-callout.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/website/snippets/_legacy-sl-callout.md b/website/snippets/_legacy-sl-callout.md index f45c6b68af3..1f1de95ce17 100644 --- a/website/snippets/_legacy-sl-callout.md +++ b/website/snippets/_legacy-sl-callout.md @@ -1,11 +1,11 @@ -:::important Upgrade to access the new dbt Semantic Layer +:::important Upgrade to access the latest dbt Semantic Layer -The dbt Semantic Layer has undergone a [significant revamp](https://www.getdbt.com/blog/dbt-semantic-layer-whats-next/), improving governance, introducing a new API, and making it more efficient to define and query metrics. The legacy Semantic Layer, available in dbt v1.5 or lower, is no longer supported and won't receive any code fixes. +The dbt Semantic Layer has undergone a [significant revamp](https://www.getdbt.com/blog/dbt-semantic-layer-whats-next/), introducing new features such as dbt Semantic Layer APIs. The APIs integrate with data applications, such as Tableau and Google Sheets, to query metrics and unlock insights. -**Who does this affect?** Anyone who uses the legacy Semantic Layer. The new Semantic Layer is available to [Team or Enterprise](https://www.getdbt.com/pricing/) multi-tenant dbt Cloud plans [hosted in North America](/docs/cloud/about-cloud/regions-ip-addresses) (more regions coming soon). You must be on dbt v1.6 or higher to access it. Users on dbt Cloud Developer plans or dbt Core users can use MetricFlow to only define and test metrics locally. +If you're reading this message, you're either using an older version of our documentation or currently use the legacy Semantic Layer. -**What’s changed?** The dbt_metrics package has been [deprecated](https://docs.getdbt.com/blog/deprecating-dbt-metrics) and replaced with [MetricFlow](/docs/build/about-metricflow?version=1.6), a new framework for defining metrics in dbt. This means dbt_metrics is no longer supported after dbt v1.5 and won't receive any code fixes. +As of December 15th, 2023, dbt Metrics and the legacy dbt Semantic Layer (v1.5 and lower) will no longer be supported. To benefit from the latest features, upgrade to the most [recent version](/guides/migration/sl-migration) of dbt and embrace the enhanced dbt Semantic Layer, powered by MetricFlow. -**What should you do?** If you're using the legacy Semantic Layer, we **highly** recommend you [upgrade your dbt version](/docs/dbt-versions/upgrade-core-in-cloud) to dbt v1.6 or higher to use the new dbt Semantic Layer. To migrate to the new Semantic Layer, refer to the dedicated [migration guide](/guides/migration/sl-migration) for more info. +After this date, dbt Labs won't offer support, bug fixes, or security updates for these deprecated features. Documentation for them will be discontinued, and they will be removed from the dbt Cloud user interface. ::: From 83f417af71a392e9fa9baf421b099b16238c8051 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Thu, 9 Nov 2023 13:49:08 +0000 Subject: [PATCH 112/305] Update version.md fixing broken link Resolves #4376 --- website/docs/reference/project-configs/version.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docs/reference/project-configs/version.md b/website/docs/reference/project-configs/version.md index 1c947412fcd..7ad6fa7b7d4 100644 --- a/website/docs/reference/project-configs/version.md +++ b/website/docs/reference/project-configs/version.md @@ -31,7 +31,7 @@ A version tag in a `.yml` property file provides the control tag, which informs Starting from version 1.5, dbt will no longer require this configuration in your resource `.yml` files. If you want to know more about why this tag was previously required, you can refer to the [property file FAQs](reference/configs-and-properties#faqs). -For more on property files, see their general [documentation](reference/configs-and-properties#where-can-i-define-properties) on the same page. +For more on property files, see their general [documentation](/reference/configs-and-properties#where-can-i-define-properties) on the same page. From 6fe2e772c5a62bcaafc56868d2caea3ee4366ef8 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Thu, 9 Nov 2023 15:41:09 +0000 Subject: [PATCH 113/305] updates --- website/src/css/custom.css | 15 +++++++++++++++ website/static/img/check.png | Bin 0 -> 273 bytes website/static/img/copy.png | Bin 0 -> 1009 bytes website/static/js/headerLinkCopy.js | 12 ++++++++---- 4 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 website/static/img/check.png create mode 100644 website/static/img/copy.png diff --git a/website/src/css/custom.css b/website/src/css/custom.css index fc51ef8a8ef..9b044a7df3a 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -2033,6 +2033,21 @@ html[data-theme="dark"] .theme-doc-sidebar-container>div>button.button:hover { margin: 10px; color: #818589; /* You can adjust the color as needed */ } +h3.anchor a.hash-link:before, +h2.anchor a.hash-link:before { + content: ""; + background-image: url('/img/copy.png'); + background-size: 18px 18px; + height: 18px; + width: 18px; + display: inline-block; +} +h3.anchor.clicked a.hash-link:before, +h2.anchor.clicked a.hash-link:before { + background-image: url('/img/check.png'); + background-size: 18px 13px; + height: 13px; +} @media (max-width: 996px) { .quickstart-container { diff --git a/website/static/img/check.png b/website/static/img/check.png new file mode 100644 index 0000000000000000000000000000000000000000..91192b50cb13cf3407f292f2d0004b9903902118 GIT binary patch literal 273 zcmV+s0q*{ZP)7x#S2gC4>ZTz|y5h@Q3M6mzucX2p+*3sENuoIED#<+9DExKn5mh zC(~(OCneA`bk5Br7FQr}iBHERfgbTg1c0e(iJTd9j4F~tMyH7ykccH@N>!ox{#aY_ zd0*rm93rL=ky7<(Giuq8hR=IfMAeL0PAK!}+a+!l!yp+%ZD%O6TRi`VVUheCV6fqP z5Ml@APCx{B7$loWZRzWAlarCsWB?Pn3=C30Ef@+ZK}{G2sXz=Z5P-X9z+&M7PhdQOWaY|oasrbR#GF795<Q#h6(f=W&$a@Dh#}ze&6fY-LEGI_aM3bnuBAtJw|X4U@d5N>93CneLIJz z!)9|J%|%$DXb`2&)D*%fv~btXV`COJcccXPHBb55TgwMy;hshVO-H0sWyMPvxOGIAT}O)g^t^)yJ1tI zTwC*Obw*zuaf)TH-w9|D3@Y3ioiw|~`IW;<5lUer^N}qJqjmVWW0?FRlZEnowO0zY z$?pskK~)Z~=uw(!cC%Rs)e)=!Mvn))7MhExfwXlD88{BZ*}71xtu4~0Ks}b)Qv=aa zy)<+*rZDVZ>XJhEdv33Kv_R$TaRJ|RS&qz^Q$VTTJ89OZFfnIGtmpTtWl519OUEf*Yv~!6pGR~ zuu$JWzVFNZ3^n%K5ls1@q&RDfFfjOg{O;V6V5U1zdUrz@x}p*V+A&A17K5FFEDk%m z)|Ru4;OvY1u*@)=$|nm#r{gLv6=rpS+Jt&tFXA1)FPoqUd|Qw4hJ7%=gn?n1VDvae zkq|6s0e%rw74tX0qiFK{KRjQsrg9+I7=89?a+)9O$#SDT4yj4n`**I$V6kVdB|Zw6+2%AY>pAfv}%6DKtBQZGwwNf|gxS;7{Y&l{*pkW!Lhw5ZterUaTh9!`j9YML}KS*$YwLNNma)ih_Y zB#bFAk_7b)Y+F}`{vN%+?Zn@|iFA8=3mr0L& f>QhjXtW^F1X0*+yVdH~-00000NkvXXu0mjf%v8aY literal 0 HcmV?d00001 diff --git a/website/static/js/headerLinkCopy.js b/website/static/js/headerLinkCopy.js index 04f716a7641..219f74cf135 100644 --- a/website/static/js/headerLinkCopy.js +++ b/website/static/js/headerLinkCopy.js @@ -3,19 +3,23 @@ window.addEventListener("load", function () { // Get all the headers with anchor links const headers = document.querySelectorAll("h2.anchor, h3.anchor"); - console.log("headers",headers); + headers.forEach((header) => { header.style.cursor = "pointer"; const clipboard = new ClipboardJS(header, { text: function(trigger) { - const anchorLink = trigger.getAttribute('href'); - return window.location.href.split('#')[0] + anchorLink; + const anchorLink = trigger.getAttribute("id"); + return window.location.href.split('#')[0] +'#' + anchorLink; } }); clipboard.on('success', function(e) { // Provide user feedback (e.g., alert or tooltip) here - alert("Link copied to clipboard: " + e.text); + console.log("e",e); + e.trigger.classList.add("clicked"); + setTimeout(() => { + e.trigger.classList.remove('clicked') + }, 5000) }); clipboard.on('error', function(e) { From 5aa8c44ec75664af0bc016a85e8e80c5143082c5 Mon Sep 17 00:00:00 2001 From: Ly Nguyen Date: Thu, 9 Nov 2023 07:59:58 -0800 Subject: [PATCH 114/305] Remove beta callout --- website/docs/docs/deploy/deploy-environments.md | 8 ++------ website/snippets/_explorer-beta-banner.md | 3 --- 2 files changed, 2 insertions(+), 9 deletions(-) delete mode 100644 website/snippets/_explorer-beta-banner.md diff --git a/website/docs/docs/deploy/deploy-environments.md b/website/docs/docs/deploy/deploy-environments.md index bdcf36b7a30..83231e2d66d 100644 --- a/website/docs/docs/deploy/deploy-environments.md +++ b/website/docs/docs/deploy/deploy-environments.md @@ -28,16 +28,12 @@ To create a new dbt Cloud development environment, navigate to **Deploy** -> **E -### Set as production environment (Beta) +### Set as production environment -import ExpBeta from '/snippets/_explorer-beta-banner.md'; - - +In dbt Cloud, each project can have one designated deployment environment, which serves as its production environment. This production environment is _essential_ for using features like dbt Explorer and cross-project references. It acts as the source of truth for the project's production state in dbt Cloud. -In dbt Cloud, each project can have one designated deployment environment, which serves as its production environment. This production environment is _essential_ for using features like dbt Explorer and cross-project references. It acts as the source of truth for the project's production state in dbt Cloud. - ### Semantic Layer For Semantic Layer-eligible customers, the next section of environment settings is the Semantic Layer configurations. [The Semantic Layer setup guide](/docs/use-dbt-semantic-layer/setup-sl) has the most up-to-date setup instructions! diff --git a/website/snippets/_explorer-beta-banner.md b/website/snippets/_explorer-beta-banner.md deleted file mode 100644 index ab501c7bd0f..00000000000 --- a/website/snippets/_explorer-beta-banner.md +++ /dev/null @@ -1,3 +0,0 @@ -:::info Beta -This feature is related to dbt Explorer and cross-project references [beta](/docs/dbt-versions/product-lifecycles#dbt-cloud) projects and subject to change. If you are interested in getting access to the beta, please [contact us](mailto:support@getdbt.com). -::: From e48c8214ba0b2d613470a956eb5118dbf06d08d7 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Thu, 9 Nov 2023 16:14:44 +0000 Subject: [PATCH 115/305] update --- .../docs/docs/use-dbt-semantic-layer/avail-sl-integrations.md | 2 +- website/docs/docs/use-dbt-semantic-layer/dbt-sl.md | 2 +- website/docs/docs/use-dbt-semantic-layer/gsheets.md | 2 +- website/docs/docs/use-dbt-semantic-layer/quickstart-sl.md | 2 +- website/docs/docs/use-dbt-semantic-layer/setup-sl.md | 2 +- website/docs/docs/use-dbt-semantic-layer/sl-architecture.md | 2 +- website/docs/docs/use-dbt-semantic-layer/tableau.md | 2 +- .../{sl-deprecation-notice.md => _sl-deprecation-notice.md} | 0 8 files changed, 7 insertions(+), 7 deletions(-) rename website/snippets/{sl-deprecation-notice.md => _sl-deprecation-notice.md} (100%) diff --git a/website/docs/docs/use-dbt-semantic-layer/avail-sl-integrations.md b/website/docs/docs/use-dbt-semantic-layer/avail-sl-integrations.md index 4f009db1819..4f4621fa860 100644 --- a/website/docs/docs/use-dbt-semantic-layer/avail-sl-integrations.md +++ b/website/docs/docs/use-dbt-semantic-layer/avail-sl-integrations.md @@ -38,7 +38,7 @@ import AvailIntegrations from '/snippets/_sl-partner-links.md'; -import DeprecationNotice from '/snippets/sl-deprecation-notice.md'; +import DeprecationNotice from '/snippets/_sl-deprecation-notice.md'; diff --git a/website/docs/docs/use-dbt-semantic-layer/dbt-sl.md b/website/docs/docs/use-dbt-semantic-layer/dbt-sl.md index b1a2c2ecaa9..9c9933340bd 100644 --- a/website/docs/docs/use-dbt-semantic-layer/dbt-sl.md +++ b/website/docs/docs/use-dbt-semantic-layer/dbt-sl.md @@ -67,7 +67,7 @@ plan="dbt Cloud Team or Enterprise" -import DeprecationNotice from '/snippets/sl-deprecation-notice.md'; +import DeprecationNotice from '/snippets/_sl-deprecation-notice.md'; diff --git a/website/docs/docs/use-dbt-semantic-layer/gsheets.md b/website/docs/docs/use-dbt-semantic-layer/gsheets.md index 2bbba70f98e..cb9f4014803 100644 --- a/website/docs/docs/use-dbt-semantic-layer/gsheets.md +++ b/website/docs/docs/use-dbt-semantic-layer/gsheets.md @@ -13,7 +13,7 @@ The dbt Semantic Layer offers a seamless integration with Google Sheets through ## Prerequisites -- You have [configured the dbt Semantic Layer](/docs/use-dbt-semantic-layer/setup-sl) and are using the latest version. +- You have [configured the dbt Semantic Layer](/docs/use-dbt-semantic-layer/setup-sl) and are using dbt v1.6 or higher. - You have a Google account with access to Google Sheets. - You can install Google add-ons. - You have a dbt Cloud Environment ID and a [service token](/docs/dbt-cloud-apis/service-tokens) to authenticate with from a dbt Cloud account. diff --git a/website/docs/docs/use-dbt-semantic-layer/quickstart-sl.md b/website/docs/docs/use-dbt-semantic-layer/quickstart-sl.md index f68b0e144d1..7e77c075ce6 100644 --- a/website/docs/docs/use-dbt-semantic-layer/quickstart-sl.md +++ b/website/docs/docs/use-dbt-semantic-layer/quickstart-sl.md @@ -114,7 +114,7 @@ User data passes through the Semantic Layer on its way back from the warehouse. -import DeprecationNotice from '/snippets/sl-deprecation-notice.md'; +import DeprecationNotice from '/snippets/_sl-deprecation-notice.md'; diff --git a/website/docs/docs/use-dbt-semantic-layer/setup-sl.md b/website/docs/docs/use-dbt-semantic-layer/setup-sl.md index 6fc7a018b8b..9997e2d3647 100644 --- a/website/docs/docs/use-dbt-semantic-layer/setup-sl.md +++ b/website/docs/docs/use-dbt-semantic-layer/setup-sl.md @@ -39,7 +39,7 @@ import SlSetUp from '/snippets/_new-sl-setup.md'; -import DeprecationNotice from '/snippets/sl-deprecation-notice.md'; +import DeprecationNotice from '/snippets/_sl-deprecation-notice.md'; diff --git a/website/docs/docs/use-dbt-semantic-layer/sl-architecture.md b/website/docs/docs/use-dbt-semantic-layer/sl-architecture.md index a1a19ead040..a44144f61d6 100644 --- a/website/docs/docs/use-dbt-semantic-layer/sl-architecture.md +++ b/website/docs/docs/use-dbt-semantic-layer/sl-architecture.md @@ -56,7 +56,7 @@ The dbt Semantic Layer is proprietary; however, some components of the dbt Seman -import DeprecationNotice from '/snippets/sl-deprecation-notice.md'; +import DeprecationNotice from '/snippets/_sl-deprecation-notice.md'; diff --git a/website/docs/docs/use-dbt-semantic-layer/tableau.md b/website/docs/docs/use-dbt-semantic-layer/tableau.md index fe02b33d89d..8e6d7d8ed27 100644 --- a/website/docs/docs/use-dbt-semantic-layer/tableau.md +++ b/website/docs/docs/use-dbt-semantic-layer/tableau.md @@ -16,7 +16,7 @@ This integration provides a live connection to the dbt Semantic Layer through Ta ## Prerequisites -- You have [configured the dbt Semantic Layer](/docs/use-dbt-semantic-layer/setup-sl) and are using the latest version. +- You have [configured the dbt Semantic Layer](/docs/use-dbt-semantic-layer/setup-sl) and are using dbt v1.6 or higher. - You must have [Tableau Desktop](https://www.tableau.com/en-gb/products/desktop) installed with version 2021.1 or greater - Note that Tableau Online does not currently support custom connectors natively. - Log in to Tableau Desktop using either your license or the login details you use for Tableau Server or Tableau Online. diff --git a/website/snippets/sl-deprecation-notice.md b/website/snippets/_sl-deprecation-notice.md similarity index 100% rename from website/snippets/sl-deprecation-notice.md rename to website/snippets/_sl-deprecation-notice.md From 9148b87836832f821434724bca77eb570153c3fa Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Thu, 9 Nov 2023 16:21:34 +0000 Subject: [PATCH 116/305] fix snippet --- website/docs/docs/build/metrics.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/build/metrics.md b/website/docs/docs/build/metrics.md index 6d4e0fec893..6686dadc356 100644 --- a/website/docs/docs/build/metrics.md +++ b/website/docs/docs/build/metrics.md @@ -7,7 +7,7 @@ keywords: tags: [Metrics] --- -import DeprecationNotice from '/snippets/sl-deprecation-notice.md'; +import DeprecationNotice from '/snippets/_sl-deprecation-notice.md'; From 7ede95811d427f68ac5e92a3798da71d499a9671 Mon Sep 17 00:00:00 2001 From: Ly Nguyen Date: Thu, 9 Nov 2023 08:53:17 -0800 Subject: [PATCH 117/305] Fix links --- website/docs/docs/cloud/about-cloud-develop-defer.md | 2 +- website/docs/docs/collaborate/explore-projects.md | 2 +- website/docs/docs/collaborate/govern/project-dependencies.md | 2 +- website/snippets/_explorer-beta-note.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/website/docs/docs/cloud/about-cloud-develop-defer.md b/website/docs/docs/cloud/about-cloud-develop-defer.md index 85bf20880f8..95e745fe963 100644 --- a/website/docs/docs/cloud/about-cloud-develop-defer.md +++ b/website/docs/docs/cloud/about-cloud-develop-defer.md @@ -13,7 +13,7 @@ Both the dbt Cloud IDE and the dbt Cloud CLI allow users to natively defer to pr ## Required setup -- You must select the **[Production environment](/docs/deploy/deploy-environments#set-as-production-environment-beta)** checkbox in the **Environment Settings** page. +- You must select the **[Production environment](/docs/deploy/deploy-environments#set-as-production-environment)** checkbox in the **Environment Settings** page. - This can be set for one deployment environment per dbt Cloud project. - You must have a successful job run first. diff --git a/website/docs/docs/collaborate/explore-projects.md b/website/docs/docs/collaborate/explore-projects.md index b041cd0c915..282ef566356 100644 --- a/website/docs/docs/collaborate/explore-projects.md +++ b/website/docs/docs/collaborate/explore-projects.md @@ -17,7 +17,7 @@ Try dbt Explorer! It's available in [Public Preview](/docs/dbt-versions/product- ## Prerequisites - You have a [multi-tenant](/docs/cloud/about-cloud/tenancy#multi-tenant) or AWS single-tenant dbt Cloud account on the [Team or Enterprise plan](https://www.getdbt.com/pricing/). -- You have set up a [production deployment environment](/docs/deploy/deploy-environments#set-as-production-environment-beta) for each project you want to explore. +- You have set up a [production deployment environment](/docs/deploy/deploy-environments#set-as-production-environment) for each project you want to explore. - There has been at least one successful job run in the production deployment environment. - You are on the dbt Explorer page. To do this, select **Explore** from the top navigation bar in dbt Cloud. diff --git a/website/docs/docs/collaborate/govern/project-dependencies.md b/website/docs/docs/collaborate/govern/project-dependencies.md index 9a1d8b59b68..d873d8883d6 100644 --- a/website/docs/docs/collaborate/govern/project-dependencies.md +++ b/website/docs/docs/collaborate/govern/project-dependencies.md @@ -29,7 +29,7 @@ Starting in dbt v1.6 or higher, `packages.yml` has been renamed to `dependencies In order to add project dependencies and resolve cross-project `ref`, you must: - Use dbt v1.6 or higher for **both** the upstream ("producer") project and the downstream ("consumer") project. -- Have a deployment environment in the upstream ("producer") project [that is set to be your production environment](/docs/deploy/deploy-environments#set-as-production-environment-beta) +- Have a deployment environment in the upstream ("producer") project [that is set to be your production environment](/docs/deploy/deploy-environments#set-as-production-environment) - Have a successful run of the upstream ("producer") project - Have a multi-tenant or single-tenant [dbt Cloud Enterprise](https://www.getdbt.com/pricing) account (Azure ST is not supported but coming soon) diff --git a/website/snippets/_explorer-beta-note.md b/website/snippets/_explorer-beta-note.md index 3bdcd5bcf7a..b15bd310a58 100644 --- a/website/snippets/_explorer-beta-note.md +++ b/website/snippets/_explorer-beta-note.md @@ -1 +1 @@ -**Note:** Make sure to set the environment to "Production" so you can take advantage of features like dbt Explorer and cross-project references. Refer to [Set product environment](/docs/deploy/deploy-environments#set-as-production-environment-beta) for details. +**Note:** Make sure to set the environment to "Production" so you can take advantage of features like dbt Explorer and cross-project references. Refer to [Set product environment](/docs/deploy/deploy-environments#set-as-production-environment) for details. From cfab9a4eb5e766ad672c3c5620d10da771da2a32 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Thu, 9 Nov 2023 16:55:55 +0000 Subject: [PATCH 118/305] will's feedback --- website/snippets/_legacy-sl-callout.md | 7 +++---- website/snippets/_sl-deprecation-notice.md | 4 +--- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/website/snippets/_legacy-sl-callout.md b/website/snippets/_legacy-sl-callout.md index 1f1de95ce17..61d3a1c910f 100644 --- a/website/snippets/_legacy-sl-callout.md +++ b/website/snippets/_legacy-sl-callout.md @@ -1,11 +1,10 @@ :::important Upgrade to access the latest dbt Semantic Layer -The dbt Semantic Layer has undergone a [significant revamp](https://www.getdbt.com/blog/dbt-semantic-layer-whats-next/), introducing new features such as dbt Semantic Layer APIs. The APIs integrate with data applications, such as Tableau and Google Sheets, to query metrics and unlock insights. +The dbt Semantic Layer has undergone a [significant revamp](https://www.getdbt.com/blog/dbt-semantic-layer-whats-next/), introducing new features such as dbt Semantic Layer APIs. The APIs integrate with data applications, such as Tableau and Google Sheets, to query metrics and unlock insights. -If you're reading this message, you're either using an older version of our documentation or currently use the legacy Semantic Layer. - -As of December 15th, 2023, dbt Metrics and the legacy dbt Semantic Layer (v1.5 and lower) will no longer be supported. To benefit from the latest features, upgrade to the most [recent version](/guides/migration/sl-migration) of dbt and embrace the enhanced dbt Semantic Layer, powered by MetricFlow. +For users on dbt version 1.5 or earlier, starting on December 15th, 2023, support for dbt Metrics and the old dbt Semantic Layer (v1.5 and below) will end. To benefit from the latest features, upgrade to the most [recent version](/guides/migration/sl-migration) of dbt and embrace the enhanced dbt Semantic Layer, powered by MetricFlow. After this date, dbt Labs won't offer support, bug fixes, or security updates for these deprecated features. Documentation for them will be discontinued, and they will be removed from the dbt Cloud user interface. ::: +support for dbt Metrics and the old dbt Semantic Layer (v1.5 and below) will end. diff --git a/website/snippets/_sl-deprecation-notice.md b/website/snippets/_sl-deprecation-notice.md index ec49fd28fbf..8d107f39fff 100644 --- a/website/snippets/_sl-deprecation-notice.md +++ b/website/snippets/_sl-deprecation-notice.md @@ -1,7 +1,5 @@ :::info Deprecation of dbt Metrics and the legacy dbt Semantic Layer -If you're reading this message, you're either using an older version of our documentation or currently use the legacy Semantic Layer. - -As of December 15th, 2023, dbt Metrics and the legacy dbt Semantic Layer (v1.5 and lower) will no longer be supported. To benefit from the latest features, upgrade to the most [recent version](/guides/migration/sl-migration) of dbt and embrace the enhanced dbt Semantic Layer, powered by MetricFlow. +For users on dbt version 1.5 or earlier — starting on December 15th, 2023, support for dbt Metrics and the old dbt Semantic Layer (v1.5 and below) will end. To benefit from the latest features, upgrade to the most [recent version](/guides/migration/sl-migration) of dbt and embrace the enhanced dbt Semantic Layer, powered by MetricFlow. After this date, dbt Labs won't offer support, bug fixes, or security updates for these deprecated features. Documentation for them will be discontinued, and they will be removed from the dbt Cloud user interface. From 794d2bcdd626991e0a6836f414d28de3172724bc Mon Sep 17 00:00:00 2001 From: Ly Nguyen Date: Thu, 9 Nov 2023 09:50:52 -0800 Subject: [PATCH 119/305] Feedback --- .../release-notes/02-Nov-2023/job-notifications-rn.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/website/docs/docs/dbt-versions/release-notes/02-Nov-2023/job-notifications-rn.md b/website/docs/docs/dbt-versions/release-notes/02-Nov-2023/job-notifications-rn.md index 8da60e5d24d..32189c66a8e 100644 --- a/website/docs/docs/dbt-versions/release-notes/02-Nov-2023/job-notifications-rn.md +++ b/website/docs/docs/dbt-versions/release-notes/02-Nov-2023/job-notifications-rn.md @@ -8,8 +8,10 @@ tags: [Nov-2023] There are new quality-of-life improvements in dbt Cloud for email and Slack notifications about your jobs: -- You can add external email addresses and receive job notifications from them. External emails can be addresses that are outside of your dbt Cloud account and also for configuring notifications in third-party services like Microsoft Teams and PagerDuty. +- You can add external email addresses and receive job notifications from them. External emails can be: + - Addresses that are outside of your dbt Cloud account + - Third-party integration addresses for configuring notifications to services like Microsoft Teams or PagerDuty - You can configure notifications for multiple Slack channels. Previously, you could only configure one Slack channel. -- Any account admin can now edit slack notifications, not just the person who created it. +- Any account admin can now edit slack notifications, not just the person who created them. To learn more, check out [Job notifications](/docs/deploy/job-notifications). \ No newline at end of file From 59b506117cc6330fb06d42adc0056b72b46f4fba Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Thu, 9 Nov 2023 11:48:24 -0800 Subject: [PATCH 120/305] fixing links --- .../dbt-unity-catalog-best-practices.md | 8 ++++---- website/docs/community/resources/getting-help.md | 2 +- website/docs/docs/cloud/billing.md | 2 +- website/docs/docs/connect-adapters.md | 2 +- website/docs/docs/contribute-core-adapters.md | 4 ++-- .../core-upgrade/07-upgrading-to-v1.1.md | 2 +- website/docs/docs/dbt-versions/core-versions.md | 2 +- .../04-Sept-2023/ci-updates-phase2-rn.md | 2 +- .../04-Sept-2023/product-docs-summer-rn.md | 2 +- .../dbt-databricks-unity-catalog-support.md | 2 +- website/docs/docs/deploy/ci-jobs.md | 2 +- website/docs/docs/supported-data-platforms.md | 2 +- website/docs/docs/trusted-adapters.md | 2 +- website/docs/docs/verified-adapters.md | 2 +- website/docs/guides/adapter-creation.md | 5 ++--- website/docs/guides/dbt-models-on-databricks.md | 4 ++-- .../productionize-your-dbt-databricks-project.md | 16 ++++++++-------- website/docs/guides/set-up-ci.md | 6 +++--- .../guides/set-up-your-databricks-dbt-project.md | 2 +- website/docs/reference/commands/init.md | 2 +- website/docs/reference/events-logging.md | 2 +- .../reference/resource-configs/no-configs.md | 2 +- 22 files changed, 37 insertions(+), 38 deletions(-) diff --git a/website/docs/best-practices/dbt-unity-catalog-best-practices.md b/website/docs/best-practices/dbt-unity-catalog-best-practices.md index 0d24cc320ec..89153fe1b86 100644 --- a/website/docs/best-practices/dbt-unity-catalog-best-practices.md +++ b/website/docs/best-practices/dbt-unity-catalog-best-practices.md @@ -60,9 +60,9 @@ Ready to start transforming your Unity Catalog datasets with dbt? Check out the resources below for guides, tips, and best practices: -- [How we structure our dbt projects](https://docs.getdbt.com/best-practices/how-we-structure/1-guide-overview) +- [How we structure our dbt projects](/best-practices/how-we-structure/1-guide-overview) - [Self-paced dbt fundamentals training videos](https://courses.getdbt.com/courses/fundamentals) -- [Customizing CI/CD](https://docs.getdbt.com/guides/orchestration/custom-cicd-pipelines/1-cicd-background) & [SQL linting](https://docs.getdbt.com/guides/orchestration/custom-cicd-pipelines/2-lint-on-push) -- [Debugging errors](https://docs.getdbt.com/best-practices/debugging-errors) -- [Writing custom generic tests](https://docs.getdbt.com/best-practices/writing-custom-generic-tests) +- [Customizing CI/CD](/guides/custom-cicd-pipelines) +- [Debugging errors](/guides/debug-errors) +- [Writing custom generic tests](/best-practices/writing-custom-generic-tests) - [dbt packages hub](https://hub.getdbt.com/) diff --git a/website/docs/community/resources/getting-help.md b/website/docs/community/resources/getting-help.md index 658f7d154db..2f30644186e 100644 --- a/website/docs/community/resources/getting-help.md +++ b/website/docs/community/resources/getting-help.md @@ -9,7 +9,7 @@ dbt is open source, and has a generous community behind it. Asking questions wel #### Search the existing documentation The docs site you're on is highly searchable, make sure to explore for the answer here as a first step. If you're new to dbt, try working through the [quickstart guide](/guides) first to get a firm foundation on the essential concepts. #### Try to debug the issue yourself -We have a handy guide on [debugging errors](/best-practices/debugging-errors) to help out! This guide also helps explain why errors occur, and which docs you might need to search for help. +We have a handy guide on [debugging errors](/guides/debug-errors) to help out! This guide also helps explain why errors occur, and which docs you might need to search for help. #### Search for answers using your favorite search engine We're committed to making more errors searchable, so it's worth checking if there's a solution already out there! Further, some errors related to installing dbt, the SQL in your models, or getting YAML right, are errors that are not-specific to dbt, so there may be other resources to check. diff --git a/website/docs/docs/cloud/billing.md b/website/docs/docs/cloud/billing.md index ef3eb00a3c6..6853cc0004b 100644 --- a/website/docs/docs/cloud/billing.md +++ b/website/docs/docs/cloud/billing.md @@ -237,7 +237,7 @@ To understand better how long each model takes to run within the context of a sp Once you've identified which models could be optimized, check out these other resources that walk through how to optimize your work: * [Build scalable and trustworthy data pipelines with dbt and BigQuery](https://services.google.com/fh/files/misc/dbt_bigquery_whitepaper.pdf) * [Best Practices for Optimizing Your dbt and Snowflake Deployment](https://www.snowflake.com/wp-content/uploads/2021/10/Best-Practices-for-Optimizing-Your-dbt-and-Snowflake-Deployment.pdf) -* [How to optimize and troubleshoot dbt models on Databricks](/guides/dbt-ecosystem/databricks-guides/how_to_optimize_dbt_models_on_databricks) +* [How to optimize and troubleshoot dbt models on Databricks](/guides/optimize-dbt-models-on-databricks) ## FAQs diff --git a/website/docs/docs/connect-adapters.md b/website/docs/docs/connect-adapters.md index 77ead34e51d..e301cfc237e 100644 --- a/website/docs/docs/connect-adapters.md +++ b/website/docs/docs/connect-adapters.md @@ -3,7 +3,7 @@ title: "How to connect to adapters" id: "connect-adapters" --- -Adapters are an essential component of dbt. At their most basic level, they are how dbt connects with the various supported data platforms. At a higher-level, adapters strive to give analytics engineers more transferrable skills as well as standardize how analytics projects are structured. Gone are the days where you have to learn a new language or flavor of SQL when you move to a new job that has a different data platform. That is the power of adapters in dbt — for more detail, read the [What are adapters](/guides/dbt-ecosystem/adapter-development/1-what-are-adapters) guide. +Adapters are an essential component of dbt. At their most basic level, they are how dbt connects with the various supported data platforms. At a higher-level, adapters strive to give analytics engineers more transferrable skills as well as standardize how analytics projects are structured. Gone are the days where you have to learn a new language or flavor of SQL when you move to a new job that has a different data platform. That is the power of adapters in dbt — for more detail, refer to the [Build, test, document, and promote adapters](/guides/adapter-creation) guide. This section provides more details on different ways you can connect dbt to an adapter, and explains what a maintainer is. diff --git a/website/docs/docs/contribute-core-adapters.md b/website/docs/docs/contribute-core-adapters.md index 553361ee1a2..d3b1edf2a38 100644 --- a/website/docs/docs/contribute-core-adapters.md +++ b/website/docs/docs/contribute-core-adapters.md @@ -17,6 +17,6 @@ Community-supported plugins are works in progress, and anyone is welcome to cont ### Create a new adapter -If you see something missing from the lists above, and you're interested in developing an integration, read more about adapters and how they're developed in the [Adapter Development](/guides/dbt-ecosystem/adapter-development/1-what-are-adapters) section. +If you see something missing from the lists above, and you're interested in developing an integration, read more about adapters and how they're developed in the [Build, test, document, and promote adapters](/guides/adapter-creation). -If you have a new adapter, please add it to this list using a pull request! See [Documenting your adapter](/guides/dbt-ecosystem/adapter-development/5-documenting-a-new-adapter) for more information. +If you have a new adapter, please add it to this list using a pull request! You can refer to [Build, test, document, and promote adapters](/guides/adapter-creation) for more information on documenting your adapter. diff --git a/website/docs/docs/dbt-versions/core-upgrade/07-upgrading-to-v1.1.md b/website/docs/docs/dbt-versions/core-upgrade/07-upgrading-to-v1.1.md index 7819709558e..403264a46e6 100644 --- a/website/docs/docs/dbt-versions/core-upgrade/07-upgrading-to-v1.1.md +++ b/website/docs/docs/dbt-versions/core-upgrade/07-upgrading-to-v1.1.md @@ -21,7 +21,7 @@ There are no breaking changes for code in dbt projects and packages. We are comm ### For maintainers of adapter plugins -We have reworked the testing suite for adapter plugin functionality. For details on the new testing suite, see: [Testing a new adapter](/guides/dbt-ecosystem/adapter-development/4-testing-a-new-adapter). +We have reworked the testing suite for adapter plugin functionality. For details on the new testing suite, refer to the "Test your adapter" step in the [Build, test, document, and promote adapters](/guides/adapter-creation) guide. The abstract methods `get_response` and `execute` now only return `connection.AdapterReponse` in type hints. Previously, they could return a string. We encourage you to update your methods to return an object of class `AdapterResponse`, or implement a subclass specific to your adapter. This also gives you the opportunity to add fields specific to your adapter's query execution, such as `rows_affected` or `bytes_processed`. diff --git a/website/docs/docs/dbt-versions/core-versions.md b/website/docs/docs/dbt-versions/core-versions.md index 5e8e437f0b1..2467f3c946b 100644 --- a/website/docs/docs/dbt-versions/core-versions.md +++ b/website/docs/docs/dbt-versions/core-versions.md @@ -84,7 +84,7 @@ Like many software projects, dbt Core releases follow [semantic versioning](http We are committed to avoiding breaking changes in minor versions for end users of dbt. There are two types of breaking changes that may be included in minor versions: -- Changes to the [Python interface for adapter plugins](/guides/dbt-ecosystem/adapter-development/3-building-a-new-adapter). These changes are relevant _only_ to adapter maintainers, and they will be clearly communicated in documentation and release notes. +- Changes to the Python interface for adapter plugins. These changes are relevant _only_ to adapter maintainers, and they will be clearly communicated in documentation and release notes. For more information, refer to [Build, test, document, and promote adapters](/guides/adapter-creation) guide. - Changes to metadata interfaces, including [artifacts](/docs/deploy/artifacts) and [logging](/reference/events-logging), signalled by a version bump. Those version upgrades may require you to update external code that depends on these interfaces, or to coordinate upgrades between dbt orchestrations that share metadata, such as [state-powered selection](/reference/node-selection/syntax#about-node-selection). ### How we version adapter plugins diff --git a/website/docs/docs/dbt-versions/release-notes/04-Sept-2023/ci-updates-phase2-rn.md b/website/docs/docs/dbt-versions/release-notes/04-Sept-2023/ci-updates-phase2-rn.md index fd2d163b748..a8ae1ade65b 100644 --- a/website/docs/docs/dbt-versions/release-notes/04-Sept-2023/ci-updates-phase2-rn.md +++ b/website/docs/docs/dbt-versions/release-notes/04-Sept-2023/ci-updates-phase2-rn.md @@ -29,7 +29,7 @@ Below is a comparison table that describes how deploy jobs and CI jobs behave di ## What you need to update -- If you want to set up a CI environment for your jobs, dbt Labs recommends that you create your CI job in a dedicated [deployment environment](/docs/deploy/deploy-environments#create-a-deployment-environment) that's connected to a staging database. To learn more about these environment best practices, refer to the guide [Get started with continuous integration tests](/guides/orchestration/set-up-ci/overview). +- If you want to set up a CI environment for your jobs, dbt Labs recommends that you create your CI job in a dedicated [deployment environment](/docs/deploy/deploy-environments#create-a-deployment-environment) that's connected to a staging database. To learn more about these environment best practices, refer to the guide [Get started with continuous integration tests](/guides/set-up-ci). - If you had set up a CI job before October 2, 2023, the job might've been misclassified as a deploy job with this update. Below describes how to fix the job type: diff --git a/website/docs/docs/dbt-versions/release-notes/04-Sept-2023/product-docs-summer-rn.md b/website/docs/docs/dbt-versions/release-notes/04-Sept-2023/product-docs-summer-rn.md index 2739ef2b7aa..e8fb9539c50 100644 --- a/website/docs/docs/dbt-versions/release-notes/04-Sept-2023/product-docs-summer-rn.md +++ b/website/docs/docs/dbt-versions/release-notes/04-Sept-2023/product-docs-summer-rn.md @@ -40,4 +40,4 @@ You can provide feedback by opening a pull request or issue in [our repo](https: ## New 📚 Guides, ✏️ blog posts, and FAQs * Check out how these community members use the dbt community in the [Community spotlight](/community/spotlight). * Blog posts published this summer include [Optimizing Materialized Views with dbt](/blog/announcing-materialized-views), [Data Vault 2.0 with dbt Cloud](/blog/data-vault-with-dbt-cloud), and [Create dbt Documentation and Tests 10x faster with ChatGPT](/blog/create-dbt-documentation-10x-faster-with-chatgpt) -* We now have two new best practice guides: [How we build our metrics](/best-practices/how-we-build-our-metrics/semantic-layer-1-intro) and [Set up Continuous Integration](/guides/orchestration/set-up-ci/overview). +- We now have two new best practice guides: [How we build our metrics](/best-practices/how-we-build-our-metrics/semantic-layer-1-intro) and [Set up Continuous Integration](/guides/set-up-ci). diff --git a/website/docs/docs/dbt-versions/release-notes/24-Nov-2022/dbt-databricks-unity-catalog-support.md b/website/docs/docs/dbt-versions/release-notes/24-Nov-2022/dbt-databricks-unity-catalog-support.md index 25d5ca5205f..ee46cb5f558 100644 --- a/website/docs/docs/dbt-versions/release-notes/24-Nov-2022/dbt-databricks-unity-catalog-support.md +++ b/website/docs/docs/dbt-versions/release-notes/24-Nov-2022/dbt-databricks-unity-catalog-support.md @@ -8,6 +8,6 @@ tags: [Nov-2022, v1.1.66.15] dbt Cloud is the easiest and most reliable way to develop and deploy a dbt project. It helps remove complexity while also giving you more features and better performance. A simpler Databricks connection experience with support for Databricks’ Unity Catalog and better modeling defaults is now available for your use. -For all the Databricks customers already using dbt Cloud with the dbt-spark adapter, you can now [migrate](https://docs.getdbt.com/guides/migration/tools/migrating-from-spark-to-databricks#migration) your connection to the [dbt-databricks adapter](https://docs.getdbt.com/reference/warehouse-setups/databricks-setup) to get the benefits. [Databricks](https://www.databricks.com/blog/2022/11/17/introducing-native-high-performance-integration-dbt-cloud.html) is committed to maintaining and improving the adapter, so this integrated experience will continue to provide the best of dbt and Databricks. +For all the Databricks customers already using dbt Cloud with the dbt-spark adapter, you can now [migrate](/guides/migrate-from-spark-to-databricks) your connection to the [dbt-databricks adapter](https://docs.getdbt.com/reference/warehouse-setups/databricks-setup) to get the benefits. [Databricks](https://www.databricks.com/blog/2022/11/17/introducing-native-high-performance-integration-dbt-cloud.html) is committed to maintaining and improving the adapter, so this integrated experience will continue to provide the best of dbt and Databricks. Check out our [live blog post](https://www.getdbt.com/blog/dbt-cloud-databricks-experience/) to learn more. diff --git a/website/docs/docs/deploy/ci-jobs.md b/website/docs/docs/deploy/ci-jobs.md index d10bc780fc2..6114ed1ca14 100644 --- a/website/docs/docs/deploy/ci-jobs.md +++ b/website/docs/docs/deploy/ci-jobs.md @@ -9,7 +9,7 @@ You can set up [continuous integration](/docs/deploy/continuous-integration) (CI ## Set up CI jobs {#set-up-ci-jobs} -dbt Labs recommends that you create your CI job in a dedicated dbt Cloud [deployment environment](/docs/deploy/deploy-environments#create-a-deployment-environment) that's connected to a staging database. Having a separate environment dedicated for CI will provide better isolation between your temporary CI schema builds and your production data builds. Additionally, sometimes teams need their CI jobs to be triggered when a PR is made to a branch other than main. If your team maintains a staging branch as part of your release process, having a separate environment will allow you to set a [custom branch](/faqs/environments/custom-branch-settings) and, accordingly, the CI job in that dedicated environment will be triggered only when PRs are made to the specified custom branch. To learn more, refer to [Get started with CI tests](/guides/orchestration/set-up-ci/overview). +dbt Labs recommends that you create your CI job in a dedicated dbt Cloud [deployment environment](/docs/deploy/deploy-environments#create-a-deployment-environment) that's connected to a staging database. Having a separate environment dedicated for CI will provide better isolation between your temporary CI schema builds and your production data builds. Additionally, sometimes teams need their CI jobs to be triggered when a PR is made to a branch other than main. If your team maintains a staging branch as part of your release process, having a separate environment will allow you to set a [custom branch](/faqs/environments/custom-branch-settings) and, accordingly, the CI job in that dedicated environment will be triggered only when PRs are made to the specified custom branch. To learn more, refer to [Get started with CI tests](/guides/set-up-ci). ### Prerequisites - You have a dbt Cloud account. diff --git a/website/docs/docs/supported-data-platforms.md b/website/docs/docs/supported-data-platforms.md index a8e146f49d0..c0c9a30db36 100644 --- a/website/docs/docs/supported-data-platforms.md +++ b/website/docs/docs/supported-data-platforms.md @@ -8,7 +8,7 @@ pagination_next: "docs/connect-adapters" pagination_prev: null --- -dbt connects to and runs SQL against your database, warehouse, lake, or query engine. These SQL-speaking platforms are collectively referred to as _data platforms_. dbt connects with data platforms by using a dedicated adapter plugin for each. Plugins are built as Python modules that dbt Core discovers if they are installed on your system. Read [What are Adapters](/guides/dbt-ecosystem/adapter-development/1-what-are-adapters) for more info. +dbt connects to and runs SQL against your database, warehouse, lake, or query engine. These SQL-speaking platforms are collectively referred to as _data platforms_. dbt connects with data platforms by using a dedicated adapter plugin for each. Plugins are built as Python modules that dbt Core discovers if they are installed on your system. Refer to the [Build, test, document, and promote adapters](/guides/adapter-creation) guide. for more info. You can [connect](/docs/connect-adapters) to adapters and data platforms natively in dbt Cloud or install them manually using dbt Core. diff --git a/website/docs/docs/trusted-adapters.md b/website/docs/docs/trusted-adapters.md index 08191e8ea42..20d61f69575 100644 --- a/website/docs/docs/trusted-adapters.md +++ b/website/docs/docs/trusted-adapters.md @@ -21,7 +21,7 @@ pendency on this library? ### Trusted adapter specifications -See [Building a Trusted Adapter](/guides/dbt-ecosystem/adapter-development/8-building-a-trusted-adapter) for more information, particularly if you are an adapter maintainer considering having your adapter be added to the trusted list. +Refer to the [Build, test, document, and promote adapters](/guides/adapter-creation) guide for more information, particularly if you are an adapter maintainer considering having your adapter be added to the trusted list. ### Trusted vs Verified diff --git a/website/docs/docs/verified-adapters.md b/website/docs/docs/verified-adapters.md index 170bc8f885b..75c7529c247 100644 --- a/website/docs/docs/verified-adapters.md +++ b/website/docs/docs/verified-adapters.md @@ -11,7 +11,7 @@ These adapters then earn a "Verified" status so that users can have a certain le The verification process serves as the on-ramp to integration with dbt Cloud. As such, we restrict applicants to data platform vendors with whom we are already engaged. -To learn more, see [Verifying a new adapter](/guides/dbt-ecosystem/adapter-development/7-verifying-a-new-adapter). +To learn more, refer to the [Build, test, document, and promote adapters](/guides/adapter-creation) guide. import MSCallout from '/snippets/_microsoft-adapters-soon.md'; diff --git a/website/docs/guides/adapter-creation.md b/website/docs/guides/adapter-creation.md index cd18a413b10..6c9d575bae2 100644 --- a/website/docs/guides/adapter-creation.md +++ b/website/docs/guides/adapter-creation.md @@ -164,8 +164,7 @@ We strongly encourage you to adopt the following approach when versioning and re This step will walk you through the first creating the necessary adapter classes and macros, and provide some resources to help you validate that your new adapter is working correctly. Make sure you've familiarized yourself with the previous steps in this guide. -Once the adapter is passing most of the functional tests (see ["Testing a new adapter"](4-testing-a-new-adapter) -), please let the community know that is available to use by adding the adapter to the ["Supported Data Platforms"](/docs/supported-data-platforms) page by following the steps given in [Documenting your adapter](/guides/dbt-ecosystem/adapter-development/5-documenting-a-new-adapter). +Once the adapter is passing most of the functional tests in the previous "Testing a new adapter" step, please let the community know that is available to use by adding the adapter to the ["Supported Data Platforms"](/docs/supported-data-platforms) page by following the steps given in "Documenting your adapter. For any questions you may have, don't hesitate to ask in the [#adapter-ecosystem](https://getdbt.slack.com/archives/C030A0UF5LM) Slack channel. The community is very helpful and likely has experienced a similar issue as you. @@ -1294,7 +1293,7 @@ Essential functionality includes (but is not limited to the following features): The adapter should have the required documentation for connecting and configuring the adapter. The dbt docs site should be the single source of truth for this information. These docs should be kept up-to-date. -See [Documenting a new adapter](/guides/dbt-ecosystem/adapter-development/5-documenting-a-new-adapter) for more information. +Proceed to the "Document a new adapter" step for more information. ### Release Cadence diff --git a/website/docs/guides/dbt-models-on-databricks.md b/website/docs/guides/dbt-models-on-databricks.md index d1a55915777..f26b7253be9 100644 --- a/website/docs/guides/dbt-models-on-databricks.md +++ b/website/docs/guides/dbt-models-on-databricks.md @@ -14,7 +14,7 @@ recently_updated: true ## Introduction -Continuing our Databricks and dbt guide series from the last [guide](/guides/dbt-ecosystem/databricks-guides/how-to-set-up-your-databricks-dbt-project), it’s time to talk about performance optimization. In this follow-up post,  we outline simple strategies to optimize for cost, performance, and simplicity when architecting your data pipelines. We’ve encapsulated these strategies in this acronym-framework: +Building on the [Set up your dbt project with Databricks](/guides/set-up-your-databricks-dbt-project) guide, we'd like to discuss performance optimization. In this follow-up post,  we outline simple strategies to optimize for cost, performance, and simplicity when you architect data pipelines. We’ve encapsulated these strategies in this acronym-framework: - Platform Components - Patterns & Best Practices @@ -177,6 +177,6 @@ With the [dbt Cloud Admin API](/docs/dbt-cloud-apis/admin-cloud-api), you can  ### Conclusion -This concludes the second guide in our series on “Working with Databricks and dbt”, following [How to set up your Databricks and dbt Project](/guides/dbt-ecosystem/databricks-guides/how-to-set-up-your-databricks-dbt-project). +This builds on the content in [Set up your dbt project with Databricks](/guides/set-up-your-databricks-dbt-project). We welcome you to try these strategies on our example open source TPC-H implementation and to provide us with thoughts/feedback as you start to incorporate these features into production. Looking forward to your feedback on [#db-databricks-and-spark](https://getdbt.slack.com/archives/CNGCW8HKL) Slack channel! diff --git a/website/docs/guides/productionize-your-dbt-databricks-project.md b/website/docs/guides/productionize-your-dbt-databricks-project.md index fdadcef6d34..f26a132919b 100644 --- a/website/docs/guides/productionize-your-dbt-databricks-project.md +++ b/website/docs/guides/productionize-your-dbt-databricks-project.md @@ -18,10 +18,10 @@ Welcome to the third installment of our comprehensive series on optimizing and d ### Prerequisites -If you don't have any of the following requirements, refer to the instructions in the [setup guide](/guides/dbt-ecosystem/databricks-guides/how-to-set-up-your-databricks-dbt-project) to catch up: +If you don't have any of the following requirements, refer to the instructions in the [Set up your dbt project with Databricks](/guides/set-up-your-databricks-dbt-project) for help meeting these requirements: -- You have [set up your Databricks and dbt Cloud environments](/guides/dbt-ecosystem/databricks-guides/how-to-set-up-your-databricks-dbt-project). -- You have [optimized your dbt models for peak performance](/guides/dbt-ecosystem/databricks-guides/how_to_optimize_dbt_models_on_databricks). +- You have [Set up your dbt project with Databricks](/guides/set-up-your-databricks-dbt-project). +- You have [optimized your dbt models for peak performance](/guides/optimize-dbt-models-on-databricks). - You have created two catalogs in Databricks: *dev* and *prod*. - You have created Databricks Service Principal to run your production jobs. - You have at least one [deployment environment](/docs/deploy/deploy-environments) in dbt Cloud. @@ -52,7 +52,7 @@ Let’s [create a job](/docs/deploy/deploy-jobs#create-and-schedule-jobs) in dbt 1. Create a new job by clicking **Deploy** in the header, click **Jobs** and then **Create job**. 2. **Name** the job “Daily refresh”. 3. Set the **Environment** to your *production* environment. - - This will allow the job to inherit the catalog, schema, credentials, and environment variables defined in the [setup guide](https://docs.getdbt.com/guides/dbt-ecosystem/databricks-guides/how-to-set-up-your-databricks-dbt-project#defining-your-dbt-deployment-environment). + - This will allow the job to inherit the catalog, schema, credentials, and environment variables defined in [Set up your dbt project with Databricks](/guides/set-up-your-databricks-dbt-project). 4. Under **Execution Settings** - Check the **Generate docs on run** checkbox to configure the job to automatically generate project docs each time this job runs. This will ensure your documentation stays evergreen as models are added and modified. - Select the **Run on source freshness** checkbox to configure dbt [source freshness](/docs/deploy/source-freshness) as the first step of this job. Your sources will need to be configured to [snapshot freshness information](/docs/build/sources#snapshotting-source-data-freshness) for this to drive meaningful insights. @@ -87,7 +87,7 @@ dbt allows you to write [tests](/docs/build/tests) for your data pipeline, which 2. **Development**: Running tests during development ensures that your code changes do not break existing assumptions, enabling developers to iterate faster by catching problems immediately after writing code. 3. **CI checks**: Automated CI jobs run and test your pipeline end-to end when a pull request is created, providing confidence to developers, code reviewers, and end users that the proposed changes are reliable and will not cause disruptions or data quality issues -Your CI job will ensure that the models build properly and pass any tests applied to them. We recommend creating a separate *test* environment and having a dedicated service principal. This will ensure the temporary schemas created during CI tests are in their own catalog and cannot unintentionally expose data to other users. Repeat the [steps](/guides/dbt-ecosystem/databricks-guides/how-to-set-up-your-databricks-dbt-project) used to create your *prod* environment to create a *test* environment. After setup, you should have: +Your CI job will ensure that the models build properly and pass any tests applied to them. We recommend creating a separate *test* environment and having a dedicated service principal. This will ensure the temporary schemas created during CI tests are in their own catalog and cannot unintentionally expose data to other users. Repeat the steps in [Set up your dbt project with Databricks](/guides/set-up-your-databricks-dbt-project) to create your *prod* environment to create a *test* environment. After setup, you should have: - A catalog called *test* - A service principal called *dbt_test_sp* @@ -130,13 +130,13 @@ The five key steps for troubleshooting dbt Cloud issues are: 3. Isolate the problem by running one model at a time in the IDE or undoing the code that caused the issue. 4. Check for problems in compiled files and logs. -Consult the [Debugging errors documentation](/best-practices/debugging-errors) for a comprehensive list of error types and diagnostic methods. +Consult the [Debugging errors documentation](/guides/debug-errors) for a comprehensive list of error types and diagnostic methods. To troubleshoot issues with a dbt Cloud job, navigate to the "Deploy > Run History" tab in your dbt Cloud project and select the failed run. Then, expand the run steps to view [console and debug logs](/docs/deploy/run-visibility#access-logs) to review the detailed log messages. To obtain additional information, open the Artifacts tab and download the compiled files associated with the run. If your jobs are taking longer than expected, use the [model timing](/docs/deploy/run-visibility#model-timing) dashboard to identify bottlenecks in your pipeline. Analyzing the time taken for each model execution helps you pinpoint the slowest components and optimize them for better performance. The Databricks [Query History](https://docs.databricks.com/sql/admin/query-history.html) lets you inspect granular details such as time spent in each task, rows returned, I/O performance, and execution plan. -For more on performance tuning, see our guide on [How to Optimize and Troubleshoot dbt Models on Databricks](/guides/dbt-ecosystem/databricks-guides/how_to_optimize_dbt_models_on_databricks). +For more on performance tuning, see our guide on [How to Optimize and Troubleshoot dbt Models on Databricks](/guides/optimize-dbt-models-on-databricks). ## Advanced considerations @@ -160,7 +160,7 @@ To trigger your dbt Cloud job from Databricks, follow the instructions in our [D ## Data masking -Our [Best Practices for dbt and Unity Catalog](/guides/dbt-ecosystem/databricks-guides/dbt-unity-catalog-best-practices) guide recommends using separate catalogs *dev* and *prod* for development and deployment environments, with Unity Catalog and dbt Cloud handling configurations and permissions for environment isolation. Ensuring security while maintaining efficiency in your development and deployment environments is crucial. Additional security measures may be necessary to protect sensitive data, such as personally identifiable information (PII). +Our [Best Practices for dbt and Unity Catalog](/best-practices/dbt-unity-catalog-best-practices) guide recommends using separate catalogs *dev* and *prod* for development and deployment environments, with Unity Catalog and dbt Cloud handling configurations and permissions for environment isolation. Ensuring security while maintaining efficiency in your development and deployment environments is crucial. Additional security measures may be necessary to protect sensitive data, such as personally identifiable information (PII). Databricks leverages [Dynamic Views](https://docs.databricks.com/data-governance/unity-catalog/create-views.html#create-a-dynamic-view) to enable data masking based on group membership. Because views in Unity Catalog use Spark SQL, you can implement advanced data masking by using more complex SQL expressions and regular expressions. You can now also apply fine grained access controls like row filters in preview and column masks in preview on tables in Databricks Unity Catalog, which will be the recommended approach to protect sensitive data once this goes GA. Additionally, in the near term, Databricks Unity Catalog will also enable Attribute Based Access Control natively, which will make protecting sensitive data at scale simpler. diff --git a/website/docs/guides/set-up-ci.md b/website/docs/guides/set-up-ci.md index c6bcf316952..83362094ec6 100644 --- a/website/docs/guides/set-up-ci.md +++ b/website/docs/guides/set-up-ci.md @@ -54,7 +54,7 @@ To be able to find modified nodes, dbt needs to have something to compare agains ### 3. Test your process -That's it! There are other steps you can take to be even more confident in your work, such as [validating your structure follows best practices](/guides/orchestration/set-up-ci/run-dbt-project-evaluator) and [linting your code](/guides/orchestration/set-up-ci/lint-on-push), but this covers the most critical checks. +That's it! There are other steps you can take to be even more confident in your work, such as validating your structure follows best practices and linting your code. For more information, refer to [Get started with Continuous Integration tests](/guides/set-up-ci). To test your new flow, create a new branch in the dbt Cloud IDE then add a new file or modify an existing one. Commit it, then create a new Pull Request (not a draft). Within a few seconds, you’ll see a new check appear in your git provider. @@ -313,7 +313,7 @@ The git flow will look like this: ### Advanced prerequisites -- You have the **Development**, **CI**, and **Production** environments, as described in [the Baseline setup](/guides/orchestration/set-up-ci/in-15-minutes). +- You have the **Development**, **CI**, and **Production** environments, as described in [the Baseline setup](/guides/set-up-ci). ### 1. Create a `release` branch in your git repo @@ -350,6 +350,6 @@ Adding a regularly-scheduled job inside of the QA environment whose only command ### 5. Test your process -When the Release Manager is ready to cut a new release, they will manually open a PR from `qa` into `main` from their git provider (e.g. GitHub, GitLab, Azure DevOps). dbt Cloud will detect the new PR, at which point the existing check in the CI environment will trigger and run. When using the [baseline configuration](/guides/orchestration/set-up-ci/in-15-minutes), it's possible to kick off the PR creation from inside of the dbt Cloud IDE. Under this paradigm, that button will create PRs targeting your QA branch instead. +When the Release Manager is ready to cut a new release, they will manually open a PR from `qa` into `main` from their git provider (e.g. GitHub, GitLab, Azure DevOps). dbt Cloud will detect the new PR, at which point the existing check in the CI environment will trigger and run. When using the [baseline configuration](/guides/set-up-ci), it's possible to kick off the PR creation from inside of the dbt Cloud IDE. Under this paradigm, that button will create PRs targeting your QA branch instead. To test your new flow, create a new branch in the dbt Cloud IDE then add a new file or modify an existing one. Commit it, then create a new Pull Request (not a draft) against your `qa` branch. You'll see the integration tests begin to run. Once they complete, manually create a PR against `main`, and within a few seconds you’ll see the tests run again but this time incorporating all changes from all code that hasn't been merged to main yet. diff --git a/website/docs/guides/set-up-your-databricks-dbt-project.md b/website/docs/guides/set-up-your-databricks-dbt-project.md index e40a4182423..d378b57cacc 100644 --- a/website/docs/guides/set-up-your-databricks-dbt-project.md +++ b/website/docs/guides/set-up-your-databricks-dbt-project.md @@ -68,7 +68,7 @@ We are not covering python in this post but if you want to learn more, check out Now that the Databricks components are in place, we can configure our dbt project. This involves connecting dbt to our Databricks SQL warehouse to run SQL queries and using a version control system like GitHub to store our transformation code. -If you are migrating an existing dbt project from the dbt-spark adapter to dbt-databricks, follow this [migration guide](https://docs.getdbt.com/guides/migration/tools/migrating-from-spark-to-databricks#migration) to switch adapters without needing to update developer credentials and other existing configs. +If you are migrating an existing dbt project from the dbt-spark adapter to dbt-databricks, follow this [migration guide](/guides/migrate-from-spark-to-databricks) to switch adapters without needing to update developer credentials and other existing configs. If you’re starting a new dbt project, follow the steps below. For a more detailed setup flow, check out our [quickstart guide.](/guides/databricks) diff --git a/website/docs/reference/commands/init.md b/website/docs/reference/commands/init.md index ac55717c0ec..e9cc2ccba4e 100644 --- a/website/docs/reference/commands/init.md +++ b/website/docs/reference/commands/init.md @@ -36,7 +36,7 @@ If you've just cloned or downloaded an existing dbt project, `dbt init` can stil `dbt init` knows how to prompt for connection information by looking for a file named `profile_template.yml`. It will look for this file in two places: -- **Adapter plugin:** What's the bare minumum Postgres profile? What's the type of each field, what are its defaults? This information is stored in a file called [`dbt/include/postgres/profile_template.yml`](https://github.com/dbt-labs/dbt-core/blob/main/plugins/postgres/dbt/include/postgres/profile_template.yml). If you're the maintainer of an adapter plugin, we highly recommend that you add a `profile_template.yml` to your plugin, too. See more details in [building-a-new-adapter](/guides/dbt-ecosystem/adapter-development/3-building-a-new-adapter). +- **Adapter plugin:** What's the bare minumum Postgres profile? What's the type of each field, what are its defaults? This information is stored in a file called [`dbt/include/postgres/profile_template.yml`](https://github.com/dbt-labs/dbt-core/blob/main/plugins/postgres/dbt/include/postgres/profile_template.yml). If you're the maintainer of an adapter plugin, we highly recommend that you add a `profile_template.yml` to your plugin, too. Refer to the [Build, test, document, and promote adapters](/guides/adapter-creation) guide for more information. - **Existing project:** If you're the maintainer of an existing project, and you want to help new users get connected to your database quickly and easily, you can include your own custom `profile_template.yml` in the root of your project, alongside `dbt_project.yml`. For common connection attributes, set the values in `fixed`; leave user-specific attributes in `prompts`, but with custom hints and defaults as you'd like. diff --git a/website/docs/reference/events-logging.md b/website/docs/reference/events-logging.md index 94b865fad0d..ffdeb7bb752 100644 --- a/website/docs/reference/events-logging.md +++ b/website/docs/reference/events-logging.md @@ -4,7 +4,7 @@ title: "Events and logs" As dbt runs, it generates events. The most common way to see those events is as log messages, written in real time to two places: - The command line terminal (`stdout`), to provide interactive feedback while running dbt. -- The debug log file (`logs/dbt.log`), to enable detailed [debugging of errors](/best-practices/debugging-errors) when they occur. The text-formatted log messages in this file include all `DEBUG`-level events, as well as contextual information, such as log level and thread name. The location of this file can be configured via [the `log_path` config](/reference/project-configs/log-path). +- The debug log file (`logs/dbt.log`), to enable detailed [debugging of errors](/guides/debug-errors) when they occur. The text-formatted log messages in this file include all `DEBUG`-level events, as well as contextual information, such as log level and thread name. The location of this file can be configured via [the `log_path` config](/reference/project-configs/log-path). diff --git a/website/docs/reference/resource-configs/no-configs.md b/website/docs/reference/resource-configs/no-configs.md index 5a4ba4eaaa2..5eec26917c8 100644 --- a/website/docs/reference/resource-configs/no-configs.md +++ b/website/docs/reference/resource-configs/no-configs.md @@ -8,4 +8,4 @@ If you were guided to this page from a data platform setup article, it most like - Setting up the profile is the only action the end-user needs to take on the data platform, or - The subsequent actions the end-user needs to take are not currently documented -If you'd like to contribute to data platform-specifc configuration information, refer to [Documenting a new adapter](/guides/dbt-ecosystem/adapter-development/5-documenting-a-new-adapter) \ No newline at end of file +If you'd like to contribute to data platform-specific configuration information, refer to [Documenting a new adapter](/guides/adapter-creation) From 26338c0f55b04465b346544e5d8cdf2e92155a31 Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Thu, 9 Nov 2023 12:19:23 -0800 Subject: [PATCH 121/305] fixing more links --- .../materializations-guide-7-conclusion.md | 2 +- website/docs/docs/cloud/billing.md | 2 +- website/docs/docs/dbt-cloud-apis/sl-jdbc.md | 2 +- .../dbt-versions/core-upgrade/08-upgrading-to-v1.0.md | 2 +- .../release-notes/07-June-2023/product-docs-jun.md | 2 +- .../release-notes/09-April-2023/product-docs.md | 8 ++++---- website/docs/docs/deploy/deployment-tools.md | 2 +- website/docs/faqs/Models/available-materializations.md | 2 +- website/docs/faqs/Project/why-not-write-dml.md | 2 +- website/docs/faqs/Warehouse/db-connection-dbt-compile.md | 2 +- website/docs/guides/dbt-python-snowpark.md | 4 ++-- website/docs/guides/migrate-from-spark-to-databricks.md | 2 +- .../guides/productionize-your-dbt-databricks-project.md | 2 +- website/docs/guides/refactoring-legacy-sql.md | 2 +- 14 files changed, 18 insertions(+), 18 deletions(-) diff --git a/website/docs/best-practices/materializations/materializations-guide-7-conclusion.md b/website/docs/best-practices/materializations/materializations-guide-7-conclusion.md index c0c4e023a55..cd561716fe4 100644 --- a/website/docs/best-practices/materializations/materializations-guide-7-conclusion.md +++ b/website/docs/best-practices/materializations/materializations-guide-7-conclusion.md @@ -9,6 +9,6 @@ hoverSnippet: Read this conclusion to our guide on using materializations in dbt You're now following best practices in your project, and have optimized the materializations of your DAG. You’re equipped with the 3 main materializations that cover almost any analytics engineering situation! -There are more configs and materializations available, as well as specific materializations for certain platforms and adapters — and like everything with dbt, materializations are extensible, meaning you can create your own [custom materializations](/guides/creating-new-materializations) for your needs. So this is just the beginning of what you can do with these powerful configurations. +There are more configs and materializations available, as well as specific materializations for certain platforms and adapters — and like everything with dbt, materializations are extensible, meaning you can create your own [custom materializations](/guides/create-new-materializations) for your needs. So this is just the beginning of what you can do with these powerful configurations. For the vast majority of users and companies though, tables, views, and incremental models will handle everything you can throw at them. Develop your intuition and expertise for these materializations, and you’ll be well on your way to tackling advanced analytics engineering problems. diff --git a/website/docs/docs/cloud/billing.md b/website/docs/docs/cloud/billing.md index 6853cc0004b..f66e2aad363 100644 --- a/website/docs/docs/cloud/billing.md +++ b/website/docs/docs/cloud/billing.md @@ -215,7 +215,7 @@ If you want to ensure that you're building views whenever the logic is changed, Executing `dbt build` in this context is unnecessary because the CI job was used to both run and test the code that just got merged into main. 5. Under the **Execution Settings**, select the default production job to compare changes against: - **Defer to a previous run state** — Select the “Merge Job” you created so the job compares and identifies what has changed since the last merge. -6. In your dbt project, follow the steps in [Run a dbt Cloud job on merge](/guides/orchestration/custom-cicd-pipelines/3-dbt-cloud-job-on-merge) to create a script to trigger the dbt Cloud API to run your job after a merge happens within your git repository or watch this [video](https://www.loom.com/share/e7035c61dbed47d2b9b36b5effd5ee78?sid=bcf4dd2e-b249-4e5d-b173-8ca204d9becb). +6. In your dbt project, follow the steps in Run a dbt Cloud job on merge in the [Customizing CI/CD with Custom Pipelines](/guides/custom-cicd-pipelines) guide to create a script to trigger the dbt Cloud API to run your job after a merge happens within your git repository or watch this [video](https://www.loom.com/share/e7035c61dbed47d2b9b36b5effd5ee78?sid=bcf4dd2e-b249-4e5d-b173-8ca204d9becb). The purpose of the merge job is to: diff --git a/website/docs/docs/dbt-cloud-apis/sl-jdbc.md b/website/docs/docs/dbt-cloud-apis/sl-jdbc.md index e10d057dc75..931666dd10c 100644 --- a/website/docs/docs/dbt-cloud-apis/sl-jdbc.md +++ b/website/docs/docs/dbt-cloud-apis/sl-jdbc.md @@ -363,5 +363,5 @@ semantic_layer.query(metrics=['food_order_amount', 'order_gross_profit'], ## Related docs -- [dbt Semantic Layer integration best practices](/guides/dbt-ecosystem/sl-partner-integration-guide) +- [dbt Semantic Layer integration best practices](/guides/sl-partner-integration-guide) diff --git a/website/docs/docs/dbt-versions/core-upgrade/08-upgrading-to-v1.0.md b/website/docs/docs/dbt-versions/core-upgrade/08-upgrading-to-v1.0.md index 543368b873a..3f45e44076c 100644 --- a/website/docs/docs/dbt-versions/core-upgrade/08-upgrading-to-v1.0.md +++ b/website/docs/docs/dbt-versions/core-upgrade/08-upgrading-to-v1.0.md @@ -51,7 +51,7 @@ Global project macros have been reorganized, and some old unused macros have bee ### For users of adapter plugins -- **BigQuery:** Support for [ingestion-time-partitioned tables](/guides/legacy/creating-date-partitioned-tables) has been officially deprecated in favor of modern approaches. Use `partition_by` and incremental modeling strategies instead. +- **BigQuery:** Support for ingestion-time-partitioned tables has been officially deprecated in favor of modern approaches. Use `partition_by` and incremental modeling strategies instead. For more information, refer to [Incremental models](/docs/build/incremental-models). ### For maintainers of plugins + other integrations diff --git a/website/docs/docs/dbt-versions/release-notes/07-June-2023/product-docs-jun.md b/website/docs/docs/dbt-versions/release-notes/07-June-2023/product-docs-jun.md index 469d2ac362b..7a474cc091f 100644 --- a/website/docs/docs/dbt-versions/release-notes/07-June-2023/product-docs-jun.md +++ b/website/docs/docs/dbt-versions/release-notes/07-June-2023/product-docs-jun.md @@ -32,4 +32,4 @@ Here's what's new to [docs.getdbt.com](http://docs.getdbt.com/) in June: ## New 📚 Guides, ✏️ blog posts, and FAQs -- Add an Azure DevOps example to the [Customizing CI/CD guide](/guides/orchestration/custom-cicd-pipelines/3-dbt-cloud-job-on-merge). +- Add an Azure DevOps example to the in the [Customizing CI/CD with Custom Pipelines](/guides/custom-cicd-pipelines) guide. diff --git a/website/docs/docs/dbt-versions/release-notes/09-April-2023/product-docs.md b/website/docs/docs/dbt-versions/release-notes/09-April-2023/product-docs.md index 5082699619b..3de29b605ce 100644 --- a/website/docs/docs/dbt-versions/release-notes/09-April-2023/product-docs.md +++ b/website/docs/docs/dbt-versions/release-notes/09-April-2023/product-docs.md @@ -31,10 +31,10 @@ Hello from the dbt Docs team: @mirnawong1, @matthewshaver, @nghi-ly, and @runleo ## New 📚 Guides and ✏️ blog posts -- [Use Databricks workflows to run dbt Cloud jobs](/guides/orchestration/how-to-use-databricks-workflows-to-run-dbt-cloud-jobs) +- [Use Databricks workflows to run dbt Cloud jobs](/guides/how-to-use-databricks-workflows-to-run-dbt-cloud-jobs) - [Refresh Tableau workbook with extracts after a job finishes](/guides/zapier-refresh-tableau-workbook) - [dbt Python Snowpark workshop/tutorial](/guides/dbt-python-snowpark) - [How to optimize and troubleshoot dbt Models on Databricks](/guides/optimize-dbt-models-on-databricks) -- [The missing guide to debug() in dbt](https://docs.getdbt.com/blog/guide-to-jinja-debug) -- [dbt Squared: Leveraging dbt Core and dbt Cloud together at scale](https://docs.getdbt.com/blog/dbt-squared) -- [Audit_helper in dbt: Bringing data auditing to a higher level](https://docs.getdbt.com/blog/audit-helper-for-migration) +- [The missing guide to debug() in dbt](/blog/guide-to-jinja-debug) +- [dbt Squared: Leveraging dbt Core and dbt Cloud together at scale](/blog/dbt-squared) +- [Audit_helper in dbt: Bringing data auditing to a higher level](/blog/audit-helper-for-migration) diff --git a/website/docs/docs/deploy/deployment-tools.md b/website/docs/docs/deploy/deployment-tools.md index 3b2da778a53..cca2368f38a 100644 --- a/website/docs/docs/deploy/deployment-tools.md +++ b/website/docs/docs/deploy/deployment-tools.md @@ -126,7 +126,7 @@ Cron is a decent way to schedule bash commands. However, while it may seem like Use Databricks workflows to call the dbt Cloud job API, which has several benefits such as integration with other ETL processes, utilizing dbt Cloud job features, separation of concerns, and custom job triggering based on custom conditions or logic. These advantages lead to more modularity, efficient debugging, and flexibility in scheduling dbt Cloud jobs. -For more info, refer to the guide on [Databricks workflows and dbt Cloud jobs](/guides/orchestration/how-to-use-databricks-workflows-to-run-dbt-cloud-jobs). +For more info, refer to the guide on [Databricks workflows and dbt Cloud jobs](/guides/how-to-use-databricks-workflows-to-run-dbt-cloud-jobs). diff --git a/website/docs/faqs/Models/available-materializations.md b/website/docs/faqs/Models/available-materializations.md index fcb3e3a9d26..bf11c92b595 100644 --- a/website/docs/faqs/Models/available-materializations.md +++ b/website/docs/faqs/Models/available-materializations.md @@ -8,4 +8,4 @@ id: available-materializations dbt ships with five materializations: `view`, `table`, `incremental`, `ephemeral` and `materialized_view`. Check out the documentation on [materializations](/docs/build/materializations) for more information on each of these options. -You can also create your own [custom materializations](/guides/creating-new-materializations), if required however this is an advanced feature of dbt. +You can also create your own [custom materializations](/guides/create-new-materializations), if required however this is an advanced feature of dbt. diff --git a/website/docs/faqs/Project/why-not-write-dml.md b/website/docs/faqs/Project/why-not-write-dml.md index 349fc2c5c74..210ef4a916d 100644 --- a/website/docs/faqs/Project/why-not-write-dml.md +++ b/website/docs/faqs/Project/why-not-write-dml.md @@ -30,4 +30,4 @@ You can test your models, generate documentation, create snapshots, and more! SQL dialects tend to diverge the most in DML and DDL (rather than in `select` statements) — check out the example [here](/faqs/models/sql-dialect). By writing less SQL, it can make a migration to a new database technology easier. -If you do need to write custom DML, there are ways to do this in dbt using [custom materializations](/guides/creating-new-materializations). +If you do need to write custom DML, there are ways to do this in dbt using [custom materializations](/guides/create-new-materializations). diff --git a/website/docs/faqs/Warehouse/db-connection-dbt-compile.md b/website/docs/faqs/Warehouse/db-connection-dbt-compile.md index be46f1a1d8c..8017da4545b 100644 --- a/website/docs/faqs/Warehouse/db-connection-dbt-compile.md +++ b/website/docs/faqs/Warehouse/db-connection-dbt-compile.md @@ -22,7 +22,7 @@ To generate the compiled SQL for many models, dbt needs to run introspective que These introspective queries include: -- Populating the [relation cache](/guides/creating-new-materializations#update-the-relation-cache). Caching speeds up the metadata checks, including whether an [incremental model](/docs/build/incremental-models) already exists in the data platform. +- Populating the relation cache. For more information, refer to the [Create new materializations](/guides/create-new-materializations) guide. Caching speeds up the metadata checks, including whether an [incremental model](/docs/build/incremental-models) already exists in the data platform. - Resolving [macros](/docs/build/jinja-macros#macros), such as `run_query` or `dbt_utils.get_column_values` that you're using to template out your SQL. This is because dbt needs to run those queries during model SQL compilation. Without a data platform connection, dbt can't perform these introspective queries and won't be able to generate the compiled SQL needed for the next steps in the dbt workflow. You can [`parse`](/reference/commands/parse) a project and use the [`list`](/reference/commands/list) resources in the project, without an internet or data platform connection. Parsing a project is enough to produce a [manifest](/reference/artifacts/manifest-json), however, keep in mind that the written-out manifest won't include compiled SQL. diff --git a/website/docs/guides/dbt-python-snowpark.md b/website/docs/guides/dbt-python-snowpark.md index 8417ec9177b..35842eb8d91 100644 --- a/website/docs/guides/dbt-python-snowpark.md +++ b/website/docs/guides/dbt-python-snowpark.md @@ -932,7 +932,7 @@ By now, we are pretty good at creating new files in the correct directories so w select * from int_results ``` -1. Create a *Markdown* file `intermediate.md` that we will go over in depth during the [Testing](/guides/dbt-ecosystem/dbt-python-snowpark/13-testing) and [Documentation](/guides/dbt-ecosystem/dbt-python-snowpark/14-documentation) sections. +1. Create a *Markdown* file `intermediate.md` that we will go over in depth in the Test and Documentation sections of the [Leverage dbt Cloud to generate analytics and ML-ready pipelines with SQL and Python with Snowflake](/guides/dbt-python-snowpark) guide. ```markdown # the intent of this .md is to allow for multi-line long form explanations for our intermediate transformations @@ -947,7 +947,7 @@ By now, we are pretty good at creating new files in the correct directories so w {% docs int_lap_times_years %} Lap times are done per lap. We need to join them out to the race year to understand yearly lap time trends. {% enddocs %} ``` -1. Create a *YAML* file `intermediate.yml` that we will go over in depth during the [Testing](/guides/dbt-ecosystem/dbt-python-snowpark/13-testing) and [Documentation](/guides/dbt-ecosystem/dbt-python-snowpark/14-documentation) sections. +1. Create a *YAML* file `intermediate.yml` that we will go over in depth during the Test and Document sections of the [Leverage dbt Cloud to generate analytics and ML-ready pipelines with SQL and Python with Snowflake](/guides/dbt-python-snowpark) guide. ```yaml version: 2 diff --git a/website/docs/guides/migrate-from-spark-to-databricks.md b/website/docs/guides/migrate-from-spark-to-databricks.md index 5be1c08d787..b249021ed50 100644 --- a/website/docs/guides/migrate-from-spark-to-databricks.md +++ b/website/docs/guides/migrate-from-spark-to-databricks.md @@ -14,7 +14,7 @@ recently_updated: true ## Introduction -You can [migrate your projects](#migrate-your-dbt-projects) from using the `dbt-spark` adapter to using the [dbt-databricks adapter](https://github.com/databricks/dbt-databricks). In collaboration with dbt Labs, Databricks built this adapter using dbt-spark as the foundation and added some critical improvements. With it, you get an easier set up — requiring only three inputs for authentication — and more features such as support for [Unity Catalog](https://www.databricks.com/product/unity-catalog). +You can migrate your projects from using the `dbt-spark` adapter to using the [dbt-databricks adapter](https://github.com/databricks/dbt-databricks). In collaboration with dbt Labs, Databricks built this adapter using dbt-spark as the foundation and added some critical improvements. With it, you get an easier set up — requiring only three inputs for authentication — and more features such as support for [Unity Catalog](https://www.databricks.com/product/unity-catalog). ### Prerequisites diff --git a/website/docs/guides/productionize-your-dbt-databricks-project.md b/website/docs/guides/productionize-your-dbt-databricks-project.md index f26a132919b..2c6a436a15b 100644 --- a/website/docs/guides/productionize-your-dbt-databricks-project.md +++ b/website/docs/guides/productionize-your-dbt-databricks-project.md @@ -156,7 +156,7 @@ Inserting dbt Cloud jobs into a Databricks Workflows allows you to chain togethe - Logs and Run History: Accessing logs and run history becomes more convenient when using dbt Cloud. - Monitoring and Notification Features: dbt Cloud comes equipped with monitoring and notification features like the ones described above that can help you stay informed about the status and performance of your jobs. -To trigger your dbt Cloud job from Databricks, follow the instructions in our [Databricks Workflows to run dbt Cloud jobs guide](/guides/orchestration/how-to-use-databricks-workflows-to-run-dbt-cloud-jobs). +To trigger your dbt Cloud job from Databricks, follow the instructions in our [Databricks Workflows to run dbt Cloud jobs guide](/guides/how-to-use-databricks-workflows-to-run-dbt-cloud-jobs). ## Data masking diff --git a/website/docs/guides/refactoring-legacy-sql.md b/website/docs/guides/refactoring-legacy-sql.md index 09fcb9aaf82..a339e523020 100644 --- a/website/docs/guides/refactoring-legacy-sql.md +++ b/website/docs/guides/refactoring-legacy-sql.md @@ -31,7 +31,7 @@ When migrating and refactoring code, it’s of course important to stay organize Let's get into it! :::info More resources -This guide is excerpted from the new dbt Learn On-demand Course, "Refactoring SQL for Modularity" - if you're curious, pick up the [free refactoring course here](https://courses.getdbt.com/courses/refactoring-sql-for-modularity), which includes example and practice refactoring projects. Or for a more in-depth look at migrating DDL and DML from stored procedures check out [this guide](/guides/migration/tools/migrating-from-stored-procedures/1-migrating-from-stored-procedures). +This guide is excerpted from the new dbt Learn On-demand Course, "Refactoring SQL for Modularity" - if you're curious, pick up the [free refactoring course here](https://courses.getdbt.com/courses/refactoring-sql-for-modularity), which includes example and practice refactoring projects. Or for a more in-depth look at migrating DDL and DML from stored procedures, refer to the[Migrate from stored procedures](/guides/migrate-from-stored-procedures) guide. ::: ## Migrate your existing SQL code From bab0aa6f5d2df66bfc0a81a90e5fd071ec19d55f Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Thu, 9 Nov 2023 13:32:22 -0800 Subject: [PATCH 122/305] fix a link o'rama --- .../11-Older versions/upgrading-to-0-15-0.md | 2 +- website/docs/guides/adapter-creation.md | 10 +++++----- .../docs/guides/set-up-your-databricks-dbt-project.md | 4 ++-- website/snippets/dbt-databricks-for-databricks.md | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/website/docs/docs/dbt-versions/core-upgrade/11-Older versions/upgrading-to-0-15-0.md b/website/docs/docs/dbt-versions/core-upgrade/11-Older versions/upgrading-to-0-15-0.md index 8259e66fa46..98248a1caa5 100644 --- a/website/docs/docs/dbt-versions/core-upgrade/11-Older versions/upgrading-to-0-15-0.md +++ b/website/docs/docs/dbt-versions/core-upgrade/11-Older versions/upgrading-to-0-15-0.md @@ -26,7 +26,7 @@ expect this field will now return errors. See the latest ### Custom materializations -All materializations must now [manage dbt's Relation cache](/guides/creating-new-materializations#update-the-relation-cache). +All materializations must now manage dbt's Relation cache. For more information, refer to [Create new materializations](/guides/creating-new-materializations). ### dbt Server diff --git a/website/docs/guides/adapter-creation.md b/website/docs/guides/adapter-creation.md index 6c9d575bae2..8a9145f0258 100644 --- a/website/docs/guides/adapter-creation.md +++ b/website/docs/guides/adapter-creation.md @@ -260,7 +260,7 @@ class MyAdapterCredentials(Credentials): There are a few things you can do to make it easier for users when connecting to your database: - Be sure to implement the Credentials' `_connection_keys` method shown above. This method will return the keys that should be displayed in the output of the `dbt debug` command. As a general rule, it's good to return all the arguments used in connecting to the actual database except the password (even optional arguments). -- Create a `profile_template.yml` to enable configuration prompts for a brand-new user setting up a connection profile via the [`dbt init` command](/reference/commands/init). See more details [below](#other-files). +- Create a `profile_template.yml` to enable configuration prompts for a brand-new user setting up a connection profile via the [`dbt init` command](/reference/commands/init). You will find more details in the following steps. - You may also want to define an `ALIASES` mapping on your Credentials class to include any config names you want users to be able to use in place of 'database' or 'schema'. For example if everyone using the MyAdapter database calls their databases "collections", you might do: @@ -574,8 +574,8 @@ Previously, we offered a packaged suite of tests for dbt adapter functionality: This document has two sections: -1. "[About the testing framework](#about-the-testing-framework)" describes the standard framework that we maintain for using pytest together with dbt. It includes an example that shows the anatomy of a simple test case. -2. "[Testing your adapter](#testing-your-adapter)" offers a step-by-step guide for using our out-of-the-box suite of "basic" tests, which will validate that your adapter meets a baseline of dbt functionality. +1. Refer to "About the testing framework" for a description of the standard framework that we maintain for using pytest together with dbt. It includes an example that shows the anatomy of a simple test case. +2. Refer to "Testing your adapter" for a step-by-step guide for using our out-of-the-box suite of "basic" tests, which will validate that your adapter meets a baseline of dbt functionality. ### Testing prerequisites @@ -1067,7 +1067,7 @@ python3 -m pytest tests/functional --profile databricks_sql_endpoint ## Document a new adapter -If you've already [built](3-building-a-new-adapter), and [tested](4-testing-a-new-adapter) your adapter, it's time to document it so the dbt community will know that it exists and how to use it. +If you've already built, and tested your adapter, it's time to document it so the dbt community will know that it exists and how to use it. ### Making your adapter available @@ -1264,7 +1264,7 @@ There has been a tendency to trust the dbt Labs-maintained adapters over communi The adapter verification program aims to quickly indicate to users which adapters can be trusted to use in production. Previously, doing so was uncharted territory for new users and complicated making the business case to their leadership team. We plan to give quality assurances by: 1. appointing a key stakeholder for the adapter repository, -2. ensuring that the chosen stakeholder fixes bugs and cuts new releases in a timely manner see maintainer your adapter (["Maintaining your new adapter"](2-prerequisites-for-a-new-adapter#maintaining-your-new-adapter)), +2. ensuring that the chosen stakeholder fixes bugs and cuts new releases in a timely manner. Refer to the "Maintaining your new adapter" step for more information. 3. demonstrating that it passes our adapter pytest suite tests, 4. assuring that it works for us internally and ideally an existing team using the adapter in production . diff --git a/website/docs/guides/set-up-your-databricks-dbt-project.md b/website/docs/guides/set-up-your-databricks-dbt-project.md index d378b57cacc..c47895f7246 100644 --- a/website/docs/guides/set-up-your-databricks-dbt-project.md +++ b/website/docs/guides/set-up-your-databricks-dbt-project.md @@ -46,7 +46,7 @@ Service principals are used to remove humans from deploying to production for co [Let’s create a service principal](https://docs.databricks.com/administration-guide/users-groups/service-principals.html#add-a-service-principal-to-your-databricks-account) in Databricks: 1. Have your Databricks Account admin [add a service principal](https://docs.databricks.com/administration-guide/users-groups/service-principals.html#add-a-service-principal-to-your-databricks-account) to your account. The service principal’s name should differentiate itself from a user ID and make its purpose clear (eg dbt_prod_sp). -2. Add the service principal added to any groups it needs to be a member of at this time. There are more details on permissions in our ["Unity Catalog best practices" guide](dbt-unity-catalog-best-practices). +2. Add the service principal added to any groups it needs to be a member of at this time. There are more details on permissions in our ["Unity Catalog best practices" guide](/best-practices/dbt-unity-catalog-best-practices). 3. [Add the service principal to your workspace](https://docs.databricks.com/administration-guide/users-groups/service-principals.html#add-a-service-principal-to-a-workspace) and apply any [necessary entitlements](https://docs.databricks.com/administration-guide/users-groups/service-principals.html#add-a-service-principal-to-a-workspace-using-the-admin-console), such as Databricks SQL access and Workspace access. ## Setting up Databricks Compute @@ -113,4 +113,4 @@ Next, you’ll need somewhere to store and version control your code that allows ### Next steps -Now that your project is configured, you can start transforming your Databricks data with dbt. To help you scale efficiently, we recommend you follow our best practices, starting with the [Unity Catalog best practices](/best-practices/dbt-unity-catalog-best-practices), then you can [Optimize dbt models on Databricks](/guides/how_to_optimize_dbt_models_on_databricks) . +Now that your project is configured, you can start transforming your Databricks data with dbt. To help you scale efficiently, we recommend you follow our best practices, starting with the [Unity Catalog best practices](/best-practices/dbt-unity-catalog-best-practices), then you can [Optimize dbt models on Databricks](/guides/optimize-dbt-models-on-databricks). diff --git a/website/snippets/dbt-databricks-for-databricks.md b/website/snippets/dbt-databricks-for-databricks.md index 930e7a85a9f..f1c5ec84af1 100644 --- a/website/snippets/dbt-databricks-for-databricks.md +++ b/website/snippets/dbt-databricks-for-databricks.md @@ -1,4 +1,4 @@ :::info If you're using Databricks, use `dbt-databricks` If you're using Databricks, the `dbt-databricks` adapter is recommended over `dbt-spark`. -If you're still using dbt-spark with Databricks consider [migrating from the dbt-spark adapter to the dbt-databricks adapter](/guides/migration/tools/migrating-from-spark-to-databricks#migrate-your-dbt-projects). -::: \ No newline at end of file +If you're still using dbt-spark with Databricks consider [migrating from the dbt-spark adapter to the dbt-databricks adapter](/guides/migrate-from-spark-to-databricks). +::: From 12c2bcd433bf40dbbfe5681955c559156eb9c86e Mon Sep 17 00:00:00 2001 From: amada-ech <94760092+amada-ech@users.noreply.github.com> Date: Thu, 9 Nov 2023 16:32:42 -0500 Subject: [PATCH 123/305] Adding 6 headshots for Q4 community spotlight For the Q4 community spotlight (Nov 2023 -Jan 2024) --- .../static/img/community/spotlight/alison.jpg | Bin 0 -> 182578 bytes .../static/img/community/spotlight/dakota.jpg | Bin 0 -> 228533 bytes .../static/img/community/spotlight/oliver.jpg | Bin 0 -> 250397 bytes website/static/img/community/spotlight/sam.jpg | Bin 0 -> 179099 bytes .../static/img/community/spotlight/stacy.jpg | Bin 0 -> 327200 bytes .../static/img/community/spotlight/sydney.jpg | Bin 0 -> 236000 bytes 6 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 website/static/img/community/spotlight/alison.jpg create mode 100644 website/static/img/community/spotlight/dakota.jpg create mode 100644 website/static/img/community/spotlight/oliver.jpg create mode 100644 website/static/img/community/spotlight/sam.jpg create mode 100644 website/static/img/community/spotlight/stacy.jpg create mode 100644 website/static/img/community/spotlight/sydney.jpg diff --git a/website/static/img/community/spotlight/alison.jpg b/website/static/img/community/spotlight/alison.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8534145a81471af167a2f1fcc88dbc8b274e8864 GIT binary patch literal 182578 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 OKLiT4R8 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%0DE6C=$XGfB1G6fnK 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

    fvF4B>VOReX-_t*-UxwHkvotQs=ZF3hV~NqgXD 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

  • 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

  • %k-$nWk!8HN}q0^rWb1|0<0}$rpk!w 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
    @_#yw?NOgus=)Fgue# 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
    nmfy7@v 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

    )_^FAu@qh6i@bFr6X^-*OlgqA3Mq{+b{uTo8* z9(ecsQ&id#Mdp%0-`;(v(08$+X(zsVp@7!1Z0jW=VlgW*FXpRN{Eh2_U&JRVG8-9?^#1_i&i?@-ue_x( zyXKQHMhz|#=Q$F$%x&)pxwbUdWWm;#mXaJBoZSmMp_4$;;jw_=5KL3E1ltk^Fj@OL?Tab8ZAv z-1JJFxqph+Y#j9^!Abhtn?BJM)O8L(^4Nr8jVs|5q!X>0Cr+Sw`^aMcO=Mm=}xjFc=*E!-05-}#df zZ4ZeC+il~_y@;PPgiULvczgbm?e&cZ6|X+433*|vyjTIDhgBblsA;w5FIdJJk24(q z2MBfB2yVozEnX1oS4gF0#|ZuLpO;L3r2pZ*(`UEux!>GnES;Hbs|gGj%KY{#IfYlf z&6Hl1i{@Wc>}zd4>kzfN-ETnYOpicb2ip8TZf+v$XQW?0qbO#CFhP_vc7tw$Z2|o;`M-KVjeUx3$^`^ z=>kl#ifT-1#;=Oo894ix&5n?so(P^9v(YUj^oS!6UkZV`| z@Kf^->)Blvr0#4}@0Caw(YdY%h%t+y0?R@`BxhnqRH7Bb&TF~DpJwAtohK68i{&7& z+%Z6Mp&n_(b3#*O3$|ZVjTS1lcWrceCOS1MVR22(DtwB86N)4EhOs_5aFe)mci08-o`;3OB9sg;gwI042Igx@5nTpG z2l<~ALox}$qTS6nR9tc#-zHv^87mX$6f&PamkUi~T6hdRkuUj&;qDydmyUXA`dN|X z)Zqw4o`ff;-r;#J7W5zBb@)bL6VvD^O14j-c)n_NG-<-(6A@7g9Jfseeu-c9rE-t3MLPRfyNB z|LbhYbh1MgjnhS2zTMm*eEfP>C?cQ>i>cPU(|Ye+4PuWZd#oWEC^Ci-db^JB;8Val zak*)*I!P~#4D%3<4R8Xd5SrDmcS;8E=6U(Kc4qM@ZKCT30iiTm!Jga$*EQ2X);!PS ze`e+1hJFX+ol0iy;l0q zV;7s5w2sK1w!CheE9D;$8Cd4lv}eiQWdU!&UoCPAoS&OhznSRwMkP*qjur;%3e<;o zi%uSBM2qln^o0!AF-0GXx5)@TDvG6N+0Lq0F42{|f!KEUZmHvuMAh~Ir6lV+15G@y zjYT5=95NR8S*4V#?2oEoEq|Rm-I8^H9#1#*?C1%S+KYKNn?pYa)LeKc`)M=>0=Cwos%S0@!mye zsQ3@~61$dsS*MjA?z>C*1Wfw4d zr>*M%_c9Ekj6e2T)$JUSoIDoN9FC(5hVXQ1+!vPrj2!Q|4zMm>2D{(xtQHnkGn3q`Ke{C5;B^Q3{>I>deZX_n zT9|DU>ap7>4bambY5hu*MjNmcXZbJ3RI1G9Cs8F=-~lxSb*U(s-Td(-)qNxnV8Bn4 zz}0LrlN3Qw#6K?;Njmf&m;cItS=~vWCQQ$EJ-V%m_@PM1TMcg$k|SMQLUsDnumaOM z1YP9J@xSm+0j1N4#Ekx68~a2Ri%$Qdz5$NqcTO9`0}RaGe3%??ASvy_%kd1i@;q?s zq;*0^TU++*&dD*`3MP+o8Wm`U`Zk9#{2fvPhsWQfwr7Ivx@ zi(9QBsgd5O6DPT6h|0#|y~qm|hV^BY;C+RYcUSrSZ+uF{#>??U-fJ61BVuO`SJ6{9 zQ*_fAavUy{$f_PAcMD>PoUz*Fy@vS?^~TQ1$QG1idjwP1BSeCicKVwLUO|p&@t8HP za)<2}Z-JdS)6&0hSUqgAn=j%B>QCmR>8oG)@)j{}z0x*nEg*+SESXN%=#1FFbNk%DJ zG7l`oVX$RlCR~~8N10qdB54n&o0aahr7@P1bZ!URgy$$O2i!)tsacT(8^XhU;h*uT z6>Q;{8oE5KQWLH7Vz!UuQ>o&L~o*HS$1#j>(njmBmmo&-fHqwgX-^5gw)J+n6QS9mA z+KL7m*$E&{d50pJSW5{O-*cBE>9>^XEX++Kq3naKdMLn)mZGD=kO)mp+@Vwj$iUId zy##N&oy1_hX2e#OB>k8a1rmS8iGmqnlmbp*J$`;pmZ^&#VITknEq3W4ulk~A_iEq& z+V78(X2HHB2*f3X7L}dPfDAujYB^8&4{(z$BFz~YpLB47EB@D4jpZT7Tq5n|3+gvv zUGg}eR)mNXcjlM%`-d-10fD;H>r!repro`~jTwL;Bhp=9p+ZV@>fFU%D=PW-_Wt&k zxrJz-%iqes>C=PvsZD8oihkP}96-BM55^ms{V{`*=O1>wqX*WsOj$YB_}D9Gc7!Ef z$v0&FtmRc{(-L%v}eyYMN;GG|z zGWZ{1M4_QkZ18%=SXuBsQoagh&}1?6i!vzqn9KNnU_Px(@2Aqjwr3zA6O;ALZW){4 zDEa1BZU+IB(GJ@Kt;2`kDLI)k{Il8QSf&1iz;|-N-pz@=`wh@+aerh85O+Ax4#|*& zrDf;QVZ$@fH5EwXF6H)h8RZ0uyhI z)}JcL>gSa2eYKHML+p$7LT@A+(J%Smh)rXoQ{*n~EZr8%mO3g;{m|>74wQr*#!PQX zaBNE6IQ)U_Es(Yx$WdU^W$CN0?tD7zafQIuR$0F1tiWKOt|tppUF0#DPZ~9*ix$%< zMfyxmOs>XvW+@kJ8;TUPR<3bT`p*aT0?;eeiXqT>Y-@p^-!wc`eJLnk~jSX}D#N(Xjr&}Md zt7MZaBs+>|Gzq0%IA{sy0D6gk7FCY4QMbb^0!C7k^O>TBnxL(#dLBlR>A zKQY3E@Bvi?amEZGlY@!hDArIKmImp(v!j-AZB^d6bQSD8Y1{HZJKx|*_W?$LtpB{p z-$j6R#x1DNl}3ql%(e=_VDdnBe^TOI3r`dmWfqDbIalgiMq5t!UpF5>WY6C`l~<~?7rlCVOk!NKu~+cdUz!$U8m~KUpu#4lViS}}+B>Z)&(X`Cg=|dX4HL9( zY3V(e;_ZYd*NU92gkOuX`prUfY$5UdiI!?Tl9DRe%T?3c4K2AdmN)1PA4Ljo_4C2{ z!?7;;tb4nFP~!IGQY5@-r&mjm{y+mptjjzvRdu%188SCYPHyIP5t|Mk3Z`PBvYRQY z&k(pmveJ&T0aZYvMCYK~EdH|Kz?xF9{CICs4n_1^Kv<6NJuXLG)qRQA-lmowiPY@Oy(zH`^@Z9#5?B;7JtE=1mMwULe3DFRE9 zN8b#fd+4xzMb|n|%z<*#&WUtFG*fIQM2ty}M{O7{w*E*+h^Nt;CgIG`S3SMj!>FFc zhoRh|>&(GC>(Iz2_typIkMkqj*D1ja^L9R{iuc=PU1>)-+P2HK5|J{zVw~&J{bR%b zvypJ?5y_V;Tq=Ibv=gdl$=))62GD+R&VN?{xC7vzsq+TR?s z8mZoYS>ejKIT+~sC=If!G687Z$~VV`dJYRCg_Ei`r7})St|pO$D?PZU4&Nb3o4aRd zzwCazNRQYvNC3Y+4c)3hUU9APvAV_r6Ic`laeC?hbcrdNB51h0}*p1nX)i~ z`g_Hn8F5Mb_COqWvc4(*q;83tyo^orom)~$YIhf8*+-d96Lz1KO;d;L(Ss+nqP(`H8!uq}LR;`Yix6+ZVC(X(s7Ztm=h< z7?HxW{cW#qvGnZ_D!+@LlXl zl*F)V8A--mH8y$Tm>iL``e?d5J77CgSpKJvF*QvV_wt@cPDJbBhgvjp^t(pTOoGmE zz0QZ8=LB~i6&1tJDFF|F#Fx7~>Iyth^5gUMLy0pn1ja3*H8}y~WW?~yLnGb7tS)2K zJVYBPEBo8P?0>P{SF>Gk;gzR$*dA~9g4YPzAcmXyY;i>b19#wC+cU>|=2laEWsh#C zZ7X4J$f`U~)ecjXcVvDK$1{HR4lh9>TjY7n>dPk{ZTRauKu3t+y6wLb-mBF3bDIoJ zXZA~l-*{)O2O^PT3RxP?!851g9>&Pl)dT3i2@9=YbK5e#l6@df71qVllygFe?cvVf z9WWrmeL4tnhAa%=D_G0+AVH)$q{Vz}EN`!6`MyfQU;a?lz1`mJr9GS@*}_LzFo?&j zM??4a;3k7@u^i^|onb-K?%z5kF|qCDl0*$g81#Lx3wm3Rf7z)dplJ``TaLEIjy)5r z)o-zfJ zcw=nUd0$>!q0KM*Rm3>#6`{G)CQ%$YnMvgo_qdo~vi(c7Rivui@oLo}-DdxJK~GT%1!{kLVgMJi5`Y-5ULIK>*P3g0xM6I*Czny9uB(yY3 zN=kH$^`yA1#T6UWiQ2FTMJIg9$mgAoRYU++E2N~;cWpW-Y_-tE`kei7VEPE23?`L3 zzv4+wKZh?NBDnW)cOP=BVQD$hnvb0{;60RzXV>3{=O15tp!erec*T@*f=jEZk_yhr$>2ZLMFOQ#O__hOJk` z!uX-yt5}lcunOkZ2>1qKs^+wEV}_Z5^~*&nJM)qY1IDFKktJj(V2)X0ZyXxK{6S1@zAn zMJ6Q(i|HTaSPW-T#q5_4nE7I4x)>r=BduOj>Vv|M^Z9peSY&XJYUO~5e}#!6!O$y| zfu@T5H4POx?W;LO*G%+hh6g&ZwmKJZ>*E!DTKGaHc2iSgNxkl|hNg00e)+JlAVKc% z<+6s0`LJQ8-Q%y;IM+7g?aqX``@)d1qt~~TBzR^vr&9(#V&3>-4HpWGXAe?KNcV&@ zJ1yWjT8oLY*-k)j0D1n}Y0T%Fr2exywoct3&q?rgZXV{2=%(~M;-`qG5kYf&G2`4n zZ2YWxo@pK?>WX=E=0w&*?`27G-|G~nbRdH3m4C-^rjg9i+shgFaA`o^|>}PfBj&{KE2WwUSk!R z&;{)jM_p%K?v@8}9q2w+VG&cmFoRNv1jq7J;>hm8Z%y9 zj2giqep%Bfpft6gOT48_<=SrFT~l(SvVuAmmVZM$G2@munMT1~4?HLc01mH-Zvhc?3?)@b4aPqGJV?`(U``xJf`&8}iRCl(Pf` zS+yLH&u`ZMCPCoj7|@$y2`ynlQ+Y!S?4Pdy519Lhk7eOK@BudLlljuT&ZnZEoC>@a z^e{~mzhC{ht(W`maPs}qE3K^6*G{c|j2c?p%Pzk1QL-P-&gIzI*TqEYJsoY_M)pV_ zmhGoxLmIz)ZXd1w^55FA9_?^`l33|Zz+A2P5!y>&32SwQ#hP>i=I zCG14<*cYCZTF#j-G|Y49`Ep@labV%=h>Hc4px#M#8stb_+4lq9l*F7MMpJgFq?=Ny z9!j}P^d{Gyk~)^<8|X^U!ISDn3;k(`aS5-;o0o+Mg^hO6ndSY`?c0w%uiNKr(n}^2 zOsYr0?^u*4^XVHZReSI=*f52;@rR`aLX9@Jz#XZfJ~g-}RhTMt1#8bs|2146$1=Os z&J6xzXpfZZ4#$g>=IbTN{RIUN(_L&RA~j{UJO zY-kou(;^abc}9~lBIcb_WeJY8u{8A~P$30vg9VP&HHLeeR)zhP(TdDhQW4uP!@Qc` z|8ry)j{f5`YuHOZDq*c!W-iFv3zdrw)VMtLVZUw$7##LNA3EF5#f@aPyhU&=kzQ>O zlnDw;Qa`kjCZf5Ux^%r_-r)YFXERBVue|pYqgXi7LyGh66#s=PmKC$l-RUKT+9z#z zNu}R<9>v018bT_*P19##@7dmoZfW&xlujCLrhh6tjein*pY{HNf>dOF@`6kH4d;(X zjoSNlOnOO~-b6>%t9Kin9kM&rTpQNIC@N)u{Cb6s+jW5G-p(E9ntNe76zEes7Zg_n z*y5X>N(m=lJ5&-W$|pY`j6W+!e&tSNlF^B5z=iH4bSc>8^)Ko|1NB;X_A@b(=(J4m zMxB=X0M>weUhUcIq)HVI3Gm015o|3}ZD^9-_^)L>6d#y_moMR_0$QMZ<^e z%N2n*XZ{PMHoj*LKlbtFKT|{3@>Qb`V~0N!#oa-_UsE`5BXjqS6q=A9bJ5d~PLfa2 zy;p><#+Oc6x|G)in^(RU&IsYS7G6qq99wfxn&wn|&tcUjJj{xxGA_TzVIfd1rzaav z|2Jes#=>3ViS+c7)wrV0~Hc=p-Dg z;WyreQ=kirtrYJl*mvq=qU7%zs-G%~=G`wJyy2Ifipc>bO)zwNyZf5H99#z8$ULh% zq05t<-I(Dyv*bHE*x(U+$oc1TR>`#=4U;T0Qi7^l7#oLnmq3vo<_+2xB15BgM|;4~v&p zq;6MQUACP$p_}i2j6w|)AXAw_rwe?`MTUcbC8;$Bidqze;@j(zC?fF zs9bEK26~5Xhw^w6-|^Sei$_7ri4qb;FhPYs5VOTB3nB}hCpB>y!s)vd=1cv~BGR>f zXrvYP@;q})C`D+GV9#&c0M}L)O{?GK7pq#7-%+(H{5KE$OY*!D5dF$4&><>c815xJ zRkAG0de_w=)I;1_J8%MQAlAy#(5jrMbtmShn-4Wnx(CaXm*wWLpsE}ri+|S4N_F6h zWuh8bbqgwFp&a;Cw?ykrhMtlI%IJOEgUDfwQkg)ObKFa7Ed}Fqsqm!e^u%IX^~KRs zJl(!e>hbo=*Bqaemjs(;$h}-$?Yz#qFCI&&MPeQC{{gPS#3_shzx5OO_MdhExe%CW z$$vN1n3qK@@7GJ)ES;rf9QA;IeEqVBW;eOFQa+2Fukvcs+z1~Py@rd1PJzUF83|K5j?uqg5nBxK zSl;fOcEwarb~CVFN!?5+-kYn$CopjzlqX1@I=@b`xB8i(IP(RWh*k!byfyD%>t(q@ zo#GfVlVt_C_2_KVNa|Ux1$c_&OVBK!vSb$nOYBCH zA7jDN)bBSqNh3xcBf&$J%UFDo2IJBVF|kV!sqvUO(^@d6YU%tY{6~Ju&7Gpo)^^fe zW}=7@g>TBxHH+ykkEml?yLBh>nYcq0(~zE*p)VIW_?|Ln(bs{RqFaKG)`mYs{9f-*PYfEJ)~Tqz#)iPL9rn6E(5 zPIQhlxSv~*{PQ?xa|qe6jC;|lgZ60Rs9tGR_*Fn2@TY1W#!YA1AsufRM7nmw%80c>6}fbY`wybphF%5w$5jsYI_^ED}Q%;E3L-;3)R%G zF}gFFoWsNlP;;eu6`qlla((1Ghm236;bx?Zv#Pgavjq#bfws4J`A=V}-G2ZcW!6l! zs+!`XQW-{ksMczI#5eoA{R_2U;sHAanG$#BI}{y+4y_!L_zb%E$Ntfkwf5bVWrFOh zh*3f>SR2gN`Z}%T05QtDC(9%bPvvn0@4T3=;M3*UwQQcvni=#|+j)o4?-WU{d)z~% zq+`S-Kvc{tIcWsznxny~NwPG{M-#?TQp{-8RkOKo2VOUJxtA^+SEJjJ+npx`G@0l% z9DQl_9&A9fuWzsZ*M-AfkU~XN7QRGB+@McVV-c$ODr>Mw1Qq~2RK0Sbw#1{~qEgg= zY|Y?CoJEpIc+MA@IHKD^WS$<5Zp=99>Q*PL&HWufH7Ev`Tv`WD8npictF1o_A^obZ zVqVJtD)Lm@da1R|lzdjL_U`O`z$z>e&y|9KzF%|Ob8v`X{E~px@kn?NtFGEeq zYUd%Orh_ZEjhhq`BA!pY!GRYDihb2eq;&G;NVDJ7R7Q=az_RP_Q?c6a%bI=i;=Oz? z#7$SIt;gNzvfo+hNuofd_GA_$V9nA2HA)&8>d{|4OTlZGDM&0bk-9GKGKdU$$Ah3G z_=h+;tHYo;5$|EQQ}t*wODOSb?bXJs2W)Nzh3e4eNuF%e0;_VF-1}ddFpU}H{YA|s zrDDE(3fpdB==Q+DJvSJFC(1mklH>zgS*mtfC7uH!?}&lZdU?N)NvE!TBoUCQ=*er* zA6t~zrDE%I4`xX6rn2nn>W@o^PGU{j8a~tA z3P`*L2@$&{{g)c)t5A@qqdYq0tm4;oDjuw?SlCvmV>@C4akxi=`tIb=uMB>T=Oq5B z&~3K;Z46@jF@1jpy1fs3|9_6o!lB9j|N4}KG$;+DF+jRw(jcYcS3w#E6Q!h)7$u=J zIzVD7hmH{BfvU0KCSmW61pS6KLGH00=D_V?GutMgYv6wUGy?-?E1O-?c)lH|1G?B7 zkvD5_Z}vnl6O_7Ltm{{}^%zaL=Jm5SdG*U>MThm$;1yUE>TA=2bd<#Vwwj>RU0Wcx zu?|JjKx0ui6|XpLW7iYzgmR?#Cw^?}TyRL;)F?RZTpx{M%YT509HcK7-`~E#074y~ zeTwq^M{_0~UmDi7nQ{K=GdW7drsf1X`_!>U`q5dyQr-*9is+e1E-iG?>9?b=pK0gs z8^{0wz+?#hNc{bs?wM7-&uj#0Dna^c8O?BaYpP*Sbi)zYghUYK7G@nDoysGPx_^wGRHO7?_i_NQ& z*u;e9I`Fyzp|bo-dd-y6V~WD9PFB5;xIZ`n#53D zky#+*DIqP6^9wdTY@%Sr>j!V-;O{B{y8|r9|C8_Uv-_ z>Xz35ZAvsY3i`g_NjevPwh^~z$M%orQ~8oW%H&%BANV3B4Ty((^oo-|b7*TkblAkQ z*8O>9_UH6j55`r|caTSLaCLzR6~%O(oKj|;Jh5ibIcM#XUm0Uo`{$HVM>^=wiTq%i zOhn=y!^l)Z!0tq(+ep?0Qk{3AK%Dwx`bZGK(iHu&ph;?IsWsah$rka9Yx{)kYPC4u zlUUlv*Cf3_4y|E8D~-8%k2kC?bM`h~LHwh+Ei$Cb%ajC`;8oG%DfMPn|IR9<%wD)_O9#?B+rVz@p^`RHKDoixYQ^1BSJ z@eC33X{?RQfv~m`*aB(Pl>XAtG}v1gh&(BAjGXh9hna}XUBSq?ymL@{&xDr&?qs2c7+eN9I?B1%Q+ORTfKPy2--RN;nDj9E=*T6CIu!DHaqodAP7D97s;N9v7~3A@uY zW{y6etECt2^1FpRI0v*SybD77EfIup4{hvOj<|1zG0e93wx21?E%~S?@llCruY;__ zwDGl+bWQ_)oubOrr~4%(V(XF3C4*Yoc*n2XQWU=h6XWfOj`#&-h+3tE8E1=j z(kd;bSj}WWBIm4t(_?#yBur$xWTi#>1Z#=F#@kczrB0glF;bN_WZN=LdM3NU$eXvV z-26)KxH{=2NX5KeBlwAo4XPpiP<}PqH(c0c{wI4A--v%8w55nYEEGp8q>7h(_Yj7U zKpu#Wi3$wM_N}}6u}xxJ!O-eEZHzTc5@L%j5dEIrs^m2|!$=KQG38WWG*3@@LRC1Z zziW5ThGXQ_orlna>FlX$^MkGB+)Ip|H0hxj!6o@!<|a0WnEU#aZg)?d4-$e0TH4j6 z5B`R{?N|3D*b^vuTEYUi)K!HykUb}ip<8nH$?mx0UrGTKftF5`T|nT35l2NT)S12cw#_dZc76SE1)NQSPDkq{SQFtBQrm@z9u znzdga_ZGdIH7s|*nIj;0)eKg9gXzTU>)xNS%4rdaEu(ejSEyQTjmS>ED=uWqO=b6i zUjQzaOE4F-z$?MQkG^W>{s`Y2zU#FPzr8H`2ruEe18s)<=c(wc5Y#D6sX6i%Xo zGp_9q%{bJl^%E7jmg=ahD-uWf?}aiY)b5b25SD!0FQH@n^(-z|&*$>VLD{ETv!m{4 z4WBriSU*$TpyLH8>fn=mW)I>gU!09#$w`ryG{1t5GKQCLu8en#H7xl7EI`>CsfNPbq@G~mPvBZzIJ#1vfuDO^wytb93?b6Ytz`c}r; z85*j6!d-lvWQ_f9Ln0!UaFfOLbU`;i{|}ZCCdu1sXPH3IE!+1wZf_z_3{T6u4_Zx5 zZ~$_XM7=-gW3-9y8Db}DiQ`yatlqnV#p%jlSgxrK0g8%O60VpZP^YI>AO4IL*O@

    RLMFtg@Ct;G#ONr#B@oeS|?XIse+2aW-5U|F~x^Gp>C0{nX?FXZCYSh$qw!+rb zk`Rq3jjA+)7mVP28YOk)A2Rw4!v^*P?-A>*E*R=$)J(SCmFYRs)#ku$5&Wh7`p zxOWfK*mS*>g;t ziN2b5BDt}r7Y5~>VvXr|JTOsVp4ZHxL}ghC($Gs%SW~~dj&Wan`EN<`9wnF`sq?Wr zKN0meBd6?MjaavQ!|G(_MVpUOmzjM?M3}2B$9dG4k<3SRsSLHjTk36E;ueE+oK|QL zs&XtTQs*Rsmt&tLB7K%aRt@rv*^w*H|HL6c$qjP&au=ACg zcbhgRq1C8#zJVpGp#Zv5BJkrTK(fxG;18i(gRkN*mR}Y9BkS@kb4Qcs^b*Xd&WJ;g zLysIvUh8pZG^}>e71_+BSVOEoVx%Zr={|5xlcJXAQr&uS zK6*tpT#j>_EKowlNHZyEWNP9quR)V;N0O(?SwR%dVc(pYZyR_A*BnFH_|K`w9p8)g zXo)s88frEBWn!Ic9%3}FIrBHCywTa`^D9+cr+>|J?sa>j`hOtC+g{FlBu5n@YEa_m z+cIIi$W}92k|Hd{cSLcqBN!B9Nn3i`&00^wF1lpPhEpE$1_0($l{&#*t^o#vnS$v6 zF`Qbj0bH(AqoMQeyU1%S&9Lm4;&vh&+CxfjK;}1r^y|$&h47z_^?~mX`|@ zjp>2{uu!02YFyfrEsSLJG7>G!3tdEa;PnNXH;g^`<9^p0i503j?fjj_rM`ob>&I>C zVmxQAfj*7Ud0iUK{um18$x<9y`^iEN7jhnj1Bm+$YIUg7zN(EKyWewTdD_I@%iwER`{7Z+2y*ecdv0rbPt zph(Qq_MKl=nOy496o*%E!ewdV6Gc?8B01*OfIzh%x}}!AAQDMs*#afV(G9D3L~4D< z$=64Lp;di9^bebQTJ1&`^M9y%uZTgSS7dYP>~-{E^|sIHni z==JQo=ow*P(gFpOYdrp?-Oxv#Q`-_8gs(`@w39ZcV*359%M{cA<&JA(jV!CSWr-q0 zi!(%aLSCl#wL0V}wU$0!bWb*Y3iLj2(~-zV@xHm3(&Db5^t;6>jn8fwXRDm~qtc#e z>T|fXcEfuw9U6{!7jw(TkrmyQXrR)C7~>0CSF}7>l(vGC#Rrh0V*#?%V(W}NELT?C zWeIPZ)QsBj=t4DYP+5W+nwi)!wq`@j%1M=NtsTp4g;9yotlv8)U0AiJNrsZssf5~_ zKoJ_^12cFZOTK-56Yz(a^j+fP=f7oUdgq8fihTR%=IdUd;vN404)2%M>q8#1%ymAg z<*8V8$a;hod=T%I9~v&-}0GYa-TIESytKji%}fHxxiKK_!a8SmAGp(9c#CRq}ia*QxVj{)6x@L?x&PsQzEoXtKI(7f9++4wcI( z5SL$u?C9k7@z4^}9^Af5q54WdzIc52nHj_`W^ zKK9?wkD)$;&hZK_y}od@*KcR|^WHpN(P6+d!SvNNlM*Z;mk^+JzF*LhZpP^1UQ0nP zNRaefp+RWJdL>kf=o?5^rcVjd%nwv)Lu=wrpBWr%(h z7%x?(tl*Msoic3zTFGm3*RPvveFx0lzD-K8VFT=Zt!5+4_3Owc6^&fP_M)r`x*h8?&W`fpv9Jo|8iiqfLxsYbOUHIhof*cx zJ06&COWlhObRx4%X%8`ecQ>Y9blWlWXd$Q$EVJ`l+s$J9z~%iqxU1vOUsHP)st#7cFO%9qkzwXKeR3tK%Um94W>V~t&qE8DA!#(2H;^O> zc>*FjWR6H_(&vGzlQvpG9)~l>ZJnx)%SBwlP{=q|rbN4pc=G~7I@G~X_3L3(M)a4Y z65^ogkoO{*zii~0qJ6y=~AQ2uu@sUcwM7D9y#&~vGksa;!uc7?c z=)akLFOzxu-PWkH=Xb1cetq4{^}%16m;O&<+i&n&4=d1i2dI{~Vo#%N&q`_9UDRUM zcM0Gnwp@?07ZgW0wvNTk{CnolQ{(zaIKKN6rOM}hbeJz4?!wG!{{WLtudwW;5+}7c zm!fG{1p8PeOouafESaF^y542j6U5y}v4o)UJtq|A{*d7uUvAyQo}bOC^IM$m8L$}U z9dD)Q0U(gQyChDA^(sMdAG(QKjJpzB(Hxp*JptFvCP3LXQzK1kVdXHThu+4mrcxTo zN$X-=xua-`ETs`p++NN_Z!YN!<1||A7d*z-S*hNC_6LaeeO6G2{-e(m9y~T(rK?G; z(V`_}kj*rOs$A>)x%~3Kexvq${{S)NeK(r>PY^3iv)SZ5n9QLWY(8auwc^(Hq(>xG zwzq6cS7)o(Gg(U$Ev+;>gtq9L6;jJf-D>wRV0RSIYk9UclCVCWlBEp!f6@9~29?uGE1fKC)ixdgQYN?2 zIsSM>iY(h&7^j}FiURaGBc4v`D3Y?_RLsPKO*96N^QquU{{T(KEg)jF63})Cwi>N) zkboaK2~^l+mU}Bs%UBy; zy{=CN;=PxPdcQg{Gtm79EwV6+5-u?@qDo~beJ?4e2-J6&X7%@?eA($Qm3>NN=rTDS z@^S{LG!TN@mPI$4dJaP`o&tJp<)02C+aNj^e5!Y~#O!nVT&vR-*Un`0I}R&|<%-4R zJ#U)1N4=A`o8qrP^>O`NILtwuzPunLAhMRe)a|85j*B%_GDtx+o!%uHS5u!NTu1d_ zGI%Mjx0YBFVXa|fj1A!WC|uX23&+{>bG91CGuB+oRL#*rSW=b6ew!zdH|o6A+9}eV zEOmF&69;6D4{{iag=j*OK|aB!LS$28Y&xE@EXLc+#6?uh*90!Lu}!Sa)r9)MEwUNV ziDV)a>a*B>FPVIgwy#Ba+RyLJxM|*&EF+2CuZw&S7u3iREL9gV3FaaO!65#ORq(ek zJNY#JaoKr3{vQnH{STad2f_@9`+bgTHn!nOKE$}grM9I)FAauF%S}$xRqn}#3Z`Zw zFKMAsl^RE^HN$n;+IhA9lY;lfx;FZUxxL*DV|$ZUioKeGN+&_0;ZHL*)S7C&bH%NB zwbaoyrx-$`z8gZJ%AUx$N4rVeZNDx0Jq?RoLFwhJEllbNnTqGIIuUGw+m`GmlYW!} z6=f7gh)Sr1%rKiFBSV=Q36UreA>no)h<=SEi85_8&^j)!a+u*gZsA*c>`1C|g?`@J z49Pc_-&}&59>-shvFK31>}3*Cy>I8#z`EGS*8=rem(6;3yu0XrGtoMnZ!2>SwaC4X znSjdm*}~B%Z^W!y$%sZRFQZQ}v0jBCEoY`ZKjS}TeAnoPpMpot`p2JRCh4-^O$?VF zP{ZGmrD$uKq`C^-YP%4(5oxK>9Tyyei&lJ8HjJ^%GSQ)q1}a7|lU=UCPP8%54uU^e zNSjj|8l^KMZaETTJ$^eGKsFA)mr%1J?aV3(LA+l=CM4nf&b?2E`a6ix>BCrQ##JWgdX8SNw$tX`tLOa<@ygVU z8jmDUeKp*d&*F8tJzHE*4y@jW*O#eG-rgnif{}J#se(Rx`XkAAI)@M+6Saqj^G~8( zqtS5wZ~B+h4RUp+aNXh9Kuodq>8MrgRnBjsX_p#H8Gi{iaImKIbE|=Fl^vYguPW-C zr*9w6yw9WaPojMIb1yg6%eN6O5#^=Dz?WH(159Rs@qyAQwfgbuwUW!xB-vV{W6C&W zaYQ;4Xyy5usRQ>DW^FwYcSMF9#eJO&evp7-!DzK^;JfOd**K?f$)p(bP361>^yQ{2 zO^}xs*owxmkEX1_>3=NxU!QL$sWg{ZRht`GZwpanruGfp$jB!zOa^u(?N*LFk|3&E zB!rONDn;TO8ZS@^oy0^yv(=oog&>guWH3Om@(h#bxA}+-mmW<}RQqDZ2*vCRf=}`b zY!Pf@^hL64U@S-+Bczj3igE}=a=}MZPZj8ue$O+T-8uEYq0HkvFRk&s_8p z_}1p_H0o9o+sS5STiD1-lI_#|$Mfgj{uA8UridfreYCfkb?tt5_sMcp7Rv~1Bc+A% z6SC8j19ddW$--P*I3QOC;SaFPdkrw5MNWx!0IjT5rQ&6x=>|(RmcL}KNKJ(=Pd-D9 zJAPR!ZN|z-{amk8j$}-sFOOqg9m?*v1?YHs+o4?qX6f(;)H;txXnbblDMp1fDXAhb zuEjo`KJw&>q>J;!tK22MJiDeBm&@KECXvC`1Cn|L{dM>Xzx06~%gucAv3s5SvG~%* z>bu3pFFz;<+?2m!;{-H7O|E z`9*0$YrSq*4jpQx`yVzxS)DwsxZ9&?XpkgDIDkSQXt}nYNQC}@{Pg!%lJy-JfVtia z=|v<&krqf+uw=8g26aqHE_Y6}LL1v;?Yv~RHfcdSOem{SlK@7e?gWm5d}xIIG0(jP zeJ$24wCQ#AdrB#D zGjO4zy}CJMBkiwved02||=HEsq{UHMw$dioQiZrRl(^vS7-EpxK#!edZdosG1 z(=DcdVBv7H?fMJRK41C^%z9s3*CY$^-jM|7Joi_t-H)5CWhmADfug7e%SMO=X5~{M zx+Ye_*KLYTjxa(ZFkni0)utxbX9$w1Cf6PZnmHL{acVKKhgxD%0?=rOJ8Bc>{{T^O zZP<9-D$mV*Zx^4|tyNE1sgBE_5T2nJLeat>&fED ze9P+uU55N#^qBb1xbNt-nX%mm^n^oVF}0M(bs*DefDf@1u@X74Hc(Zl=)EDBsCo&b zv{;}!TgRzS1x425HDeGSRCV8pE->ip+j}b_^eK9Bzl~|CaVf|f9X+8&G6 zqcr)$T~C=}^ek0w<1RSbCV|(I&tRkalMrUOX4Y=Xos%kk@T#-BY&_J)%K@q_uP1S|ZL@Av*$C z7dF20ZCE*966>5Z)%c1He7L`5<(ZP(niX=P%t}!66BQF0Sm+-*6w=c0>2O7l1x-Gu zlca%HN6w7XCPIB-LS2Y6k3`(u`$^jpml|~e6C)8o;JwILEPh>nn_awBOx1KPX(X*O z83nYY3cc+FCpUp(nTeG4r&aPdt9%Ez0vA+T@8g`CaDDfOp2XPNGR2fqBU;WUZi#^- z9U{jv+oz&^AM-=#=Y{p;)qkn^UrYzi{-y9|d(VLrQ^8Wxx_-|Ag ze_O78bgLbdDwE4zv22urOQy035tdal42L^tW+C zK<}fA^4~$yJy#3P;T{+3{Gj&Uou5c66?=_=fXP9alp^rL3hGD^p$u*rlPwRwys+$$!5xn zD-aGx>(veK6_oxfs51v&c#L9<}`zCzq#>uP!S_LXSBj9PS!E+%;hE-f;l zOB6IcZzo>X)013@(B#Hht71Gt5S%VTlN@OdLnAfGn;lgoma(|Ec3QVeqR64zF-?|O zb4N`o;N7X~)f%We7r;V*f4FHRr9-i-2Ayn&|VpHb&x7mhsz zl(YMPiP!N(Kj|Vc^!{x`?p|&5o_fz1WV`YbC0$)QK7;f>J@hY|eF4u6df&+1&JYHk zW7c_=62s_vX=k%1>13@7A;IBW?nG4eK6x8 z8Y_dP7ZyxcMxpJy7CZ?tZkScOEqGpy**I56%Xe2DS#BlGh0A%B^PGDh30-1V zy%rXoZPr(Dy`^i!Eg_i^3BW~_MvR3I)}|vuu2^gBwQEDKThm}oj7x>4OPt$pOg7WZ zt*9#ip;XPqdb-fVj7`Oz7G4?a1!~8Qx(!;u6F#Ie;snQ7Q5lQSBU-@TW(C?DhVLxC zrSs3Gyzg(vwL2_6*BmBHYh6(7HQwvb)9XkIcjtdXo(Ad5GuvnISH8Tl-}Am|Y^bk$ z;Nia_WsThZgY&Q4{u|iu#NM;<7TmXCj*;{nZhThX9cR*gc8h-b$GxlChx3fPJGUjX z1-l=Kt6fTi^lt-L(|hRS>mKIt7q)(T?)oH}iC;I~FC5)folvYa*n{BDP~vL+lzdmt zz)Kw~MLuKWJ&%xkk1JR$*6cg`ud3tw6m)GZId5p8X_)TOepb8RLU*}ZFm z_m7x;B4Xpe#qSqzeA7d&FuNUl({j#ZdmU-SOfeEvNl4K$1J2?(9$_d{mjaKr?bJP< zy0|WBs!WL?3Jwu6U2;{4WOx&!+2vK8$$f_awmJD#$DVCRCjZ@!^vF|g205hH3QLVFG+=o`rsT(2R+weUcpGVRrO6F0 zD{^ERQA`H6qWKQ#6H1tr+&rB-wa)ng4=T2ZZ?(@B2yG?nrDpMh()IFV>Af4!ld#?|0^Ja}d)L2oMOS>^cgwOuXQbf~)L7)7_79W2v*vr($m5vszR>uCjKtO| zePDj{4^FXp>ceDr2dX9W+;Q+y>9DFJqGDu$Z$wIx zDg#| z8-*}zPS*nzAk+yhTg>hxqp{k8=@N>6n(OA)`3FVg-m}WoDR!D?tnw`>D%D%6-Uecn zf>P?15=s=4GTur?goc+c$|XmOUU9dI_N6c*4dbQHA!sR6@g)y2XmxWXw;6%8N`f=@ zP#4UX6fqeXv_^xr!x6OzhfgxVoJGwCls zcW;~h35jyVb9!2gD(x(N`c0=bwtN~IO8v&0J!(C~I)9J5JlIgL!+j4M$F?|@Pf_RK z^Um+YtfXsFWbDrdR9U35#Mo@nb+j6nwB*X(W!od5`$xh)-ud6LH?~*heVgyaTv%CS zW)mZEm2l%KWz0ru2BFJ^HbRdgGeR72fibP{?m+O{r4)L2D|q>u@Ox-&g_mwC$>;7W*B*-5P}*H2PeRn(nxI zohVIoeqA=$VyqEiD@v>sVXO$hhl%G9t$=M<(wR`iCk&TZVo=#t1hm3}M3^$GXPj># z<;sS(CCG%JB_Ly}70Av6`J#wK6I&aER8_{U;=3IdiPRS>sK~XCv0fChcjo~}vD7zl z`R^p@+>6)wD!3vdeJ`KW?7wn4l_)bcfu|Z;jy%ky&ng_)L<=M?$u~3`t#SI^L(%2E zZK*jc6~^2xb4zfgnMlItOxMbkFx$}3)uN?&rU_hWJ?jRl{TS_a2`#mMf^T941Zg=_Jjvpk2tox|b4C++;CcXrCt)IDqEpJRC6URonSyuYP4 zI=DU@h|A0k6#Vw8TUa?C4l>Gk&EjOC>VmO_+Du{vP&UiuC;|M0q|N-#LxGk*N%*wdFRK9!|A+wzkTfgyT~& zoNa8*of%~V--_yzml;w>Bq35Am?V`Ug*B#)L3s&8O+6k3 zMs<myTN z=jk*a#aR_wh~ZoMVZc)g&~3)H8Mf38V>lmC2wQ}F+vxCoW9p6r)#Z7PYZ>l5Zal*8 zIyb#Obo1GFJ3Wxv*b^1kxOvRUiXv!u?AQ9gYCzEd%bPK$AgjXsK44p`~dS3Y87`HR?|+cb+$2)Xy_F<^KRnPS=&(;@VIx zC~z6usI*Qc77WLb%MHqAU{5|Uz^BRwEL~Zv7!Er~Q=}oh(3+1Wh#^Or5kxRag4nsW zJEVO0&O+R$T#mWYf)Yw10c@9YupZ6qz8;H6OGa3C)#fTO`sIAfM0A+dhMAEPNTE%Q zYimQSK}_Qx+QLNfa=?r1KLm*}q^!E8Um5oifwjlo7RXZzk@sRr0wsXVQpJH^2VrR- z?lUA1hojeChs=c4Ljr!gt1VlZbdFis;PZZGdgq?o#0PO{>T}Zi5LQwWP$sh$UgDe3 zr-83fj}Ms^CKA%~Sn^b`ax{j6F)9a^mI~QkE(y&%+#*=kn)!?;5`uTC-%-r4M7^w+ z*#e?HWVEvIiqm@s8&U%`hzF3Z24e6%&Ds1t?*9N8?6u2*-SKPr{A86+=$;++r>6R| z)?P#GTu#@f&CoA@HTJ`8Gqq{M{K3+^_3V6}JoGP5<|ex0q5BVOs&+3G>ijEJyVL!D znijPT-GsNRyz%SrG3iVg)vw3Fic3Hfzc6#Ve=P2g6>`Z&f^ND|x6yTBhJ=<^BprFVH?PC}J!d^Ww* zIVWq*$t791Xw6OtSUtAJN|UQvcdTJ+ZR8p1e9F^N(8c`j?s2`2L4jiitqF%B z$_)x~16Cz+8wRAdv1iDEJ_jW;rD-oge3?pPV?4H(M7p#rHv4XbiKFI0CCK|F+)IPH z@+DVGF-gQFm=YqjV?rOP?8#K;9V4E0cpNT)Z>9T>2GV!FhGe>n0?-3^rm?N)1+H5zQz*=>HyhaC4_a}k9702#+jTQSRjrCqo;@?F)3+sHXaB0y#qlX7h zX(!U%yXR!y4_n<-pEg$WYAs%8ef|s1GbYr9ajW+ny1VIu@&149JR?!R^WUKOR$vxy zei9y~@}JO8FX}?to8OJ~H2THtoSt*@hkx^5yzr$a4R^Q2DQV|Ei0AeD6_(x?=3hdH z-NHMREuMNEyo5HZEdXY7^1E+3mz^3+3Iro}JD|`_Q?E{WeHGHWcxe?WWwlpE;(dFS zcDO)oH6wfZv#A%F8EE}$HR?`pZ7FfRz`3xKoxSCL;eEs9A5wKH&TjQfA21~8E|wz{ z^pGNuioo`t9eCu>FpG>M2P~g}^ zum%}`t5j&xSP`}3q+`v=hXS)gN8g4T58-6mvYr|y|HOPbpc0!&+ z$FbB+F*&J_BZ-2xxOJlewqUPv&ZEV<93CHAJQLpdW+ZHmjFVm1=%7v^#?sQYgKsqG zX)ni-hSPzmEj+}$MwK@jSm=2h)}YMINaOLHnxru%Btv>=guAn1Pp*=7KsFq5>Q%Zd z%+?aTd8*f2b&yjpU}AG%oYH}u-UZ&>1O`3-08S;+>R&$hCTLxJcHF)Lo!B^svGNVV zm7Sae7?T=m87BzL57}6V(_^|{J@&6h)H;Wi^@XFFE$90_66Sum@~6GR)g`a9v_Y<&0VQffy` zyu1!{@UTz?y9^+k)vIXOOVC^Dp}kf&)aTd)^!^t$)lAlGeO#NCxL4K8ImcJ$y{;_) zu<4y%Rg!^z=ZR?i+I8yMkmE}^wE|G%Q9g?Fzlyz!^N)98%`3|Koym;olUB;hA5POO zhNLnBL0D`0A|V(OucCV5Y`R*ZKS?#{t`PKyPRq-QE*v{hq-sH=Vb2LuVb5tus{|#o zgbw`)EfsVj&<)jl73BKAHO{E>XXDnZi7BK6;|XqiYQ(ZQhMtMWoQoD|y|WjNuh~XS zQY$xl`=vZBkPJB3ve=5_JjS9VNnzlSwjPPrJfh9%dQnoER(Fu3z6yB`65O>)hGdS2 zEUI2V2)x!Pm;|H32xO#v6xS;^I^N7Y+lO|qKKDG&B8et1t3B}-jW#pZvKg@oWUbDh}yFgsSR$6adZuVDJ ze+p1Ok8;mN=X`cMw9>m=UQsl|I_irftoKZM{L|b!pzk5+7_-P3!S0QlX9&e_=kL(J zA$uPw%9(Tru<|7vj{H$N{{YS*Zoq&9;$0v6l534UWqB4P&5l z?#~~ey9MsIF7wQ6HN|1r=C$f?6}g=&St3&62`lXH4|;3LcYO^sJpTZk{RUbyYcI)% zA*`6aGmy3EQMx5a5tISqh|II^~J++j+SRD{4(~3rkEAF%kits{?amOO=Y-j1raU z(j1W?HP%ALFz!WC^K>?!WpHAfR1R${1e9w*CA}~Xsl9?;$fQcfuy3(d$o7wteONle zkdb2;YDsnC7CUOMbFRcnCa7KblUyj0NLsb>fXUMGloHED)#AtDOM{N+bzY4^MYl#D zoP)le_ygZ~u0)bUeFqLpF2{CyY+^Los6%4266w@GRB`$}iXDVM&pqX4)}dADE`$hx z_cOCHDOWi~sp{y%2Ui{-1bcdO^8AKNel@0Ciz(#FJzVMINvg~GkToLLQ0#Ij_@s5Y z?~R)dRw{E^bf+^@Ihml$(n(iD=Q6Na@55Zfqx_@k$~o)60J5!^;cU}yr(~qkJ&65k% zrTC)nT#QPL=g7x*J=()z5ExSrjgK^g~9X#W-!iO!!A-$Gg+x#>hTPS zFKkt+RV^j#j$a1DSh|9Au88ie{I864AYD9m%0{2Emf_TFT`YoHmqOc?U2%2Jw;V(n zv3gmS!;H$qR`UH#Z+c@Aq{)bR0N(Yep8M#p4*L`59@hCNT<o`0CA#y;d`Z8j5-> zN={jx!Yp)QWxyK9gvKTvbvD*F5UGR7G?^n5)jGGghTc7qj- zz_sH*o#`N??ddhWp@#PE0}98GY27}`oYv-qCsfk3>LDv-CxX@;X8@Y!F(q)Vq zxMEF8k`GT}y>gdqnnDP$I~onR%}gC`asZ7_E5Os8L?o-sN7ZsS3`-=ndQ58~!2MM$ zr)q_)=wyKcz|8uzz<4c;NXUA;T#_}>C1yF>HmVl9eHWf|`i->nivIvar*yH82tbQ3 zIRkX7^zhhdW@O!)npZB=ZvOxvENM{sd9=%|JZTEWxwhSAMCO%ftt~bUA=Zgsro6v? z;_voRN`<%Pe?=(#SLxJ6@#GSAv~IC5X2K=}NleVLi7$ZlO;dy6kc*;gL9JEYd)>&z zn(EX`yklQE8PiAF{IfbBy_tfRA6~aNUJpxRma|NwnM!SO2LqY6%cab9v#zrE)+cFZ zA?6@jt*&c>_SvRHirA9KR-ndCf=`gJXY>;M_#I>)OL;1Z zY1Sgf+|t3^OVd-ffLBa|Qe!6|SZi`Y#`cg-^pKd=G!CU(1tqsbG^T-Bwt-u1(X%y# z{a_Rn{{YE;u!kJ9!9cK?s}XKuh*Vo&Ga_hlwu(f+nnE0@8-*g#1u<)$0%jK&5v$s{ zi&r^aG6dpVxzJh155i$s<{${uUYjr)ZJLK%5sqaRBL!;G(c;(;{Iz{^1L`+8C) z++uFVo@ONu=`K2jWy3AJ+{-eU+#a3nUM}^o&OMdU_!7MLtCm1)iddfGxmdVTVgz<( zY$D6kgK24P$bl>Xt$5)q1GV2*oYOirS!LIZCsn8hSg&}**wu-JY8#9qZ+kCh^p7jStco5yQLJnKP`EeB`Eu`0@apn7;&Aonh{Wy zs-cjj3%-iv)`x4x=rf^o=M`G9itAvlvQ@s8A#Ip~?*%X8G8lhEG`&2;W@fPDZAfm{ z*QY$kXX5Mj(K=nT=AT6;ENqPX3dkKY8RRD*)|CBYEXql95#+{{V05;f#cpIhFANo! zKBoj^G@0qzH5zSQ({=&pBdCWbKN{I0;VEt8s8dPxSCcVyx$=S*@T~{=tBpaos3RAB zhLycyl+=#ToSdp3pa@xufz0fH>&rsRQ0lM+gjJ}{DlxP&RpQyAwPT3sQWzmuaS(d-cEWCrO$Op_!QoYB5 zhZiIExUI8^xzyq$hAC;R(wkeV@i_)h4Wz z0Q|vJhygXA)lq_)2SPd}19TX*ilLp3stOMyXin;W*MUEiS zE@Df2nU+~6T(XyDs8|6{kobEwd60AmBvEq-lk5Zm#~Uoa`#(Y|PvVK`pAXl2!e9nP`*^R0MsJ*Qn4v8mD$(1FQ?%o~Xry zZp`o_nH6C%K`)<}xH3}@Q7KG~ z7r=y2VN@M28d`!)i$M)dgQ^9Luxjn&ON@~Hn{AedWY6etP1ndBB)O-PRAr8an(axe z5{I{HfhF@FUp^G{UxUWACpdkT`E_&ma;CdDZa{!DIF3YxF>sCpZ(8T0$LKB0QBi4N zN|5`2RZuKViC%eS0u@=X6$Dar7+A>?@@EW`q?~R+DAF4V4YGmeDjGsmNb$rWkl|TW zs&ib=Pd%PWPo8?OC?o{2e!IseE9|duF7&NrOUI-mkU_4875U4(I8j()bb#BP~8n@ zhVbB;FE-Vrz+nY89$$9mmJ*Y7qv$EQaiQwPV57P}O#(p~t?tV-R45nJX0}`&%+jHu z8d3r3{lOuSq+!zT5O#dc2p>cPzZC(OBX{`e+O*G^wus)@(97CXI=UY_XEna-E5N(g z&VBs(!w7SGGoOJqE|DRbbQsdyFM}3rQ6Q;$A-3i;0mmMTrYdMA17(ww75g?zvQ=E3 z#l8BDs_R_m(Iqacq-vUDQK1bmJSc|eMPMxw3eIhw7Q$z;HVK;fhMNYY!hOLuDa|&= z4$D+J(TAxktXbP?s-msoVkyC`>)95Eop=7p_5#eKP_rbhOw1RRIq(i~$vccGtV0ta!;c4Z zCN(Xx@qlZF#RQ_&N#S7+&+LFs-&a6AlVDA6E1niAY0jTbkVTTVgmN$-8fy>2g8WP= zVO}Et0M9H3NMbWZLNjmD!BH+%s}{CWC`&Ws7lVu{&y|pl69e>cLlC;xM0YCQn%ZRBYC$P&ZH=`z zfV|eGX8PyHHts)T*`z8~f1dlIbH+-^(JeL2$3nLEO zU9Q`tT5EXZ(=LNbo2vn>Oo&woN!S&oS~0;+SA|+dI?|mh3{5`7g&%r8f=c2@335hk zu$m!7B6~3-kt#e^nI(hWJ6;I2RRrpA+NMpb`VIi_GDmj!Y_O#5MCP7}$28!nPC7=h z)Rdvrx(LS-GIphk#GSZ8F?t2&&=Q(+RSfDwpuvVF#Y)U_w#MI#JK9bmw=)4MO2G{~ zfaWJbicWz`TOg<7>>W!=4Z7BYd94H3jYB();?LI_42ws{{;?fI4238!Lj(g9EZ7_& zLb`!Ud@=zBr_lj`LH7s31zy}xihNS+iv3>RSOzXQ_as(}B>{a$o0^c2Q|to+;>?M! z73h_5p-Qnb0B1N@TIu+~2r%~Q!m6z*W%cT_BXWY-8Y;@sQ(PX670UKZ==0+V(rnD! zSuixji0j?y2pOHy1Ejp&A>O^Q(onK6R87Sjv?3bTrGt~mS_QCRW>PL{wtsM``kSlJFT+Cfn@ z4#jYMdY;U0R@4(;F;%Iw-v0m?ePoC}{{Wjy8Lj!5ON|EH(}BEk@*~K_6{V>d4Y|Ax zZy5*kOASnI<%GqY!Y(dif-+uw8GYAKdsz4}wIKy-dQ&y51*do$M)VqeD+V6c!D!6} zoo`^Q!~=>>!!@LW_S<168dDq1We3%~Kc6A`+(piU0o))Q6&hq9FHJiT3&d_fPgt=b zV;d=edMgV7hU=n3tW_(;1iTF8sFSkRWgZCv#U8k>OOFna9h7v)B3>d4C72mu3j7lG z#({eekjjZJp0R15l5+g=xhteKQ4WmOYpNioV`|F?UQXMUiotenrWB}C9R+Gq8XJQC ztghTJm>O*kQUMJ#u5O{xdwg@Pa^Bw{K4N>k=Nrt2LROnB#+__2Xx(OFHE6VNQe%wd zo{{dp0rcOD^j+w!V7G_%_7{iDFLOxM7q4mDPCAv?iQX;kZyrL-c3;|pkWHI(2EvJ| z1f;8q_4u}3Sv6N|4%qpTg!^3{V=3NW4I%dySyYUbOopY(A*rcCI%Fb7)bq-*+aUY{-I2JdryNj@ zt;YswD^X)EsWD57UKg~j=r+Wt$Zga%qnWLO+Frw1w1b;(0bAY%Ya9e=I2oCsQ_?#?q%rFHSst|%)VNjJC zghQC=S!Uuw)1AsS_Mr8$3TQ1ksg9Sd?5Z3a2n*1gX_&1*!jTE??U-lW=da3gx$n$2XI-td%?fvV@$ z{d>TEw(y>_tP%oK%li@=X<4pyOr@e)8pa=eg*DQeaRkP3E-jjj^K&RtvWH>0j67adWJQ`Da1nrfAlaB*C*1=jv!Q>@D ziebVPiNb!lj6si${cKrhl_d)N^l;p&*`VCzg$U4xp9;BKEP$Xww5S0wF=0pPLS>Op zbD(q4N*tw+aNT_Uq7Xw{iamJt$ppF;usgzJTdOjgL1O_$UACFTEd5*-&hN-W_w z3PTHDFs;rV>o|(q9MrqgH!htx+{>&fGG@1+%*+hMXf=vRDLIg3fCkci#eMM4vVMQ< z?k@_P=Y1>6WmVX=_T0;}1WGJ4xJxY4jpDk~C1b)|jibe6#GnRR!Dfc3TI^-kM45VF zRz8;Ai3x?cnM!YNDXc=+-eVOqbc{i`?nhEoZEUe9#?o7iu?Us zE46ZtuM)YpTJHI^?|PWVU)Y;U^ckeA7L_P=wuO-1Vg<*NfOmSrbmA0VoL}BXNX;^DFf%W;Sg`4A_ zTR1!c5Sq(mfK+u^fOT>ez!{ht%oS(bw1qX6&H%IYbODkyWAa#O6OBq!EEK)ST#$J} zPlQxR^%pPV0HivVhG1bEk0)y8KRyT_a3sKNh#f2oOfcGLj`NhgbdaZL&9u~FxtnMV z^WmlT-tye_f({4QOP~vm*_AB5ribmo4q?8xxvsFMMazU z#&mBoOw7Pe^{~Y6L7A8th`>(ufUL&@U5k%9lK%jr1$?{dU!8mTuS4G}uPGWzyQ+$) zVvmWESuMzzu0)_SMbgMZmNUl&VK?GD=cUxG$cd$LZ;5eOlz7?+I*hTWWF;kXayFu6 zGaqnnKH>_c!buaFix{$8ID)OuJV^L6R>e0K_7pC?aR+b4?^aydO z0i`tHHmuNXIf0no1E|Ldbqu~(lx@I{{?G~9Tn%l#tgmQVHng>ZP^7Vr?Z+{dwuaN2 zQ*A3i;ue5Yc(C5|kVB|gYkNp55rOq?QDL7P`rO3|76urTJ`Fiuv`D%wx=2&zv11IC z3cwHn1AH#gDwg1{q{T2K)y~*Ouev(JZ8S`@!H0=v3I-aD)D|=>LY%-%f|Ouo^3Oy? z9}}a6d=yJdR4S5GcB;kKP9t7gWnRQrMHK{yFLJ{ZFIEts6n5P8_KO6*kx(o{_2m+> zahzKDZwYxCNoLwx1SPD(HyT1Dg5>3~5>nSTw;D`W zh7{zcsh>CcYtOxpHOAPG$GrKj^H}w%yjUfA*g2ZObqz}dAqoU(%?6O-gIh`id)C29 zZDFnLpmjK~Wlg@eBNU{u3tod+nzY-oUIpuELA9-=6^d*#O4unWY#(h~4WoJmYfF(h zybrO%9D(tlt-CPIa=>(Zk$5Uo9dxe83lB8u zLBhE(TTHhOa3H+Jn1vE(Uf>BR02K{@ID^$daoE78Il72@+ZDjFj!Be4(=@;#6U5z` zFmiyjR6ayWHqy&YOVA5bGVG=>gH09I(oQy<&{Z|YVgjrI>1GeYpB7CMI#NsyIn(%m zYmrjKXRhVx#ACCX%nj=j8`FsmCwdIbz*=(yS+oWrS`A{780$`g^@@j=>E9~9%hmKf zeqr>NgZDErmw8=vxfdN~KLNm;hVZpYWn{@*M*x(d(oxS9sk>gTf~r)wi=&j4)>^Wx z;boP|i-oquQ_@vwV!fg)QG{T`;Kz+CA(j$U;|(Fv_F0U?wh)P}dt)<0%8!d=g+x(X zi;j}nEHueflr*97=A0QTQi)dgp|`Cx5w^KPGW@3QLHzrqRWx%vqBpd0FQR?a!I1DLR3rnrJnV84bl1vQvzt-Z~o(=|NMv4<-wt(G$ zYs)n*jbP*~mz^;jW8z>!0WXt+72C{;=qcqi0HE2c5FWYs6->&(t7IINBwM zm~O>o7201_=Ac+8V!%jcR@fDRwyG_PITm0V@r(;)scT)%4K`{AGAxY*Jx_`m5R0!> zRrw7F#G_AFA=@hw#$cM3i2_sVEvNbOxbZ(*<-+M`^ci)$$2FOPZAnmOW)`Pgz}994 zW?*LV0KFqXw$-54JAtj{0=As3mvy4KlK%i@^dFyncgXksQ@S0R)&g^Ff|I?1^|Xfetp>9a3f`CrDB1&R zWzbf%pjIbkj%M~dD%wg=t)v}gcnU(04x!e^(z6Q^yx3!Vz{RxSX}5J*w5d#HH;jE) zH5Y#u`rA^?4GCfA!U-`V$OfkiC>HqD3tg3nXq9j3hMDo7k)uaM_uYJ z%~_h!1k@y2LL$;opISVofQo4Jg6v>Uti*3_AvSonR7}W`WqCg$>zse+9#$qJeVP@t zU@uvKtt(-)D?yo?4QBKR#b9e3KqnO38_n(v#-vwXo9I4-%YT-;$EfFU`h3Ktj6XM} zR`c(w<0}0A?-Z&1Y#yO_X8b?U3c5Y$vRa4B2irnIOOVtA6g^`RSe1@LaL@#@3W8&> zR1-A9P@SRsfP0%n5(K^+YgMH3)p0aWDu7UqSqIt z4Xr&Gml}$wX9%iYb~C5+tc|H4tlkyHf>tG}1qB&wyuZ#q-Qb?T#&MS#bJ%!AYZEoC zIf01U!6{b5HJc4)HV(Rm!Q9rvNYkN=s{z*Y0o5f0zpW?|lsZFt-oXwxfUTv_Z7(!S zs8T~qc?7oRu(>-6E15Q^SjN_zIQ6#Vsgg31tltxxZeduyvx>%h6Rt7c0Zky@d^Gt5R^1GHDMg zOUY#S6q-6u>o*Lf<}j40ka27vCn#P4orS@V=mslTwgU(~u-kyrL*+rng(g^vAn0Ox z6tE_kPpJD_R0wf$0xG2Lxzovdu`VsZk0VYJm90g%?l?PIVhJ+FOD3cP?Z`(~DGO%T zt;C~i+z3O>$lG!d(FK`KwIidKjP!YDoBNB*9_Qzr?`VJ1_{jM4b1H912X&=}kh}~| zU?J>i7PRa)t!y;BSTwfO8{Q-qruGYKY6lowVVRg1^k>1TQT7YgU^yFtt|ni zp+cqPx=R_nF8eMX%s=AaTU}<_;{w3gXGDRQAqADa%^IuFC*Z;w0ff6xB6_6I4lzAi&3o4P9cyNU6H)0ML;TIRNcy+S?j_r1h`{${OmK zn_rK8Lfj)-(?+KYAu!}=n}WGMQx}noCA9&_aoH3os$vv$I}o$wi6Wr@l7~R`4&OrC zlZ20%6X>2%tlPH? zLxx8j@U^RsdoBf*7-e)(wWXak^bb^c{{XRhzJ!~k%TJi~W8^%ZZ(1Z-aq4*QvinJ9 z9N6w952>y1ZXqt@jk75L%3nY*nHmV$DGKowCBcWeD{wKnPu31uH^vB~iX3wwCQnU2ei$R8D4M*S%)y z5ty4SR-98Te0Ob967DiY9%VLB9<2Rmjh|u0@{6m+wEX0T5u4YP$O$dA>CkOdvqFJARld|g7)46a+^>q z6NUc(VJwIr@t>{Pf{+%IJV{E#v3=yyN0~)nr07#48f%lvystx1=)_e^Uh9POgFO^L z$e_uw2yV7Ou^gs>+fxN%+Y47mJtx+ws}aH3BL#MHfWU(;Q7_JP9Jp;0Dh5QoRgy3w z>7}SDjiR^5lno(<5j6)#D{3%sL0f?H933GLrPv|#Z%T|<>xPMsTDJ3hYQFjNIp3(@ zMBbI^IGCo>Ea{HX^e>Ij@yDpT!#;1R4om67xd>B9IF(9R8qst-RjM`$T*Z@zbkCh# zY+UuMU$f#P9B4L#Z$wzVC&~R4<9#IgD$gJ5(9+sV(E?0XhNU$$9d)vhgHt=4HtNg70lA>z)LHg1ahiid4G)HW?RjQVu6bnWCTX)Wy`XvBiHm6E0A-F2rl z(2R2>8)fuOObjl|SLL2d@83FmU!L%_>3+M#?S-I(uQw}-OMuezLAI8VTAJ8xTi9tE zNIKJq4LF#%7R)KiDFZ&ug09me(H&RDrlfrFcwlL5@;ToG$1}9Vv3ni$9L=a*$5USsZPy*Y`?iApj^mxME zD^%XXq&5XLY>ku9X`~LX+@S|C%Nzm(Kd|@bd~U;CS$d;KL=#m%yXmeECl^9aVVLq0 zWXh%aC?vPVcl9^C_@T4t4f9KVZtE=NY?@RjTMDpE66eQS6K_BfBB-gm1W zZrt)+$nGin<+QxbqfzCw2$`D~2Fn`&UU|~EzREo5Py%sZOOW2+}2P8&VS?C7jk-WBN{1 z&1Uqok0x9)7n)Z}7TOz1k_kq%4my{Ec)W92ykRbBWFZn#Bz-B+jF-^#a1T2D4C5Z# z=iXM^t@`f{+P9LL&1i*VN(Ew+5ue@$Z%GX;It6C1H;Gs_;x-CfOAWTQ24i>&ZF>yb zQVulp0QQrhTWY|^6p%{WbcExWX#04|TKLD;8xX-&D$$6gCX;K$#gR?KIu-I02v}6> zHgXa{Sc9UIt{!Ykd<(^BA=xRDz)RM_AjK=S!U}gtCSj|b@zyj@MDIM_1FjL4-TMS`^J0T4krDx&-W=wF?l zyM{e^o|BifVuxifGFblrr8zgJynmo7Vned~PRf+RS_7bz9}rI#0p1u-SE zQ!W&O;tn>lUCqb_cP9a?kbu%0K`YvnUX3plPAed9OHi7}87k7T(qq2*X7;rHkV>;v zqMbygyBtQw)^7(^FJY|2g0U~q$&s~0psB3WlJ8gnp4+02wiW;E|J3s`?JB`+{0 z$;=JrU_Y6Jx4gpryO;`2Vv1H|jju6BQU`zol3%HALV-sXov|`#aLR2JRcDX4O3AgMNzAReTa5AfR@QyemRjEu;lx`jea0J{ zN=rWUQGHg~w|-rys=RhNllJofgH?vghZ=j;yV?S$ZN-#xmelAdvz)rMX>}Ix$Gak^ zT`f~hR*U^1dEMxvPlJ(M(FSPr`Rlp+>GKCezJssmnC;}oeNUc>AbvBDn}}yA&&6xG z-QY3FvFvUlyBTW@$kS;O+q6g@Y_5KQ3USw3d66{aFx3Q-1~UEOJ+e3P`4#moD~UEb%s}z8anJ#kcKrt%zcTGTWr_} z%uXd;CCCBv{Tf%5aSpv-%>?GNmaGj zSxi-^Lc1<(u5%6oz?LZo#A>UsUFa3s*?x~^IQo0xs@bi3e{=Wyi&*2WPt@1|kRvfB zy2lKTD?UsE&b$-jb7l`60Nhd%H{96k+pm0%&X|=v{?%QKtN71PsEL0&Poh%Qrbpjp zfTK3dMddB;QyXT*tZ}NY4)rUi4h=$vQLzjaKErB}c=Q1UgO=hk@ca-Fh(> zR^(Vao82^TyNO9R`sO!i1IQbhu-|NTUf*+R z+tb@l#xrhLU`C?PrOEX?aKem>1Opq?DE?1P%EV;3dmv1zct&)|uQ5EUuqA`9fWyo% z5+Nk?^V3jnc!THn`yW3u$)CN=_}9AX2~{^JUPgCD-K$|;RdRebFMW2?64zu5T=U@) z)#Ko^;|7*1(-EAgEC_JM%D`n^u1+kh*})5}?~PunTKd+-dbqRgr>EG|y#Z`Tt>|R5 z7!2O#PA?<3rK`1UjvZw-yN9x{%i3j3G((+5wajY^)bypNO;WAQN7W;>lVXw`F5e4CD%-3rSaF2<=-8?&R2Wotn)%YvMB z?neGLyEB+nF3Vnr9ay8qzn+Squaa1Jz>M$20Zk&wn~oi943_+jgB@V}HTNY%(iKER z)W7~g;;etq5TduN-QGdsF!PUK51aQbe{@f_e5FT1;(4$ZB~^K;KG9zco7ZC%xLJDh zt^WWzL5v2U#IN9<+hiwzKGpJglxs%n-sMBWL!@ALG7vK8kVhF!o0zASR;L+X6C8cG zmVK8QYw@sYs&(Sr71NIijb|ziV;=EREcHxrlAfJ&V_Q?axC<9ghh^xNn^dE2GXe)) zbl+3d^bq?s*Uw$Vy`wgTSE-gFnAquJCKm#x>fYXLgS>*9k>*K8T6RKG>p3u%If<~L zgenX020FcL>{&@Qj!NTIxLQ>vLIr%Ppx<(!#>^`}ja^z-rYe@A z!&Nq%irHl>c)i1y*{<7icfPYp1z#N)v9h4qTvoTP(ZS0Q#sk6?4mg1r9S33(>CSg| z3vNAhT$XwjD%n1RW2<_7*vo4M2gKIk@d@^BKZx(SuqBVk&65+s=cvq2Ux-XqB+>RI z&Pk-GjNF?X9oukOM)^|9GaFM0dzW&RSXumqTeO*AzEu?>(`s@Sp;yCQwL{I-qe85J z4aVf5EBi8+QoX2a6^#q3?NxNkulZJ=vdZ|gCk6RIU)_yZ`hWib>EO+7U1b|z#*@== z&Opn>YUR{%1V=h5MYUrm-F&@Of(=X5=r+Tz8BLmCb}ddzM&-UHwF>>D@N5fqwl6Was=|WQWqM0kT3?LU zN)eG(t;`z*PX7R5qtqJ{Cn*xiTI##DR`u=APR(50ar}bbFAX+RZbmU7m$r5$wFh6G zq)#(Oco2Ix?A+A(=z4vEHxj6xRVAy$uQ*lW+iF7NjeWjGirzf|MSaNp!Q`zMj=1VB zxiKik>?L1}a*nDOPgvtg+S!U7ZKBj-y0I%zxb`x&c5(?|G3o|=;H#CHIctw++hDCc zX5)b|wzB@{E8I{xSl6K`L9k9pOLo=@?AzawMb=iA*IplG6tIHx$%!C%7AX&40UEo7-kCvc&qJR{a+hu{d`}629@lqRl?m&nwSh+ zS7-u+wyDc`rN>rtV(CBUb zlgbk;Bu8&OGy#Tw&bW!bf>zp=Ib%@SF?_X+q^U`_y863es8GsVh#a2JPpJ~F{{RCU z_@#L}dUZ0JV;g%eBYrGe%Ta#8TP4?7!jvW2{{St4PZ3$wnUDNty-R-7*;82N_8vB- zDK;ii<7XDgTDVNr=74J*2aIb{wbHs&7^SLtSgOLL^2mEi<&_tS__HHcrXX~)DGMe7 z`E~I~Wsa=P*!wIz*8_FkoRxxhA`Vj_TaGon)Yrw2E!5jk2)iwKwOlT*7x?WfsoFf9 ze!x7_Unylf54E!yo3e^+u%{H_$$jcF6AtS!?z8^@qKc5rU*!u|7zK-ymxB21Rn87M z*velF7SVxwR{K?#@mQyndRFwfH8whkJdMHEW2T_@ezolLKXb(JA}zDLYHz3-OqHF` z(#P1VLN+?I;K@GYHDNv7O{r8oODK72aEh$Z7Z5)vd_JpjWm+lld{2;6sZ+>bQX|p} zFRF9KTnpDKrBaL>O6?I|dZP2k^o7$e#JBBm>R+0}Un$PoY|^r=0Zv1@19OC>*68)U zc8ff6t{RYv>$0}yMDAAX)rW?g6gat3oU0<=NsU!5)>mZWP`RUpK_&QmIN1$Uw>w6h z?(C+;BL4tSrt|)~wK;y3j`ieV*^M%P7z zm3J~LKo;uw%I|IDKI=*yg(}FM-Mu^IXeKlN02VhBXC()hIqEqiOhwW@xm2ZUsnpEZ z`zZyU`u8jfB?F7vIa@%~vs~>*uH>|l;nT6Ydpe@3*2*d!w8GPzwbhqm((7n?TLGTx ztEl(ytgGr@TPUshz~oGA3og(KsdX5M_gp`TS8Up??d7nX>!fkEa(%#t?^yBDDNgxTSbZulAYL&EU2Op6R`6?8I;<(8=4{w!>OnU{)06) zuAVyYru>+VkY^^b#k9ssxX`*b((o5iR%`O^GsU-w7Ob=@6+xp=(BvcRk2MPJTL;5% z25{4|LWNj@(Yv(4aCJ*SnMS4Sc47 z$CR{cR>T+JVS30!u#c#+yH6KNCUWoEW4ZG_1U~ihULe^m z1o%zG`21>3v0F6Hww{u@$hO@rnFe#^FMl+0P}u{DUCFBZCw+UFud#{Cci2^EZ?iRv z35Eic=Xliu=f!xeOvl_p){{Y9+Y}lfq-^pFkM#b(ccFM-> z8fZLzoBsf!`h0Dc-@3bwo-We+{G}<(Utb#-6_`hhsM%`fLh-w_wk1gBq{eq)U9{e{ z*<>`^Q&o30C=AW1fUn~E-Q^$5i@qqDngUtHnVcc6(iC3gzXjajQ}!^k4cl*+@q z9_qbI8#5X4Y=5=9bq7=T@i*gpCVcxm^fP`;1E^`JjL5u^<$||8m9;6wU^i`TknW2` zsM5EroRM3tYFcr~OFP6Bb}QW+wz_9R6%Fvs5 z-NJv7`fZ7y==te=B?Aj;(c(m@%tZUE@iH=X9g~f8iI5(1wy{--ammJD)HA9c%a&AN z^xA_O{z2(N>La_>#l?!0s>cng*~2S{%~M81HMI-5Fpk`!~fKaYr9lHIFvhjOe-117lJkxwC!UkkGrwzyZL z%)C$Irrveof61AQz01&W#JJayN_cI|`sH_Vm>FHm9sZj84|#F&IGYeyjZ;+H;4CW1 zLIpRGQO7=a;9P6FUB$AnWtE0dNQw81+It3@9c!}dRqlPuGd`}0GVJv1rpd?8rrP^# z!%*msfX|<3`RV7`zMegny+l)5Yw19Iv}9`RvsJSf*w@olTmY-_FFSUquOZr7;f=RZ z7TT_e-*uF1*v~;%EURNA7w!fd`&mYV@lzVKoDQ-pZrXiLE$hQ7tB-MhjN{vfmCReI z&39D>!j%M>HwuE>mYW)zmWnS~W%g3&%VPZ}7ke7G*Dk9>c=SDXs|He)h$!V3xlM(` zz-n`9+OceXGjNGwyfyvJ$cD;#pSiKBprdDn=zglo;$=|dwL?bq_ea)Ma=%dHEVC7c zSQ^PK&${vcAnWn%-$HyW6H>nc*~uPf2(iwh`Eyz0gZ9(NlXsIx1*}(Dw@Q@c+RW8{ zV$R~Pi0r|Ge+X^gm3I}#aQ4`Q$`iLTFE25eZo~IGFqS(tlnHYE;PYzNjh9$Emsb|a zZH#T;B^3o;Yuu>tnU`9v>6eRZx{!@&UKIht!W8FYQ({r2TR)bosywW#xj}9hW02^1 zRh3&8ma*XYjMk)T^*|@PMO@Dw59-*WI5yLbKo&C*jgMGq_f>b;^=D)Fv+Tdp-EYOQ z0-V2uiBPTV9qNIt2 z8v``Vs>QY5<%L)2?O@G;$Ub#Ep&n+p*KvLcgW0h^W7s^NgX8yRBd}CtO5KdKJIA@G z36aV!S~N>5croh-EiR`a?zwA5EloMf)?JW=Yg*A(u{l_*!?^=lj^@>MLIizrptS97 z4&t`lk#i}r_bybrtb5-E#IqkQZp3AU`()<{K@Rl*t7Yq0u%<&UI)%3j@1@;EiB*TT zsu|cTWw$bkdR0Z3@iI9>ZraM5RoLP)F6!+x$i>}(okG~qlyq7`&Mgwc8rH7D*3jb2 zeo0jqpsLFQHI>*b#;wCueL}2@kbkg7meWO~Vq?7ZCVDQt%nkQC!O*~Af^VnlFVD%= zrr?a)22`7i0F4!VufqMHLabO=zyQl*+`Wq%`8&FpR&uR==*k$4tl#q9{mF~9v^P1u z0!d|kHDt0{hqYVsdcQ1{;_cz=?j!d=W+6}&+mX0%O8^t@W&BV7wiu11{X_04R zGa17ziOsXt%B!P`B`U(}tKC>%Y_^v#NF9utg^8Vy=g{&QLZGx|SE$4Ja`A2YUrGsX zDuglq#>2=`*#WjxkQAAfR;)Pfs&S{^RBJhk?c*xA8FKRjNN%);$GCCN$NGGVvRSHa zbG;2#^6^EQJ*T?7h1H}_B5rG-Zxek_l6=pPXU9X+eLMHiexS5gVHYSg$+DYPiYWrj z4i@H6$dp-Y)%Bmt^|guKrY1cc?Zr!1BBeB9i)R}M{{UfScMO%b7NuIyyhTpot7_u+ z8ADpJa$(5(zM_jK+GY4-A$vJ^lD|@5GEaR?MP8R8Q=McWGh0&1b``E(e5+B!G_#O2 zInz~3#;uUGmMUUhU6SfHdGU{WB+^=mQ`E(tC4r-8!kmS)*r`p9%1S9kLuaUB8zn<7 zso!)%dRY()4YcZa?WEY_RkZ}&T7}QIisW8Mdk;n&fcb_GV2#ucf)Abaqwp|5n`&`+ zJ5~aBbj6P9urwCt->3=Exyq9~=8{fG!6J-|=@RFd{fwO}vqH zwbaPBlivNeU**R=#+0#XKW87z#5GAOFAr#Jl9UnjdAk?Viv^(=oly~?GRaG5{PiHL-? z7?rW$5qoe2;4b2A-wc%ROas};qzz{c%!*F^KF;NJ(3DueWzAZ%Uxi1G2=3u zkf$v|TW~`BZ=$B-9R17Ab1Dnhbj-)+RXI&lXOz0CHN1+si$^2K?HsK1zfs)v9DO%I z^36By`Gy~kgpP;WnTqqgkX*V{QrUP`u&%oTRhe%imnyQgR!mDx_{n5AT&t#w5af4j zBPzuUk;PNgD`-0o{k(Zbr zSR88E{+^U&N~}bt)oh%LG0NXztukx5%}C2dR?{1SAlDfK4mQ-)+09al>Ys6itV?XE zZA7f1X@Fb9LE8k>tsbYW_eg@;jATYi@k++-BQ@6o_J&b~_SZ|JS#{{&RS@IamtZ5x zD#^#Q)iQ{Ct>(w(Av$jd+_3chbRQ-t+|;NZC&VXmjCL}L2waoIGkxh_Dh1t!t@#g` zk_ZU!kGh~Vy9^mgy6wlma~VzMs=H3x3il4%KizGblw7Y@ZooNxl-wpqi*oGL^sJO* zwAPm;YR1*$UHa$S7N#vBa`JHj#<4_ZWJIuEk5)GjmVM0ciIw$3cHhd1p1hTHHM-tx zO0~;6zBSZQt;5OSEz>uX7RFnzwall*naX>7NEau29}?>ly8KEX!d`x+wB45CvWqM8 zi@R&j^wzARmA?f5k3ew0x!049SQIMQPg^#7UqzKKdaw#YdzJ5DZ}81HcP3p;i)9v9 zbj7JL=c-xTwyU{}Y>q7LxW>w@qWbMj+;8MIFbm4VcP z32k&!Qi`#~R%Ox3eLcObW0Vb-?!;=+zR2Xe;vVgH)tbsll?PGCOE{TWXb3u?AxV)KD)0iM)Rlii3?Uyog)$}LLO?Ex|n#(Y+nQOpYO zRl7g1nfZO@ayEJ-Z+GwGuj`?h|Pre2IHyenr@#x1}*(_2kC)r)J?*ILY;osp*S zmSrz0UY2fmqGhi^4KpJlcft;khki!(91lvK7>MYjd@ z54n9Y)Eu9-V%!>M8HDOA$scY?fPYlx8m30=rMIwm3e0Syjen}+?P_Rzdp~@p`gqZw z9Srg8Jq+E!mck&pk~VUfxtP`vxUs3B3)RXkc4;igNcr{%nUxhoh-H+}^Oob{S|@VV z2FpyRA(WhyWUcFWvYHG`Z@%mYWG3ohw2*Rc#|!FdXk3c-%Nogb9L+T9WzuzuG9d2q z&&#(Cyj=eMeaw5>#HrS-Ymu^-B8iEW-d3k)g_^M4Qqgi)Evw3-R~sc|cGqcqZ@qaT zHdijjTZbE~R(n9A^|o0^7Jno+J#HNx5~>7TbltUEOc^W>I)WOJz{hi7(b~P@;=ynt>^Ceac0$b$e5>1l;eW@FXyqXxjK zNJlv~T}7hBYJ(E>?soCn9hJlpy3AG40E{oyy|GuabpwNh66opEkDVi+5(k zvz1o;u32SzHQDx9TaAp#Wp;?k$!M_>%)D((Jnl-%P_rto^-T5(>a^8ujxuqvZL_A9WEM?+PI?m;!sbQAaDYo_|{9dsfNhQN)w z+E}qMYI&3CJX+fBTJfyEX?p0MZrr_iT+ z)hc?b^!&R@2V23#TBT^_K1H=Uy4;5!w)=fHUv74*arE2|G9q2Gky6glw#Q2#{vujFrPCbgN%VQz5YQKQG&{^^Um>2&5^m^JaZo9c0En6Cut0K$mTdOxZgmCh`T9+-@q}f&C@HyaKCFAMx^fD-F$YyN@ z9F)y+6xe9DBEfV&AVwN&YkN&Cl2C_3=Cz;6XoH>E`f=)v&Pu zb6f|Md@{qdYk<=llxT27`YtlcEaO^Q7MrY7c5~@2Se8-&;Adl;7}q2{>0Q^>P2JFr zH&f#+OqRgk6}v26d2jFOS7%@;!BAy1kX9=ohpNj|J7dIONV2EJ8$X7Rxcf9Bi#>yTQF8y=Af} zOJd_aP@9w`>tT9BMy=KxtgIH~EwOF8)o3{K%L_x%eV?s+KV289?45S&x5=qx3-=19 zO?*?+&us&>kDhf&^AM2EHxc;TWxdMkbKJYkLB<$7nqN})Qeln-tA(MtrCmNCx5pWFPw6(WjKP$>&fEOEEpAc9#ZRMsW0>5sC5^}OfJ=~Z zLKUm~kw%ZfGhIXkud_#?o+HCP2bercj*De+e&V=VLyK`Nt*q|WlwR3&-nFak0)|a- zCU)Ek>;iuUlFVdj{=JA8XNps8Z9#R7lVE?WuocToB}-g5^gKAHljGb4cCyQw#F*J% zV_vM)_W4|x#0aV_SH<8LBJ^(N!dR;=w-Vz#$N;68fq1%3sybXE3?&N zx>hSVRr2*K*s~eu+z+>XQhd)74LRA86;tNQ*Uev*2;}B3@!_{2O8wdGxnY!(+;)L> z?An{t+T4O!#u$)oRC$%`3fIXxIYj9n?8*NCl#QCc*P(@iy8MOI%{nK{CT>%8g(@6! zDmrAdw{DfHWB1-RJtg*@qgIX`!DYo-j(i=s=Fp7EYT5zJV{IUrk7lDkBaY*dZp&k4 zpj^gJsPydK(aN%?daP=i+=nyk8+B$Q7QTmxav*j?ZMC792sMI0mSit&t~1kHcjhzd zyR<8@GAq3roSa5zilrF}K-`lt0Jyr=<1KHc-PX*LxljgQUz|>T%^PXSr?yRD>M6zF zWovSbmhxTdIs1w58_Pf^5-0wd2Ny|;XBg%K$#t%uA}eZa&)-eYiK*mIo~LJ`NbgHLb0zVwH?f2S00jDjZPQyvW$x6*;HR|8nRfvPI$%` z`E=zjP8F`yt;&M!$2jjS#an5_t0I}*Mi#z0O6f}$`Yf*M-5Ge)W%Sq*t87&lRj{<& zy{D=99XDy?(isH~kxjZxn>pB(Upqxr#i}d0l&jHTwwf%NmCsQ}!K&K}PaOwO*HP2= zK6)6PKX{9&mtSCqu3WdK&qKV~O`t}`r|Y1yyEoQ~DL>rB?+{C5WBYv4mE{{WGk zA*}Lj&OA_kw~!x}%8j-X@(MO>Ax2VikFZHRzj&5#y7e9U+hxg^cYT(4w$=N+J@`Iz z5)k>V_l*AlomZM4C2GlDdr^?xuh~CsR%&;GxmCP&jW*^~W+RaeLqTTAhxp|`a~CtY zwP-9NU1y9ky~aC@;joGC7Z9a(RY*$HHU9vXyq~udBe<1$TU6IQLv23pN=O$s7h-G} z{7Jv%ilwq1iTRkj!@Wse}CnC0;#bBMZg=lEl z+}g}MgcKJ_?G_xCOaBQ8cz^5VS)I1)f zL@o?lQknG_%`!3R%%=;|>&6zN)fut^(V135WMP{{Eqx&}b{&!5D->H^6I)FBn#|){ zo2V%($sj&uQ?X6Rv{_7Btd(RVn`jmgjwOuhG43K*)RL)FL(ZaY@GYQ(K`d5DefO=t zuj*a(v*-GUK@UZr6ZcDTTbMkhHz=xN)%M;voR`|;pX5Io$3=$ADOLo*@=oGLpD;d| zACyzK{o{e%$@4K2#((2T`!W~#2j@@af^}U-?#zswsb$;RG{eXrY%Cp6aAW3F{4L2G zrM43&vx`{iYJdGIJgZ`PG{(DxzZ+-{g9v^rekJ^hu4P*?JEs2ty=wbkm|1T1xoZiG zMvG2bg^7$wmKKzKtY698rryoJP%f(wo;C5dth{R_S|byUP-ZYHO^KX1DacD5G#fAm zlr(MD?oE}WY9)Y7Y>_UxcX<}ZBn*MHsmikX78y~G^S?a2D{KO06{N0T+VZO)A_5F? zz|C$C6MxsObhD7Qrmn+gyLBqW$6e*n)eJ2AE{}LG->R@qGo^S*&*|2197=OEHbJ`V zt7w&Fb0kzp(^N}fyw*){b7;5rU9xL+ZqE5vV6B`py?`cbR(sXjs32Fs z*xfZ^SS|i)PVBa?uCQ5KE06UgTzj;e@~x?HZmFZtS=7B^+c=7aIS|uzPv3DDGNSKI zc@=gqqCL!uP3Z9BrzNS$dn~N3O*44+${{Zuut+(3t?2j|_46Ny|P^!N_2CeKL zyPnMn_pN;8OQD~>G`HE1cH8@_@Nmc4KG(}9mvoBv_qpVEsG1_T`?aP|CD@CZ)#%9M zVxvUZ77aZOE&SjlObp)B`i2ltj0`&CD{f}&LD$Dz!rGU>@{Ew0XX1*Y_JmsH0fS8z-krIaD9G2ICnD&JYo zS8~Jj*G9*#$oLGgF<-gD+RuK)B_(a!7L_v`@>{93V%u!~LcPXVxwX8ngvj)!y6(eM zRxVAuvn&VVnKiGc_NMLz`|Yk%ZFkr7meFXvm@VobFA;8S?&NpP1~KevaykN zJEnDPHH~xR;)kxJ$gT_BMQ>e;b`5t=r+U`M%C23Qj(t}mvRL%}4u_(R#v1nix+3h= zR;7v*{KK;=U9t~2_4pnaAnn;dkMYQ=-g7u;*nHRKG7!h%XYRw{et&fQsQZ)i#`|ob zg9y^*#BD9CdF$`1=NUNFaQp9IVf>RL8&$Tipk#!@9#OGhb=-+pR+ z?FWc|JS^5hmxtRaWPiyVsYA6V&2Pp%nibqw9~1Kox;6ZrX_Z(DkbwIkrCACmfoq`htjW z?_ZI2J$SivWi{2-SkPL(roBZOclUBKE9YK9A}7TjkoSpJNB?kEJYbr*a~7Z zt~FX*ds8ONYo~JbX1>KgT(1R*$XQ9Rb(!=$)p0GRCie8Y!Ifnz^($xzQxsM0hO)Q6 zBGj1gTg<#Bxw~0aft8Rer#M)^CPLYZ+6!gUi*#+MTM%3&`8QDgoP4$Hx=Wta6l9Yu zY8X?EPWw00c(K5{I?5d^uOSXA(<{3ES7%vWnORG1KBtWJE&l)n_1ChoEF*mfK@R4n zHJS4*`9+N=5``?-%Qxch%zwvt)zlsbD^45&%cN)2vLTw5ekt;PQ{leWtnI-f%snu2 zb(QiZr|x1U9!4C^)7ctr;c-d3bD5k0Ed1lFVo)1Co13|uL%pHDZYqL_67TBUU z%I{4mU9KAal`jx{5}?@2<1skhN!+_!S%)?!lQeiB*9P(zVk~~w$9GjkoPf!xS zP^vh@w6b>!RPA3Jx~;C~=ghOVNv?O0gy86Fdg3#%J6T<+Ev}24VJ4pu>$GDrnHcsY zTP#SPpuAfmyBD{Nq+{dD=u1@kU7B1=0c$cV$xC=8Imu+U{AU%=yj0qja>jTPlvlRc zZ@ZO6Y*xdzhe}z6cG{25mx83-xVEePM-lbaE4@|ZCuZu6nHDI=$)@pc9WGw0YkQ7D zOm9)G0c;CUQneiSWtX{YZ96{i+kPjY>F2H`dpsqCa`}QEGZc8msdy;VvJWo)7u1j} zt-M?KyM5Pvu6)M?k>Us1meT?Q4-k#F0wz20u^W)VKX3kW_q!#(KQj$J%uo1oyo3J$ zBmDlYA9Sbkc&r6heagNilNzItZbz=cKWf{KH5h$>@obN}Df@iSlUw#OAx}H0^^ljj0f+^*@!~Lv2U$@Z}DXV~E`f>LYA?7SRwy{8kg=_PqfH zdH0bIo~YnP?XbB;%Z=&xEI60bW%bw+jF&O8sc7kn(J`vk*tS<=zEv|DBO#G}K^>OL zg9oMMi&cwV74hr^U%N$FRWCY5ua$zWuQ4n(D_4-s4X?IpqgJf7<5-B4GcK*B#y6z; z*RFj~V1|ZfN-SD25~s|@4_ysq1#ebc{+l8i7}Hg^*7Ri3(%#xjGTT`BM6=Y51~(%0 z-HmGJq63kQe7DnUz8Z4qjP{VWDFf*14D9or+^WmQX@Ai(Wl;UKe56lM&38*|`#*Z< zI+#3@z#7hc(%p zrrN|Zf+IjouxfJf3?GlgFv>ka>J5R9ms5)?gUr;_6Xq$@AkJlHa6C1|nx7KCxZa#f z^~bOYe6HYT{=#N8$BUjq-WG?efuly8k;cXHsHCnXoYNo_x1XE7>d5=CpM{Q`Wq4gG<N8|i;e{ow!L&75H`Oi5wPhIy@ZF5j@sYw} z-&MWtC~T$evkRPV_A}&qy-h}KyzF-Ov`?4u?jJbdbF67{U&Wu6EH!vwd3s`fiTJ;W zTVwwKWAXJd_F}$`f@H;&%U47}8_!yH!1!%)T8G___%Hlg?*nD|w0cRdVpLrYra8wIDnl2_op8C+py!BjPF4t4^*wh2#+NXg*@W<_Yje&#;dG zPa=MVA=+1KA@A@5G#Hmu=F4jkRZlFeOL;5YsF@d_KBdgRZqZ88tMv34*(mO&BifMP z9TSSJd=kGuPB@CMkTc{ujlO5K-H0V>Ex#k&=;^M#1k)LZCH z$GMe@GBbI~`*&4lEr~6n{@xYWOY+qMTV7GW(b%y$G@q+_kEk^zE^ULG5Fc>zJ&P6UQ1r<$UB*66a%QfCPja0Ym5ds)cs>0ti^?0gu8G4S64FzHihjGJpUW><9jB(__RZ6$#dVsB8dC7ToV$<}uP3VinJdfKXY z+nuu%8QUa&CbyQKyA8EJEL%R;`4~!zWeV%-^);Vh&IS}Fv0 zu(}Ta06MbmslK*%t6|!r#(Y}!^qUHo(tfRhOoV7ISOzms;(FH?QSpA&vcy`fvRRnB z{tFte(3j(ff`$Rbw9I_AVcnhTjIPXQH&ux0*py@nupJR@$;Q0og0(kova5S$F2dQ3 zjKT5fcFVy30O$1ln~4z*kt9jJRfO8Sr23*PUgy?sRSXZYFo=;}AP4>TB({!OWx!D}GhvjfWa){{R(zpMPE~GV1*%=-Bx2DMc@hTt7WC4E zXk~$H)z5WoF52_1quj@3riAXlr>}Q5ivsY-0~feK^$b$ZmEO4cnihRlJ3py4a=fL; zA4g%brDRJIh^vlm%)v{M8q67IsW%LJ>&Or3>>}aZz*%iMA5o6rt{u#ATSD9MPG_p3 zt$nM<(p^D(s}>7ucC*u~vS#-wITn{@Z-4CmAG7UULGwt`7TjoqXB25J_@Q@g1~0>W zYwoTucQ~IJ(N(WF-ApK2QEf<5LbaCg4xDp9%i}^0$3B>{(O*6~Q{P z-^St~UUb+rPvQix@+!jn~*Znr|~^L!q~ZM z!sLU@r1tNyi>asWs^hpp)f1nW-m3efh){J3~^kjAsc?aaFBt z*Ki@Otk2_eX{n>(t%|t!)j8TBviP@hWy=dPaq7ya7t_F%V&vk!PI1SW`K)6$K1ljp zRutpDp6l`MFGfu`-kpt)9_;F_yDuWQ7?othjoVbrF)RStk5#kj14K*lvJ=$Zq4fn8 zS%;7671xVqG|sNvS&NbO_pwZ{R`UE@sx8URLoVa(9>eqOJrGLQ?nC2Ir9C)kWc4aKe-9+E>@omfa{dr6?5dR3e~zklY`|s%yHfuEwaFPDRJy5gV$n>y z6_(z~Whri#CBRz)7y5e#5X{(Bw6_siO*W+GWpHG8HYlCii5v_S31T@V?y7xL=-wq+ zHR+cemZdG0;M!~YJGj%8lga*;!AH>X$n@H-v(zw6G~ni37r%*oBOH^1U6rl2(U302 zbY!h%^=2|*xSGZxsUlQvLfP2nCuOb5^t8x}k97@om(y)obefy#wrNWi_RXf@>etNM zIo#y$*gc2eOw>d7Yfy<$^17Cd9A6}lw;SPxgtU3HQiamjy9GdLdqkz+RgVV;`uHwqv5>6_+#1FwZ<;LN0o2NKY(~(3k@2bV zG26|C31^rL6LP=gPC9oRKz#nbC(PfDgP`g9>AgzrG)l8;v}R&em15%6!n|H5Iq$_N zY_htZt1NSk6>BviyB^=FpkhKAZvDdD^fXi}SI~8BS0>F^rg50X;s6WsC!+WOcz+|)({Y!@CyV~L%d0ZLXUuUjBYs2i zvc{YhrVp zpdxt$>fxnH4*(D2 zv+<|QVKw7==|TQS^B2Ui8G#-U=JOcGuzk_jP>sz*Vus3=`s;IBUB=q~ z0C4m_k5S{V=y>U3&zKJ29Y17;9}thW2!4EVUy-8}d9)cx(YdwwSD&5Q!M#(h7s++5)(=SUb$I4RHUqP=p@fTHNEx7J7C{`a& zXkObYSCZ{CSk=N_wHNwCC8)BuvaE(dc2zU$7{Pih=TlDIZq1D?TUK{+77U=E>Ebe& z*qH2cu)FnoW-d)HW>0B_^@V$}?R<<8mbGGAh@&i#^;F#NflcX)>Dd^J`Cvq|72h`# zy13O^qb2RBaqg+(SB^vaXtffoj5{m!1+ZD$vdZz!u56kmxz};maNZWP>UX zh97R=gHR7NO4pRFe%pLc{8Qvszhz(X)BgZJ{{YIfxI9G%rlsqym#)T8D9TG$ud|Pf z1U~@EUsB#TF108z#Pr(QD+%* zFlBCNK4r-~!o1Y@Ej-GsHJg!KQDnBhE%OWp39n|g&~!8AFrN?}j1K0x1^926XX+=3 zy~}*9ehr>#8ew?Rt4%4=HcI(N;Q9rw`1HsAJdvwW^lerZ*gVsq9#nKlo&*QZ_CIra zFBkDyTYa9Km00=M{hO4|TbwsI8Rl=_CXwEM!>P(v3RR_NWbl$ zlVs6kRKy{1Dy{Qz?(VS5u6M0KazctNr(EjSBNZ)laBa3iTMvQG%~4 zL5Al?IU1i^j?tBEnDnZHkHp_rPjDQn(u}6CHgzP{)jHeh{H?fUV+%b->TAKioT+D~ z^0oW5C3oeOOoYAuioQp@uwLkSS8^OW)Y*x&qb>1|)==u7O>Ar%MTZ|GmdU>zslOW4 zxM243W^J69`wvR~NQQ60f@`Am{nfdN@;pn1;U8@hsK13rRxg^-e8KS^TjWO{Ze@Ih z6SuWHQ+A9VK#I^jA#4fuIn#_=J2xe&YsdyG><xvdaIZ!)5sZ!FBgm^{`B`b2l|LDJeYg%5+~wIIh|XGuy_a%GBigXv=iN$gCse zB)irP7O!I}s(meSr+(yojEfRuT8=HkR(``qzp%>H+O1VYUx{k185UJ8%Er|TU5I@) zz`~2TrbUSN(~FZngBoVy1gCszxxbU#v-Hz*UcnE{qz0JP>FgX!{s-`+%Kj_z5q|o< z0O$`(AsY_5EH=3{{fISfIx{A&ETdrUS_z{!19FuwDCzgmTSV>;wfSnrKX?8t(I1Sq zvKphsgtO#;%VL#-%%QkhW}0hpd81eXS{rl9%c~6)JXpIQw;gG`p>YdxihTaJH8-Qx zEa5B)(RL%v@20vEU@@ZZFU!x+iws|%*8C%Byf!_4C8zC2?Y-)(wrUd)ZBoE%U31B= z>~EF1g146VAowHg1o3m^{G{LCy$9Kc;b8bvDDc*Y1nj7Q`JBC)_IZJ0W8+;0H*U3} z->Aq;p*z`h*N^H;lP+W{Ra6o5wS&VVt1PnRnD;jp$W>95k8FAq+GFHHb<|I*47KE>HdhS@$F;=e;~N3UU*29Jwu$g>8yy9vu5I0B41(;TE4ZG7(B*JLSdTdAozLvBWv-{!O?`q_{aRM zJBqtkU*e;D>pm)j#fp5^e4T8~h|ua-uz8nP;?Qczukvr5aeR~nv|YjEFo)+J%}Zrg zL1yEpDBBYph?3!^v;IpHnjf-K!O_%!BaaF+T{RNV9C-p}%F6!3zCzUTUy)$*V(}-; zWrxQ^Vx;hRd=>IFH45*px(^eS@K@mIYvO&n;kb6Emili@-wW~k8{}Yv<9-uTx6%)h zGyp8Dp0LzbZkm5hg_<>dGmd_+F%MZAGKT#KERQz9I)lp+1Q#MTV zuZVZoV9$=b^KKxttrn{BWi6dzvs|pWnE2f7#YS7HuqAfoBI9PeH`F1F>BUmFg9QQL z;?KCtUdkfna#5SwgEEYeDz1I9>{3r>En&^Jn;PU`y`2P2G8a550Sk`K7B|9dPpUca^)fu$TIFEuTXiH(ZVO> z%l6d#N<0T)ft7fbpEoICkT{xdm!~O96^HQ$$?^b%eZLbM;iyYiC)n|ulGpjNOp12A zOeq`K4&r^Y^doI!4f~M8KWqm=bq_%|=j49YvhZUawK^XR4*DbTLb#I3&e6B5-lT&UArUH*S($j5yq{M|gt{Kqr&$VkzGZdJV>2OIAn@!ODo?{=rh zQ9pdLsfRA=)~`@Yr#dV@O-sQ_q{*uFv$Q7(bg-z1)jD=qLuNuXIS#~RF6_3l z6|syWw+)A7PMyvx++(}yZ}v{McdN05)J-Hr23d^Ljq58dS$x_|J%&oL=ym!lDQCMP zmP-z)vklFI5r+x8>t)JQ8?(loT8ny(Ie6A$W&)1*%^M!OR;uiwxiJFoxZ>3A%WA$w zmLOZ#whlW>@x!J)Hd2(`lEmfe&s8e(E5)rB<@^s|>H7WQ%#HUtkCHZUK1lOa)`>ih zDb@BJN-Xht*hkV*;&TRaoVPhg^EWK}V~x*IPqP@FOYwRgD2|g+cPsGBtYI8YFUTLX z)%Pt-Bd+3;wQWG#8C9u{fn{sVUsF=mHzbGg8=97{oMr+h(p$%5a!T05BS-CiQqi<4 zu;b2zBiZu-@J8n?6QT&*_#ndupzu$X2XlcP55ejCA_EV|CKh7`_4};qaolgq{{ZCw z05utr`2N+88@d6b$Z(~mM)rRu^E~Vg!QijWn$SBGh}+_$?Ahe6xUfop8wRE=oLenr z%l0V{_3`ct(%xb->LSu-3d>|;TC0w785Yu|vN76sDJxYqp?q5GnOJ{neNrW6&fPfz z*uXQBNjBplpG{<7;W;{td+T<$QSs`weL5+~#pXp>D+hOtd6p{-x;Xc-+F6ZNuwa6@ zKA(4Q)9%Yj{>p)8JaPpXtob-S%IY`L7b)XpgVqK<^F|-MB3vi#G!u?{j(#e6b80<0%8E9k;LH z#@AoSe-{NV zke(GzkP8zgtxB82eT;=jZ^?cXauz3Tt*c?YF&m6Lo}2Orieaa?hiY~VKLh0TPmOsF zMAdcMCl)q(e8C%01o_ZKboAW%+Jr^+=3vrq)G(0#(F217G&>Rb{ zJ3KiuRivavOVanc)IVJG&#k3}4~$^!%$!xZjwS0I-l#Ind&(kYRK|-|$WaJ-Ed({S zk$mK_mXj>SuH>T$tDjCp%&#t@nRy75XRC`X^!%yAxm_4H*38*88!bAgD!x}@cWvcm zVQsa7=dX6k#nshamCJ0gMkYetJ5|kH5ag@#sK&0gd$5I)*T}|Sthb$3CAIxEHIKNr z`36Om+~mA(oMzzJHygd9*+a0h*6!4LEHM-mQKQaxJogMI?qSB>e3dO>3llyTubsqp z5npgQg2icJD+RLV;u_72kG9NzDBljcvrvvujZKM-Zv$$ESK6>(=)N5$qb#v?DYH|S z<;(Xr>oqqe%cv1S)MecAR-1gc-8ID2&0AW*$HQd;7N(r{6}&6Ue(}qUwLHrf9={PH zSXNkhbS5l4YbH3+`2a<2O9gKkNSo=uAFhk?@~<;-{{R5zkL&>-@Po)B#8WllB}a6! zg<^US%gT`)cp@)@{{Wm#aABf!vwmFZm9(VpP|>aDTDKD4Kd;=^O-)aU@zmFd&znlM zcy(SYW0E2D3sKiDBhzVoS{`I!^RA3b7PS`lEXsP?`zvAF#9)+);-#~bdls+3*`d`fO|g%a1vpjCZYHH=zN_TN;ysVt;$S7BcU zcVrEicUn_mvZM?2$!$3YCmMQ{&vmEb1E_raRvE5>R>xMZx-ZERq5Ng_10Cyd{wHz& z05$wm<8cUJyAD^v9~`3EL=U*kbQ{YM;k-<=+Tgx}uBF4k+-bO1ZCdh_JjttazYwV= zhS*;O9m`bCCRJwTqjLIrE;WTq>4PCy8<46L;{J8WG~bQtIpkfB6eK{zKtY=0HYI~` zff156v{%@^A%Md^Acx^$h;5!#N5{6R@%=)_XL=cxv14M==UXZE1VspGX4&dnOg#pJ1rXhfpek6?%L zCX*ku^XZxjPZhSvFJ+%vhJW(A8u3^@A~5acq`NyO9#xnw9olztdVWN|)4P(aOS@HB zl~X=qtgiHz;M17)`d!t}<`m<4mCtExOn|uf>a}78e9Ek-SCEdDrWjts=vifA+j10R z<*nfcnf76^l(D74vXgQ#N^H83nU#!a^({}=v-b=h#g(>+)}SU8m7ff|h=5NJEVX0S zWoh7RUIbloKbFrCsJvPfgt9?tAhw`?Hpl+}j<3l_CAlJbmM4~2erxe6v06P|E=~=_ zmRI104L@4srFnhjEw9wQ&``<+8guDIQzER*Z$?DT(3$8hlOi9}$e+qxpy6 z%}>->^XwDm4uj?4@z5V-aKji+*X_RrmF_V6Q*aPqF_&XrLeJFPPsK;yj>T-s@WhTF z!}F+{0F$OZPWGNszXq@-NFvsTf993uD^iE%GR`|bh;6c~6Bev^*r^;^kXe!<~) z+g*gz7IOh|aza*0SUqls$A8zi_Xn_ikD0!eebuV@3FGlA0NAxW@#Km4s!a&PQT_({ zeb8GEkiTi(rx0ez1bwxyn&BIcoLlBwR-;#;PnZ)@rz$dW#kJ$I%NMr5%9xnGRo8Jx zodPXJQsa=Xz^udeo9QZfixdJ2MLdfstfNNOzDl1eI&ollc;L~L!(3$YQ*f;KfI;Fk zJqJ(P!{U5~9y*?jKk)wmC*XAXNnZEhfv6irNHH}n`AyDKetsfNef6DRnfFdVUk)Cyc5&SQ|a;n;gXZ;Y*=0gs17yQtB6&s#F8%_+NC*H zav2oHTw4`!s}jsCitJn7fmQhTDKwLIDm)#^)9RgBTr##bMtwNpjn0;Pn{``V=FCew zl!s}X-l5nf^yQVuZ&S!??dUr1$3gDjm$U7S0Jm2*{VX*qb&Z0-OwDLNJWHE^L3M7cRH12j~x z-4ERua#LA}^T$yAtjo=H6*nxew#9WT^Ei-ZyfM^oFoPL)IL4+j%@IB)%wf}AL545D zFs`Qh9<-gMzdGcH$3^%tK3Cw+-B1|+0Ggd2llwn4=&2fvbnN?to+vj|tV7Yc12EIQ zW=f6*x$0Z_cK?q?9^XH)GXU9;Om%)#Z%O?@6u8OY+S0Fdk zJ!mvtNA-F|le!vWt72%j=DvQ0l9dkSf@XDzTJXYbc?sVf37BG`q@1O*t3YNtt(1 z+G=ZL$o~MG^bq^E?c>oGaVycSW~Xj&fk}e6YtZdZ+fLgVz|JOcnu2-ue9cDyz>qBB zK|gRc>J=NdnDmwyZKkfUry`)^@flc!O<#JTl^pzu%QdjW zVx!7gTwlfO*hSi);_#ROoHrV?8Co(O!5t?N86vDBM@OOg=zc4P12h(@X11y(Iy zuZ-v9lXTg`gI>0Lj=^pvy6+Coc=?CN&vVhtIt&Z&2d3_HCB>UES_k z_@a+dw#4t^WLa$$-CjNwl~3oL*G91@%0!`Smek@U&XKZfmAYEJjs?Z6G4d?f$f{X( zEv@R9%JgNMsHMK>dY^vaXrpqq`k z#tqF)O-?YzUBULj0?kcEsbOEVB>H(zAQl>dk4$QfRwv{H_=n+-5)5?=y3@6N)yD-R zpn2Njd~A*|plQU``rKq_7i(GxV(};pRaksO4)kX!!5Vg!0m3#qJZx(O?Gp_|lS$F6 z&2{|`mgo+O8uC`!Y@qL@OhjUJ@K3`;CR^b|Qh1g7Tk}uIiFe9tN9~OnzS`O$jrTZ) zR6qyG4W-|e{B9aQGN#hM{8iZ6di-ljJT$4lm8{&w*K;zmC+q_U&d7&T#Q2ZX%-*^# zAf{*JScTHYC46?lhQAeLUrS^E0FdS(r`IUBf3(GDUaRY?AB~NU79Qs|s`Q=9YC)N@ zm(dw9Q@CEVC`u>&R9dDUDhfwA>BnGZ^D$ z>>Kf#T$JBkIHWS*bCWPK((2586np9K-X5|v0aPw zty+_kt3{?iV9HXtnT2P6H@YeHOoPC~&_?zMX8I2@s46Wr_WYWw@)SiJqAsF{6iq-O zho+$(%|JZr5$q$Pz$T`I)YK_B!4v1iVYzC+gM56DbS10gEaT$pj_Fgwg#C~s)F7yk zmFgP9L0J=o3#i|bU4g0d(5B|N%_*IbVXw~_#iH#d)tBkhZBL%h64fh9F~s0u6J9@T zA?dkRVG`^B{6GW0B`Ljh{Sg2KJ4C>|V;zAjZASk9i2R}Zo8s_gXw0l3-ieiTA}NjJ zF0>+z!am_G`=+%kJ{ON=b-$Hy59WSo^I`bJKYmH&UiN&SXN~pV`sAsiyo|PcTIK-Q zv2^wF^u#W?vDn{w_)%gMOe z>Yi$dVs-g`B8i732n~ISuin<#16AAvkb=N@$O?x%dae6vHx^6Hm)McC| zrl%1#8E3~$PBU8QdT|hm$50OhZgHF^Zg8Ec!^*1Y*0HLa)L=*}J3f0`4~@9gM@g*~ z^1jM$vX*qGDH^7&r|lO~$KW|~C&x<0Ala0dTwrdm#O!|?8RVW zQZ0uD<&L>jPWu?F2>T496Y4A&4OMjgS}k@rAE~c)TTQdGj^gZa1$5n_Z$(?2MZHWG zQo`k}+v$=D?9+WpM7JY|&sHh)%?jg{e0Nq0V*}oQ{-$w$&A6JX~B` z8Syc}IK#I~TpVU9OD@A@qO5Wo2K2j@Kowtby2qi_T9%h9s7p6r@rm^H+KElHMtp-< z%VTFHxa5%enS4R(`}fd3>W0FI!Uf!^U{Mr%H#ax#KhvqHs5%c}=pw-k;vrswH@jZV zO-*&w*OTqpo?^yb#ZMi%!W!U6)rK8|I6BVQX!xdEj%BJr?d%aa`xKa#2bN>5sW>V@{u7>Ak_>N5Sjop&(CC10K-8haNFqk?Y5`>8AP|fFv;BH2Zg>9+P`x)I(|GVQK^u^Jh) zycpQb{hC$`OAGdIP;xA;CP>h1W|!h(+5*{9rI(nuMZX(O!;zt$D7KN^P1$}k#avv9 zQx@EIs@oWScozQv2E}yPb1)l{*=nobYR#p!AVD%IuvdkBoNl>Axp{Pjcl+!lo~QaT z7j0VTd`(0VAc6_MX6E4k0H8mkQF>}|j6c79Hwl3IbS9>zgb_fRfKQ0Z4Aj#CJi}B2 zb0&?8YF37VBUWaitnaiy;|EN8&ayH5g)n%GJdce^M%a=|PuTweip}X*tnUUESeMks zC(UL!h<}WDl_zrJfYr->*FSKKOnFzw#NLnby*@Yp0HP&6Tjl*c4Q28}jKRf=#pmv8 z+qiyxdji2Rm&2~QR%`_7^B zbz@mmC{!aW9g5c1)m_Hq0tDWjz52k5%Xd;#1xdkKS zy^^e(P_}Bc@2gG}I@^kP@W>Hf)t%z-ikP(&8Gbtyr|W8!`p@3}twnJ!qQjAe^(|kg zSSwHV80Gz4wtIJ_KA)gP^&G66ng%|4x~pO|ICYaw9oX)Tc8{n5d8;1i`1J1lYpRsp zU|aJ7j&)sDMm056n0dlf7R zgVdsC11qr}FK!C!Y4rMrlQ_?gr~ZKGy##1xroXiG)YnZNYp$k@^FBIjujK^Z`U5lw zdbJAfJ$jcQGm8clavhwMvwc%H4(lV?g7 zwVzC@m6JhM^(&|Q9Hc+&EqK16ky)qL1I%vLTx?G^t&}}ixQ}%2Zc@~3lNrO~5^So~ zOl;c#x9ROS(MCei>AJ4me^AGEyE7iDJxEx+j2xCeonIPpUxV9`MnJl|k*UHVFsWq~ zWYGQWkSp~e%FJvlUb<>Snz;*Yc^2yIw??$plV4`4s>eMIvLPS)qs%F&}&%r~df(Y-AUZ$@Jq(XWl^*^3tv?s)iNr_$L1foa7fnVQ{*C_tNP;XAQK9!4q3ziAYHAA1H3`R4Q(ZXt2t?G>3MQuk2X#*&X09kK6mBMQ!>0{Lhh7n%?1$ zoktRqo5cjMaY)&7=hF`=ZW^<5eomShSo;*{RNsBoeU^wm55+$X^XZ;Wb$s!`mNRwu z=sr4lFm!B?@|P9QRrK0&fyc745)#9w)Fkv~#As?KRg%rIB54{TRX(1h8yV4+udaP*06H|PwB?cM_2dfi zZlqt8mrcJ`9<|28vL8=HY^ramaI$RRY@yHp063YL{p80>>qB+Haq_vB!^g4=1O;fm zml<{e^`JiSt{3CcGVs;$-EO9Og}l)FHMq5j@i!G6r)yJcu-Of)W!`Q#HB7!|+65uAFx`_;IOXiAAMbvD}$8?OSkaZ^xb2 zE)eW=Q{q=+BfE2r<|oBk66xr!sgvqpE$~JfglbjMc29AI8DBM>%Lm&>n(XlYn#Erx z!fD~5Z|4tBm_5e&E|ynSi;q$ho9La^&-9GkC>S*SClqN*J#B{BioESH{X)uH>*%&q z*dy!{*584CPd|}n$eiI?+=A7hx>Hka)xbAh&6<-1 z81`56*3?c-`0T!-SS!a=PGI;7;8Yux1XbMQIL;;!7(gbxn9i##&Z4tts#XvCPEchQoyh!52T>j?6EZQZ zx*tf$GyN8HU-7?CXg|gMMt}KlQH%aD>NEcU%zA|X0Q0`04IZ27804IVOLF}}x&G@h zB7c#viT*`X!Rt5;7T-h2gVOMAjp&(@%nwnfbFm=3VzRJNsi6wTUCmD1)MYWgY>YJ& zPBPfQG!>oW+1i;%2)!Wb{{XLnTT&wm~%749xQcGPUlbX-4C?;8^xu$s$4O$CH{=2am&VRFY-I7i+`m0qTlJ6GzGGF>9`Es6ZQnu)YMq8 zO+yTE4wPN$c=XJVUEF;8>@8!Mq1siAa~km440-hH7L^bp2&y0wu_=o;7pIsegeoU( z3^>#@e@VfzKls)YOFzcS%#TCONc4KHGgs?=qmFTZ%kq|0{#Au^`k(RavV9*C$ljOg zbc1$HE%g<=Ix&_7ghte{A&dl3u9k_$anv6n_{(cjY)&V}zhWYeKP_kFKXFWXSlIZF zS(^=+er43CxGy`rgH*8CI`jp0?HKi5)?b_XU2ZAzKTFSidS0ET@XlfRQg9Lp;d zW>swU3=gWYFl?%n`m~AaR~O}vksYvXpG8B|n0XYN{-&zvzMPttnsJ#bOVu&1s^fit z44=Ey6CX1f#;nL5X^#CrRgP_eP^zC)$~RgB*RXuxE|F%vqo>4c^#fUHs{xuO9Z5JU z&k$Im3swhN$sww@m-=Qs!!OgV#cuMvztStdS&x;5-k1JObrZGe-m_jtHTW(V7^Fa8 zJp>-WB8UXkGW#p2W&Z$>R+A^yvTiMDa+O_dqtWsnQ|MHQU#8>NJ4&J*O^$*HC1O_q zfIw#E;35JiiLYUnR~WFC(?zoHLG>2SJ=B`Fv=0D?G{pTDt z557WM`A<$zZoZLQ)$>79PEvsc*5aK{1}B75G8<{V&HMglx_vvO`g!pk1g)7Rk8Oi) zj31PzPi`$(-KG_Z^vu(Z$un~@G1mN-v5nh-tDcjOiIr`5t6IJd?8$?WjKtFo)p7M4 zYU;8X=+`nh$tE0~kn{*^s?|zwgk;jsnANJ;O_J;bYrZB*S5?{d7WH4aH8zCw@IzCR zUANhhM90mui8wYjNsG%r81k#U5$?*zm3o3$ys(Tk(S228W#hjrjy2}lw=(&()2r~p*LrwKz9RZeC3Qr<(ns|L*WxjUb7yq<87VCA$afFU{GXb?9Uk?+lYDefhxwrDYi9H!sp))j zFfvoMaQL_4U|1H+rrAJA#6N9-G5-M9iQ{bFWkeb)@-hz)JgA>D;Cpw`ZOBR7*s+^_ zA+J;5H<+e+eL=1jwuM%RmK7gUJzp&uR>7~ar_(8(o#^~)uDf_9MU)oKftL97Rm0Ug zS}7TIJu$f3PJlhOg%OgPF0L`TWm#6<8I~n9GTDWjRkvnkV=Y#mBS^D{<}mtF`rPtzER-zekNM^y-*bMU;oXBC$?UXe+^$SC4I;yNc;$ zwOdNq#pf+fT&DVZVt+TRuoU~K8+up5LGC72yowd9Hb?^e)`us%E_Mfy)0EeGceYyI zA#%18G1aQ|Cs=Zp=-M&9*2T%u^&CpF*LG6=nf_6IBh)kKwZ65d*IB>zcR}j6h@P_Y zpH&7`abSknmKC2{K$iNqr`Eou>*ncYuI-6~c5C4J4HQ9DXb*@?+%TBNGeXmIlnn!J zB<_S3`iB|yS6vc|Y!&)=F>q;v4v_{eQ|PFN)9NzMO(Fw*61>o2*bLk-%N7-lT;n*2 zq7C@C`HSjafo>ef$=s&yGM1|K{(O1fN0zSDms4FnVG#UE8&dBhB%W$aKN|9WX^20W z{1ZQZB7PQldZIM9&Nio_T&ljHptu^Bd`jWmuX7DK0!X&O#QwGXkKj^Bs~7GWUkUi@ z$6wb^-%CD|C|&5QKh(QSk4(s=mj?AY6}rIF2L-M;-kh=U?OAPiqN7~!JJLNzF9#(8 zEODubcV;WwO=CS&eQg&S)`vD?Ae;MrXIz6APUoXvMOL_^1VL;*oou?Cn&oek#+xhW za^mF%##N^qCp9j7y4E4W|ESF-@9YTGoPIUJkCT!$<(hWbC9qPu-9(Ks8j`>U}zdKSZs#r-D%uu zR%O*pe_P6|)&5m#OrP>P?n|;er$%|Je1Ff(2YhuamOQdf5(;i2%cdcWkwd@S+-l?bRJgI=Dmea z&zJBw<%;E7eaUC$@I~MQfA~`iG5l1uv3cQrW4GcMW*1snUPY^a_eW$xm_~>o%%GlQsdSAF-X$G@{Psm zvnR7%o(f~?oQ*&8STasc3z>1X=I5tkrcB4ibY8<&dzmO#E$7w*10x>!>I6)GQOc>P z$P6#dz_E@RSza~{Z5EqtNZICzRz@~T-Rb7SF)}Nh@=+_wU|Z?0ovNkS_5)qn701mW zhQ_#kHYu4HUuHd*)RuaMtUXg9ue#e5h+u)I@6tT4u7Aiq*bDbjKYqg+GeYeTAuYHm zPHt9v}yHiHhGA5OlzmW+j4Y|2C#R+1izV`Jl)ekKi}Vd3V#)3U99Q&F?jAG!Ql3sDwYte{hPmO+P9`a2cfZxH0%jx5K? zUdA$)!BYxkBH3n2DrDAE)Kvx7e8cku8=j7yJ$QdNy9H%w2hO@4ykV_%ed$bm;Nr2) z%5a*a!T#sYqVH0KjUwifr4`_v(s_$CN{WKVi>Gtyj*Ac zMitXH({95frUiWL$E%Xjgq2P`8Dsc{5eSSS6J2a=KnZIt0zOvf)LEvrrtD+)>ycP4 zdEaFn#%cAYxH4sV#U(zfrc;!z6~UKMmJ4WnV@6Cy4GcX@GxzHhcPjq?$usoEZ_jsA z>KZOZk#ibTnGNV;nuy7%G~3)CD+rbNhs|I5`Ge*z^tV{ccA$=YG*WbqRqy-jJ`eAH zL=uh6rzR3RA!o$pKX}B2v86!q@u~9?#zSV9e9sU=H5!ZRi1n3Uq~z?a1$Rb#gr8e- z#mr4{#b|5Aa`>!gV$cZ53tjmfePlN^eZw(w-x}P1R!p_AG87!P#}<0x70t`21B{auwDo3k<7AJkrR$F_g- zFg3Q2ej<8%)W`oO_4qlpZ>QQqeYMT63=mR zQiagAG^*xFWxJ`OF53Y+E0=rN_#ld@I|=fTuI0F;kNVnftJb|8y*lsLq>Z&B?@z`N z3}9hcL?SqhCcJBMa_c3vmj)$K=OzdQ4mR9E^1A;apI?949j= z&AOwD>WcEa)#GT)jAy9gg9 zJoQrq5f9kkl8*!A4bO>E5SBM6gUy}^^A>!!EzDCKXJkoc2PQl~@IcXVcSRY)&)P zZoZ&htR$$4)S2m6?DgXxRI1k@hnU#G^$i}jw{{THqsQL77E9>d^pJA2!;3wDzw3zRx z%`8q)Dw-3wIQdXSOJHSb>KOii7*Dfv9+PC?6&%AgHh9bw=VNIrPvpNH0@k(4hTsqh zs1|yb4OzIB)@irVf8?W4M~@JgW}_@C7)us3^P$hrTb5*)N%?3bU2=-P}7y%8x1mQDEQexz}$yYI%T);D8E`HFTM#7%+!0Ii*Bd`+2NJ-$Hyf7DW(M*RhpWD zc-Q$JFsIag80z&rVm8#z6H$SN7{WM=unBXD#zp6#@wbWFVz`-)OVN|L$T+chwmtD1mrX(;S(v}Yk*}z*@d%H5`gf!)KL>tCF9!iT3Z=V&RD6njpake zjuwS!ZYpZ3GmOsktea)n*W$kS07D8_IFlC=_LyFsbx%=70_u4Hts1uz>Tazq^sQ(S0rDr3ty>_)_pzUaPd+$IvC$kQw;P{*?4v@ z(_>{;eLd)wCP7?#FB0sk(52X!6a8gH^J~hWUy)+Ab*%Jz3|Z(8{Ga5jr9Xpp+{GKS z9dxPFk4`bx6g%NK%}z6f;{pzds$y1xX=Qvj;uZomgHK=~w9`NbtPpG5?Fp2;SPh&N z;<@H}MLSCV$k(xzMT4O82-N=oE>3OfM_C8(p|+hh(W5MNjR^AE6FS|-R^4vXx%R;p z{Y1DK&U%UltPMt4siHd6{9DU59Lc4W*LMSws^bqX+Fu(jZBSLGYet(0fw~xGVBHx9 zSvI!MpyK(~gN}{nTE1FY46n;q@t>{1KVJ}e0$KC_0G@_fXYm6SqtDfS6w42hEcx6) z7r<}%8NhSU$^hV6eoc+FOONt=pA+}{*Fo1S(rtGbSv89CE>PaAqTb#fT7RfD#W}de zbF;aNpNPl;42rBDVTPT;hmQ=UiF?+k)!mA{7N$-v6{LTURc!wN^9TjMcTG?Rv-HsZeKA*#zO^!gPJEwmdl?O48`$}@dOcH-n? zWmSGXw%1-ZeI~q%Ww~@%!w((LXSXeEtz+ADMe}M%mSbjy^t$oq)8s76$jhi^WOo-S z$*lVfPoG15Wd8t?um1oaKOW2!-IaU=fIyp_xKKx~6o$Fl^Qp(eh-*_jDreKA?FB8- zXD=nASWG{3^FK^s0w0W{{FEmq#~K+Fy|dHmRIR)LDG+qjQ5(SZ{4c4(#BLX$=Zop~ za!$I02xEz2&N0_u;Br6fRu4_CA5NwpO`q$^%Q1+8hu8#5G{YvctVb(Vt&m7gj2<$!vV z(!YRX{zJ^v{pjw~6z+T$JLt1|gW5EAF}6AN1G4CGOr3{15+RGuOWWs z@JCQ*&tKD=%woBA8O+7{9GChmeLZ)osLW|jO|=t}hA5`UxNzZ+Z>q}5_tqS%&@`_ye8gzaxk_$UH3w9gHfUO+$}dl+ z&GfrF_*hPqE~EW(&!Aeu1$V3$rH1)?%xx9c*=*oT9c$C^qR-1-qpW(}GPnTOx0A)C3-@Eai&4v}nd*L_>DhJttvhYKg_w7`TZ}2nPot)g*rwQ@SB}Z*HYseL z;WSrd?N+kfLIPcrM7z}NbhXoO#jMKk{S4PniGtiRGQXSC2>wpLze=tm?pIt?fgwr4 z8spa@^U*kC&Pg`qgyVJdQB^VIvH8nLDM~s~}7{+PNY)1Lz z(xO1+=VEsX&gUSlNI(2Bp9qH-q*;oD{XVB+6x3wgdVB<(p$e5X*($ioZi?MKL+!`O zZQuSoUp#@}Fx;^r0%|apB*VGWf*;nH{rh_@MV85_^;hH8}UC2^E|^02T<#k z2S&28#uC%~gQ1@#PlrEclOE3(KJ7gO{c`iy;$!C0Wvzzeu#5&aP=MuQlbgahrzTTP zL9fHC&fVxjuCRfJ-yOWM>G^TR=0&fZ0n)2q$J8M(N*buyrKti>*e2h}c0Jwq%R#5ChSk|hTz@VzI~ zjBiXz#;yxlwwY(BjaQXble0@h+gWBE*FZ9;Hs8eZz`b*^Y0w{bPnZ3BX+M9b9`C1S zr*AL!3`FF8KAl%xT8fYfuBI}R4O)#+-)43^cA=;l+aem;6=}rIFBX?EDTc8-LU!kB zcFgUFY1s9K;Xi(r>Hh#uVahp z{{SApx0(J&j!kIu(p{{>*RbkXq7ev&H_I&425cFv4m+P66mB0eLo81x;wY`B6cEy_ z4l_ln96>&mPo)}cGY&gO#wJ-)gHWg~r3ytnwqH`v`7V=qRQZ&@gHV9^FI zk(PY)Jr*y+4uqZ8rHyYWlTp4G$O13pxZe|JY=laO+OfVL^F2OgVkgbNkHac+to-l9 z@jqR4&{v3K;3cJfHz880vyj=5m@GPF6;!k0S;&NIQYLzc_SI~p)TPB+Db5^wQ1iSN zv5BtA0`7>l)a9{w!nW`Eko{0um31#gny%z2Wa7xey9;`4mSL*jQy)?E%xl%_0ldcs zQE)+So%oRs#NC_pT5$V07`ULmHc^WCSm*tjnD^sYEXKi$j07~;8jOo77v@;b4lScE z7aUC5xG#|}ZMOC8GNY;fH+Od%{DT{_pRTxR&9PHeqV6jDwG7}4;T#ylr~3}x zL0A)roF{0`+~GJ*+!SoxSgyZS$nIoUUpeVi{XRZ*3v=9@YNnFc<1cMq{{S1@)Z@4o z7)++k%(P}o9OCC>qUL&Urut3!R^nrfdcB4)+$%UkTzWwrzcy3ht136C%f~1P)K3lI z&LG8JBto7-jw4g`p#YkIL0mMfILkhky?r{*rLK0si$BPpjvVv~N??)aP>Ac$%}k~7 zkSFfHjK7lshtE{m1{hAspZQn_Mo#=+5(mPS}X3@MBoS zQ*|f4V%h=jQu4}?r_lnxO7+5W0H*f@3ZyB@1hhn~*)TCNXiBNZ)dGoR1il^n1@kp6PJ~+PElQ8 z*7-m@{+10-8U#Rnnwp$ur}<0q#>cGLb`o~+Pezt>;|Q4_8AHjHemTE8_AE$xZ|-<} z1o+hbVm7V6T-RL;qP})5f6V(V2B4WE_&@Z+P(bE_*rPxea{;s9X!utGwPfpBQFoAmUb!8pu(LGM4&OCCKz#wI4 z)xa7fw=YYl5v90wTm}WfDSuI^?a#d(a;jwh124t0$bPnnaxyhdziKu!$D+GU-j|Y+ zuc@wPIja1kE^B-@xqmN7v$vV+7~fav%$n$aeHNlkLr_8OFimtK5jf5;tkfcLfo7ms zHPejH>;6}pxTDYb_By3NhKzz+;jDi@B^1hN+*&ma63Url!x(7ek;B*V21Ymd&TrFY zKjghP*HHA-D+auW;keZ$c%(^+}z~@cn=oHEz}m69&(CI^8_77T~CSrS79&c zb$2tAeVXWF^`9FO3tBeisSr|wqvYxQhmCb)Zb5-_nmrjLb>O8r9K zNs)z<9;{}UdUd8$nKdo>w}(ucY(gY!=Ov?H@n)0AOKTyQC>M@dd{*oaP(iIS_ z)F~REV`2!@5e-HK)IiWc4#ZV4P|hSuyugBRnwpySzk&Wke|IzdQxsWlymffdV+oP* zn;HY>AoV|ppAmWjXYOuS=4x3yMxXid37BG6_AP&PpCq3*9me@BwE#~sepBQ3jsw}2 z3JTAk*G+U0myG!7c4E}Np!HpMrQjv+ULw*xOA#_?u^yN78#yl;+P_??y7MS=O_;^9 zSJkpFr32X3U|+(Kbrw&hrNdL&l@ddj5i`RZQy%qPd|(+9idOTvbwGN*HWpQUvlfm$ zqOenJ7GzY(mu8zHdfL}(m4n12wDi!X>alTqe@d!uOp4tyNKkOxS57xJ$8y`tt{kj| zZg`I_zZ-R^$U%kLU&>_I^gX?+0s`-p3OV+1k2TZ$dn;CYb>B;q{$1&fem^~m&)?~b z{7DuFKd)0$Q&Urn)YrFj{FBr>7~*<1Cgb>nVhra2-JI87Ge$n5E~4}hiI-Nx?Mj(n z+Eu>a@;qbD{97}*S123YeS}6x)y@-$hv!pJ)(Gt^`gJqufS*pVSH^JMTJ;rLC^1k2 zsjukDZWU+Q+{^y}6vyr0`x;pg!!iubmJ_~G(+^M3o7hp+M&a=Xn6vkGwKw+uD+kUr zW#e6AP#wa4>kpD3FnE>uEApJV89?JQt~N@Km?oj09X5LA-H&}%REc+_;whP@)G?WF zyRqsw4)^%+UFUZeoXm@^wH=A{&r)nFJ!2-Ugsq1>6|Txg6=GeE`mY+@GPO`;n9q-} z)I7Hq&Ovf(4Vi6XpHWteRt2WoDOua*zei+qbu0C5Pt@)wW#_K?a710txXfw;+fE(> z44+SSs}8K{l`||;etl>$o{NXkEM&1_<(U7SIQ%rFm5PRzbke zEy+X0cn|dIGVU7Z2u7h;u=wf6bBqhPD-*US2n12ke?gwLe`^OF4Y&GrB8)zU7}4N{ z&lfk0!!3mQV-HWz=sIdsS!rhWksuy&S5s5<&uanmf(Ej_babc4PET)!`Ca|SR1VYT zuN@WijDFw*2gLL3_@5^u(`dDQLlx+|(=#6)$~{V>GksGQnsQ!@i@gg6V=D^I)>?7M z6x}&bnMG(V$HfYU+X9Q3SmdAwAzY_y%Q30CSLrIOaoHw$&ZOhzJ0lzg9IG)F;tFQf z7dIhS>X?)iSssjY8x>f3kJKdXzZ!_{VbhPmQ+Iy*uEknCSn)ZuTGnGxnxoRYD_%9d zw6gkI%-UIL$f?1^rIWhrsn4n2H;Mn2KhK^ERJ!?>R^ zf!u#kUOj#zbihAt$CJO>7E%8IE?@kJM{NAR<4B9*YfzcXNe_TE?BAZBGvac{7J8-= zUWM&O`r9L9Jy2_6Y%54M(T{o}781)LTHbv< zMl!yU@=>eL5%M-^y%-+Gt;3@rC!|yY`hRX@=ZacH8-%|RU-pZCU z%uhz92XFS3~$4AYYtMa7g&Jhu90ZSjYSkIQQk@@&Z)*#z+388 zwWaaxO;_FZ1QsQqX|t(AB8x zoTldBKHbgD&CXMEl;;c1b2l+)uP-g~ZpEv-anrVh&zP&ZOAAVSmNymko_Ux5 z0E*z6+t^HFE@)molFK(NJC{a>p*|q#{{WE(Mu`X@W3KGWX5E0J8jK*BWkBmL-1ob)qi{~uqNjB)8cQh$y?oHX9F(4#L18TK0CF4k7Jox|F9N&i$)Mxk>H9B_bMdOuf z!n6e#=o=%xuU;xws76+~2o-N$5S0ikdA=P zQme%1s_*`R8umq7@$yDr`1URK(dqS3AH1{FeLZsP#C!1Wt21#8 zCOcFZ;aO>_oQfrv+oijSuO_xq)VWN0cV!E{7OPl?gIbg))MH!%bA@s$mHLWk=OfPL zc2A(8)~`&isp?6Siz~l0u06Em3oFOuM|3VeO;Vi8w`Zv!v;P2|`o%P?y9)TG>enj# zitESBsE*I4JW5rIrd4m>zLv@+``l2qTfRrAhJKOt8^^cNKjC`mzGZ)nV&5`-7u4{k zFZl@7c<31G&DNozFhbGc(jNv1|1oSGP6krL8zP9043u z#ZAi6R-jEqfI-kf6m&766E2>JVxE?uafNqrUb2&Oa2O{2`}gbHsj2Zd4BX$bpF-9b zKVUWW_+8FWye}Q&w&9H!M)`SpkJEiu;tz%BMxgm$f@V1gw)wIwFnBGti{gtvD#wTL zIchhVsi=NHfWTv)wO~FM@`QT_T}r-}Ur#|VK`~PL;Jw*fARg~L%5tow1P)Z#_mY9~ZmdKl;)&Brbh|zsKjbqJ}WB>V;=mP57%Df7b$IxrC+kh-kQwzVPw=+%!RJMQ6|DMGA9ZqUK6xKnNWPJ zg5xHxFOPu9Rw}he2QG(uvWk66kglTaiz%0#u>u}~H_TXm;5r_jjDLg}t*DmFj2sNP zfB3az+37j>&xw9rF+F20xSqL5iRyT4R_ZLAH#jhy3<%SUP9`#)cH3YP2?9PvDKGWh zTydTLPmy%8+wxx%(sD02zL!=ypR_TGKI)J_nuv~yHLOKs-`tEO_JvTQwP0h|wGzM;LPZQ&=`jesR{;y3ktitVsO9c3wp=eqbjA4c} zA~MTFx<5k%`HS&41Pi%u$}ZsXK4%ZL$>lW+^D6t}jVH@|2HZUdPm;e2(ab^Q_>1y> ze|y>Mu8R#+61ef}wI%sB(zvVX0f^`q*f+PR2~6 z-Y3-pOIF9Rj=}Mcma8-`dROa_-8&YGajG+mq+af;$~>DgjSr@H-jvU6l;`5a${;oP z&deUjF>--ihom>Ct4eKKC(+|UMFLxaxIU(V^;UBhW4y7kS-y#GRL021mR*u7Ic&2k z{6@vWTAg!gjAr_ehJ&C!-$nlbhz@}2a)IG!Qn!|1Rb;c#?nCsp>dZ@2HQDr^_g<$= zU-FMp5Pz2EiT?oW^C$lRu*;49S)67+`3`0F469f(+S4k#npx?&mdtf*N8Ct~}0xv~^4yyz(!`Cjo&)6|c-%W99GE&iIG&>V>a8DC+b90p3+}zyU+}!6m zPE(W(IdtDs)$B^gtACKJ9o(Be7tsbXpAniCg`sYS7(~|NEM=FCOU!z z7b#v>P8FrabkD2iIol3nETbp5Z0vcVw-V*N0sd z<=h30>`x-WuDbU6Df<_o{*412DlxF}ULQrkcz?(JJkS3CH-cyX0Gz~w{C5r~pyAgO z6%s8=J83kNlq_c9++zpI#5;=w5PJkjA%+-wI`SD5@o1)Q1JH^7&fHm7sd{!;Y(2wM zr1OR!}QF&=JdZprv-i^N1L16JqUmq z#%eOg6DDM9ZS4?4)SZQk7xJ|E6XqCV{HKO*g_k8Elz5HktgASJYtO(eDua&cWFjMRGj=`GB3m1TlI z`Jx)yJ~QuGHAc?2d}+vyfr_hLD-AZRuIoWLVmqVCFwvu8@ocBHDx)_g-mI)^rJqB` z9=fHq3By9<}(E9sA7mOJFd6MxgUFU|(qIxxT(S7+Mnt$d#C|LC|#(AcReH zF!a4P8^InRFd4bH$d-)nOU$awe_r)$7Nh*(t*@wM@_Qu}sPT03^@3fzQosU-7K_rWg3eH3qusrFYS#ko$Be9nLYtX_Yb~ zbue@t1U(XbK_AJ27-D>=^GgCB!@tXXPt-n0i#Hhg9!c@gC-9Fm;%~0{YHkd)FkgwI z^yYmM*&ox+t6NcQy6{zwyQ(K`EtTW4!jA~LCAI?DI-IJy6vg7$;iXvZToyXZF0w7u zF>7&}JuLIHZE~#E65QW3TTRT=;jptEfUcarY;2+_#Z)hd&6SRsG|^UeG{nrhU7tya ziFp42US_VLugtL;tI@@cjHPH+hm}(NtCUxo>{lv+zg3R*-RafjOQ^dN4p|uu+{aAB zI)|^sGsnNt+g1p^#rF?y#0G92n}??39|Xe$h9{aYSW{!Qw&O8)@NE?GzUO*sX9N|v8nO!}H( z$fQQk!%6<%(`Wm?N?70IUYH^O04Vh3kN#VWAN}zWZS{K}jgGHP$Pk{V*nPg3+QAAkVr!za70?0)!AJcs{ z*nJ1nS}&kuR_Tda52s1=$r}=~Gd(C+8_=?hKjWFZU-6vN2l$p;Pw^Lt{v$|<{xRvx z6Vos&i&aQGKy^7y&CSBmtcv@aj%A%kO+Y524ND`Ll`>D3_71JAyAksHg6p3~)nA7j6d_Ur^YrBE!>tH!H55;iwg6y=L+qyPQZE<`G`| z4oWSROS0}znUAsR92e_qwZdcZv2oa^riU+p^-DX|h0EYmDu$oJ(XkkjRrQ-Q9ZKfc z21XkOs~*svnWL+*joJ37uOL`{n-?k{PT>g1N%ePzT$!wB)MME#!O2^P)zSuioN3Ia z*0UbF!qKSoCa%%J+0soHV<6(7Cp*&c1iN~^i|)O7t3 zKVIAx)|1FSH#uOdxTRwLScp;ujE_# z0~e;}DavjG0h@u0CMy}rZ>G%WIZji#Ic{!lZ2L7e?c8rMX5%z&nt)AvESAS6WgW}T z;r0)3gQ56uo{RHmkw0MQDd$hb5XI;qF+LbeJOaeQE7)Rw-=2eKuDWU&+rwj*jgpeF zo5Gye1+SvPs%K{#X1z;l%mrU6u=$knr!t3)MiaqO@fh~BQI|>&P|D<)RkX6)Eh^lfOIO|A>G{|-6b(%bdQo4 zF@)#6pWnNS>*A07ckkTiobM++Xb)Dq<*cC@UwYf}5W~7lDZJ(Ew2Y>`iL4_^ee8bU zWXA@1Px@_8m1ST_=9boG^$DcSY>Z$TTANz7P!po9>`^5fNmzPeS&wz+F5F&EysASA zFx$zRV7d9$PI7eZ>Ax5ZK4+ut#!8PT?(q88$Z?If+yl{^0JH-sw#KYKW$(ACWlq!B`aFS z@aaQ#{>6~W2nr~;XE#jYkp=2Vk^{^)@IRPH1enYj6GxkO1#!^D9itErf0eJUBD?Yt zk@cla5=f1Q@5XFR?UpT#HRw-^!yjGvp)h~L-+^_%X3@<*o!h}eamWwM(3+~1;nS}a zEF>cV0y-_d0<3kYr#IUuh1$zfb1mUJ-Uq=33cRv~0$VZ*wb8TORyCN~qRHx*P0lf~ zrXYb-po)&wueMT@h(I;mGnE+}ob-`O`Uyf0rTwk!)c(q=UAWO(Z0_)+#N3mjdOZ{NZA)RnaZxSkq=^d zgL_Tra>d&`r#cv*mV0{}zGnA#6RbJmt;WGjNsf5|jAJ0bDboF=u(YILOXFQCm9eZi zo1$tJ)2o(QZc1ZAVeiGQ@#dUNjuY8&WewY2p){D_z zr#|S`GeA#bEGNtK4ec)$rP;TNA5FD|KUT--7X=V#0#vFYAUF7_azS%u!MJR%e_pD$ z)QEpam85XCM{ywB>Bj4aR|Pc8vmj{<=cenaJ;Zvz66lY<-#zX3QChYar7V2i<#lCt zxl8_q)fYom5Bt?;GsinQ-DsMOZ_&GAS$NiSgVk+U3+#HP=iRK>*Qq{G>Km?s=t3W2 zPUGi|BC=DupL}goyoR2BgxnBDBc0%h498 z&`wqZ|Im9z?=N?*H&j}_v1M=4vmf}aq7kVa7$l@+UXQNod(A-gSvdsH{nguP-B*D=vI9jKGPR7|(t6-w3eF9!92 z5@-EkqOHtYK?4yb9%i6vSWz1>_Ygj%6a5&4%MSftSsUtS)9xXLm96f0q@1c=+FyqpQrloVa7z0pX&(|BxVTj}pAhCe zdX)$C$Q+%?yi8B3ya{Tav0#pAlH_sDws_q}L&KuzAS=s`_GReJi`;Zh(?rDn9cw<% zz%h4-Q+A`9KeR6o8@f7Lw0bC_G__ZPrXSg;EDzf30ekotV0BDf0l1DKipZVOLZfxp z$3XD4P4JU1zosdRi-3dJfuI0*IMEnA(}cDM0h}p*7HJlN5*P9WQG{~Wu{oVXQM3L} zB1Ij%GcFDN5>wgt*`G)g!?%kDJ2U6=wL3b6Iw3nv`tx$iv-5mO<$?pI@9Lw`o}tY| zr&x3NtwSRpn42WOH(g1p7qGRL5n>nWm|LI?^T6`0h6T>yL`PCWV9D9bM70EH6j+07 z-<*1*E5@3Sua@Or-2Y8#N@OQ%FqfdA25+ZaL{yqf*l0nFTvRdop-z3+IERHUynvs!_`QMr6hz41rr0KTibDjexc+ji9Y2}Guv;LTLOVx)gd3*~` z4IcSuT>5Ah!5KjWVZT_WYNRe(lz9E4{s_$usjd=4srfe=G2-`%XJ@nIcw#WAs`!%c zjJPQRj*H1r^7T7q+=52!`82NYQ4u+^Kb-1G8CdLWP1isCiWZ!2NlgQ{rC(8H=ebLZ z&blM|32^D{1N?>f`DuT4tUmW@maD2_IIXhq30~&svm;kS%9@~#lac^Wq7_F!P%ELR zx?oPJouZm28)5j9b-41e@R!oYnZ59hT=i?E3M-Nf$4?#_3r)K;FZ3WQS!R{79@EM> z$3vp^lou6lbaPgJ9Z09MLncn&c?TVnH)joB58956E? z?nq2Qj~6`Hks%G~F{z?e3g&kXktP{mewhT9@B?TA{*#Pr$H&l3TXRLFjN2k*ulK z8|4rEQqGABY2@2lK`npTqTcf~&eg7tAO$$JFG+jSZ3OFo^C1*2l%@G4%8%NW&D3K! zi-#*lb(*c-EK+d7^gx+;jy~x9IUa+G{#r+Y&I-)?;>tkI^iA+rVnik)ErlOISSW(#9EJ{K!Lu&OVz|mHGR{5!4!K5 zH2o42_kku85nq>K_5NTn^5BuAyj>v-Otk-7ng-67U&T1`9&`CtY>c&DPbLn2W(@9B zVo%RFudawwd&PKmM%X$Y{!7Vy*FGRjy64d2>(X!$B+aX-SdL+*=!J_{b7Z#x|C5zMeEt`^wRQsch5c=)_HAn{yno<@4AX;-gr>e zqm3Y{S!M5Lhl5M7>J?(G(5<>m;m1C?aJ+j*}eol0{_l zzZWNDynZvCv}MgYI|%4O3R#yD5_(t(LD`&?`r@z2G)Xr1-y$X4=LW9B14Ic;;Of@d zC7H!oyB}`F;Ppn55Yi0?M~y9z<8L+y2TI(xcCOy#G~s0`4uinhtg{Gxd6S_XkLMgD z74~Ycuzs$*XgTxA3)w|RbL#s!t#BKZjBMsdCf`f4+a??;3Jt9WrRHIo0w%^qF`Y5q zb5vGu+hVk@sZcfrL&wSJ?6-^}nUTnT|&(BG-0Z%KJZ%7?lhk)39UHftt9 znH@aNeKN5o^KCsDpHq`iWYmrjk=mDPQtg>f)oj^9&e4@m*ja0R6Lr>yCi9mWmV&T! zy$rZk3{X>%A!TWF$pd2H+E%DW+W$V6s2(9ccIX)`dV zxnWrymxkp5N!$5pjNu`i%v2Y+|xOjm;Re@q@~6TinsQFVpo zhT}#G&~2hxOm7<~waJnU4%vrw{&yzr^&|E$1uM=ipj$vKvjHV*gu zF8as3**zTh%2A!Dgk31xOE3PL`@0~&sX@Q1bDGZ!%mh?jyZL|Z0@cUb_UEWWaQmr3 zf3CbA_Bm=pxZE-9>MSTWiq^GNJR|Q-L+Q3kSZzjr>3Xi+XjH`!{5|&bVN&9hGWi(| zA6(IuETb8cZ$gAPDe^g$ttj#HulXX6Pxoo0E`KS<-gDN1Qnd-b)eM*C9*_Rr6`ma?Z$;8af3-pf27ARszfr-6u>k0gZu-?h-SAbCQ_8cXl^8L8P z07;Embyza)AX#*6VsAn`kna{@OJsnDz;ewRo&t@($>XfU%~YBVPg(w+c}cQsiXhJH z-ScGGWv`wB)Lp!xMQsE@&xB?JW=^ny+OJa4$mxkb$}v1!Uk8y(3o!N-j_KjY72P(8 z^AqFXg)(<>1&TJiTUu)%2HK~H0hH!6q7efkL9jrNFvbT zE03Ki8(P__AIR?~H$cJD%)6v)Ypnj_J3fuN^{IXr+N+Jh@agc5d`rOSC#`Pcu2dvd zKvsEcrGI@*>6Z3a~Rax|}s*Mp5@S&sx$nqh=EGS9zWWe+B2l8R9dyV!CY(m^IG@~REp z_c{fhW}#K>)iOxn% zPD(F@C;6kdG0sa%WEeg6tvGqviT=_0A~lmo90HdDaP$qU4T(O&mZ2CEw<{6eT*{6G=j*6;m-_~OUM+ZHM^*trnYbdCCe&VkdY;9rah zq#kI9)*5#(;DNO!3kxiY=7^tk%nfYyd1F)$!mnah_N&un?)f># z$)*-M3Rc4W8Fh4)J?i!AfgO5V!@NnM!eD(f3mr}>7<+5KuPyuqms%votCb?Vkowzv zfzR6Yg4vf6;4v+o9XMF7XQiLbI1=M8mE911cPNuIRso$t zUU}SyfCNt9_5L!tjHv+}5~>|29$$H7Wo4@V2^AjP(m_t&ciWSb1@ITr)7ddNVT<$! zqOt86M*xeou8evL10tT2>VbY9ottJqQ}yQdPPw*yJogkuodu-_-~xmwZLWgE0EepbvEx!z`uVKJcHTJ; z?J^%l=Q0}cvu#SZkbTVU%FxBPlBa3nOQsH=y@VH6_kN+vo}rT?E!BGwP%h8D#SuA$aPUZLX=pU3QfAfg zsCA75yY$l1&lD*arHZJ#H;K!Y^2Nw;F`#9;otDe+m%kp1+Y0YdnNKVm_1o%}3P227 zbrCk#1EXdY4@>_$c!Og_16?MVy(g5y)DV%g39P=EMv-0tgK=a=;%rGcwmMTuYxv`x}{mir@j2lUlLs92zm;A}{1A=o>c{_yNCXxK^b*P)Fun)(GCF8!Y8`e}FmbpMhcFUT2XvPQ zE>$}p4DyCrjK!@kB#czw2mVAE6|ac~(@s!w&y$0|xqUM&%@P${nPKmP%`SF6%4hX^w0AB$@*-7jol%HQ2kO8E0l zZD||>pl}bxQVTFnnW2g*Psj_AQX zHKo)y%Wf(lao}0hUvRm zpJ;#nrT7QJUO-eOtDt~3F2QM~a;I_SSZNb3ZpPWunC+CZyyNU^tK}v=IRzoo$l5YQ z87|R*hgaH4MySz355i6>+2R3{a6+Quu*8q4uJ&GxD=6WXlnb09 zcm`==6GBW&)DdU72De4%E-I3&V zkl881-b~W*y6w!ks`BE(wTx=9X-%x3WQ8f3RTv7jIS36}XZf0_)l~3%={aY@XQgbl zD$;qjs`>2~A9UZ}r!GCs;H}F0JvVNyV5!63DHqhVIx+mu`OF5Dmab%>min9I&39-` zr$!4n4fDyHQVz5VTh_=G)dzoVe+-{sF`C-SG$u^AvQ+BU>ZfA%e~JR#G6R;rLAS{C zL356c6+$d=%gR6jQJ{RW-XL<_JYeFUP#UP#5@i05KFnjpt(~T-CCv-%?2)O8(4vkq z%9RpUA=0GRE3H1{8H{EM_k7U5i4B4k6?JyVe-NM+AF)mLql~P{ae6Eedhp4q^saVt zza)I`{}aVhJZ|v%8DHlcj;0EwNMc_!x+DJRJGJ4D7(TG%%eNLA)Ty-mkW8FtPTi)o zwWWIlGc;_6`hlS=oKH(OQ?^Ol5>!rD=Huy7u6EQseu~>*nQWsR3~)mz;Ann^mu@+Imr7?KHa3Rd>+V1N=VPE(*I0 zZDj=-(4DY3;8qpAe5Lx-_Tx!!EX|Lvhcgl{Nk|W#Q9CS!Mtk%O`U8;2thqXW`ee8q<>=y*oaego&oR~bVR!MCkKu~c2_4ho zOkQ#+4>?iC{>HlE)h3fc~O@7v`Pdq!o8_3aR+~t7ulj9Ccc`bf^} z#sUAz1Q}uf1F1+pR`K4ZDX^+fm%U8yo9DY~ZtWdwH4j01L^VpL%F||8>k1)=8)GCg z+xiGy0&L=tfpQ92qR84xta?k=xr?>sV?|!W^kxo>FCQwfHcZL1BFbe#Nn5RI*dYp= zo1BU<8gY5UmB`WYk}gLCglwZ6w3`aoF*CN5M&7WuQ!gdOL<~HgLba}RSZI!(ZraNT ztwiOLI1@e8(gM+Sqv$!J!N+RV=5I+&Lp4&zyam#flryOjtEL2s(uo^|ojs$3jq zs)MeGGoGwVu_DiCNVHNu#snjmT{U~6qEt{1fbRKIQ?)38sY#gpD5vi+X;*zQ(yzY? zobn7wa5s!6?{eHpF8UCjg2d**^!T|spuo>lJSfurmDZN#<=QICQvUCQHEM3GF-mk! zN)VxT%-z5@jUI5WllFC-N;1i87cydBnl;GrPRB%;ykhrKmlRoh@y#o+)vg+NGP1Cq*j0ojf|zcg+rl{+m)>^SzCo)@HY2md+SDd8L(h%udGzMNO{&ZD*ZlN z%Z=UTv`jUewWQLFMGcUQ$($y$`$JCP&OUl?7S_s|A%!EQ*1qHiP8_Q(OG)Ku*WLL9 ztt81=aUYCqBG&darR3Cr6!&0?XXK?ilngMn6} zJc)O6RGa#1w-*kn+kO4Vj*@q^VO8^c5{XgD24fc=vWb5Q9(gVeFZRW0oIf!7*q`HJ zDqmr*Z3!9if97aq(%Em2xfBAV1Lgo&T)xq3uJW0xD}&!PJGZ9CYTqjYrNn5(leF)p zRGXL3iXd8KXmb5l%sQ-Mq$qt%By|jM=bt&$9%495>W;+q5k*pAdDjGO*IthgZnV~v z1x9Cp%dmb(6)Z4o#Gz?JAQ8{kqnCx?^UxOt5Hb3UdZYM{LSTytW5c_IjH=gOMt;V$XS&QY$JaS-X`vZ64I zPNO<>XB=Iy(20EG^9EU_w=sv{o$E?eu0NCQS_qW-S8$KNdo`g0T7J`@)>c{fbUqjOyhgJK>o@^ z4}Rkq0cBQ&ul20XM^@@D6#;{Su8M4%gsEdVkDHf=a2G9Jli>Y;+1byyrBy!_wPA+B zfH%fwaw)V0X8NioYs3)ABETEFA1;9r0`*Qm$`kHw6SwXsnn+tS#WJt>7sITG%Vnxm zJL_(hv{fW+^qCN*ZWqwjQPdXE?Hvkm5$_uRt3^F2QIh;E*>V3q>5=~Zcx|erF}&tq z3`1QC+?CKjS5Sa22}`<0=y6S9riAlF|<9 zH6K0@+^d#An6~H6)ijslzW4jfYA}hEzx-kNs|lI zKf!#4mhb2_1(FoSa9z_}k@_p4bZBV+$Y`U35=sb2`W$T|@E)${z_{5yS_m~qPm?9; zAtFQ4gYi@I@Y@kLv?ImF-lYmk8cFkIH0o-BREz#Wi~@Qhjc8H1`+beGAf}q%m~(i^ z7MGBq1i|{|rPJ9Wd`2E+`@HV%b$$WTx%Xvl_E_gT#1J_$*wFt&$9hvi?D&ZcTG23p zpDo35`6opB>0(A(`YL(h$LsZeBTYdqQe;BpOpKeemf)Hg()oBJbF`EExr)Md0ZCu9 zeNC;Yp|8M$3DU%Pgk3^3_ymky+m`l6vu9>VnX3A=wS&hE{%5$DM!gt2fiQe_a6WIwrM*uRhP z8nz}1P+vDJU(q=LrKk!PzgOAF_Rlyd`sKTY*S6J2K&kmmM=$tEq1$rp>>KKisQzxw z9;z2*tzI+Af}?*%1v^}vU?a+lS1M%7!6f|xG_Ndtz9n@D`g?p>9Pdn*O?ml6zT-t* zHYBB_N&Orw_PT$_$4X((llZjKu9@=1fS^?Ht~N4tw=QK^KA7os%0Ou`%yo{pvcha< zMQMD3qtsI4A+TuYO=?Nl11!0olB1oJDUx$OY;OZQq-zmmn`bP@jWE4|p?OYDmLRuA z`Htvxp@<(=P_N~1Xr}m|tda%?L7~X=thnh#ldJ29Ll6GIJGhii9z)Jy?Qh9K zGexjqQcNU?$CJ?3UXeLT(M+M|Mo*z+2fbtmm_S)%1jWie`Ua2ZFYjF4lIvaD;>k{G zATrJ?Qap}y=jyyGjhk8sii+M!_??{yr-m_c8BXY8E_KJ8xXfzE%` zQ_wN6|MDroCaIgLORs+%jG`3KkqQ;QuEM~}s%)sO8)t@{$I7~yS~EGah2Irw(20u$ z;?LB+b=IaMqcc?Qo8zizF0pYP8qw@2%7uCBwh7o{?>N_1M5#wuaRNC}YTxU|?|mzw zJi?3qg_RKBYEnT$k}L2i^RC^eVu@N1MO%NFyIx(=`PXKA2A{yFF#QRXbkq z@NLE;-SR`>2~TAqM zE%d``KWMzw$d=4sR$B;-=74pw!4qe*q}nB}+`BUJ%{O3;>JrMzW%?-1k(SVj%GIv) z4c_y@h(hC%D$eSDiwU!ilh5Z)eC+gVPllbX1MzpS&Fei#=4ew)a=v~c@1qQ zKZKf!AL|tM4|4)BV$z-nnNi)_D}%kn4=7&A2Z5=Qx|b9YXmzoVqb=U7&nyZBe7Qz* zq;Cb{yLgPmPgVG1_wt?+3rxQ^`7&{Zz0}p7aiFT)YwB&^p0ZSGPRil<&%YS64(VZ~ zPoXeFj7a7%LthCKmNk>3YB9JfzdvoH!%HpJ7h%B!yCzK>+olZFAMHfRpHVbdeWH!s z4t(Q$(x8xCOzshK;_{5RP}OX#qS<|^)xCi&vi5>;!*Wi4O0BTHpK-^$vzUA(Jb!sW zWy?6tnoZ9>Hg%r+wXZdLJZNQX00x$A)-YeD{LRFu9}$&c;8;?kkuB4)?JQqf{CoBV z--Rj~J1%r(A|dsNXr)s6(mqLTqZnmVJ=g zd(8t45F<1cx7#_aDi7qrFq0mHQ{=#z5fc82a@}tC8PtUcvV*{bu{fPT5{-DEUKw+z zI7TkPMa8)NAM(jEnK&3}^KrY{pE@|Mw1p(-th9)MQ< z(GyhT2&0P*IFM;NG5@ zk_3V9_hj|b0GVu0PFFy}sf{F_0gZ9@?!5i3H<5z?r`Y`T@i4R93HmRLnv{H zj|&nHe>;-^kC`1RnJPfHbIMP3Ln%bkLL`gvpE7vT)k%g}-6<1uQ}{#ni$N^DL3L3a zdVbe{nc09x^}*z2%-U;vFVj28>-Ptd={vt3WPj4}qmJ*ei~H|_FV^daq<}cpxtV%n zm$U%cStLlRJHBkr`dG^bI%7U}Mp900A^3qyP%BpXXyDjzX2sSL`f|qBB>Ct5b!VTg z7RAt@{!(Rgc-;=Wzn~&V?&#M#f3EioRb_%^98>}nj;aG=VIbb!#LmV@S6k+7EO$sP z)Vg|ng?h5M zI5;CtpwFLTktXhne6ae9BSdVrU=~pdR7J>`;)KY5)W{7+t13^R5Wa7c^%{Xk6$R*5;DU#lzqh+n{`GJ?>FF%{dxsUUnmKnygsoDQ?ebjNyRic*V zkt5mCbI4=9d8kvj^lC>Jb~aDPI#2Ni^i4OJZF`}@W@eYeddJs-b!hK)%&sY;G#37+ zobe#dB(q|f>Rz}>QN7{o%dnl`Jtz7G_Up0(Ia>KKN`05hmi=Gm<;{dS$MSC%(-_eq z*d^CF*5hEDZ!&M?RRX+!^(}SfKNC^DFu(SMOJ2UJ7GwwG0HBo?rKvL`iNn z+dWR?x;hHTk0Z^Egms|ewa%&kVvwH=ad|E2HHdMgK4*4zkpD$%4I*Fv=Wj%2E=|Kb1{5f9|Ji0N8C+ zA4Pt(>I^H57A3|3$mJ`C|71fMnFZp$=1tqpL?3f&1k>3<05(!+Gy7=00bUzDdB66759&FLiWrPka*=NfyD(gxGNWpHl+oJ^=P88 zM#kVfO+__l{ZhxkZ=TCvEURg4&Yepc%9S6ua#iu9K&}h{3@2dDol{RTPeZ)qkCA+4>|DUgG}9+SW%}@8A=7`K4yKWA79w~D6{!O zg{b0WQY@1Nm|dVx;D+SSc{L{7Wr0zqM3l}vW>WM(n{hXTEC&m7I2?7rW1GDaaT{BRZU<~g*=qrxVCUPR@?0t(ruN&x<~2>-_*N|Qo} zR=2{XE6tj^vivZ;MSq%#1CPTNCd3s8Tl~Pa$WKi9{RuC`DxR9IA$j)+h98E9_z{yq zcZ*kcPSy&2*b5ULN^sj@X;pf9$Oiyd8g$NT?Io4~#0gL+@Qj{+wRBH2q<`O*9*pn- z0(hBlORN9qx!H7x{yoO>cG8@V(841OEv_8+@h-?_!W;0K%}K0hrz8E_Gs2ergZEbg zXMZ<%*r`RfZx2)tS-&epji)s0?!;fmlm3H6t|l@^)08~PTMFVWBUZ-%2E$yo;4 zws6w1C@XTwscTNUJ9Q%t@3sJy^RK{WNP4EJ-XLtS!x_Y-U;#Xvz=|w6fBBkJeaeZFV|}5Zz!K@RXC;TF=Wswlcjx;kdW4n$U+btS=!B_r zJ9uPR#|zTT-Ec9bk*4r2m&gFI3LGb*y>M3-Z9%!9#W*q6!k?ulJM889g=ezZZxs$; z%4X7o&xC|CV6M_Ixc{oRAme5gR&OR8&SK z{IE&3I1DJ^Wll*x%9x$-BIY0`zNy%~_Pc6q8Mq*d`LTnGg-((>`sexj`zJMq$x zmEj#duFl`=vu0fq%wH<%O>Xd$mJA%W5*!Mv%sRMB$6Qmb>W^QZ|4|Hr-R_tp38y|d zPK`88@~$UHUcqY1?KozjrH_5blGB*m0#Btr@wJJ+`1KVin5*{3Ihfh@jSE*|e)kWK zHzhe)sN~kvPO9mF53Gb#BN~VRdRCNsgMW`I`4r@J9p@RF0erI<;N!St=`p%C08u=z zT2P-d`oSr}KjUPysy z``xyb<`(urz3Dg^>CyGkbF@|fdSj;wk0|k>&5>A#H^le`_;?>)2yGWVg!rneGW+%6 zAyzl^V54!k=xqPNeAgcLlP!oNIz#iC>yv3GnZpie zU0ZLXLx)?%>#wMfQ%Lp|gR-hFr259#AYbF?m7&3@vBblL*zOJJT?=j}rWU6u5gi^z zu*~e1uDej}G?MP=y$BsT72e1l_Px0*m9X7kwccpn5J++PZZ<=n_Y?>FnyTAl`yDfH z82ZB`ZwQ+?&a6S<{N&ubi=ZFm31S9mtT;_tfb0Tpv^tez3laneZ_$APnQD8$6iD11 zB(rXeSXU*!SXHoOQshu$7pQr+jjNYeu%$EE*3oJACdMQt%}k;0d2p@F``TKyl_pp$ zXVjXsgF;3A@+yRm`j_(z?Wn6e#G<5{`?T&D%rY{r(fXGh^dgPIk>hNX z%_~9}L|)M{@c1I*XE@bf2Mkd8jEQL@gEEm!IH zaWo-E7u)K7g*RixY_Tt#m^i7gz>+QF^Ow1TqM=`Kj;>OI9L9z$M;FoQ6%GSb{12v8 z9%r8{??~DYm|{u4>cbBC5<^>=)(5`LEs@!BI!KC)AhTAe^<1&+#`On0f2+=J);1r* zW*LgvKl3)kD$zGX1#omBr~bq}ngJ{0%uiZ}PMG9Jn4EQ-xHD3n9a$brvU5_Q0xjSemi1j=InTrN}l_*LqI^2nHQ zm-%^Y(b@TQ9-Bx%Wz_BA`RtzKka3Q6Y}kJBP&W#`Ukm{9?&1@|XJT3lhTd#kiQI2w z8-!MeI-&aTg2@Llht*-{Bugz;jS%etaz(qk3>vN`Y_`Z=(d7t@ic^DnrnzIRj->6+ zeKk#Nd1oyZx%|X8*s=3|J!5!yjV-6JHBQY&OeA%M(PfC;B0D`~(q^dMI zgKh5W8t}^s9sDH7!GXqW+;5(990t&){(yV$f1m#>c?f3SZ+RiTfh`ltALu`o_Nx&6 z1d?~A{yu`+Nu7K>XHm0z4gt+VaMysdIFk$z-h*v-@n_WCfpcy1Uq+99lRAX2mlg`A z+%o9Rki)?r-OLs8@;Jv3fmQ{@uLwrZ_4H0v4$3-&fp6IFO6cvxU_x?Dr#<0s?a0)H zKspi(!21_n> zmdHl;z}(xdJt!_t>s@;?-Cx~V=)@W2lD?-)(>*t*HR$jokO|YMgj(g?GeqX7pfLJ; zk6M8S-aXW__p2gMU5}?VKKA_CdwU!FiHP+YKmZFw-Rv;$ZQ72KAE-(Lt+7K@Va*zI z*z0pZ{?q6C4mYrbRa*f1F*nEx)@7V%D2kz(WJJT@O_Q(! z9}6$ZE~k|MxdK$det76qR#BUJc@*9e&8Z^I*tL1wB2cc>;rES9LRss}0dvgQ&lExbi#v^Bo7LOwop&runDV z9NN(^k6GP42FDu6UYDReoNJM%g1vTm4xU2#845c!w2fOGvSi7Y`9bM5_P6`EoR3Zg zMX&`Vv<$ts7U`TAh@3IP&J4i^qD+99ZC8ZgzZ5Ot4FSS3`2AI{a~z7Ps*0XWPkmOU zTkttsJ)aFYTk9@H!S`TAz>|P24LNOvW)*$9x~A0bPxegIJS&1OXpYX5|D@Yq|4oG8 z&@cgF0~RE5<2kAZ(a=w1>eQnZkmt!qj6({@5rPG^U|9A%y>O$Lw|hH3z0xT^@@<_z zrw$EoMG0qI)n&!L%&O{hAJ9=yRP~C1fQou@BU_ty<>^@s`C|UqN6dyvSjz9}8aS&9o9!!3@3&m>rCSAi``cZ&n z5zkmB4`xrKckPnLGH<45r3IQRC*^p-mdlf_VHk`^M6p5M8VM zn29H^?&yS?$?DczZ~n!wH7M;xX&6*3pBVx0I*>Ya*wy|8kdo{JxK8Ho|Nr3sP3qD@ zLVyDvaBQG}BQVFIb3@t9=92Hr>~`MKJ-mL4AO|GhK7M=sHwPRTFcl2nui8IDKhq6E z8q3rF&{d~8()DT)U>u^+4-TL5Xum1f2pC9vNj&ovI_=Q(GI~PH8&?wTy=Zj9r6LRZA-tww~_PC5_#Cg=HFjV7be$Vbhu`q`@D&U%%q#8#iN0Hd%QNXc)7 zcZFgO+JaB#um>Q;2SEN6V(GAT)DC#Z)4G63I}C^@0KU12^L)#k3;Gz%R5fS`Y6g6x z-eJWN`)EN?(qonqiJ4hcS2j4O^-@xL?f8Iwn8;(K-#@dzy35Pma%MM*n)QH5BsR3q@E);x8r~0_||UNPO1~? z;^plJqA@%5UvgAQDEqOu6-%l@xL;zY2XO2f=nYr}Kh4y7&)24qaQBJ>Vup48 z>p19T(NU>5*?nY8r5RcJ^p<-%TIXMk&OP=zL7`GUYS*$RJE3-9TX*{4bM{{%Kx_Sf zn>%nJ_%9%5y&m}Q8o1O2+?|0y;ZO^;RmkUswKIOB6VzP}6XeFv4J07xF9c{LbcPz- z3*Nr-Elpbf@~5OmU<|s;uENAbJEG&ozKj}IN^n{3!0D=6P)}CfR)D z9)8>rFr1^hiW}kbg-hCUfV_MlzKVZH|COzs@y`Y_7&&Atm0|Obc2iRznA1u&nymjs zi<0*Rmu|C2=AxdtU1Ryk)eP$CY1ayebZ!3y&1$e~1TkccVQ1XTkB%ks#LK=Vb@|IJ ziV!pB-ra1~d+-X20nGBE_KMQwOt!btwUZhl0HLxjw$j~CZX-NezXt4CMVpc{t=%4- z=||_-X+vmgSdjy_GbJ&$@zV9T^DrRL1f%&{@2F{o$9WFRlGts-3?$&QkrLv$eJZ7hg=gz3Lc` zhF_Kk)p9dJ?WG{cA_x9O$5U;!ACs#RA^lar>5&a&1oa3+Ecm zZx^3gi5akeB&+Em?px{jH^?F-cIGTE@`+pjkD_bwXZruYeM(BrJ>@RUTq|aCzvOP1 zwK1YZ%w=;)?z#0txnJ6b*hFq)bIY|TYM+Stkjp05N;Sno$X)c?cYnYh@Au>Vx;&rf zoaZ@@zdS!oG_7Q0<;B?@s_VRU-Ca1S`x7l~*R3unE}d!iAW7qOc09iPzKZy8k?SMp zvxia&|C`NI?QGWP>wF!;MIE`gqf>Zz$@F&M=f*CM!-luU3C}r>xc?U@d^8U6%wmNb zFM1Ho-7l-_O~z8;BZyBwl9mteY2E$V=yBr)ug=wi=osRi%L_AgDy?U&mj}#F;RdYi z^-i61JTfl8AlC1m+IMw;vcJ+_@A>mZKA`CqqqAFA;XiQkzgZjR{p}?U8egzTJ^1~xPc@4Aj^X*={kaYz z|3e|SIsZTptJ}|BEqMxS`ZY;bzi~mAzxK{g*6&}kUrv>lnS6{ioWvUqZ|*I1bLYz@ zt()>8dQS?~vhIMsA7^*4P<@|zT$JvdRC(m&k&f+n9v)y8$TzH!&S}I|Pw_Y<=;+a2 zWhy5Ob^Is&VL#7Wrn22!`&w0k;oyh$OYa6|cGQ#Sovvo#V;s&p$_U=lc!~Icd7DtrXRIlgvnO!_-o1i8 z9_S&6T#;RgnB2@IEpaiol7z1Ri~FB9$|Y*Wn3I#|M=m(G6l{c} z<-86QdRKDif40Lm(_B*H-9KC>)Ca5+ly1`Y&zfJ{SAA-GPH;tz864>SeO}UbdvE&> z_ulyBA=n!JW438o=w8W&P7Wqo<$^pw$0Z4jYdI-IBW@1#Y5kwR_|U~@Wbm9qW~05< z675m~OT6=}SeQ_cpZN?pIC+2f5Us=-3zL?P%raN}{>4w*$i6Usof7P6~LF0{~mPSV*F=eXPx>|+3U%@g|%BF^1Y@wYPR#cufp!C z(*gf{{&=bW|MY`uW((gY&fLAj2r^xF1?SnktvFL>raQ?EQ+rEo?Fs)7Zf$%rOD_1> zFWGLhL!bYB>=G{gdbh-Kl#9pxJyz30$^=nf|128NkoZ&@cqcF9ur%Sb3B9u?HL)i) zei)AU{4)IhSnU;FX%1ayk}DJu&u*V77%%8$Iu6bMXIPl}>qgyWUIBgy9M|LW#bt3? zRA=qGc0v6|+s8^3(5dTv<}O*d*EKVgj+V+qM{__>ouu28*NF8&$w3vK|*p$aMPG zc4qf=lS_$ z+w}W%)4_R{=bwBTCe)<;-{q2g=dpje?*)j`H(q^6N+t9L*uLx%aniPCAL(Tjw?SANDZS zJUXDU$KtkDm-Bxb2j*Qikc_s_lY{opWZnv% zFT6X|0ElFH?Mwf=DyY2j`O3?c+r1}UrJ4&WE4!~^;O;P@Y;~y`8D!9 z!6*WdD#?t(`T9iTaqZ}(u=ehM)o)Y}p<-Cx+nv(4_5LpmH?V*RcX>Hs`0wCsX6BSu zJWgU5d(+IPA?=df>qiO=x%@l4H)z;bp?VV$CS|?rxM|X&M0&@M>z72BE?clPF`lte zwtV_g&>7pk=Idgh>qE!xpKxbatw{x+K0V)_@V-3ruocwX00w83ar4&0{XggAzF-~f zEQ7?4E=>N07Y5FF=i2a}p$&6SUFeU`ucMyIjWw-K9wr^W*7h*AU>43#bldE=Gu=~u zxRZbWURhX{WBxXZSRcD)W6^4{A^qKaCi!JOI{LQS5WfViVD?sVU|2eI=JxI9*{uq_ zss&E}U2ZI}p-hOOs%X*RXALbVFb*B<#~5g7&GQFFxCXwcKhpK2H24#xWH+2|QTjV? z6knWrwEYP@c{=HIww;BSmY&ee6v8xWPo^m1_|K~HPXc0#;6s@Zg`|nA+a}ZoUX6IJRl~(lJ_vjns!-|(TI`Qt;Q`=Ac zJ@);=s>d=>c;%>J(uo?2U=+(PPir2h&w9WA-@38W7p}=JN*!tg@W2gW5=NPZ)@eY6?`ZN=* z%*$6INrkl7Mtz^@iaGb2_l^-c?!wdVm(R9Kgx%@t&v|2dBvgw#-dRPZW>6mTFdejN z5HpD6@9WcKb|EZZ$>wRzR75QNH-o5CFiqh>O|1tcOt&QEH|0Bbr=qai7cuUJphf)f zS4KKUqV17aLlksnT8Fq6UuVO$D_Rf0G`qrR;51kJ5l2Lg%iVnFBKH2aQ{7NeUFGOL z$+;1JqJKWc{>O7!UZa?{8|u9J!spZc#^463)*NM{3GqLLmUEHHYRn_5A%U00d#zfRf+Va@ zD=gNAp;i#=27(5kS%cVVdg;JLavNg@l0nGCM4{cZbsMXrQsFP2FX!i_cs?zA`b4q1 zl7OtvINM~`yKwf<6?U&vuSgF5`$R>fn0dqk#3&4Bdwmd8nh+;9H+ZoKoLv-v2H~oS z!IK2^3x#q>815!Mh(y&2PzYAf9k%BUhDhNFr(`KTk88@IVQ>onCA0Qo`J!_Y%S4so z(-T(iZi2+ryYYv^8d+NMqQG+pEtUqUxN~try$@311)jWh^x^Uu@uy+nLU71y%aNy} zU)*4{A^h}d+`xSuUqHxcyp|zV8ZhE_MPU5u(#06)6TG!^(@?mZnL3Q($*dLU|j#^7cA;MeL#pcaC^?&Fi=Hbud46>r_5aGd? z;2X5l2$g!51A1|B%=PK$KKd@QW_0|+JEsqo>a6|~HB*z0YE|0}a>~ql=2GyLmChAL z*4K43yYGekxYc^lw%N6%1@}9|3-JAnVqn~ZrQtOTg$mFqfb*;Ip|1|;po&W>a~UZ- zSB^$3l4S)Pgi*>@IZHxIkk^7HfGB;D9o2xhB0Iti5N}y^Wk+zW-Fv~Yb)cwi@xE$a z_z96c=~zM6&Ks6FmERrf>gI#jYiSABCYv1|IXOw$E7=}qR_X&ileC)ftsDNpgKIW@ zY;xkz4STJ=r+Z@TUCk?Dg=zK>=jKINgJh4@M9o;nd$|4RzA;L_x=5BE7VOPI*}a9Z zs_4KbL1X-^F+Qf}Qs2hyZ45ivsiUxAxKm$Jt#)vkPNprz3!|SX&RK*tr2xsdZ0kVC zRJaC%7^rDwjpPLgqvVP3YnH7gBEaxDl;4R9Hw^>t)&A(tobAzEhUcA;(Pe5 z?=N9VxA;LZuK;fbE>b2GNRyo&08e~72h^bC#EJBo>u+|-PN%DnHj=$=EjZElFU;36 zlJwqNr@?Px&*%B*?9j_|d94a;X^$D@Gr#wPhbPAzivpmVDx|yVsGKE$PuCc$j9P#Zh}9X4!+>oGMUHLIA~q z5$JvS?}6DKxKB24&`#5e43pvfaJtAerAmUKF?nQ_mMmqzL!_L7cd{FT!Ec5(DsWoOd|VDW5OeZu&NH`?j?HLK zZkwc*sjD>RUSwzDozFB`cy{Jnmi8~x5_-F*b0zkaoc!$c7G(65{D$3KkMCV1zmR99 z(fMUxfW0PRwP@6paJUOWqB@q3L7hh1epyvp+`5V2=@)=iuiA$x9|8Jhk00<~!(~Be z15AwM(;@~)|Kf-Y!7R&*2;6>dF9&~B=Ger=$tEH`=&M%mJ;s31Z8OLewV7I7QI2_S z{y-f8$yhT>^9Lc%liWbTkXMA_{1EF8xFy1S;J@Qzd<9yE6&|E?Ju$mMo9f@bCVeRN zaBSi>`OVWqv9`pKX_E)%;?LET$i0kIt;NQPnP%D0VYWpi8K`^yVXDeDq=%<+)VWp3 z;!pmBD1O3jQ+@*oSGW%LLM zYoFx}T0W2^m1lN6s;g%2C!i0+5_GI??!Yb8HlVecFFLA1eMK^EN@yAt59(=t$$}BQ z`ks!D^_4zO8CF17hG`nq&d)Ph<cB8BX3!0VKN6a1cdCnpVfzMo z^TASiSx%^dO5RoIS$62K>51gRUN!vRW7{p;&}-puDyQxfT#pp2Q(u^RtC=^A+Eq%M zrQEG1Q58#0SI5F`y1PqlUU;h-m7>h5s-6YfGEJV`&Frj}|`P-0K;jU~C6oh6cw zRsJ6P7IK>C{3&rVQ2&)n4oqkdGLts`M4Om`EN{H@Sj4-MAh90JqZ`l>{50b4v3J3c zHGdu$EX#MsDQfQati8*Qr5O*!0-QtXa^xSJiemJ(VZV@NTCAKavB@_GYE}5vO__7( zWRw3cM4NkbRhN~&UD3bB!Yg8 zc+XMZR`hqXoa`gBYzt3&N(+rL}%rED502wV2!-H&Mgno$BEWNxbvf& zfIf>`mEZ&estCsU=>#k-NNbofrSqbepvHiFL@`*wV2id&z{lX+k>fOiB)H*uD1Lw{wk0rqXt0gZDe?60Q7^ zu3z}inI=0(s!6vLtfKArEUb*J7B$X|DYHt1rk!@R7`3TjDM>kYez(mYxSRh}A91fO z!-U_0>W4M;Zc5F>CsWO>t8_Z?h)%VcvFZXFs!6sv2bCVx_te7@_Y^yWBqYFYr520X z<1r3@gl?DF)Y^SH>$`v=nC0uU4M)3|C#DQ4y?Cm|Y3T4^PJG zfoP$@9TJOrgXd4W5Y#9mQ*&0;p;p!aVb}8yV1Na2Kc;d!nIHgUx&UXdZCJbY5TRGU zmJiOzA9lHBb-{#w9siT7@0wMOvob1xE+-CV_Sl&SEd_a}x~?RXy3f4cm###@Xk}s5 zCw!evot1}8Dg!884q(^v5{A2ys$Lq1)ScseAR!%UWhAxEjmF(lgAC01Bd_m=yyx4x zNTUgHpJGfOfB&oUT6j$KhZiEf&e?Z)D9Q{m0lt`vtY-#(10iKMXg@%tQm=?vnYqtp z0s(a`@@+7xx&?@oF_D7SVY-0`PLe^fG3O)$!ImDhdy?$;r@;+8It~L*q{+AJ3jA`b zfg-8*;FmBYhZ1ppFy_IKgpIytxN?4SK-*`)G?Jj^GUZiwy(~jkWTz#`WXKJcRdx*|iXA-TD10+qq(djHF*J0Wc+VR2(w4A_r z!^!K46H?FONNx(%#W&?KJ4#?=^?FPcV%+MeB71yb-Kj0wLcVUPjtuAe@xep`{5Fs( zOduuvzA6#G&R^NUrKkhnko?~HlGS9N2U~Y2>s#VdhE>q0H4Lk>?bR$#vCE7fWBhk8 z66=!r0<0~_!*s4tvqnN@G%A-rKE~u{MW~OA|u=N%QxK7OJ>m=RsEENp%rp4cHo{KBD6BJaco~Aa7>a&M%PfS6-g;XR6Qdg! z^+FDw6XkkDYT;Y$&k;l2z2n0{y0v9e#xYE{+^0*$9d+NwH0}H(#Dsw*!n|L&HM@0q z$R*xV>KPH}7_zajua@bg+5aNX-mZg<=!DEjr18$=3{L4Ql*2@MXR_JDAZKwuiBcQI zh*w0{87q7;>?LMe6jnNvpSNLpWO=T91m|)n0|VwIT_K{_uzj%#D^9$~3)RF2jX=2R zG^%zy(aw3zs6bFjcHdULW{xKJbm>9hllnf+^KRY^jaF_#huV~y5{Vp!c*iPV@Wk0W9Z0dayGJ}IazNXL~p?uCkR$SxQXbM8K6 zv1vSf)AmC}^&%Fdg+9@L=Co*$l;wUA9UsA|Qvk+d#-|lpbx5%#B*L3IOE4Db2G&!a zbA!f`ZuAtQhTP?Jt!>Jlc{C$Hq_Hfuma)bRU5$!j@a>PBs$S*bN;H2gAO%8lZ=>8M z^1|(vPn;uB?{&Z&#y?!5S5#F+KtYXJu~xN-sWi97l+an7W^EuPETn^m>-af{IYa7f ztLwWii5BQitgP@e`7HDPXRGn+*T-M?m6X+$Gaa3UH(U@;pBVYswmX}e+xlLaC%Bdp zWY0($^ZJeXEtky6_4LlA!8%ROZ2u0i*p-RHy>>m-II)$#3=wwU^n?( zf-z%-cU))tx}U7sAl+4IvkkfMv#hcR|K%SYmt+Q+GlzYq+7`BTFCblfoNpoO?Pb ziHSV_XL~)SZDe*a3SKXgp%8}cs7j+svorIO;f>SQNNNu}L2bk8X<>TA+m32i&a5>y zTxEU?)qw>S03up|vqY3+I#se(S21OphyXhKG0pM^XoYr~p%#`k3GcZ7VF|fS$k>!I zDJ=_@$&qNikX*l#1b?k4o_h5)ux6_GM2jW8%p6hF>iSK#hPCvaAeWMYHu4xT9$~xW z$CL1RF~IS|_jYKIbw7e%LP!1P+&hna0aSxA{ z&LxKRJr|HL*0Hi+g<|q=b6ZY2RlyTTDA69m*5QvV?bu`JG88G@dO?K_DOPp_gn7*~ z(V8QSGZh}~pnK`}6e{z*3N(FT)wR!cVyV)hJ^x<0;6b=DJf<2oxNOmSAy}F1(*NRf zU5MF!?jF7x z-ashRjiC^Vr3whv!Tn?%9t~^EtQ4rEct}f2;o%WpFkzOZxW7JRf~b<8vGip&_7!NT zUeZm*w3ToN5qRGi{{%#{8$VF0;JyoHjAVtuEsS=bY`9Bi8T9@AQ3ZZfa&dL}8c=F$Ec5Zv|SDfdKLT zR%UYKacl;yNb@$~2}NT|MULt7UP8^52D2s&JsKc-4PfeLyh`~EUi&>k`P#LOh7DC* zYFn5=idfw|)8MA_0sed(k{x=r{W41vIBi zIH^Fe*<{!x8?7LrLkLO>sDs3g_fPyi2Jde$=>=OUuJ(KXa-8w39ho3OOw9Nfofvuf@`>BPc)y}mj_t}mcOP_fRdK_{oX<)Kk zg^AJ*D$*eWN{Tf@YIqSwqVOuva}g6qA}VR4P$BHMmbUCUV==F4<|Qe- zFmL`)k@eOoRk9n^9#qZKQRP@lyMP!CTo!wpcvf^5G_@x8{l5*ZqKmj8^A5wMKZGY$ zY0F0Lmt>xW1uhwXdRtK~Jg7BqGPKKA&X=_TGk#c0`PW5uR^|8iQ>%xc08#3Qtb9A`e51@5Xv9Dr{&Mv*M)^F+ z3dN52(9(3=JzLve(<)$BrU$M6yOsCm$G>8@* zFanetuYg&)%L}$wtbG<7YNas@%B?n%f-P>`R}d5Cn6@Tlj!mtgTK))6>yqER);Wwe zVRW0fv;<82{JO-svveTmbg1lu)Rtnu!zx2gAv#Uv=m1<{HZ7~65b!e_pc1W>)Un0Qz*h=xErCK~cj#lJV zlW&orbN7f*QT=Z_C~AnDO@GcpSKc*1wgO0UC5#*CAbwn)dQlkUXbo zxCBfa6~n!8ZE2)^{ahPyPs~eTa_RTPcfU@oiC&lw{Qj#wt9QIV@(Zq=*4)khgwm@0II)gF-e{r%4_-ulUim}aDEG1$VA(t?1`Z|OlMU<5vk z6k>@GW87T7HPwtbc=!DDEreFLzAVuyv4eSwk5V2>icQbQx4&&+)X>u9YM=0Bp|oLZ zIEq(l3xp-PM3vi%hP3YW7=p9WvngAC@M0Ly-Bk&^;r!C%a$5AP zqRXM^_O%dDW}1Zbqmb$wqca2e4a|3@KBN^-2NWsLoQWLFj6T!}^g9`=YdHgaNVKO^ zPwQiBz>n&<$n{f=XmD#b;XK;egK~L4J*7zb%zs1yLKi zL<;C8*jSl<>-f2y@yjdrb6JLF=cBBkaZ#uP(0}Vw#U^rN@fEbhki*+zPG4j313k~p z3lXp`6F{V(mce_6C@k>nT*;^4eQ+x1;ooEZ&0|JuxTKL6ze-^>-BvAXk9F`d_HX_> zH$f0JhQox>65#UL_qa(A-AMAd{(I1X;OJm{vWdm88P3nl)d>{${cv9G`hGSz3Q%UW{} zHFA5K^1R)2sG)}%+QH;c4a`x1k~CfS+A=O*#v)71--2CuXZO`5AA zi#uY*cD`|0wHcH~eq)PyR%x&a0XuFLVP;THinP1nRO5tcjpQZqTa%U;a^9&gN3)}v zcLJYt#&DTwCLas92R$O?c*{ld66VIzAHn6X4!dWR6&RU;L#XW znjEO)O0+@B4W#F*?I+lp)WF+DpZKl9!FuevO7{?B%etzGqcW=82^uNK7)|6I%%Jic zz@4jb4&#{^<^(F3-i9OL9#~o2-42LyaIrF;2GV{fh=mT_^Ay--i8#{0gnTtXgOfRzxrL0H*?DPqF*3ayD3*(8|K<`~*}{L#_Gv>^P$s(+t!-uF1$5+^>UOIMrWJJ7c|>NVv*olxR&j+LstZG&-}7I}HGVBYjB zN-0d&VNihzVHJzji#phMT&kvE2Ig_Wlu8~*IIpCB8o3gy>9v{V z;$aUxZHGv1VilrVS|DVJ01c<($i=7FnJlS`^FzfJ5g&-Md%DWJs}48rpE?7u%&mQU z;HMCb*6?U*E-zjt$UWhA_Oh-(?n9c1u~buqx@L8X7j_pMSXnR#ENkCeS7~i?JHTVo z_S#KE@qf}I@>}fw9@EK_5(Iq(hbY6UH=t|Y^`3WuUNcuvF5(k5g|p9s8>DUl&YsF2 z)NEj!9@Lej%9E&}{dVm8P9V|}X350C@E%;a8vk?E7&-`9YG2uRhJl-KUjyKX?#pJHjg{3Do4 za+Sgz<6&XHhyL?8Zi7iM;=d&F;uoDfsQ9Lju)QW`$H>SO`q65icuR-aE{z=9|blpynr0b=q%a7wO#Sr<6a6-LB~ zMQlmxD**Qs5=$gK`K2VPMtJ!nT8Dr`l|`V;bdG{rwfs`jguT(QHax(wUc5debyv3K z^~lHmhbJ8RaUH?uhu2pEE)o>}Yu74P5}q1Z-nsRT>rVB>?!X^27+BLHLu^Y(V_OoZ zO$5vA6`iNCPzUnTaLetYK|S!($2?LF!k`a#s=f}F-VVUD&J+K`InSO^_8vom?_wC=;gVg}r8N8!a(f6P zWXfN;fySCAjDq6d)W6j40*wwNId=mxMlCL~9!7rzGSjy85+PcjmwMjG$1{mvhg=Zf znq#i4fsLG(X!|$|DIMov_D6e#su0TPC%&q;9l@8m5S=`6-0zzOIMgfj7cU2PT^~fs z)@G0If<$yCQbal^M8XU**0QmWv2Khj$UIEzu6dBMvihMuXOmLD#nD zGoR_Me|@#x$XRZz!bgupY{!)d&t529n3}{0V-OEhKt}hL+28-8lNBVAtv+f;fV6U# zrnO?!TP_ZQE@nU@>a@9=h6>piuj8R*)ZiURY0vW0>yD2OX~hvE4jtjnGuI~kzMWDo z7PL{~R`GR!{m3yQBLxj0>C2a`;42mP{cIbg#r^xXlzDU&hbq*>AS|_7ZtDzF%W@#v z!zJ3z(gUh@5I%dR(NO_z%fsKAAK7@jFhHdP(b2f+E+rAW`D9oRB1!Ap8`di$qg`ge zbD72bwU=^X3KIg0=6;2yA`$?)YLPxeOfeZGXjBv<5<#xL2GjIHCh|qtDXAz>tSbZa zEp%@HLDm&O1ZCDdAMPP;L>{9M+}`m!5;YSXA7A+2Q;WA^&_UYKyhyGQxOr@-)vc=W zcbA_)y~wsT^n&F?xre$*GnnslpO7coJ_VOD*5tPb!CL$#Qx_scO#r+1wDS1fFCR>O z?u`kF2kc&7-lht}kw}48#Sm6#2&gdlUfY?{YLJVd4}i^Px;Ru0V(FQwmWJ5Il1Bp* z#6TsfPI<{d>xd%T1jjNeEq}C?xD*)x8IqvcvNjprA_;bZnc3RzF$%AwBp3p7v%DlK zI9q6NZyZ`u~V?+K?`FfJ2Sw*8CBP=N7JT)+%mdfFRV z&l=l6aLFRPGv2kK;3j$%0WayaCjI8kt%6Ys!&A^akpN>b90bS8=`s|?hqUjy(8AEN zM>@8zX5##tvsz`1z(|v?KnI%(BmQ*ABRFNQ=-|{g^XuC-+dtU%D?uafT>u`GI`K;`*720P z;&pP~1DxY1N&@^-%EzgC7$GJ&ohocg-Byys(Hqc=MeL@Y0+;yyc!lL&X_P=-DP@fr zclH4Cp6fC>T$HLRpaHY16r*|QK%!oBVXRM|rD(SXIM6^za=^#a30LDldOVODvDOFGGx1&6|cABt&(^`z(L^9R`BnsyZ1nXhi|3x%?Ud{ilGJ1x_+K z5i6ba4r<$@v2JnAFs~y!L84WRX>O&+7<4SztIzgMbs-#AX%#`I(C$f9)SH?k7eqMM zU?Ra_$85Jrd!tePSp2Jqnv;>bbkC1r;op9AAXUa0mXC%b7+E$cJz2S$F(f+0c6!Qda=0&=H0fzh^Z0G5A*Pe>%V8ON6|~L#z>0W^KO;qkOaK z$T1h7q3vl`A16s*>3UjjSXs)3oo?VtAG8JF1B0!p!7|Va1ksCKCZ+2+3a=RTc|#}K zKkuuK@*e%wALI_G7s(YQn#hvYhStA)YxX?vQO|L|{N%L@Q}Mn`S-D&}!W;CngF=Ip zKTm{FD5P@}DkLiE9SSxaRcVkty9~(D^-2 z$@1pXCSh9!0%YAryzYA)ZDDF1#7*`qt33WEW_ZLO^r`O(@1($cOlmrfAWF6Mbc zxpy|e4*>F~+zaW>c>rN#7uNu#$v92l8!GeP`OwluHoPSKTCg8Y?Uf5=mUl9!(iwAY zer6VfIWkwb<1M`QQ5Gem0GCRqR0Zo+4#sI0gOX@V0}C<^YkhLxq@(G8gnb;y==AQ& zp2-u>3XPS6mueoI!POz=qVw&TGP3s!VN=fH(CUoM=DPCvA|nbX)b5(ENKQ7p7}A9q z2Jul|?1CI5o(?NN<4lNHU3M_E(8gB0@RQO8ZDM9o9bsIt52RLerJ@UN19tMXO)Vw~ zdP7C6EIcfAE9{;a;?xtD?|*A)NKx)vpXIXUU&p4>W>pZZGIXLwL(N>IrSQz(W5=H_ zMjzhTHu{oVmb8n)-4yy*yczp*Z7`PAgV3?j*M{*);;bFCisrvMjE7i0GW8+ogVSjR zcl16~3XCC%!y*t`zO@Hnu2_;^Ohx~XEE}4Vpfk-#g>{-;Avz2yQ`SP2P{PSr_NTmU zmVjN`Yst7hqkhvb!d#rx>f7i9BIsj!R^Lr+_b=1@@mfMosPkEuM@AohJ`nbtAI#%F zc(W7;G^DA=h$TpFDMo^j5Qthq=kTlgOe)wcrKI#Wo#Y7iV_La&1QW&N`du6)Dyhst zQ)1QA2?P(tx}ts%5~-q}1ie`@D4H#mXSP%y^4YO1Lj;c=r@m=dOc|w7WfPev7~hSC z*lY&*%im*3Uw7Mf{zxvi{7T5HWG#eRwCqm3TtY0Al=a1CdSm__$!~dm`(m558>X$U;yr*^ODqJy06QycQ zRa+?Ni9+Lz9n(j})-&lJ#wgT)%q3zvH=3Kh6>w)XlO^W@Z?}DN_Bi|uQp~I08M`Hz zv>Puip%oI$y&U_jC5;GH&d#qbof!_Pw@Zo{1lL`jVy%ER6MheE<6o^PG5aAZqyRyS z@=-$^X?U+PEONgqR9<--@gZkU+Y@HR-CF0z_rwgk0irg?{dq5aPsJ{=465?uN<0kI z;vdbqG<4q3pmUXc1iKi}V=-B8rM5dai)ez7%tm7ECtumr_YNht%&KsXu`x_bBh9uQ z<;UNk;Hnu?ondKu>hzE1n46y;+@^O_V4Yd%P1UHw8!F%Vn^C$>r%Xq`{su|>&~hW? zX&Wv7E?cb>D-92hkhODrd1!bjx8nTT<@XiA^CJ%%qQ5;4?Ay@AQJXUHE&nyoWO@d< zwfK}y8ZRxKUxakn`MsD#&^ItdU+Zrv_EnkLZU%C-t>lFpAI13mjqYjWGsWNQi9?QATZ; z#pMO8kzEgl4^KP+99`kc%tyX)HaXg(6T7+*KWjE}gMqt?lh$w#{Cpq&>XRz6Y2UL4 zHr~D3I?%i^l3;f@VbVAVU|U4DTW$Pz)_-IA$8a1dGo z&bp=8QfZ~uPZU?}N9T7}%PyS%=*C_3vn;=vs*f-k_luDcv1OGLac4>!+2NZ%q1U#? zu~eJs|NJ{!@a$oiZ>=eL7g8YHXd3HSm01YcfHDcUIfzUw{@z%$quXbj+hirQG&;>y z$G-m1PtP&-JWA)>uW2kh8YmNPid%~3kB$0oEll1yH=O6pTGN5@hiOwQ)0C>e$3QmI zxl^yW(X~{|$&?aF|5DyuODA47oU6{TUD9>uX17tih#cmD!ip1;$o0+;3L@1`K(o((a2}Mf{8loshMI-X`EWJUP^;X(7sm~?dn1AAJwU}yAbU%0G&*u5G z*T?w<{;`|mHmH2vvC!c`$t^LN02jA}j%OBVP&vh145lGprl>GI0VJ+gdDU0Ka&&-o z#RoE|Fzj{4CYJDY2rFHg0||kmQ-kW!sD?Th{vXXrU6=u8)r3>hp}`^FYE|I; z{W~N6MZeu4mBT3rRDM5;>p%VX7^H|sbKksRe`x2PlW>8Sw)B;aD`DB!@d|Ydztotu zI}mWZ!x%{uTZqrwEfBlE05e_cDnm;ev>CYXC^=u6f}%FCb!EawhOd=>bx*sEe((xx zhH>M!R|}|7en!Si1m9>-FovV;zpLME>}(zC>j^55Arz3dG!60}VL99ajHE_FgyF0g z(c)Ag8U%gme{IAi$dIH55MpIhlz*ELB6F)s%H>0NvL_A`bM`I!`!q1vY|)FotvSRB z$J*#at6x1-EsxkAK^sZ#Uu$3t|9Pk8u)#2p=!76x)}=%lw7#EcGR{r&RlK-Prs+wYYuJPUogw#+s%DH2cY5cQ!B3X5k%iRTy{^%vvlAW zqX-&N3Sj44=K0O@Hp~9Hrk#>R)niM14Lrb)r`Y~I!J{RkoGvCFo!eAPtDIsNxIs$I zJp>A^YcUSFXNI9*BP`nhwd10!L5<(dGhWFU>d8~NP^|NyINYm)e zaIEnW--foYU8UO8ulr=HiK3=`vCZsj!*5+(F->841pKty>(UY8-Q1NYwlc;$@D)ZK+&psHl}Q>YHt4;9R+<0xG%TYr(3D{*6if!K1xg7c(hubaxE~Un)aO`@^=Tnwu_aTN==}Jdy@o&e41pAJDN4O` zNwM`7?}y;pv}+$;n^$AS#PxIp^`!+KJLepHc5mABopHa2OU0pc$yaJ~Zq+{MFSg;f z2Y-+GJx=lU?~-4TYG^Ox9apRR?1*l^_8#_Npb?pk-{nkxMC`IEggG_j9#pdo>ZgB2$nAw)<&pUsQ^^SQ0 zSS2;&s*f$W%2bPm7%{}NNuOUoy75@?0%{#Q;gNh)MR~ruq578T36H#&A4T1vYURZ~ z2?psL)Br6d+Hu6n=0%R}u#vQd%$2#f9nz9&b?$qz`p798%y{~RemMj30&k#&)g8x0l+$44tq7_Z`^fU@gphuJSi5Op z*41ylS?ZNC6Juz;7j(4Xkw$Wvq~X^;>GSkza)z6xMf4;h>Dmep3eLUb2SdHsY=lm$c?9vx7h%N}2LsU@o?x*@f`1TMKa;L#G?avAap_9v2r$*j%C zJW=L>Wo8@A_=8Az=;qj;2)bJ9kTTpMN4Y@Ss#DWf_5&j=K$Y@b#D=9@bMp~<*s>~! zre>O35$0DyihZJSK-3K46cNLWD4AoKdpaL1jGhg;#wPV_?ObWj9I&TzpbP{XF`svq zrxoNNzRUpp`wOkjW2i5o^6}IAs)LO9d>>}#uJHYjPevd2hqv9z_i5f%a0vhTrC((Z zmlDfpX$|&+L&rb?nzu`e?&!{CGYJ~O44HI@kT%v_^^rgzSh z=BkV%L+?XX%idJvt zl@+s}rdp5_$>8O4@#z_gnvov88z^i5UDqZug%RP1BQojw2|!mnmVm z46Sjyc1~Q8{Kh3V8t~?b?6>@AjF`+WU;6A_t;mLo;cUEyw)hXvd*nj zEYA&@;}P=|(p^z>G~wd&T^BipfjVrWnCGgdIL^a+1v z+iUKzx;b8p)jsdMg=#EP8+)*lvgWkHL6vct%KHcM>>@v`37^A5B#o={54o;Tuhn-` z@J)5jeNN*T{~;(SLg+cPB4Vil>05mlHI)L7rstEf9`i@K{NLf zeZjl?e$s0q=U`W`*Ja|)$IoG^Qf;}MrPBpphIwb6&Z1;nEy|k%t1AIJT0uqNA#FhZ zZJm&6GCrNlfVB7#Rj6?ljrSk}V|>0@oNJi6IvXTT!Ea7@Iy;M_g4x_J1{G_=Ezz)U zU~uCpu_6UPg+ca_0Rs*8e`6{7_t<01x!pf84LMiL;`6_11?aU!(@{w#5SH@LsPAns z=|aszIdzeYS~+Q+OTCCmTaDuSZxy8j*+j1lb#fD-cRtb4QG(Qj&W=}!tP6fa!=YX z4SJK{n~&;1sXC>O0)h+dX*WoxH9;=9_WxNr&##OaT_`F} zoVoWNq~`Wc%)J0j#g(F{xN?t5B`208uAGIXrDkPjX0CpG|HuCUPdWGi?{Qt{>pZXD z8i{UxD}x7wDdKNW&f_kDecNtY>6obF6dome7R6zeB%tj$4NBg!n{iXH4R?2>a{U6 zhl;=%S~;X4D^?h?FJ-OliMJI{gd02sr!!~ezfZ}ldh&kw;#SGvk4W1=ymQG9;0k71 zdM*J$z98UCq-WeBL>RV%?env5kChGdei@yU?g!K6WyVDfKcX!P;=@wDI&av`+2s}i z1F+W3O@DH~TZj=5ehVvEBJwCi-vUDnf|}iNw`hLoX3;?FRGhfzZ{nusH<#e_j+_Cl z7_s4t(p03OZ~ZGlHaICHeHuC$^F|G$hb@O70B9X-#ozpa~nzDB?l9Vx!a)oYBS zWk)TZiJq0t)qj2BH+b98M9Eu!FZ$E_rxp*v3xw)=EH%x?c(*<+(3w^4P$PR8SH!QT zJmr^y8;Cjy4?xL`3|fH~J=<*!I{(B4&+jJ-JBT4nrhB zt#Uh;K8Q52vApR};*P;CO;TTirTh-gEOUOEY9&Iwea@(?v z!)HT(3NojhhVyq+otGqXBjQN5Nqf_>n8p!p%f}P+A5m&bj_su⪼sQ0oV`%_U!Zu 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

    aCsI-HX_{h{i`j4BE-&*91H ziM6M?ivJhzW+K+}<}(7$P~Sc${0L9jGBKmr8N<1Y|C^GfaaFG zi3*!Mi2Jo3p-47$Y>M(g{O%h?l4Jw{0c&O1Ws6OH2#%jTfc{SvIF*B`6m=voLxP1? z8wy>xGQ!HZqq*sHA9NEY)=h3Gz?GjB0V6&z-;~VTh0g>(XYkXRVR3jP#kR5j$UpT3 zXM;r5o6jpIkEUi^uk2{#-$Ne7xpfjw%77DLt6IulC#92^OkIwkR!yUeDS=QfvD#?4 zZ*Q-d@8m7$H7EKNB!jhHnrnnq6U8+!@&FrKr#&OT`rl8Bx8=JJB6)52lyHyfXo?{il+`-nicE^;(#e6q57DgQ2Q zOD+g2pI!NePo^lJ3un(4V^$=~-QF4H^b*Ca9+n*gNdv``q=a4utk}K&^n~G2#Z0pd ziWgfihr>mA%(f-h#a?>|HN@CzeSWc`(14e{@@1;P6`-q4O!c%LZ& zNPA%MMzc6c%K@w6oF}QQ!HK`x0{fI%;Nwf?rqjL(59hw&<8%~d;&Z}3jiPp(;-qz7 zCF<}@=d6IG8v~Z2$UP18?+!!VLvmO5CsnEEY|#l2R;xR3>0(^cj@b{oHSvodIz!So zPC!R$(Q%Xq+~xCo?mjCuKXM#qo|g`)Ju^~-={%YjNSx6Gv17@J0yO)M{$JI_6W-VQ zi9CV7m3ceNhyB7yA7Q`KBH2zXq7To7>M)8r=#fppRUK=|iyzktEly2bWjM&0z<1wb^?Q|o7y*0=1NCr1?h!MBowaN7Y$wDF%E;928 zJ3OAJr3mrptzXE1kEaPxp|OKbTe0f!Wq{-O%X?N^yN|3h%KMajv3{v{9y^u5;% zlV7%Qm-%&~@~1tRb;0pG?tT)zWxtCT&|jbV1M_VQvnw|b4sG$#pK{7UfX)@`gFGow zKtnwhSKF+X+wXW{P7ANcKEx?Iz}-w2&go!30{5QtoKFHmMbgX-w-p^LOxP~h6&=La z+M2P5Pg+zJWTfDfsK2y&(QLQKqc?z$?HKNGV42g`6wVC2G?hMcOhgWl9>}U0D3m!sP-Wc;xoe+5rZ@&BQQY}yd?najW-1)j8N$2F6#+NEL z;8fnO_O)00@O*d#X=&s(COFmC3sT(VRr7lc{5GRW8Gjh85~H21dA zXl-nskf@1Z1b6cgN*=d*0Y^-4CX11EPuNN?uuE`&I>Yc(u*re4^T&(gYXg{{l;r(0 zbHhw=as*a3ZFBo_#-4@mgVBJK6-9*-1mW}l1Urf#LkFx|9pPw@F{}3Rd`1@EL@~|j zGk!~K+rQ=3Zs z{Dhq&=-;K>#~}dz<{7(Tt(-T5bE{=L#v0XJgHp?#UNI@n+Y{md!iZdPI7iO6Gkt52 z*Xd0mUfZF-r&fWp9K7o_MoEW7G??cZgC{dyJ3Iyf-B376ty=H%a#^Ix)|l)L>nJDT zMao+xS{P#Nko~pO*@wx$QUXnUTBdWR-$X~;McK9W`aiW_VIsX|+kOzKTl93BKqXe> z{ie(g+}$%&DB!GCt5uj{y8wnH#La68C5Ou~53(3agCyG|e}eQi&6+3Z9OgfB95Z)& z${8$cWQG))5+FH2VN@TJZC# z87!7gfMNt0EeAwv)RZ~)NIb|D7rS!3W}z0Sq5(fr&j+fTheUe*4G}`J#!@Pomo&B{ zq$1(f5G2NQ<_^ad(zfV{;a&)FmNgx0ZcTIb(eTAiiDN zYaX390g0`hx1?yvG|bJKnbcg?awS)^+BvSg5$#nTmx}qwBmznnuzKa}-nYT7|IM82 zkmoCBD4-A~FL|?nujqfIzn5M;V~=mN8mq*E;Z_*jC*%jydb{H+TWL?lM}GVOKH$EP z#j`4fq!x)DcrW>QYZc?Er;!K(t{xOTXeGpYgr%)PYkZu|9JxwOp9HPu7HFpCtID{| z8aK4F7QOj3o;7YCLc3L+nYIJZ&E%-zBtEcFH8D#>!YEo;aaDU+ZOHyHVveb(1 z5Aq6RU9aS;osabXNq9l^IzSgA3wSxPqF~l8J~d-kgl`d@ZCAv7Yov-@p8Qp2{?mJ= zJvVvV(~QxK8ebNLPK<*tP2VCDPLcTse=&_Mc*}WJ@98nrXCni8)g)WS?Q==Y%)AZ+ zUGOX;ZA9UJsC_~mB%gP{ZFY4s)W1qCC!k%$W!#8Fbcu94w~>TPe)TfJJe(_taHd(m zoFNT7f~P=XVZHXY?FXPl$vcBrWOUku$ewEasw}0Es6l*vk9sN9jO+TU+ZR<0cq2ni zlHc1jrh}g;veNXy*N<9ovMgQqN0g;$auAY_4gaEdgdqCZF_-ijCq*gB1KUnQ`qSs# z3KqUGa7lBS|EI=F@xB3;WrlE!eoV&(&?!^U^n$a>2afZ%{X{!D7|Ngm`4K{o95dfa zENtXvnEOE9^A|OUFe>O9Nv* zE?M39Z<~PW2(o;@>5On9$4Ns)gPWpr88ump zgPIQ;oaO(TXO8EF&>8YQhQmXTWkc4Kw_$r5nM$h1_Kw})$o+E>ue`2jEpJ=R&$se3 z9=jCw9B2KhB*1FrN_+lYdLnx8CEwQa*woayyLGnM^%JYnH)nmgR@hygn%))gWoS%tSh4Z)s#<934;;OIMC~G-5@)ouMP7Z|HG9 zy6amHp6daO#e2c1#vJ?jqR81?__8JFZjjxC})TxE)neLzWUc%`ahnm!uo}ZG`gz(*B6(eil-nfzwMd9 zQ?72sxj{q-F8vqwQxG| zVSZudBk-z4a1ybtIpok`t;mjK5b%)p`)=7z1U9qb8AkhH=*-1LtQ5d6@|W- zOHG?Hsy+7~qH1>Gq(Ck)zp*V|qkt^YDen;3e50@9sthA8amhYGs0J~-p~iDQx{pPQ)9gz~&ZdPU#gNMZRiq{&aLxBbhy;+qvFBG~rA zAy3hd(A>$ZQ}~Is;yH-uP&Z+$Zv)Q*nUVDnQ_brfE=PyqtHtRjr6E<%f>*T`G#Lx* zQnNJ0GkEqdL0C7p#B1u!U%%hnLISxTmUoiRwEp}Il~Ul#KZ6~<;7jnK*z})|aCzHg zARhhPXl|VR3H%i28+aem%&eY)YH?+8IPt^+q(@@`v$*N&xB1!Ma*NSN{5&%QNLIr+ z{GNJ?m}}G|WQ*D_ctncW}=q@4Fj%VuA$VwR1 z?r&@t+qw&^Y1pur@Nwqo&4YOZX+um`U7d&8}3% zSBFtxzzD9g!)N%nPc2ZzTttU1yre;-aW*3nrE%~5K%P|VuovkA8{xjIbF zyQ=MZpX?V!%w~dEjeua)4Ow|Q8^8K)biK55awpWujb)D?{@RvmXn*P7Nei+I8y^&PjUrXKHI|h#ITqyt)TOa7bc72F0BqpUahJQ>WD<`lBqPC!a!r$Jv!(VT~VJ ze|3dCtn-rL1}q{>oQEU-!&FEV4qSD=c_0+~U#!fQDF;`qE|NJp-@+osC4*SpGgi~l z+k9_S)_cD25$vlObRhdxrsnf-$WpX>d5)7lNKh$8n~Qw}RqC))QrLW5;YdYfp-vuw zmJ@H&@}Q&3M_yWyiWdAKH>UZ&6@;{|lj|rJCiI1%r z0RWM%222K%!JV9v$Md)Agv!RGg?-v`b4QJZSr)MdQr;i!Zo+hRI9Rn?;xs}0bI~~l z=)pGL3l+0U4+X~dnsX+dA{+G;rZ;EpdeW?19kY3aF(ln6I1@bn;3&GXaHS_NCfeh+ zqtv0{v~wnmYrZHhdHTPQAD?6dFlU^=&w2MJ^!M&zjrUTLOR9{N&Dgw}Z3_e;CvYBo zg8cRg6vCY8@A5Iv1u8JNnJoFbTF=3fZP6wQ4Y+|){W*Cmyb-* zJCj+(xukgCE?3+Unl|js)}Q71TqnsbXGF*6yw$;&KVW>o&IS@)$U5?9-T_u$?InLR-Z3I9mP=Sx=3QJHSPTUXPn*G+aMKXahSRfx&N|%AFXJ< zY^HN2u%?cfgHnhx_mCNXRrPWs>$)rSc0>XCHE&zonc3tlrz)lHCqU|R4W<7g@vGhR zfbZs?P$l)}-HuL<2su62YZgO;x$}hbfl1<>ANUZg8Vi7UsOjuO>2MfUFu52_uA%iB zc1-rqH5p~1L_n=-R%hu*^+}%LSG}~WhCV$N599R|l^Dw9aBr2GJ{PIGOa6Ds)~VwS zefzub*~xDINzQc+xseCKeKRFK45U#9mw@Sk;KI-cC;IjwOukU8W7{hrDFC)02|KHR zs%IR@qB3U`=eg9=+YNj-HnM~fXtA*GrS`(6Mf{nYX|rPmUKAU!fsG60>ct;1Oem~e zbNtZ@+Y(e`R?9Y}qD#^@AQ&MDK`pub#{u4xkxWmcMz-7g&rIv`n{fB^C^?m-T@JVv zd8#L)6I#!uWZ z2IBBz|NMygN9(+-r`FpNv+T6Fe*Rig9i*48l{hIt!0O|=p9r~=D`H;4E83gBz$`U` zcpF#rp4e(X`5>V5v>DX9V4ZNT`&|(F9leLL_$4Pu%FN^HrbeZ)w5-6S9TgqAS?YL<_Gs-Q(0|cF#73>$UK7h5_+c>M9 zlOrtsw0t`LUD{)kMnEAc?l9&U2ujJDxK-PLpYA)5cu~%`BVkRal|Q~_FEbf(x2b{I zJC*SxnzEK@d4)%%q!02KeBjLye=K&C*$sFm4-7X_Qp4}AE08#SxK(>iuN zBJXjcEyE!0cF+5$<^=58JvA zV!N@8>i7LBobL3=l3|vv&ZWq-hzoqxV*6}+c;YBqa0PTzY9vxs6K8U`&WrTR<&@r# z_B1`Jrk}D=6dX1shnJ-==VEWl=ZnT}G{{l?or?07YB^lEUfe4Jm}Js5WdEO{^L|M3 z{rY&rg_GgLi34XU?rj2!dzWUWxpJo|ncEaZQE`_eM}VnKXJzHWtqn!3%!c47Ec=8- zW~P20p1*(}Ztinm=UngedQI0>YGh5$F}SHc#~lx>R;eo*G8^%&r()rN{E?Po%A6ji z`~P(fq^KFX&=TFhwXp2ZYZJYcj)J0`Y`a>U00kio4MrM0QcWi^$ zQuG`2E9vFEe0Sxavri#L6_trSm74%&-Lm2c{1JRqz{>Q+cewz%RgA~#v>T#u*&>Pm zpOkL-GYj&oM?2{(rRFO<7vq4us!ybU`kYhwFK*O_yf-!Ke#Om7=Ku>8*K8+RE`4Mhu(;`MTPVijbitJt<; z6j0iaQ4L?oY(ej62`M7=lqlBe7g$OJ-+tPVC$%%an7Vr>+yY3twMq#Rz-M)sMK_XraS(P^S%0w3(2DOo9#X#^;(;$ft*FPRQut0UsDxJww*BN z>#mKEf8M;d|8kiyG+P$f>WY;}ayA%O^9xON7(#vw=czj7V4RpVSaWHQ_;sK#uvM!n zu(A9-x&I@_oO{95>B`|KsQ&NB+$2~hvG=y_prDV&hpKxIf~h8S9!KMVs25rCaM0?I z)VW0W2!&3+u9wDayl%ZJqOw|Jaj!)sGoOuD2dPhPk|h6kBwYM+3G%~b>HIWWwpLVi zbSh*hM7zp}o5o|zz5+kcLsB3nTx|4E=&`_OQc0kYPxo~lKGrapFDd*2C&>d|s`iPh z<8vIyEn1j6p+mu|s&8fW);2&d8>;V`+0|A(QOd(!!P~;R#0%Qf7_-L&wWk_aU}!KK z&nYja(T?vTlr!1rFL@OmGT^4S>;>&7iu>FjlUKKD+vyZ?BY??h0k;)Igs zP?&K9?=^2JH(W`GByZnosHm&!<=O>p>8gQ+N>rSVmW-5EF;Uq5KHa(oB6;C@9pM(6 ziJ_OTTR3XUJ2xOyi_Ix2C1k+c#3c_ z_08R-dpCrZb%&+^ms(y)2rp#HoBU^7qsA}BG;-dvNRiV0O|2g4(Nw?Hpv~7^emlhK z1Un43W;~b$;3sD^KwK?v}Xa^cuRv5sDa@8ZJy>6T8aZr#f@e&%#qx~+4t_^H}X@_gln*pVK ztDthtcm(moOHuN0B?=glE;2sVW>fSo9`W$e%gj=hs_>Tg)-+%njTn{nq1Ig_UKr0x zU(3n2kgW9jCtL7rD{tR2R<~Rwb3mZyFkeLW0*??gDn5tDiT$GD<5SQ_6o|6^zaw8l z(t8d;-my!sLY!=sS(f(!FJQW5saZly;D>TZcKxA%hQ?~y?J)6)6D2vop5awK);(vP z6-8e!Gk!?s^-1YAr>NEYpH#n!A)p z^j<7q5d=q9jpMw0Wb}qNsRV5{SyYJ1VCPn?AeTw^Yy8_w6+osHMDac|EuFAOH`Zpw zHXZ$PU3l*mME~GFJo?Qs%At?0P-+C%qr3IU%22%9FSN#sZW=NuPc`OG8}|$$x4yB{ z@VMbhXYq!ebaKGQqN@0>HFXmW*eq&SFfQqn%+Gg$L&%M<2euT0;&+*5K|{jI@aIpS z(t8{Yo9|lJ1Qwo~yBN?s>N>eKXF_5Vo*cWp`JZrm-4OqA9%Qs$=$1wCdJbmU;+ODD zXscR=;LDwYZ-34|rkD9%Nm;oCN??lQ?@O6OoKd>B2!0y(ohJsA5y-YNn4s~EJr%}b zaZIHI0P{kAWpnwuLK7E=qkuMa(thq;}09BVFA^6QiJn(fg^U zB?%7i#G{myT_P2DrFmzsK{RT|K!?Yr_ci-W7O0}BrsM-aVZ#_?P}d!F^OIW>jV#`d z0$C;f@5rb#JHbl-^=g)RC>KFghU=*injm^hDagGLs;mrd3nK`-p1XnK zl{cXvTF%PbGBVF*StyNZ+g zi?YIcnDUF)?^>MJQoy8aI$0Yp&7ay@x<)sajdG6$;R_;_EvM`iu9vn3^oWpxsvAllPOg{*hA|`oZ>6Bt3EefPG^} zk$wFH>cxf$)9d?0?C5d!#Ki5q%`$1>dis5mnG9&ER{_>A_^;>>@Z>zn&Vtk} zk9jv_|J@Cdjalr+0NBh}N{nohq0q^-p3N6I)n3bl_*Te%UC~lSXr!jBglBgzBGSHT z+w03o#ZidO_}9mAhkwP+m46Xqbv2qLslO`tbPA`Pjt8WchMEva^zQQy_iefT4^FF_ zey6hOg{>UmiIG!RsOJAT=$W=U9hEYmnBwC z&HD=I^bIY+e^EXsIBEKTza#epzmjse6J;qhs1IecLi#NG(%_0qsybJ9o}n{QJO<9~ zsMyd+s-3Kz(UIRYZX5nL&0}%Vmb#8SlmC#&`RC~LG!$pt{auQ)wz=Ikf7d(z7F{No z5#2s@O5jY=ABXD%?7K7%#^SBt64YinVI>qiC+L-Zjw@pD#hAito)0TX+$Gk?y6dR} zq=mfd+O5=ZG&F}yQjY$wt5yF#R>SZW_jMHMKBN=kIA%+`C%C zrf16Gm8Pk>shNN2T#uL)M5E8v**OtrH>8KVx>78lk|2z*g@I%-JZ4g^p@8US{C=0f zVD!=_Konm5O_7#^QmZa`qImea5ban*zj)BGn|b1tqyWw7CdJ+J`%t;D$$LftW56Kk z5iJ8cE4=tI-MBR^hATKUwLh0mjA^-BBA2^;JQtNn=Xsjv`+>~T} zyytp!xi;tc_lHb9KASU!7458pAB}A>VcAo=6kZs<>ftqx$BA1@51w_6*mZY*xvCr^ zAD1W1i6U7-8_~8qru+l$Hl_SU{vYoR@z5(9VWHv8$I`ACxE)UX;5Lt!u57|?$5IwE zThZeSQLzVk!UoPs$-=CuC-|HJuQ#?dZOy`01&8aChbtEgX< zX{HRBMKQ&bGgq9TM2la|lm~OFNuh!^&vC}nM#JwFuklYc7rJ{aeMOIr58n`n(WZq{ z7XzhRP32`>!^%IaX-YM;T(H(}Ro5uLbhUe5=M+~~Phq=TOjSH*<#^IH5%749voa`mYpRH7Le+oOHeA+3GF~{ICtAad z?OFc|&Ly_(wx5b!|Kh2Q zM^AM{XitscU@#c{%MEA;h_-*E*`+4Bl%!jDO@4wkqp_4UD3$@{D@3Fou$M*&W3SMW zDqlu9==Nt37svslP5hBUE}gHfyP^&zY-HwqDu==X&~s1lpKGkLVBmGj1?QwjD*?SL zhY-*5HJB#zri%{rmy}t&Z2^N>qm6qzMcC-PoW#7{)|Y_uZF*T3@x+@t;(lq%$#e7t z@pJtcBEG5UpWtT9H>%km*oOTl)lJ~KxJ+E;=Fs;-570g3ecE^VtbZu`WV12Mdg!TM z%4zD^Lo^d{+45{ZtK-7{g8VKg^9*sL_lS!RjT+$lZ* zi@ele0d6gYTnuz#V&~?_M&(F$ z?Y`1=z@769claLe*0&*{T#L!lT>}=~)aWrjd94U{4j==kxLs4Z4^QYG~9fg4+kgPv1^PYkl{g0ckcr3NHFe z*p1QS8{~I!^`_fGH3mz9`-W;auO-<`CVXOSj${Hdct7?qkNnB7ufFmw8ZhYado9Q9 zn>5>3Zys2C+0}Zmq|Z2?`osB8bDW)A!TYJh`wv{%+!>|6`qX^7LQ^;+?!e262%BXUj(U1L>8T5p=d4H9i&8z+?N`{HZq-<-Os|8t9&QH_ z6~-2#>HDr@x~{27*+}o+tTR_zY7#6;ef483FEnDldeH3uKh{nW_c~u9%xHHj%10nd z{zbl;9bzg}^uDJ38b1^EYeVW4;Eq>Plyz6t;?@lTY%w4P+ zTE8UGpFq99Q+G3p&t7oW5eO4Qj)x>yJyFRT>~@wFm~+%r{5pBT!CXij5MUTk^L zPqPQ*88VJVCd((HDvh#%-j`#FL<`*@vaN*y(X4cb<*%}>uSB26JjOY@lD|fDh~c#B z4gG{MukW~*XSZJ&{RfQo;M2@!*gGi80(Xvh-!lKc4}=*mYgBK4!PH})6L<>7M*k?*A*@tsZ>egiirB6I8|s58 zUH7TBy#3vbFXn>2Dg?&7^2n}kwS5UIq4X>u}fgnD=JFL>`t_3x_sc}aPw zM2XzvI^0?9H#L0uuK{7F6#1{+x4*D#Fd9J{7g{tHz^$2KZDZsiyf0G`&mEGk=ev@L z=O7D*BhbLUnaAW8ud!oL%*FCoTI?p0AZxvYoPuSvw~tMI0_{ww7 zS@3CIXfN9xbjbnxEEg3K?&65b_RPOlXG#W^VpUFOCv56bKeTEW@m z>W{9WsEq7WiVp+e<-eBqGlUw5Un{VZ@aV;qYowaP;CSY9 zN(k4CQFT@F7f)rXgYt7WQ)})Zn+HU-j~u zqhlnBdp6B)u(JgedQ65%YfTqjNDBTjW9$)g3i+xi_5(^+r^{X1od`j{{n>IHoA9SF~4w~K^t3l=Tdwqr^RgUQpBu5;5uc{lT& z1OtEfTAd)MIN3vv8cluwsVxexgq z<(>TlDx74_<9};XU+cj$<@ntC!OPiuwv58ZCmn+%e{v(k*5290+-Nu&mV=hvScvkU z4gXV}WVm#@Lyej;|At;1A=l-I4)0?*Jd^%}a;K6X2#XBz7915mor*kHd_J+xv#vu5 zGgTEgW8zJ(WzTI@>2gDf$P3J15)MfKtDQ;$6li%NK^=kS`J#${`LNpb-S96!umvePyq#G=Kb z4LD!8h)i>;w+f>?T~A8PSsF3bPwT~AR=vIe`i;t?A`SpL^tLJe#~RP7Wc+d^+9-}g zALW7zy;m+g#vOU(W1*ukPR$95!l^kFi-^py+^_hoyA-wA)fsINM&lpd0EAs=wLIx$ zQ30&Ujd(?V_(V}830*7MByE`4T94srrIa2EtKJ;Z{IRcm{v7*Wm|kg#Ky#rB(=jg0 zYz*-bv=@nMsA9{rPmk^0Igl7lEDIN7Oi&$)5hKFAS-wLRlU8O-M;jc{UTx}qL@VF( z&Maw}sRcIM^ZEL1`)t!L1o7_`rtR@isk{|v{|e8eYO@lA);Y1~)b{0xp)Yzu=&{8l z@pw^>&Itv?Q<(Bo-xRFp$1qw9q*mQT^@8%+mE6L5gST>GXID|GbjJ7kHs_oS>1Pso zm%0{T@Bs-2+&%ao6|`^8aKlBAUh&-1nDooX2PrcpJAixASw=YG_#b894tyR{Q z4m%DlLS~+r2owgo*fW|ifr8DOQu)#>f5cgb@eP&E$y^Zi)3}fn>n+X=sg_r3A&VXh zR=v#Zmk{K6;p*GpC{7JStZCr*)MUX_eQ)<#x8}W6?os<#P;}>*PBe+NMql`&j`U~e z4?lrQmQ%j7nOrwRHp%P!6OTOUz3v;L%?o6z0-^5SQkXSlf^{)4@)tgK+Vp6AunaQpj!hS4-0;LO3wOEd;aoHIH*PJ%ipN924QCp#tP0Y{1GTaT^I!(PC#DEi`l)Odp&35 z=70HtNnyMTCrth{Jh4&DDDn0GjNk*HdAx- zrP889Pesy&hg(;4GZZm2x=}QfeuZ=B7??U6%Aim>#3PTR81W?F4Do}<70Yk@3o?o2kZKDMcVMl?^Pgntj|l-i;Cb}$dW(IeL$9F zfq%Z?HQA6Bd4jxhe}ws11=9RYbbCOE^gdNzc*nJ73-7Es+&8jr22{)HuB%lrg?^w+#WJ7-H=l5=4}srA)Vh>S><7^^zYUOP)9+hpu*q0YQ9l@*jt7?1#-9cC@Pmq9lZ&+URi_5+#<=(nRT6)j^1 z)*#mPUGolNWsCDVK~t~i*dLT)CA=^Ye2Hd5>Qf#YqIo=zdLrIU0kGc>p6U5DlC9~S z_!qMF@~MfnzISz|u>VVy&_-+2Gc=-r7km#rAm3+<#wR|_fO~f?eKa=ma?lm-#iyhs zb>J`MBiJZ`?SVJ7m;ztd&TmM+jm34H#uiCEY&n&Fy#pv- z=1}p2C-4hB_&b28^HS01^yhh2((P75>vV8{^EJ6ZL3iorLTdP^ar0dDI*z4RGgTy2 zm)L~gS{gZlA!GPo`OGyZ{t!&=y8iBeM_f&-HXG#J>&i#u1~F+n*sj)OSs~Hok_+hq z^@F6xNL1Xik%;PK4lOD3C*qcUH18oaGCTOVLJjSVij$Dz)39u9#<$V!9>%X0Gt? z6w)~e+!kBVlmM;E>HRnBtG?}V;b_zs z=1BwI5G)1nC%yvVBz%~qo_!N)E|+Dk)s4cBT!i{_O6TgOan!p9W-nU{j^?hk+sTH# zoeV3sR8--jsz?YmZ% zc-6hcrn&VlWD?O<$6RjxEXqk_jdQVdbE-Z|>@hdGm)YFJy*3Nm4;DdmYs}5Hl1GEHv$>?pzZ?`;$8YqAroD_Q9M^!%9hf1+|dq}Hax!=|KMaLM7ntX zu|%wjnC6O9_Xn99$?KT*DPLUrDqgFQRIl2zen+rUASUTuEK%&W_FU1ExgGH1so}%2 z&{qVB+oK4Ml%IO2w`SR$7Cot{vx7^EIQPF$lWviYGY0>eaco{43IiKAV2fYwXie>d zBLKDbQ7UQBj~L${ar#(XhV+WQPYP1(0r9N2%u;%-E4KEPk~>EfiHO@xre^lLSwaVConq zOdodxCxHpPM9);XTF_?Bm!wdfr__-8moXRC)g_pd8^T#DNhP$t!r@`b4w*jRu}RIoA0a{GsOk$e~TO)8)B?yxNx=34N@zUGx9?w!Ua$5t;?fVecw$2S<2`;Isj~ z#!sCeID8qF{vh_-Q_VfuD^k-pDiqe8ve<>SWoKHMge$94{$$LKwvQ!h-#l1OD+xYG50Sqi2YiLL< zC72|!Mgd|t?G<*BgE7Umiu1N$G_P7WBuEpsuF~?y1 zdHyhf1eKhVN37d8-=7UIQ7Tk6F^V8+80`c$D6t9;7r+4KFH>Wz;j+Kz}JudwHf~v`KW+o_eY^e?WNtQwIu!e*mcllWS%all*^?ipVt#@J+ zV19^Ol(pP8Gem$z@FwK#dcb8jHRPq6Q7^gM5#n93ZoAgR*^0h+tRHuiJ!C}hN-`nq za8WtbYvTBNLTdIn_2z+%JQT1~P%Xs?U!C9cp8SjckhxdT^yxfBvcS^Upf|^*NioD* z%M4ihAE^Kqq5txhXESTTS|EOdYl_=HdP@`wezkv&ot4^ZgND)?FgY|LUjjiP4Z4lt ztj7iXG{~2ymf^hX;paqW8Xc}DYUv~MaJgL~X*S461{TjY7oKDyq&h%@?uKJCaCk7= zL!WNSXI?zwSwrZLW?N0)Aw*Bc6d3LxF3oAuE`vR31I7DNIClTH_FCB7uDK=TtXat% zF~1}Lf0OVRj3}>NNajB*6>7%lVZ6ik%zd+WCBnA}XYWP$$h^>{8lAsml8i+TmEz&q zquv2=Avexs+;KZBYdOQ6kG?PCy;|8dJtkVc?oJIxlN66#a4=I$yym)K|Em^P{FP*e z=V>D#7JeFWscpUK0sxsOi&*%yltF*xQk{JO$F z*)8sKcbO>XGQtpVbXSPLkMkib2;BY~zndsdXLyj8HCy1tp7|v|M%n#-%Is`#D`*~} zj+x A!Ur#QT$i;m{|Vnj+-K`V&DVa%`Bi4L>tURgG`vlE6UfRvLqS3rd&Mio*B0 z2yQh8-teGpfl0ebZDfP4mPY&N?Bc<3uzw`Q0iEyw>eqB;a@*;KW^M$fI@B?SX%11x z)th=@a8415Cm)!>jEYPI$1+d6Ebp8S2)-lJbPivc zIQ5iWGhHbbz8H`Y^v*vJGhN8XSqYlJzv8=-LtC;edb11b`TrNSUlPBYH|W`k0Q|^P zhLQ}P%4W*BTA)7~GKd=Aa?i)Pa#=wFh(^WE%u*EQIBfp>O!M&MT))heU;bw+fjDI% zOloXJgtVJ2KVI$0QiUQKitU+cPE0)jga-`tRP%qx=t>P^WR^rHBKT;^R0|o`1&YOL z)yR($_6q}6f3O(3AC3?bt*K5?wWz6P2T)vc?I0Bp%8In(hI=P#o3H%_E7CsYk#44O zH!o@FpOV}YPrMg!=4Eg2J{IM8pnTCQUFPe-N7Asa%=AK-JDhdD%$n;+>kNgun{bfo zLMx?C!ZzFTZ6Vk9V3hhm5krQXxuW2Wbvs*_PyHns0sHLhvL77=z<_Nbi5-neRAro4 z5ZD`A;*=HaRQZFmMIL$$SP=Hr668Qf9hG+Ey|LyhyfZ$yR_JHRVuI;yGqw6s_qQK) zjdVV>@$JQWPN=`_-)ZW*!||*tVw}K%Re@tQ*xSiDkU4+ET9s z?kYVsbdp9rAc~rc%#Xg;S$K#xWo$P6v|2S%cYWc`gCp|1Eno^5VkWOogw(5ju>9-9 zrvtgr?-N)7yQ8*|ij1a!*~>0pawqKC*USu@8jp)Kl7=8-<`(QK+3gU{5_~{mCYY~) z$Nh6+Qzi@fKqtewpwiLAZ5A64F`GyH8itZSjvUf+4-1=yo%2tr!0HJ6%q zNHo(}M2z4u$GO)g1l|L&EB-f^E_0ot_*=R7+EyrN>;~m^3hN5|8~S8xg57XIcsAkl z`wZwuMftAUe?Cw?SL1GpBe~)P z>DtO4aC zK3#g6WZmLbiHSX7_I|iyC}yS5jxfPjl3;b-q&Y}CZ+GBl381_}vSx%)T~fyw;u8VO z7b=zSo9I(!x63)Zzx*>(nzmjv|5$JvoRNbf{4jAJ!Aj<7n9|N$x)uxYy20^Y(+!b z<44tQJ?tC%8k(1hNWHYRu|ogfksku-^gSipY&UtkGM0tBZ`@lJx#d?;pk+$De}-!) zYpn%AY8#HKPNzDTKda^*X6eN)0%x}9YnWb;Ph7Oy8`O)=SpPLsT2RLSj+njp8(xrR zKc&u0v>Vw)fxGW2xeFP+J$C6aHWCuq12b|#%bh|TsLImJG=BDuv0{G)OG|nleEASW zS1Ru}n4J4lSX!c+X&dT5FwGNSr!nTHiEIxIj02LMP(2cj)f;U-#?nQXe+hM)I)~`H-OY-dNxMrH*i~yko$wxTS+`)uSM|=xYaPQSu--wT zqW>UJNvyEuoy-#XL{qD-g3N2aOAWg2z>r6~W`z?|L*vzdBMA*`XGC;9)0g#vi-n~O#*F(7SUpU!6m>4~Hla^wa~)E#Z{`w*L%Ure%wlS^Bw zp$7Jn$8d=L)N>7lfEV zI_=nsSfF0JVm>JPpUL5wnmm4ezSL)l-JAFg{r0AYM_&4wGlJi8$Kz^?9kg_;^^SWk zl18W*d=J|T2>V)hE}ALS2z$J57F9y5T1lmXEGiB~ez`PAa0luomwx<{&Panjai^<3 z6edq?US@4fJcD0&cgn;7WMmG1U$O+=lT6Ry57z_+Tl53pi(oF;T-jILS3Z@MU!bAJ z5%|n3KczgXF+Vat+ci_*!{rExJtr>JFjOHc$30U7wzA49j#*qJ2ArV#yRy$ri@QMn z(^PdvWShF%x1TeC0-i~KG?{Rs_0@xc&^gz9lQQHo-(SGiselv1H8@oD#p|TT%_z@! z=szYW$xLV!RA>w?T53_YQ&sKP`^icSQBinD7mpj=oEnuVx zNfJTlpt^!@l___@O(wyuRuOLU4d&tN<{>RA7>upVy#cPg1_#yLKM8`U>RdTvP5ik{zF_#3X}E!extV~I70 z-=fO4nmJ*9jlMeWI8?o7ar?o`l1`fP(;XFmVK*t7OT5=h3@u;!`2`-^nx4~NODMAzUZ$sQiFdnQ+^PHco08-LFq08x zF@@&XT>N1%n#~CsKPp$U>>mZU)@CPkKm&}RUF6pDPP5?6soO&+dwX{=6x%PeD7ku9 z5LE1`X6_K>O5fxGM>+KY)Ydk~v>R&esQD3;Oh9FlvcU`2SlTHJ4lN11IZ5-Jmh1um zKf@lu(E^T%Y{zCMU?cCAK*dL;-An>;p88SlOWB0YtRS1R^0cQ01 z0U4&Biso=SV~e#MaM^4{u*f^|=I#q)b|O3FBRJZkh~txkcaMI2RkOE!{kHg|6V|b_ zze<`kl@NII&9cNJBkiboQlb;Ox;}?|rQ9d@k4Ec(cyn}_mL@knxaM>9e@FWNo{yr% zsG>p(B+Etln*FzkJ=EwTK1%gJJyS4QiTtf_Cb z0;8<8t{*vbIge^8!2dh4H0+cSiA!#YFc8lWRlne36K>%j=Qv+lZW3j$CNuoDW{5G# zq{zN0D~-k;kq?Q0F~YMETZjqkR-ye!W7*tq@h|yBlqh17E}nSEnnSb4u8O{~p{neU)_g#0 z4MJj>6?Q&>H|F{pYh!)r9bMlzmzLhA+2TO9 zDr-I;mdu(09&4TLm$Wh1ha1KD1o&q9iWsBquN;_$lGz~kLMPQ-c*NH?xxd$K^GBYh zC#QADt#RHjxSiO}F<5FWd!IwGDgXE_e*qUL@#5+x+bU$J(=)437?9eFW_RCoRC}ub z*$r~7hS^9;COpZ1Amw{|RbyS96B-vC#6KVs^HeJvZ!UL<*`KFaupu_e{?|mbTaZ%q zbv>7QOEJu61PnEU!ii@zl1KO^p65~`h_CW)^}XZItcK`%cF|5j7sDT}y4yzi22yWx zoggip^Q+>3MGvnB2awC=*I%VtlW&G0TQp=Pi(5xE`UQ#rV6N~ikYok#UlFk~lSzem zyt_h9**Wu4dx+o44l)VF#^~*|Cc3NwYVV5|BvpD#guY2?o-E7%C-0v_$Hp`4?j8!>=XyVHj4eIb zuywmZNLkKfzuUD)M7fmf=h;tt?-)7B9h|Ty=*2l>C^OFdtbwZsZ97USNSZBycj_`eIa zd&D`Hd!VT>9_9Q~_sx|)yA3z)yN(nAeDY3f1Cb20%FhbkLtvAv$9P{{%PscC0?3w6 z7TzF{>ZWqtR-`KP@$B(+4`IuxF`tT2JQ5*AC(_>efI=@ z`{@~ZH+wxsA9^m=m>u-<_eMxJE=z*&1CY7Hc`$T6@i%*(|srS`ts?e>(N zre~JpnPM#q;e>OPEn@-$U4&X2rEUj76n63EsKu=p_b-b0hGrv})XvcOU4ndS`ViHN ze6h%3!d$TM!tr3{l{~ZpLTo8EghCM!3&nO;y6J!aw&wboTbAsrcS@h{m8HsBndjNE z@ReqSyvWI17e~LNvlGV!-YRR9r}Gx9(YVZip9*nGwr;WGTb$k8YWf*;#z?I1xnxG1 zdM#G9R7N1NKUfySaxsdEwJ!(~4s~=5?{qdUWto6J+TxvcuR}A%3+@en`*J9psU1xj zw7NmffWhiUYZyyneGlrao={BJ7e{ zJskKQOBi!b}&{;_Au zhMICB%(~{WPz#Zh?Mu~oh08oXB*CYK7LwR1L8+*?huK9bG{I}ZVfg;BPlW0pnUE*Q zSsc_S5PXO~r=gR#r(d8P40#@;NHE5#su?4UxZWeM(1d6z637Yz@QR3Gx${qrIQH}= zM4@24Hro^JLr!gZh5uSeJY(cuzUS_jUD6okJ9fe-J@k*lEvoZp*&c$>waVv8VGa&P zEOMEor_1^BmAa`FwEFIR@v+b%jkttLK5j|_Z#KGQxQEVIOP&b=VFwd~EYuc;gn!^* zyHVdp_y#2N__>>gj4x_;cJ<=cN6&JMh8*EUUrtc7I_nc@uyd)YC~Tmt6#Z7`z7prW z(em-#HOxtplO5hZIJ)=rm`gMLG)ZC(_LhH~CWg{)&-1s^mdP^Ig&z8xd+|pZWXZVk z2!CaqP_*bV=*CqpOxlOZQViTE2az9bUlBrsfGCYlyxCm(dF?9dsP(jE_j}J^6emD#&UYM z<&cL1{yjCxofTI|p+vwrd46LujF{s0_$2Ov(9&HtCtD3zz*v?Uot91ja_+`q9BPKo zf%A;mO$AS+!f4n{baB=`ll8CR(=S?bKR1G~b*L6z~K~TckH7hd( zM_nBB#6}r?QFWCLx?+yxyC8_%#pZ8(_XbI9d|}qF5U4aBk9D<_F0Uc?h9KC)%&FwdVNlsV!`WPuvm#;pe{{!#ScU*&e&pz$5lA zI$I8<5Qdz4{dl-}IH54-I25mj$$d13u;~2V{Wk&xLR>z5VK&F{g1T#3z)&kV zM)hGf{`SpRBh2$JT>Km{Ujsf!VS|dl%K1b;T>3fy(D|vZnN6CXLNDoD5ja(?^SY$7 z_t0kIUcAWH-HC?7qVoXj;TojD`M!owpGwIJN2|Rj@Okhjfs~-vz_ALF*zpxo5Wln| zR1yS?iUq8O-TbPdE{G@>5vR|VkyAq+q84EdM81hSA*h4d6))Gg=2VkPuj<>R^74!8 zZu@Y+X5D{M@1ZXu0`nuS&~5aW-lN%OsQ+CAh3!JLdHT&?omF^^mx?Qj(!b4(z|2F0uG_jH($4*w zVm*ylCcdNp{Jh|;{Y@v)%k_72Q!#5&^i}WhSBVMR0w8Rk{=_YoSIBp}%z1cX$VXYZ zwzUoh#|3xW881_z=QwK0V@>bcLSy1SSUc9CW=Hkq<7(gv{KpWF7e<`!oBIZaES|%4 z5l`vvTbOHPM;7p~J=0|~TMOZ2;Z#&)WHwlayC4!R;B|HG14N-vvUb@XZEk~Zk*vQ0 z$YQi7*Ika5PYg434fT3ve-XUxAw-`#oJtIT2g(Amc2pLS2LfZWwB)J&z+6Kso-`=N z+51{^Hk2K>9;8WiFueDUdY5+V7w@4SUw8SUo}ieQipCQdTlJZNDDirASgn$W{Y?4+ z!WPXv?2Tys?+AN(GM`EWP(|hSbSK{1uBht;3D$7}o9#Etn+&Btnt5sOsRc}>IA3Z{ zu9CiJ6A%&W`N=3}|4c)zGV}DMlS9^!{sXD%rWv+%eNv<*k3=k^>}iGPY51EGbAsyB zP^;SMpd!b08X8tyEBX3ID0eOyCgN?)^QJ-Eac)dkMIh{OY}$0dLFu~2HyhBYV>5QD z7e@q=mbl^BtrmrbmT3_3^b$**Gx>TTWT%8~s!#-}8Z$gyAHsiiTY`)*vD9PTUck!- zaLjp-xt6=(BoR{1NZsmg)T@i=!Q-K{Omb>?CdsaS%Ff+es;Z#XOd?!9Oh#y~h0`S2 zHWE39GgF9(ly&%Ll~V4PR|$^G{V`Ize5&D?qfO{pIjqV)*!<`nOl`Rf&pw=BxpPiw zP)pYF7X6=4AmU#`9Yq2Y(l7tFnbB`814xrn)htk^88b0!yHR23YRFZXxBIng=Sdbx zMwi`3JvXTGZwsXOVm-)j6=XT3QpXd`=D~8Cds=G(ZwfDfIPnO3?5T&l#-(2_Jg~0V zH0Ha}c}=|>-EWffjb7%4Jpq`)^|G_QU-QD%$?p1N;;4I3Z?l9-CLJJvvfdNp<`i{M zwe5GgokL+YAnvMnoahC+eSW_Dsv1tjsp0z^V1uj3LTR90EA|cag_KkCNcXcCqWglQ z*H4offf6pxO2y|n(wd^fb9+ICl6_6Fx5lUfIc4$8vs`@X7}-G!)}}} zwdx<=bH?z0`D^1kC$rFEx2cRDUA9hbV{%mnn;{s8Coh zL@*bHHr-g2c{CNfw+SQ_TEQn7z@{GNK0!TT3F@0{$hC_;ryd_WQAhU{>QzcuveutmiR z8pzlr69AMB2b05NzuDjxQo6!gAbBw$VoVN%?GeTLpm=T!ko+_TBGbhm%f}u!uwr4; zy>i7@qOPS6*0(!Y-~8-v(@MhFqHkW+c-eruCP8xS%NahJ+%h5W5aey~G{)iigHrFZ z%!#Pv{xX*#n(Wo;%Af*GK}|V29W)J`d&%W8bW1XJAA zbzPl$=}RtQay3z*;Eid_J4?PhVGnPUvZd$Q{ZudBRnasoimF~*dPCy}JFo)ZYyZxK z6V2G3o>eZ%OGWF5r!h9YV5+rE(KDQ6c69j%6~Rh)fWLPuK^MKyk*oWXT70_D-JxFc;@XLMZ&lasHpU_=Xs&&m9}#?P zP-SUu_^HUHSk|LQ12jf>1^isjhcK$REWoL2nHkng-N}cJKcFrwj;G8I6kWW(7xUKM z@oyyJZ@xF)4X+*Od)Sj0GFSUjscQZ#!)Xa`OiYZ9 z(O7MI&38%Pfj+`N^fPC*bYFQwl7>~s37ry`B1OHB6HZ$z_r!#0te;2>nW61C^+uEu zgM;J|y7(EWU~!S=8vmYhs^trw$0PnxI200WKj;#S7aB>tNMsfHkM6N&kINvHC_~bX zaJ8RbdfF#{*JP&H31=MgMCMbg;N=H`(X6|(7>;jJ#nfo}l*P6wU`@X@dPjqF&3Jk$ z$3=LsWRqkmHvFc!UnY@MMZY`5_NG71^~+B65Pd!Te*ob?9>0bJK@rC%!a~N|BaWNU zShx}UIY9jAIm9!8Htl|iQSc+SAgf=4G0<4#{{Yaw?H97m0?O;zq4-E0W#f^6n6TUS zXE^ZGo%kWN37Rj_{{Zt14f|P7>`HGer&hH z{{Rlo{HnDH4y?o{^1Ri@ii3mW4u)@pz4%a+KH?r0D!4Gbb?lJQ36`~oF(W5|XYfm4 znn58i@Z@_O(Boutz`wvC;~E;nR*Az$abcK2uO!AO*=XBCmNJoK(qlErqu$XA=ydeh z#-@;-Uxd#SM2&wusI+~j$>=Iv6M-Z$JMeJ~;G}P2qlW}n2An~B9*RSi1=S^nCjA*i zHG4XL3YbYza;6Sn@L;#$q-d~kw0D+;1?XYu_BKEGCFoj2e~_l=ufU{1BoT^9Sq2wj zDlfi6MH;X_12({nX<@gE9O*Hc2eOo9sLvrZ@yPXVt_znzUY`NwFVr+-ETlXYqnx9aKzgBMGE&8uTf&V_azx=%6Ry%5wz$kB+n0<5x!O zqnKBNp_oNSxuLW|>{Nz~V3P25%2Qb`kej_JAgRN&3x)8+G?~UDKg#qo4@TgZz&FY@ zDRaX#$)XTH@C7c1W5D!Fq7C5GhMobBmV$o67z>pjS>mTjNl@! zMCl_`(5Z=ZQW4;qZZg+>5ppeNdLM+%_{}&YgHY8b#Au7~g${(;5TesU;I~T5XzvYd zYL1nol!``7R=FKP%)>3U8C3K>N=6C>udk)YaViN0 zUgk5Kl_O7QMT?nVDbH8nDsc+fE4jwbv@F#A4mr_k6qIP)T%XgHQ~kOmk&VfZ!a_O% z`=xCXHK&5a^x*Y3c@<2@*CN*rH$-o+jdXMxGhilL9L6!&G{CMX<@8yn1xiloPLU## zG~&+>>^#x^wgJ+7b=s3BNOfRM3B}$+46%x+Oa4qazlbk5GIS=Cvd5fX_7MXsF;Ngvg zJ0`QiGTau@_GHEmMHZ4Hf*6rs;Bv~2_|gt9@LK->%9V?aIT)htIAG7juZnhIg5$&? z4#+Uu$d@k-S!oo<=t@zW;dv>B`d0!)jU22kg>4*t7$p4+ zqgJXhy&^9n>DBrZoJ_v4&pMEX3#0zjWaVrd+$sM`zEp(-iJ-ffNRI5f@j zhUTqC<$uuqR6={^CrPMDF*ELAkUr_~Jg;O==pzs=TBQ3=vEv6h8Z0H0B|ZVfAJMJ< z09d@MF3_}AZbjIr$|<3?o{DqJUXS|NIf_A?Dw5!`Hk8qO9Q+#6sOh*=aoh^d7edTt z(3Q9JZFo26O@ymOu3ypQT|#8Swwih}63&>Mn^b|qqAPqa)32rGn3gd==?a$!cd_RP zc=;l4CwGCa7mNz#nCx7e`aBdx&#xHl-k94+t=3ylm@{{Y)Kdk#}l8?D#yc8eFIJc*B0PxNk;rxB8qeMkNp z7dtxO%l`my#TV#OSW_eY6!3i-#@}Z!tsRJ|_c5jrIfjZswmb=yEe-fDqePqF!-5f$ zzXo2W{{W@>sXu1%3pIa4;6Z|mk*DOD!Mq}-&IrAo4fY-A^#SQVg!7VT(dYEOb|#O* z5qwYo03wrw8ukbm0>e+yHd3Jtr$=A#XNlnjL{cOZ*gb@K5yU`ge}nM{o*#x%jBIdj zVDxG_HRhT#>}{Un%u2P7I4Fmw@T?ZoDhh_wOckNgXve5aPa_Z#EHJM^R9+b5<|dMZ zhXx?1LI^<6`VJ+Bsx#SMgojAZs}s>3j7XMyHke@TL9b$3P(%7F)59GN-Uo{fY+=24 zx_%U*Ir>&;m$6BsSMW?E)GLku0MSBEpNIbd01ZiTi!}ogbMzpIj~ON-Xs&`Q8Fh57^1UL7>+!&OK1ve%s2H9Su@e_ zF3R{i7IlI~OhKvH2f(L42BU`ZKiP`#)aN&lJ(VQeN z17tNvV&iQRaivg&ZVA|}HokIC*j8xiX;7H@JlaTZp$q7p1>p>3^m2>Kq92|=%72&O z*tyuSjBu!>DA{4Cn`X8r*l*W^LSy7mYZK^7jtgB1h?j+f@T3rL%VQM4p%iSR@(qoS z0~;yG>%$r1Q0T#W2tEf`@J_iDGFK%xVNT=3oarHkE<~+koEXAT<`uu_wS8j5&Lj}N z@Fta}H2NUT{FtQ~^@<>#3{8upfksc^6N#eqBYYl^if;!jfrC%jgVvg7sT>S**{P&8 z>{XhWLxt>4aO6=#6MP7s*(fHSn;)?rV97GVGNw0JflcgRC{9EZwwsd*tXXMn+XJZN zSXQH|L#2`u6{W=?7))r2-bV|SB>4)DLcQE#JCMao*;HP}zku=~1g{u1!l(kTZ}ead zawQur?p>4`dC`yk$Mi(JK|sk}BO9SC4$SzHa#-;TT?{{Z>W%&{+mi_P#wIUWiY zF;Jn8MF;R)n0TN|SY%2Gniq?Fci~D=v9Yng2scI5|#Agf^CwtKo)JD@!b>D7#`VMeuHia9+zkhEpE|`QU4EdS_X`NQL@r z5OAIFXo}1OsrTU~F;USO9|9!DIF6J4jt!`eSd%ZZ##ax}R=6(4FYq~N>OW#-Nd^YL z{{TY&0Gr;Yqg3HGOyDAvh4BtWN3o~kU!j!}lLaZlMqE1o00n&W=a2AP8##D$|-Dq`hg&CYetWvmtr-p`=q9@r7`AuRO^w;BN8moCRUe zCSa94;Qs*p2;7iz!xp?DB@@Vcc2{OjM~bF#Iei%(nHMF}-q5WlPDcW^!$@_UFtHMm{4w^P^njZR zy9{cG*!X8KD?ZT`%pta9lVe+i))%J~d2PXsX%DK9Ww?E@VhV+(eT}Mi4ZwcF?Dz`I za#Hhyu7XmgDR!u}s|KseGO_YNYLyk+M2D3S++J8!_(Jpy2P#AV0RD;-{BM<)a3SVD zW`F%3h`b|Hs7;JQntCzcgXo*UlxgBjLU^a_zdz_pM#7lnbZ{Fn$lj6gJZ{VW2>tke zI2|4{k@#*6{t!Y4NS%$E@I*95r*`;f{{Tn&K6#|9u;k~F&W~5vi83lwixORtytp$5 zxWv0NTjK!tg~;9H>|`X~Mqkoy zgjz#{9k`B}cjC&*$tNXi1m@R2V$~dS9`sA_Y-tJ&O@5CjEbKLMev9}juoiLA?sQ|1 zyc$NS7=uDb!lSs#XDSsELF+>kDoc49j~Z5MgR>_I;OLKo9Eb+tsn4S*#6mf5Vstgh zNTq68P>5}OX|$T?gQeHwfByhM{{Z+9un?V{Ha41GDNQ&SL#59ORwhk}?g@{vfd}HL za$ERI;h(bfPI9S!#>lIK_VLiki$>wu;M>BXvZAOqp^!v;U3rLtM<3wckWVs9(4p`p zdFY%BaxANnCeZ$Qd<|-ZZHz4&_$P-7CLz(t>fmbfObZ<)t+*!QpP?g;%@;l#>FlY= z)o5KY`fzaK7C9qa^jij*574PWXD>vf!X&7x8vg)dWF#zOud#9hM$zlQ#-bS4M5HhR z8v?p|8?N$f5;y9JO64QuEy>}WSRVUHeg4LY2tGmhE%;ZXrZy*hdKP$7N*XaVawe4L$$00(VqKIt zlfgtS5Yx*OF~^@uYsQNeDx@;L8-)scI1RyR@sEO)3i=$O*f@g0P>F{;m^^fK2A+{; z;J8SR#MaC&f^>;JW*KOw{SempbLN*?9Rrcqf*QmfUIa1rz>i!My?iQFqnAg}AWH|K z{ZcGBsyiWTi&7he4`UFJ+N?L$^dV@b_fi%+8&PDYK9NMm%`jB|0K$caT67I9Ch*oD zf^u{zMfzvK9xo;;ehiG1*di+`iOJG1X2E7^VcUIzR-6R)KV zD-)qG+$Tl;c`24(gA{Ce&mu%tkxEjOH|0^MX{=8x&!Q2xqQpczGXr5RWHPe_78ytI z^)9g7${-Le55of6+UCr8*Yr-;Ed13Z}+3{C0KpS~Kkn z@Un>P{1ESvLA_Ih{sqy0p^5#G&y79N@S*#KL&S{^XZ%heIH(yDMBgKkKMU}oML1g} zci@&1jZFj}L2)r?UU&W;yBoC`&#;TeL9d8(-)UG(qe^88bB6x_e}b~-A2iU5M;1<$ zhIWGLOG4y{>_8gpqFvhhj%Ggwq#!}2(#D1fmNFLxCLBQ+iOBYlTVJ74x!`8#T5{BN zqmguOVW@C+IyH0AZ$=^VC9M$?7%mDHZd82uzy5ds0OQ|GUj>6S$?EzEmcb!c1(;YT zr)4m4@;RYtXM%+oc<`Zk9^x`qSA#qajJYV8$fL-M4T;hVgL)I|#Pitv6-BQnjsHU+p9gauM zC1MPIkjR&!6RIV$Khnw3ap=^1Lw%&Qz6rTolJdf$!6B%L4>mInhJaW)(8@C*qXg!xHd?$oKwpqQSomD>;L0ZM)oU*lxf1Vs~?`0(sfq$VFldKxkgG80m z#}3b zdx9Xc4G4`RvNr~|*mp={C80EQb~6DpPxy_@u(T5)Mk7h! z?crlt8aC5PwG6l%nrKG_aP&nhq%jqCLPD*Vgi~qgkrbsb`QP%MI4_JDl=l1_ev%Fm z{tz$r4W&mNo`x)gPpM)XZ=_kYIYkMO>#-#uZFsEuGr?SxCcXHgVwalKXS0$0@jZ+_ z3Q-mf(Y5cziu@xOeGL-@$A}@E4fZ~$YDB(go8-h1ehZjbtAaJ24%5*;7?|O}-5J@2 z6&Mq6c^=0}Lxo3TI6jSP@Y$zU_!8Gp;b5OR!myWAGWWPs!g#ba}!-;_j74RuV3=~Hin1pKVc-p!#BXKPW^DG$T z#}(pY)dP`(QCnZ9XQtR_l+s^>D|mNZ3-;GU6EQ??vVcSp1e$@FESwy$&Gqssdy#dF z$XUq4R6!Cko0&|U;DMSb`2_MjzO5s{VG-ZUvkR)^9%CRazCt^e((}uODD6bs&LGUFF@gC0s zFD)tl41*jRz8jHmLQ~u5SB69ArwmKq0$#c)qpURkoVhy-G{!DBlMy_ONP{*SKk%ed zA1PE!*wcZtGL!y_4d#)5vr*_vk#z{ag-j*dIXnli-v`frET~FRg*Qo8q|-g=g)UjO zVhsvy44XazMCjpIE*jXReE^iO;(tU_`wEXI0)428@fVCCB->MZN7)&bXy?rkSnnu6 zfS8Rj=)i3m3Z=l@NYzT2c+o7S7t+Bayh+aVhIso?_|Nm?T#XzY`2PTc=xvrzf0c`&FVx&Js3k)z z@kRlSgYGnOa9^S*Im0w)j9wU?go8w2zLN$1ERLVS_|tS&3=l7IGAvv|Z(}K+J{ue7 ziqZ*uCFow{L_P@!g7ToRg~8B*_An_e6mX66JTLKRYkW0PXjUR)Y8xu1JzhCBiMGns zOh@#j7MS4-@egQtC4}u03{rS((r>lkYBTYuj9j57bm5vKM|K0{a1b&?OH@U#2;3IMb&8;IRh?f;uzW9iWB#17;5-^{YzXwj#P_jD|!s&2p#KfCX zang(-QCyn@ZwR(a;J(P5^b{&BaSlPDyYxnCJz%WNCopNY(~enUNk^!$YiS9yrGYKl z8&|WIqSgs_M|0tTD2)z;LNV8e0!04+0vDcV0WOHB(h^<>Cn7@dVhRh9 z@?jGQGiZ?_fB9IR3@jYE!)~Y1oCx60v2Gv#07HYJcpH;&?1r?FG|{yAE#squD&Yw? zqB=n;ye_bzx8cL|`WS`qu|a9+O?Ev)zZj9x*jjG_c_{|OXEsqAv3^8)t^!cBWTR-d z7n(zf3cDcnGw8%=4_cK=3&@jhg?2aabzxE?o#xQdG&eOFtV4ub`ZZ7`-p5%6Mq0s= zNWwJ+gHMD+-QPza&%ttN)KLp+aD+@n$Z1?A)kP8eBHOrfEBHaY61qPIg`iPUVQrx) zM12WePEB+n*--}?V%#4DB~uY2(XAU*;+lG<2!`-~!c^a*f6$GBcXY-`A@oN?f(cGX zD+UKAcpRcqFA;cB?~kZxy|NIT(FycxFlzW`4+bw1KOB?k${IvNZiV3Fi^5^@CKxIw z$pcl@@XrLGkdYLGAd(?yl1A|HIx!7U+34A^T#f;Ff)|I+jqtoPkj2M|;&|j+Jd=@S z-WN-9Qbr}M-v{GPULQvS(Rs>ZL?mcRj!1iiXTy%=9}pLzN?PJU7s zLe9^_j|upN!WZ;v=l;oM@ltrB`e?05K49JM_B7|9HB=%sw8muP zf&7#qVT~5EXNCGR&A0kFTcf3S>MIcE_xXd0n*A>x^+o6diWo5;80U-!Yvw=tH`@r{)u78n*^UceO4M{+PJDVA$Xn}w`vs}Zzlo)ZCJfXFV0>t zT^^p}MsXFuYSVC8`rulE@N(J8{{RL$p`C@K@c2U+1ckxRiGuKmPXvpl`I06iWIRZI zd}AXLAqYYl;uFM8c!H(Tv0D>2rCy;g5JZ%?$csWTKAK}B~ z_x}I|NMtx8m%)Dvz?Pkq_~cZ2D&dNZa^TZVA1N5QQT9W0PNW=QwaE}}IyW@#`zhZ8 z#LO)de*@;WBP=RUS>FSCZ)kLd3sjr`0AV*8C1(T5js%V~L8j^r3YhauPLPPX426O> zgNuUimLzl7?&yWZEA+vQz6{;kh8KzOMG`|P){M7wOcd!q1}^LLWf?x)I*J|wCR0U4 zQVqHf8<;97Z=t5;Uk9?&8OWibE(OU{aU%eUh}lJi+#f9-2BD4UoJrnrNmkL&V(l8pf#xh+R2e6Vd1- zh;+;mC$S+Sd2H6u#)4HM4HfLekp-gD^ezO2qyCEQf<_1;zRZHXC^OeBv12WO_YUhq&5z71bqfT(9^8?QjUbxGo{NW zkx{gcG|WCT2sgbqmOG5M_%@9H0ELd2RBi0|%2)atCs5i*Nxn`v@nbFCpq_q{iafyt zO=()>Qc>Q}%7c1gr7vVFbz)lOc?a5wkRAQPBp1 z>7H8%A&R1A#r-XW5oFHTf_ytLKY1GP9)ui+y$Q<1h7Aq`d za>Q7~+*rWxeU9TDuuEs7h#Zlw5ny!0>D`rZb0;1YjI@fUKMrun7snyB}TMxoC{P#pP^(Wd>CS;xWTpc;^aOepo?7- z7L%x=csMKmlgj=fr04LMjW)a&)hY#o&Lanm!Fz!0svRJh};r<#={4g@sN=QgG;?bnUp$K8=lxxta+Aj#_#4m@yymDU| zr8y^-h*Fv2!NH@U6h~!_1j~aW{{RZ23(Fd3ULSq1F{+!-Nzo4C7X=1*%FJWX^9896NJAw>ru_6EnjL-r z08aexqLj7cL`alqkvGKf@V`6|ky&Ig`!j`3M!dfqhbIP{KQW8K4^|=M;8TGpG=%aP zb>fIE@VycE*Mi68VEOScgz&G1%HNG42t-6cwTNkXgn#0R{!h#C$mGxPPyAQ0{t<^K z{Sm}b{SHxcgHPF~Co4QpgmJ^JM6#aVKiDIGUrjV)A10eo$%(XZYVVPw5kU!@oSB$A zKc^1`Z^eU2n3g{Ty+-;KC?ob;12_)y3v|lM*TE`>1O6Lj<3{#>(3b)!Qi4paqj%VQ zWI?cnDVfw2knD7jCc_Es%_T`X9@|ggt2irA789gHAe5I+^iGxdGVNX!%dv|s6iG0E zmwXQHf(6OER;74xOJmT|+hY|@)L^qnkXYD^wg}*(mWPC5r$+G3j=aAz>A=_!)7eMN zI1$+>(2W{rLLCo-iO_!~yd59U@I&ynvgm|55_E;!G#`iK;4$K7m=n#sL4+Zm5RqJx zl7EhqDiA{trZPM|5Riw-h|d*xr#=Z!6U_6`VLTJWMDUt^Cz@UyJQ^V>Hc?_riIi^e zM*jf8tlG>|2O@u=sisUjO*%1JH@b1GxlBSiOywl;!4h&Mz^cMSq^3SNE3tYP^g?g_ zju5A#PCxwxZzIUZn#C56mc*w85vIo_y+7Oy3Xj$-q)^%_xWepkqQYbQN4Hp?2hjqw z_@NU>FI9rpQ2O4Z+L$My*YHG?M$qihkeLdQ*1rg7`5mm^B~M7719eE{5S=u;I$>`^ z)fmLm%|sFspY(d*gAFk>6O|>w323T{l?^uWPdp1YAD)heOd4=AlEN+-3j8JKaO2@6 zP68OTyk-oL`S8c#9I`4aM;{NNcrq$Y8OYIZh9UX%azf-^;>F={;t3)l5V#iv7bIW) zC+2vpLP+cUn1|trUKfY|0N_#xh&~Mvq3))bHGK<*;WTMfK3TxZB5)!{NPqY}o*zQ& zTD-u$jKoRc-j%~cP;yhUx;bmgCM@t=oSf0bfB(b)CJ+Gt0|5a600RL50RaI400RL4 z5g{=_Q4nEqfsvsgvBA;d@c-HX2mt{A0Y4BX3?Nt`enA;v+JWf_!W$mN8VFK6#eRah z6CrE=0I+&X7+E)i_dO#3Q?l{G_5_LuT7WQ?S+ZKn7!Wir5kk~hqXB3utDLkX%3I>2+I)DTGlrsE5&LYLYl)v1&Kr3lYB2`G> z=#_vfEI_&85B$S2OGhSiZ-|-%D6ZrqG_9sOI;toR52O-WEhQFgT8M@e{i2OwG7V+5 z#(P$37Mf*>r5&i&^hyj9XR!qWD!H?6?Gk&7sKlt8{lKXm6ZgbE5Eay0SO$olLJ@2% zG@n-xpY<-3q;(?^P@R=9*c+efF&&P-NQ)I0Bd};GfKykG=_w?zzunv;t9B4+tKuN& zbctoHsB2LZ)TL*!VBrUohXsT6@(&Bs8B*B)0L<%dS zzdS5?yO3;4NodVRZ`y3ofblPf(;+qPcaE@tD|7=|2omfYdL~0#}0I(H|}fQ?D); zw3$%rXGo}b*|JokHkd16u3U3h#Nc3S9ov6M;6wF0H0{Mu23r@NAi7Op1GA(FTC#Ss zVJTbrFQFexx@!pa;XH9hhxup?RekPxMi zCS@gd`3_@E_7G1NHXT!CP@)#^%OJNwc>z6?=}LtV{si&2*kgL)ITuTc+SSHEraedcjRFN!fH+Dy`(oQPsF$iZgWF;(mU&HoRXrLH@`&5zjsF0U z8cPFWhoH-kOdKoZQf~Nz1iDSE3;noG!Cz)My}4{B5caIkwR=qkm`bCz0y>9K+Q7Ah zPiz}G^jN`bgi<1`dxq9~uUAp&EeEo;CEQd_geFIZ>6})4Bk;#ADzFdJ*thjP4$ zWDsI16Kq^(NNhC_2t-g2KWFl`WX1QwSli%<%C&^o9=w;Nrx#@*7xtL66u8AkU<)<` z14h_zivGo+5c&2tDu+m_tq{!BF0NPiVL9mhIRfLI zn88irJcY^~VL=!bi*}d#!FF@>*T+sq-#UAX&5cs zWGf-qg+z;2B@pM>6c&2|B8pA8f;y#(-FFGIW(scO3GAqUZ|*8DJC@SnWN#IN$B>i- zEK)cd7G|E?E)cpjo2<66@Y8a}E#ZNRK*&-_+wlr|yO+S+1YobQjCcYvfn}Mkt3viS{*O1qa&u3Q}m zX@l{(Gk+X~)uly7YRwb>0P0YJ545k`{{W~ZC<&Hi`ZGgBPlHC`BEIjU`e?p@V5qA3&_pg=@RQz zHW5~{>M97Tk9QFTu8`%_e3^Wp(A*=9QBpm2E(Qstp^^H4!px!NG`O(ZL5f2}iB{Zr zO|}dn>KWKBt6>y@9zPxqAG{vO?5b^-zFCcRVYhIAMWXu zhs0}aTBn&Z^$N7>YbIdMHB?S1Dgx|IE`-W#OKmseIzLHhUs_`;)9O2`gZUEpLYo>4 zL{q9pgOAish_O8=h088=1(gu0wjB&-H@R^kTQ1sQ$2VURv}|%8Xu$7hQ{fseaX8a| zsJg_q&m#$;q*>1|X{hlQvt=S@ zL;nCH)FJQT6E6>7PX7Q?$bH6pq^zN>ha@klZ>oVJ?JU%}JzTE?veWyo`5XEQhOPn| z5np7_UIaTL%PxwXu2e0Ni0T!BHv)*~n)w+V1f-Os!X|8r*#7`wk!b$_#w21`nN(Ws zK{A)|*df-Lo)Lv>dq{?$A!QR(XwJ)6E~u)nAX+oEWty*N%9*$mXBgr`2zRzZG|yme z8tzYEs=~6OBGP_@O9D1`Cz_9T4n9KkUDe z3qc>3bX+H&vo?T<^5vx~1Hw~@&qQw2$Yeg=NgL4--&tD5pqmH}v@S$29`E-L zVk@C|HVFEHq`%oLe@EqDfo7S4b5907wP$MTpcI z(FWc6{1*8XGgJ*SwMJs>5rDyPC1k#m+z7@GZ%@F%h*HN@Qf!93g@qI>xo!-xM-}o? zwIwo*fUfsot}88vu)_uc^MZ8#M?+Kg1^(1WRM(QGUD&2LUm=Ua4{be{Gek%%OHzzn z-XXT5U|+K$nI&PO7x`=TNr;0P2={Kr#abynT&s zfP>77P`C3*ETAJrmwQkG6!ui2oq-r&BZ3Dqz#dybt`H@QfQjD(Fm)@>FaH48A*%#` zv{-n?bpo{H-=kCSfSkf25LhevVuphl#58Sw#uWiThPZUE@-b{Os-T25aQrqVYLYceNcb57|0L@ z`!V*Y)KUKc{3#j|fpUym4SNJ{=`bB@!R%DZ)K=-ixlBsUsEdG~7P2q!vHh4GX)1IS zSOdf-CxlF!Dps8L}Hj@JFYxpo- zfv?jaR$@h|Oy7`y1y%i*b_HS`BEkY$zIaMF9X>83(1yJshe$wU6jnzK5K#=jKz8E@ zxUaDB0=}?QG0XnKi&t0$wIeJ=+*7KCG-EEyBlui{r`V=iYKVkwh_7pxqp|W-ij=ke zh(}41&)AojGxkAT>z{=ZPg)3<(?1|inG!^!u8i_8(qxHO8ECRf^pl$JDq0r?Z z1Y{d!p2OF-kp%7x=Y?4ZQL0~lHKm-vs+g}p#R_O?3W=N}&{{Td`jlicO zD|CgH81i3`rK83b({53Va6Kv@qJ~TBws~|#s=9QKM*fDv#g!xis$tQJ*-u46h(73z zPuJ8iSW+s**zc@{CReil5&rH5372?d(GlPf$m|huUidiH#Y-J%b1&x=mEGJQnnQKVIZV`-6Np(Px4cEhSWLBthiBFrHv#B`=LI$I-M+0+qm7gLBdApw@#u~w{wQlkj1p;%Yb zX{c2VB4>Zq3JSVn0BH$()Nq9z=q<*3X; z{p53l%q4u)wh=~C_kQ4ZyH*MJdVi!Ig(km}>6>B8sZD!waHm)4fTMa(nPO}#>fl>S z-;h=f8T*Tqgi<=3RfiyAP4oL08twfprnj1#6a?ANGLgE`ABivh_!1SOm$8^u3fc6(y}~8 zKha=V9U+%YQ{)7z>)V9jvab@csH>3C_ElXm`-oa=c9>PlYL%wp1{$2CnMx(ad5zcGyu{O_BA+DizfP6u;sj0{a%48lnpzb~U1~Yc|Ys zvGlltC~gw932h^T2zhwUa_bDnBC#dR#i}t27N-#3N9`X%@82s3o4MGx&P`?p4DuY#b5Gh?>u%#1y zhP1Q;^v>~h3aiF#LR8im2r?;;xWGkpNbP%cXYQ7h!Nto`g4`k)VGIMrt_Kp?^Sw0? zUWEC&zq(=?nza6jRe(QQ%!~!s_d9QBaSlfR0P=puS8GirEaSJqxOrKkyTBt#uo7c0CPC1Zd! zC}tebA&by7GaQ6*i~z#aj#XdfvLq3pL*#gMuDpj_4MB7Rz?nLFGFlH^-XFJ->BZI|&Bw^bT*JV$bRRAHitjcl~kB@ltPT1=Rw z2E8TAarR-}L{x9AF0D^s`{b_+BXd~ssr!XkZ~Fx)HLL#sAj6S{-p3*RV7;dOuH_}k zZGd5CX3i5JQziYwc%K-=d3EQjgAd>_M$fcLATbcP(hzJz2kgn;Vdo+m zovBh|YA!3AQ2Re|f*eA}e0ukb)o4>y%4$?FA-N&;T9)Yjt`Qa`{+U9scO1g9A`!7Z zRA7C9M{Mk;Mw9(!pPZFVr=K=4Q=m*J3twU=1w!H2#Mfv)aHvx>7{A$5S05kh^o;Ja z^eti(1gE(NolqEtXd!Woas*O7qJ;<^&}#nxW=^Y>x0FCAK$Q^mgp4weDJauRP5U!9 z`7H2o_9&yg^ntb!Pt^IExPX}o53;zLzqx|KS{4m^E5KUk_}%(|Iw_YWsM;!{9X+D= z?FW*tv}{~q{P$uNqap<5SijjERe6t-IMx~XrR~!Kh%1`Lk7fJ`toD1Zy3>WqUP!IMNkq*NkT}SpC!@QQiA{2!Y zJiiF>a-iTC1rsHLEhel03riD>w8vKln^ACB8HrbH0i{BVpCDIVMG(>Y zhzHU>gJq(|S4JgNwS|}s6)*IQmLFUu7XJX&3;=~)HgaC${mSSnWtj^GpQNDo_kixz z46sXK$ZWMfGUpU+LQO4h5Qu?3?N=C-uWndedLs+j6;Qbt2!wekLXsUNF2D*4mZXH> zBtREYDjHZl)VfqcfwlG~%vWJbThfet`R#O-mfzI4qw1z%z7p5Ys^gnMrsHInNo-_z zN~zLmv7w)-^>M7hBB0Ru7HborWb7brFiJ;AWmImM(XXho6DG;TC6x*_c#Nd4z{3Uo ztOBG>V(mnFp_il(s=1Vxk#IuJFtf4PS_cfF#!UY1Qa!?vYf(o%umOHBnqzyfcQCe+=XhBM3 zD?8asQhTPCJ=@kWR9P4Gl}tfNp-_eq3I6~H$~v)OMV*+}G}my#>H!2&D1Oo{zR)a} zALMhw7MIHlqxT%$Ttdt(caUH_fJ_aD#RB0;Wws%b>Zs59@&Y_UWHn9y0BTZ(SNq02 z>;d#+E&l+zFl1HOU8pI)Okb=tc`sTnC);3Jr8^Hxpznm^8(-8F?!Q7(G`6SMHMeOD zv<)JtI%Mw@f|Y0^51pc?b{IzitunVQ1MQISauOAJa4$hW`vR4$f*sYP<;*nLVXIcH z#wdj}zvR%(9mD;gp=N04I(cJASQ0<@+<*{ zzjYdt+QQ|~QSb5+Ky*2Z4#V~lwc}yQcm*IvC+=QUlv|R0?M8^A6o&n0J-BSk==g)` zKHg227ep-VPd$yF!0?|ew-WaQ1xC-NV&P`N4=*FsQ=vZYzokS~5%WP}Ik;fOxwf2(;dk0Az;TNd$nZ5z#6<5lmyW1S;*+^hLmun*4#aErc^CtWe$O zgbiSgOW}g8ZG7S_CPzRKFk&(7KBV3+pK0 zZ;@iPag}zR=$tfiZ4{9CXW<8`IC#Y$+rp1w9snXvRg=(_Ixg2I>13-Y-9&T7z?asw z*=bET068ww72Gwff`IBUiW&=>h)UGKc!Ta(JrO4LQ}5y#DMqG|rsDP`S@9q$ofz(z zHl{)^Oai@i@&JpmFKyI7f|+rx04ax&i#UrIAd=k`b~z0mxhrWH5V`>Bei%S>VR|0m zK#^ean|ulYqCj20IK`<2T|9&RRaQlF18wZ7a-AU;`qBcCurmlNxPtWwn^8s0Wzi^# zJ(g0HL_y5GA74#x}Ge${5Q7qPezf zir-tOAlo;fO%*LrJm|_C@L_uaK$W{tQ^XSDJyVBj7?!zg42}IlEu9Z5VJg7ne{HRo z00Xe}h4LkUZIF|g>r}f;2XldiYPk{6oK-L>$TnhS4`ic8diLroS1(V-{~x05Zn1h>c= zE65>ulLZ7XC0f5n( zb9)wAEU(1l2ebM?N^n2PlxAg=0kYeVd_a#u9IvR~Ey?I<5JMNIkhZQmJR=$*;vs6w z?6^r{!_19Oh%0Xht$a&zrQ`(>K2E7vhHs}JmvI=eYX~Z0AQ7vnS!7s+hq=!Ey}NwT_n!g8lo4lr4+-i~{yHBW(Rpz`Nc>4980` zf^5>oL?`{VETj9}5SP)7=R(IKv?1e2vEEHafbj?Hh?a{31GY;bvc}mLU`mI{O(452 zuIsTzC&B&85(yD~9{#0+9Z&WPD#)GCu$nC~NlEI7_h%T4udyovY>1kuAfwnW;`j<$ zj1Bac_{?#jOq_xmtCc8=$&w18=tgiBk1`d%I5XR22nw_?+TefLNEw&by@XBML@@#p z$lR@LT>X;f7Tm@VIg0_0Ap?z=-{=Ha0<$XyoxwVHw-gB2dLn925z2}dGSj&6oFc-k zUO|Mxv)W-)kEm3{Hd=~r>N-c%4f2m&NaP@hqci18WsQ@JrIUithOC;87IRmp^@cR9 zpX}8`6QD*I?~$mfaix`rD{t~pp)pV=aw-PA7;!$p1laH$inMY)LMrdLM4-T^5H@Rn zP+(rwGSBS{9hH?#z?il&<=w*+#(|dr2yEm@Ao}BbsL)QL3ZjK(&?N;MGXDUrYUTOR z_6%pNJG~|K$f?HqAT4y9gw#NbwP^}~L)727A~)3ZNfNz=K*%`F@prdE@X_TgkFRp7@+gjljLuXFqSY3v4IhP(2vPT!`+xjz=!bc zK@d&?g-{?`Z3JC%#hpGUQmCi^4WlI;LhQDlf?V*8zb0&6q)*ac{AHsX30O8|7FeX$ z@qt;k{{STb)Ca>8?lK$D4C<-~^dMf6>j9F!vSm$I>XC-P0erdjdKh?>>5hvXEyg4U z?3g)wH#HDuanX#|K20~PDMTTw{>nVGu{{>D;Q``Y05z19z*-)Npuh4zmazG8X(&jF z0;Z2GBetkTTMTFRAg>_0)*)?hIogHUl8Trwz_4Wc!Y9cc{J%zhTlP+beDwiYbMqQZ2+`^R7Groya8s5=w>-Fm{{V2k8yd>>aZ<^5eh{MZ@rxVOc0DQiaDOaHiVLfm z)GSBwqEG-o7&rA24H!;JLH$IlmyAYapDtTsKCzp-^rBQ?qjI4)622fq;R7mAy={t` zf3S%N#G*59jfAU(3Ssnz(j+=dVpx9Dg?aJ`m*ig&VqVIA$`zFE;bkjqAP4=7B&ySr zj1!Yh?RgZnQV=a{xv&{reH+V{&odOjW)rt7VG8Du<48d0S7k1S zAMy+A%rRgCZdJA+V+QaCjgSf*Qo<_87a+i1QWv^=s)7?7Jfx2+bd)s-2+q3Ew2E2N zLcNW7d1P9tvJz=YRWACvL54?vq5=#7fRbHGf)k3hdnt8m*5U?k*$Cilc~YkgVauXq z!s^^5<69Kq#zN>PSbFQ(C2*HwAM3TTTYDBmUND(k1CScGJkyYE7lq}L@`9{BL!b-I zVy@m{S7<^Y)L$RuX^;N^dX#d>lzinwJtDSsOjB$m zPUQOv0Ox0Domc{Pco94)(h!G>AT6`xduV4-pgr{{V9_jWyVi4n`EYbJ?ZFHHoQ%5* zv8i3BJ-`UFm2fjdRJjg1~|5Jl|!=^Xv?`6d8_E7XlLeQP~1M z>`V9#1Q8I)bjhdp1gH(AG0xY7No}&$aLj@L0EYoH%z%^8aLlys%ebwy!h#B2FS4L= z)Z-wV6rBXYg%GaRFoX(FN}!GwOM1S)l9rG45RIp>w7?8^DB^?v0NofexX3#OECirr z+iTG5(g5g?qAP9Ws%o?^wT?fGh}`&$DT)j%;8PcaM)DG_lx}bZ^p-I{MxsT>qZ*L< zf>UEklC%iif#5l4l_|2Kf-qJ;BnXd}5oJY0iLb?&S5vHWEf&DK!mdKn2@(epbeRjV zWir%w%2}Ho{*?epyTU$Esg?|YbB3x>n?=s!WFV-PK)6{CTTYPR=n_1u_hZ|TM$9EW zv|sxeJt3rip+3znYB0KLWhUo3djVLjT$a_){iy`im3Adc1z0%-gn)@5)kHp!6Oli1f3MgY`G>bUNn2tTZb@a$>u}1Q2(8z1#JP6& zrp<;#FMs}lI;i0vcIskn7^5#V*QB6M*%OEruZtA0Crp-za{8MyHNt}!4pDz0iJ}}J zK&z9EEK}LALlE0cKiNhZ=+0S#ku-(dEI2M>fmD=?Y2Oh$bXZh23q)+Fx`x_?wgQb6 zgN&e!RGIWsY>b~)5Vhx`bLw_BIPsLGUI4O#DSH1zB@~ml(E2yNf6i(Lt?7`xevI zB&chMZLM1g+)^twWPY)v3-+R~NIZ(<-S!#-Sb(Gkijgm>Jq8y;X`ohh0*#;S0iZ|w z0r!ytfwvhz`$Vxv(7_BVDnhAoJ&a)JFkxAg_LvO__)B5<9Ej>u0wBm1qfeh_ARq#y zGawnq&tp!sV^aJ;qI(Xu{6|Wt_9(5RZc|2x-@$2h$VS;C4HO^3K>9r-JWd26Co{!q zkGfl7*anp-2tIaV#+HUy5Zge`ke-@VGW~4c9gnm%WUdPmst!iu2@~ZHB?$dOSaac^ zjjs6`9kBt9xEf;$P>PB#edKx%{37gT6;&x$j>;O;t0Ep-G041xft>Ecp35`30eJjX1$;g1~kT#Q6QpyG9qH7nDv$w^)nO z>}uKy32`Y|u=h|Gh%EaxqhIk7*QPcKuPO@Q7{(B}jm8g2vSnNVHCWcek0D%aBGY4M zwJpLOBt!LfSNROpmOLUKPxM?g`Y9iTmY15w*A)^)q>lmtNG&jp$6%zb{UWPsYA#hc zK%7#5DM267RV4}ij3uJ^*e(JW)7hK5h46rwYM4E$S`lPzXxhlEfT)iti|(C%z#mm# z_GXq*?gXA}tz0Nt$-g7zMQzi3xRh8brajWxXI}O zCA9JqTts14sdQ^W3~cEdUp>T$pZ)352Px%kBS7*rNy+5RD*q~XX zY}@{!5*>mkY%<+aenY9#+=Rf(&@m;!=r+dv4^qCMN;5mZxDbT_vJPqo(l&I}@_<$IU_yrGNJuKu7>!{;DD9~+CmNlYH1(_jHjw$^QTl5+Py{Z()$jsllQw3nbzL5e`Dew>B^(yruByaqKbZ7RrUdLc-;4 z2S}Bd8k&xVqn-psH(OAt^dQuM@7OT1QHrIH#fd+D7X}cTN+Ct$4eJcpmGN#B3n`f| z>WKFs^%w%lbs1O|kiEyy(j&^!*k9$>*ziQhar+2<$cE;imZjXi7pwq__y%JQTswwc zM7_kM(o8N{Gx{a0smZ=YzpBAW>|RnSu4_)9bkTw>VNw7JvSrS;B@-cHtPPi%EQBrl zwnAK*rQPAIRsOKGuw+y)x?qjv4f`G-A#t#ZfRc$@6^?oF5G~s|19wH8CEMObDVaxv zCP*o-@+`GFkj?u@B|^1d?nd9ZGS!NkvvR;`7-tLXi?C^kQs>1Kmr9~);dOfjgir(e zCQra0tQUPBqwED?{y0fER280zK! z09k&U>S)|!(yav+X&Uv*fL=l3u2MV>pfys(CSRqc#hRTbDV|5e@Qs9e$XuOz2jr_ZSrjh?n3SB z`a>q$#Fg{}Ub2}M_}s{L=2UlTph8n~MJR+0Eh(Nfc$6R^+10qO2=Q@7$7(*Sw$SLV z%6ly-2PIhDL_8SMFrY-jr|NCUuaI>+Azh>4D8gr*XvJ+@29y z!%vcl5+r}bWmR6WM{aBxxtx^(9>}=;62@Fo99H`IGcY44^|A;JoJC|Vr-V0{5}O5O z_$3lhlDLOzT`9HdqEib(F++5GAOt;(`7>nVQBW_xGTrVTi4se>NwZ2Rf)CxCjvY#i9GFCLPC@_p-6NLsD3TQ z!7oWXvl`kV$GIvt1)#91R_rR^r~d$j9f@chPmxk|MN9pL3@hHtC3GcDm0JCbTXZS% z0GrLY#T2KJ$fAS#$3l|6A!JJd&<9TLW5q4>WD)dgzQRLzK}4mfWi$YPVgCRWKBAy&6v&XHdjgkArwDFZ z;gpKAvus(Xs%2AC#IbMN^(k@SE*b&gE-+5P!PAfV%6><@^=(d4E( zPAV(@pwAO=L0UY5x-8E${l!U0AZ%(PU`d0bHU%f{MeJA}l?GZe>Kb82L>LspdkX>N zuNAabSupU040cCf0s9Ec8)R#pw^1^jNiFG;+iaC>Mmp1tPG3-bCUhpbKLzf7j9- zz|#6ax4A^Eevp8>(L%_ET*uv&(_unF69F_CKv{OGA<73#Ct>^xG&BMPzSMq~^>7%4 z^@_!VS&M!IP~qmq*Lqtn&64Ct$aDUaF0{?F7!?!QP4Od7QI9zTTd9qcs=2l^2V z{lqKm*2!Q94+x(txR?Ys#QlmGWG+aC?;7zP`X zVNx3}5s_+aGOGC$ZlTz(Rghefhs^{OH+C&)$_5%%h;Sm%kM105kY6AL@!T28yI3EI za8CUK17z49k@+!u$xvASU`jb*9&DuZQdo-pN{i?qhovZmqSods>YhPLkNQHrLe#j6 zodd{eK;291W7W)FLa44Fmqkv4Vv_n)9kYa_O)s$#y=3MaE1&-WQIQ8K5X3aiH3h75 zY9jNZ7OF1)0P+N|mFymnC3;PGK-(NdfbUfLmMU40-{sWR3WM5W!Ul`|)K<2{iz@!| zH$PSE5VQEeT7cB5Ig2vWdpw*K8cdv}@h{3Pg{u9e(M2?hn}t*`%*)ij58NvSTn4{H zz&dsnPBDfS3vpK_?F`V+c`Sp|qb;HjWwN(+05sQ^6)4mT8d#D3$#7V^enCM3m@G&h zMgVQb8scn3zkB_4VMJ-~6IR54Vfw_W5QRfjIS4i>3l@oF1(k}csnG~; zrrGdyTun|;PqJPS-dv!G(`v$H+mb-K!JjNFkan0c)4q&TLZ&+lvh)bpCxiH4To?>B zY$g~FCYHX`)t|5AAVR>G-$V{k8bZRiC7KmvXlXdd>0C>|J;h8f>MGd}V#p7)%9s2O zPOc16;^PhcCp;7u3xkG&)-HrlvGyfPWwNb`%9ke{B^;3ShSt77y+*ORnqe@GOCN(O zn`ZHd)<8BL0!J7Shm$Lnq+(VOMN!O*KAinZQ|Akc+vCWs`^1}p>mrSl3H4A1kr+Ty z*6oJIc+KgNMF@a|SkS_iiVNiaiZ@b~%b|*J%&-xDkl6x?;=yPfyv2ahi*YI$E~G-D zEH0rh%)H}b3Sz$SY)gX(T7E2lc0q1^l(UfOkZ7afNNp9!ggC-8j5#L>U{n>$@7EC* zkN*IITEdYDbV5`5S1tnJk>ca4O<2ghT8@WGl>jM*hYqH*EFN7zq{ey0N7u;k&hOkA z9Z^;oEdp)m%oGK@nEZkJCHw<}^nhHWgiAaK!!amCrQi^3`a@y6-G0S7V$~n9*Ys4D z8}+#V08&y9ge@z>1O=p~do9a4Z)$))tQy+(HqN4-Ds6|wA#}TA01A3wJ*b8ZBGC(CTzqA_i5Yd>5Tvs5TpU7s=fujK%b2OWz_FjWr zLmWg{>&%wRA;>EYW2XS6L_YAKY@rwgHpgIJ9^8NU4Q$o?k?+&F=>|Zp1AfXjD%?Im z7OHX{7M)ycdb&QvHPhIY4N4VxvXp3Q!2ud1O6QRo=#g_#m^d<`5%D(m0Moay=0z0` zA_^)l2S<&|i$8`b-Nk~OM|K;ADa=eefTUWkr9^)tZONhA5t3-qGUl5WsQRd^M?f&4 zStL~R>y7oy7zU^#xt9KjbcgOPKxG0}!w7Yf;2H7qKAa+n19*oKO(*X*VF~qcVjl)2 z@JUn9~U4 zxC;bh7PR)_F#_8qG{6i}SRG$rYiYL`sI{#9z7zK}BzGTx>X>>{^hk=k@SEHlLJD|d zN^81UNtQ!YfQO83qj<2`f_!!FeptmghtWRE9T0N4`7$rgxn9- z3m61iP4R`iTG@C;ZOYKA>NbJ#h-Q{t)mb?@pjicSNC%oQf)a6Bo>V-7SdgG9_3|}E zNa$qkSqoG4DBt(>9fjb3Ax8HK*wjn@L?iadxo~?JRe+I;WO=9zz5csuO7DSEXv-O5ze{YTQ@ zyNGKb3PtJ>-oHs}7vRQl)`TIL*d3xOpNm5)q2U+LT*W7(Y*PsBM&3J8D^3YX1G3Z* z5qU?Fq&C>?M2Q)Rf;HkKOnQ}u+_b*e+qV%I_(6}^t{R74E9YZrsVu3X-peQJu4ky+3T3};Af^~q*iRz!K-ohJ zJ%+O%W)wb6C-NY4;iR52AR>Q^t{2CW#2|dwIZ0@^&f%qyuXA`4yliwzYr09V#KC|VH_*8a<;_R4E)g@9oxs3b;YIT5=im+O+(^lAK1RuAA{R-$OdGlzsaKtqzt z4MN{YNmoMIT08d@_})!!H3awPC5w8F!nFo&KE_960ZCUu>6YsRnO?(YHr}j>ED|6l z?935#+ztBDp*hrAM{S&E6+pz2Pmoo78K)I2U3OYDgE*GGjkklc)4RkMT}n#Cxm2^F zzsLe$QTv~@2)mBE8PYntjOuDhU@V4!P($%Uk1Av8-@%Un0?5E-vgKe=MavBh`4sKM zk3x_mOkTv#`wc~_h?jt3jc*8Dc=?icx!@w~!oSRtuCR0ZU{(8A}+!7?fiBE`~;Ke+9vd#cGg4Fz&sMsySo0&-t5P?Ng0HTc){=ux#6{=`u`Lh{9H7TJ= z@=&W(?V7-~1LN6Sf53&aNBkj6R5+BCdxRl50EtnH9cpAjX#W6_zM~8vfC4E>fErcD z1r!CT6(%&V?ETDYi1iGurYQ^6A`ut?A){D}9xkCvo-99Odka5If|)vmL~Pt?yU!&b zg5eZ}LArWCz^!&rUTi}j61qn=q;ZkMheQBVrLbFz5SBH~248)6s7`nDSUh*##*d`GgFxwlXfZ==~(J3_c*kZnx~p;7r3oq=X~Dk1$>_i?UZr%G@VlC3S-a zgOKAN0tKBmieZH(`2&p=86Q>{t$Qs~BGL;=xOyW@o}xp!@pSl3o@Zm|*HFSJbF4Sq zUEO1B!ODs~UQLYOAgjuP!IxDsH7>*`If&Gm`UEhdd;Cda9==BOIz zlMn~jLukVov(AoMy(ePMl$|XIp zmpTMhwGhaSkWMUN%)1gN@+!g_p+hcJ z1Yle=D$-pgEMr||DXU|EV??Kq>}du*K)>jTy?lid+Zt$eL!b({s`J{*NWSS2YAd0g zfpA*TQ-!3fU?dKZ8k+uorFL!#at+}FVJo{0Q~@w%uCIFUe6lF=VUK;r)ZQ}-|k6v~&~KkUeJ zLw{JbdjuBBQ{gu={{ZkteC|a07<I*$zqEL%x9Vc9s*qBx1ApU_ED%%E{S;=cN5`-`umjzb~YLXFE z+l>yuy#cdTcjR3Pya?R3ugHJ54Yh=!u2Tx@d$6sGLVCb}(!jE_0(|;|J%=|Th+aj9 z^(N6W45A8waV>ih9HGG=7{>2m}U_hm%SBW-v|+U0%tffeEQ@OmubDBZ zOefg5To&rq%?hpds~J&4pI-BD<+X1*}jwwG1{0IFH!jjV|Jb z7RC^LFG5$d7Hj)*F4pCG)`E>{zT&O_41SQ5CIiNjae4v7ELI0VxRaGMNl?$e zNwSF8%c@+ZpeWLzhbOskXgpd`aU{d!4s&o^0}LL68Z;Y>fk(A&k0*@{z$0O*XpB<& z%aC#->Q&;@yCawO6aN5Fyx#U|8qF!svcf6qB1EkM?l;~9Vo_bGzn|pW2g}&Exua(A zGg1Ka+1F5OCh4l!urd%Hwp4~uv4Cl9kevMt@>~F4Sx{V-#r-GzVdGMY#_X&63@Vi5 zT0L==?%*`KvWyfMHtYioY*~nvmawoa!x{P#+XLjQPSt{I2S|XGWGSSt3B<`WxGa93 zw549g70#kK1RYDO3o@>Jc3Pkg8;KG$H|*VOvDkIEuEr(YXj(XrtV5zu%8O9Kc*Nlx zBCSIAyqdtkp}<>hkVK}6I~P!-hh#z0Rhq=}_dx1m;$K=KDwqP2I9m%VYGl&WShZW) zW*YW?`wYGnivUF+U|X;Q(-cF9$}NM!ci417yOji5;}d?W2v)R!y=xuK)x>LJweaB( zsm0V2Kui9|;=BIav5+3J;--+hsPx5hX#w4r)$Dl0JTN!dBrn5_DhLqM2 z*oy)pF;;`81XkbJDEP>#$N3ygC~GfR{{Uez5qhMUKVpT0M64`*U@$f> z^h*(PI;S2H!YU2Us3Qk;1pNt7c~Qof`ha;x%Y%}nHVG>QYSqme9Ht}%EVUQIYI;hS z)LNHhsjRAUt2cM*=CN>U$KP3=NM0|sc*Aqa$f>LBdQrBrL z=uOYt7B1O2_I$#P%Yl3_%GU2GSpeXEq_qyN;CzLZ$mvOT9Zef!F)YCDz8OGqX0fhd8A&iepB;b`J@pU^S2JlLK@ot)gD!XBMb5(V(tk**6tYxDL-KY7 zldHOZLak1mGmtu+sfE;0qZY#J_LjfYIQ^m3`;&DhkeAIbe3z+N>-n%LNsz(0KdTQ|wW#9zIDD13X$3HF2O-|C7uWU`&H)SifB8&^DW6b&h+QCvjgec+Jn=9h zo=wl`1Cg)ZG0=atHn)<^WMMd7#i?uxT0m8GTVG%!C%B?|nz_b}yoFbz z_yr?fM%Ypp0kGCFe&Hx0U+?inRE8uWvy!=pljju-nQn$$40y0v3RkkifT4j{5NQ{O zQ#rPc!-8~N1b)1IqXqUHOpCgjr8W|TMQlL^iFCgz!8LsbJ66RsA7Pfqq`V5en?+Oh zdebhJjz{SCgrpuL5b2`h#^{FN)|bSH`yqu+Z_!w!uKS1`r1oJXQ;G+)?2HURf-J1= zS8x$w!gL_VTv%zjIG`1}Sps5S8x=R`Do}vJJ>t?;#sVibj|4wrp)FMys)2sNLnerj zT-6&}4$eo-viA$9wOmN*2_rzW+k#y}%3;&(RQO6Ow^((uf&5Rpk#5_Cb}GoN9zz83 zn{Zq~6l6tvYy>t6C@kz(NKh8n!UDXkj7;;ksm&}l3T_j)IzwR5VG?N=$8I2R!|{*s zM;doaq765{{FU;d{{Z4GFGvcE#HAP3aV?U)L~K@N2U~=!Q&7fwpZON-QDcFIWO;T> zY5iH~D?$rrR1mjV?d?>rw4}`qxkI?XU4#I(vXXp?C9zVn1ROFdf23ui?y@@V6n!>9 zZdT1@orayki8|RyLQ50mEV=6pU<4E@Jz>i+{{SK#J~0}X_xMCNeTtyrb=b%11StJ6 zP}t{&Q*(Nqsd6+U0S>Vo@(t7bVOTn&AC@omi{@U#6`}~L#2+3(_ylA5b~ED)ptq9; z#5nsL{{YYnlr@9Hn=31WjduV( zV%bQzKyesiI~x6TZ(=~$%b!?*Sr7$nZZO*5Vm%ya`l)*Zpk<4!f!M0<6ch{=6Kof1 zWyqzBOT`P!_h2Gk2;>w(*c~5WLqX{ql@MtBQw^X+aEo9{OS43~G!`km9;8L-0tOZ- zDB*i5fqpSPU+SQA&ytQpf#fZJIEhV%pytbOqU+?nT~rlu&48h=Vv$tR(s@%HHe5;w zD1T7Iw;klYodEnIZ~Y=~CD5Wc3&k+zkqSKC1oFHJok4hH{-cONx>yzpG-GZcWgtzk zfmz7WAok^nlBtad0c^!^uE%VHayqscx|Ar_Sye1v#@&}jTKNrCKsMl|KSd*~x`&mx$Q)fKIK=F^=Xn?rNmo4nU7=?84 z7=4Kp4Vpi96vE*`qSU|B2E)T&!dYsAWJW%jE-YYPGVnh_Q((oh7;Sp?T9wI4A|$;W z5JW7NMhng!PPYEZWQKwcla-n%DC06AXkw2*#yw25P|^I1R0kME;z1B&iVYDGH`*a=p;{3u z!tBO3DS(Q7MhjaIJQ$+riv^I%7p1U7@a%d5kMPd;4aDhUE(LL)XV``yV-2Oge&Y#v zLoMq>1uCib6$sC=u}0&X?;;Jw(wJSczCwVEXLnQdrtSiVIE0Jr*70lZ1GK6>J zFdr8I3_>Va;{~}e!WHQ4kNYlPrKk&r@+Zk!m{=CYAFH+sK(ooPsAa$x=`1iW(mjXl zMy=+sbw;Rw^T5sjfFLl zsdYCUguzWjufZEDU4cnIXf^637!U<~xlXKG17Az55W0=JTz6>PhvyQI0cB}+QvH|q zRv>6kC6c7PY-C6Ji)d)S*@gwRH6SSzCTb0A=}+jEpLJ7Zp}Qy1%)H5GcE|)*M6pd- zq!HLR6*udSA{(+Z96ruXYTAa=G^t5cj5}YKQnaXUI$Z%0P(U|s#tL7&D3*cR(lXpw zBty1OurAmE1vZL+VQjf}OL6vK?JPhZzhj_V%aj3U*cJVMe&Liz#zt0JVahe#Rfd(-^lAB`^AY4QOm?%pU8!q4?qmt(yKF8#^Y9FYerI%3> z5Vi=^G`=ywi{mhTZ4`#8$Zt?CG{MVY)$^>fFTvGK25g*_8q+>D5o~)QqA_ z;QIzjTPqP^9|@;i5FZ4q@Vtrn4BQY+MLq;8h00XwAZb5i6)Ylv+Qk-*SuXrzVvXgq zj;l}nhojvhC~-C;QdQ*rU`DZ}Ql-OfErvB=#2lLHK^7#X1KG&$*a8IuSJ=W|@?F1F zh8|f$$ivt2JN?`78TLw>X{|7z#9e)snxZ@J$dvMFYbzJ*Oe!`~%ZahsuFb113APvk zmPcM7fxss+{{Yx-hB5vL_W;P!A{q;q)kEtKV1IE!FWs1i^0_wD9HKZS)QR#lt6+<_ z!;;Qa;teDcC3murkgZms*xJLBkPD;%HZ6`Wu)dce2tsl(HGDvssdSg){{ZfRQ53i) z_b`Bm^h=#tE5RTM-%^7W0>QXg#Z7_)vW5&4z*r4ItziOen7A_cu!R3O}1QwZpNQ$#lja+pQWfg-SW5d*C%m81<~?4gP(3bcUyFoRfG zm*hYKkYT~oV1J21()1V>+8mBLZ76}DM!n1vtYur{Ln*k$p|oWK(L(Xh zych`sN^E-1qES*P0ys?4qQ`81h?pg-!7c1K@GgY7w!LquX|HDTE8pBph}PO4q`*rU zLfm64P(2XAmAXc5XAl5)i=&8u5Y4mu33!-_unsGy;r{?&FAo(8EObn_U9Me21z%Ka z4I!+dF?kLcHMLDDW~`)A!s{lkF;@}#Whv;Sb+GEC*Y&9}BrHg9dC;pG*R+4Cc9Nn z>Jp!^o83X2*`Hnz8ht2^sKJN%G5EE)i0&y%RAKN+{fuC7U+nc=E?Pp$s6eL}*A{*K z$}MgW@)C8a&yh#jaa^ePDnA&tXk>IOJgIn0hO7jP0gBRaSOQH5zy_BnJ*y%EX^Adg z!zdcU=+zBW5(Gk%-rS>Wrz#8;eX{nTV?}qVv{@MUu%QTJ5dQ#DAlhxQxO`=R9?za# ztpnJFZj?*$5Wu)$lJ3$Kx+*+D)A+z`Rfc*o0BP3Bq7QkIvzIu*-^Sv7mryM)r1#t}z>RQ4v=}4ckKFQJ{`lQ6U(r5B^F-6GgGMstpcnzk~wD#i?Q`^HWf^V4Hv&3IV8g3a|XZ zcgCz@bm&q40ANQ-@7aP>I@O{cjoeKvCD2P1Scs<7tdy+?H3~?hD;$MKz_CWWnJ=zJ zRXvmghm%lyO0~fM0LZf;eufCEGx{W8M6*#;+1Pmwz@bZzRRw~=2jYw=OSUb=g31n( z&B)+I)ApQ<3AR)H)wG~P`_khVk4+BB%)5PRIo`-IaKe@JnaC}Myw(*?SE zxM-Nl-CSa(!-T9g=_*AZMk$h^^j&&^Y+IxNGq7|b=p)f&K$kSO4qrn7R*kS|5B~sS zSlC|^U~dI4s=#|L;73Rv)=)fRfLn@31gr3npdtPs+EZx&KG;DZ-rA7xlyq5u8BL{# zY1vR85LgY=S|>41KsMkb8w_P>I46udB5ajK1`^)kL4#Qkqte{8DNrY&YFocJ&GcC* zL8yg$6hF_xt3Rnq{cH+nNDAB_daxHMH4TDa##GdCJPrAiZZ}F7wZbDs$)s8(X)H3v zaJnEmL^tup@&C1V4p@iI?i3Z#8oL^!8Us7+AFow>n0`&O;X76#>+QsOEAOR4^=s ztqxD?UrBF;}-LE|=B|a~cB^)mbgHwA`^NM7LmH;S~}Pzj9nxll3ldMlWE# z8TX>c^r=B%2&+#Fqcm|1P8@(2;gZj*i;34nFV!WgfrY(g1doR9H3-T`;BH-t5Qi9} zN*6X)WV>vA?~?vY@2~b5axK4D3oONvN&MJ9Y$4gZ82-v)`397|h(dA8qQ5sH)TSe8 zFBe5bUWy?c3Pl~4{7XnvJg78Fqdx3RG5RqeQv)=AsnP(?aLq{V4XTI8Kk@up{1Q{u z3#1egv9bbQw1aRGh`25bYFM2_vCqfDOTso^77N;_6q~{jMz}cwKVX2MTy&{h7zFn8 zP1mcIaQ=XUzeveHbrRRNvZ^&rFp!pHWmq}>@h>|>SBvcSY+vgN2M|AzbKo(bpWH!V zrghr_I9@mXm35_m-IhHvALORUgR!AN+ke91m}2kX3rmUFas2-P?D`o$`wndhIx8NM zjfM79H}1s1N#Lm5^@3svkm{q9r$0A}-aeb{(^WJBSSwQ+2y0Srh5j9dOr zT6Fz@58cDH)k^p%RuB{MjVhei`8{jAT#aAiftGBAX}lGa8<(h~Xdm+Cmu@*)OGR%G zX%HI%Af1TY)=^&>Q1kIIQO1ywTcL~1HiSnekcnA49_A1}$ldKuVp|~>_0Q~JUZ)X8 zkQxQHz(RrY2HFU}vTg~7DUm@6^qU|Epe0zP%C@SMBZ%$5vyq1EG~ilUWvepXm9l;z zeo9hXgjX#3n8ThvaE(#A5!w70QYZkYKv=&|YUP`xpb#biYAbT43xzoiHRwgHvIrn0 z^&PC8hZ(v~i+AYEkNk&b4$_lmKT$HLPhkVuzCkW0Xoe8JQ7rq5kiDlB{guT8vLvOd z!Y8JP7zZoCNr9xgM5J5UI+Dat(JX$xqUU_YVmYhuYNq@jT~xpWZ4BR^S%2hqIlk@$ z>o?RaexZn4_DER5#pH8`S|NNzFbxRO81@Ce><}AmuEG+&26IP6dknK4LC{Jux{eH* z8%YFBm8>Phv5#3+MwIxULmgl4JCdfLOz)>5XVMF4VyDnUy7p)xX&xeH6Ip+YVNobb zmu-LdVuV>6*df_+@A(JJEbds$E2>Vxf$%Mx`w$J`)t_ zW36b~H6Vc%WkQ*EaqJ4js{lZ1w_vf_tGK0T!mDq#~HxTZd!xzC3}(J4c0T7rdi;Ds5C0q*cE7zT(E<%ODR-dVkjjI@_NK_S8rBm4N45! zji=b4`gb_g2tqrV18B4mOx$l6ohJQ?tn@O*!xlu88e9r(351^wVuGvh&^=f@Pv`_pN)|a*>>1sUK&8YWLRoW=K zDiwqu@)spuOD$`;EW^DPP47m#LcoG@<$inP65#qxttaXn7|%#mi*gw#`xJy68<)dL z>Ihp77Fn=1E%^>3zN80a^to5@Y6#(z;SHMKEw~H14`tLSu{Jomdj@?Q20zn6 zJ8;J1{fr2G$yH87H%|c`pfp^$PVjC(Ab_JSb&}99a^e}WHF4=`go&s^=ucF%NL@-S zg)aB0N+?d*uj?t6<%18b4voUCc2g=0*@rW^g7#DOa^KC>yoE)|outozst1vR`*ij@ zkG@nCg4DVa1U*H&5mSE4fX8=mC3J2xf~$D~s#QYLMNN82H!~YH0xjr` zmwKv%qok~UgZUX&T8KzL<6Hy@MIL)8890cR(^*j|Z_ zUM+|m3;N2Gi3IJk$jeUO(vaoxcy=ebeV zJ51A9dMR0LwGL+O2C_x%8YA{V+M=kqGJd8AYmI2_;PwHyictisBBPI4A zJQuuzs0~I2YbxHwHpVF2wXlk~xs!*&1?`FiD@3ToJ%TLYiu0E)IP2(sM^Hp&<=1q5&qtazE0UR;>Tm}sW=MF4Tc;MQaHE6PLhZ` z^p|8-C#LJ{vQ(ckZ01@^ybYK~+ZAG3t>~BvY(iB|65&UXs{~-*SRHv3)Is%tF2Qee zM0TqG0AqR#H&=|SnBV=BBHwd*r~)Y84OFrZESEGDX?BmqwPqD2kS0Q(Vh6)W!>V8I zI$R?^(I}F@OO$_VDH>OhkJBPHo5cDWlDk62AukxgUDOmP1YR=2ns~X~L9h7>60R{J zQys9B_>Z|tvDxH(YYk}-3k+y}2HbTZD z&koJP?wASmATEW89;g)AtP%@$HT{FI{{WFzCdqe1rH)vlL{?D;ifMFt0Ie%evnlHC ze{kld)*`W6f@$DvNpT7blnj5e!G(8IBU62VCYCu0HWG=4uukY=ka$5UW?4}#mTyo(<5*FRi zBD+^5e!Crg5uL*c$S0>X=F)Ibhb|i2-FFHsDYBG*ZC1-3_;=!e`d6M zxIBSOreZSc-0_z4j5Eo|0}xFQ=kgmxNY*0mm5?NrT_%XZxV+#aW5TS4Yu=%ZHdEYT zc>uYoaeC|k_T~;Ew;YsV_UV;^gIit3tiQ=&E^QrdAk~Uti&6O=roU3|9u2TFRJui% z(hovon#!oMSE31mDas+R6@lyxDBV;xFVk#U0BOG zXKskn0t#ldvt^5QWoqsAxbJJs4e1#VSsKt{Df&OF*2a)zlqQ>HBOhv#5 zkS0FHYmr$S6m{X15U!hIu)oZvbU>rEURHN{U1b z!QAfO$ZNq*qX$P`M{%_X6n2uDZiJeJQh=$r@C6FEv^;79Xo?BzE->gkMvPz3FUe+W zP!nxLgaCFlQEDhED_IYw!ph5rd=DUTS;GsT5}R30tVwlDW}YFp3+xsLc#dMg0JX3T zbM+lI%eZ5Ik7ow_xKJWskX>J}3jRS%d1O$ik17V{+GVinpm};RMaAm|K>cEjtP$kC z$2JQpH7qIGaG@L_&|w0bh4)fWakdJ&HhmBw@|h)1~Xfn1h-T8fT> z&|v5rZp~oS6$T!%p#K1i6Hyw{G!(Lxj)4v)O%~KNC zAs9!0kjND3c>~a5>Ig%niR8O-(Lu=e>|C|9!R15sHadG96J)$V@_$E!MD?m{rX``c zozT(QeaHiK6#c{+GlCByxSCRSO2!p@B?i2GLR=tlgoDWDVOv$E%_J^mz9aWrkz@VI zc%wz9xHbTF2ku+IUnSd8tTM}mQZ<4F%yv~@Qh^r#0LXtRG5{4<7DAbL_{XF}9n|(` zq$n&v{zp#TWL=X`BC$S-UnuJRxlw(%C0z272g3H_I0`0 z)FpI9C1(yqEB$L4LHfljbxo=vjxb^o$PNkO9q>!Jandv~SQmoJk&0YfQL;MOU=UVT zu`enTLt+wCz=Y~jB|}0$0Kx)&gvG2@q!Vl84f_x^@L)F(!_%b15#;4V#O%$`)UN%+n86LMZ6C7r%Q6${Vyzy) zKk+~ok03=EC_iY#1Ki{*jU)xvY?($-A0|R=k+W^G`#c;Smdb2Fj+Ku^>-dFh*lR+D zOSktz%fdORQ>y~nh>FppYKB;FmA29;Zi@%O8o%KOY6w(Qkj>!I5S3SqCv8_}*n?{)2S!jEFUr6!DWkrLSZbzkBiw!*BqbZ3SKxfMY5#SyPXNgYO*9^5$v?5$Y9k67DfX+3;>p{MJ5NS4u?gI_72in zxP$De3xNKJ#E;2b15HtZPva$)N4M(Iz~BoXS?N&%>(toIj6kZ-jO*Q72OW?Y@MAp% zTMDtlp;!#0LahffZ^F7JzCpLAv#@l7M6SgVe=J4qlC%qcqi<4|=E}5U=?=^D@RGWg zBKsAh2IeZk$lha6&XDv^q#XXr6jVR5#8?OwF5X`pXHxu%+ty!4XpJ=K4jpO&)-g3> z*dzY4Dsn(6o5X!F1L}+ZOb?k?6JC?|T)!e-n-R6P$!x~5@A}G}7RGRuF54xE4l(|M zG8c~^fNGn$XHHxyJYpj9;fU%ZKU!mBp+$uAT!q>%YEq1aHmcSw z=h*QyId#w>kt!U7x4MuTd|}gSSOAl;Td?n2hD$edbP(iSVctH zrBt?8S7o!a!YIK;JV>?{AbBsNaScyG;705iUm|J3t{1guAS{8{=#8l#i74n2HJlz3 zN8cco(z?qs7FhoPumbwbqjHO{sFdJHxD~x)M3V_a$`w$Q{sc~pj0Pce z8BTzZ|7$E`VXwd2MQ-e;QiwhMZ7YlD-Ht|Y_ zKT?X~q@jYY zvojuiYF#<>$EbshDhFkIfw>GM!nOg{8lH0OD%3%#O(jm2h?s)Q>fnwKE(?*Y5sD=Q ztL#z`lhL?9omnU%AzM8m{)qighb~cl5q`0YVdlaQ$$9t+evpVN>Kan2EU!}GG%dOK zLWWck$=?vB8$lKRthk6H{{T@Ko+3rgR1v?kmldG7aa@WbkVygJ+(j*xLnj2yjR+{b z-lot_PQ~Ghd{V%4kxDQ&R5npE42D>%_FCXd?^rG`GYUE?Smkv1jVw z?5DyazLNMzDTaPa9J_KMc|&F|6qc%ikl@%TM?b0xmM2kF?o_B+I5Yc=_|I9D{$RJL zg~GOSdASvFA`f&37^Qm@*VAFCW9n4YgmLyJSik&4)p5y3D2$J3w~vU5;6Pb^6oAfy zW&|w`q`H6mfUFsJV@Jg3T#AY+ok$=xmU3Zqh1tmI_AOGV@HWusqs*PXMX(!`;#6Yl z@X#W8s67ZW(YU7#j}=8rk3{gWhERFVOW8NpTp>nZ!+RSAd|@Q_WtbYRA7VhKYZV@` z6jd=qWBSFKivnr%Ld*hZL>q3^)<8evVL%m%rTkQ?lfbd4gp?(#(j2C*koW^k5}a50 z2ZfH?7Ru8C6L$5o4sB4xxBVl;>uJyk3C6+#J8dmU3%m_js5;ngml%s;RWB1;&SdwF zG?>G)YE-DdbER_Svh#D`HW)`iY)={}zyQGU$RMKKI|A^tat8hV6pISQL4EY#&cRpK zk@f}Fk=6jBFa&{Jx2#DJZfsew5Lc#y6lbHuoTXUS(pW*`zmXWbqyhB(I;h>dMp0`u@g~GktJTl8yb{$P2{rA zVLSH{4THF$TFK-K9cT^1P7@#o&i??|EG02JG~K`o3k`+^vfC`uy1`Rj7_QiU1ZPWC z43V|(WuQ5DOQxVq<|VMu4tpzP)uJvk1S>+&Hl})L5z1>c`2`z;YG zQ~;GO3o_GkJOYnkL?s_XaT5Ok`e4^#606V~jjoUtZd_}AqD3x1@-M6q_ev-Qe3wTL z-0cPsmKO4Q3Zb9$d^0i+p$(#6N|nFbf|jq#BRt+Gun-TTl`*fRt?9M~FJ(^YF8cT* zR1X%QUovIG~*TM2@3Wuey5sNHC=r4Vbs_9_L2C9+(Uzcz02 zD5{&mSP*&D%2Fb|ty~yL2IT$?nP--z(5TqJP^6;lTO|_LEjIAtmoFE?p%|pHrZ&+< zhCxSQ+;l?RgIkvYFE6k;EGhItY&E|(6Ta)cf3UlhC!8U$vqxYHQF|@HEH-I@^&hBE zO2Ya^%aa6KD6ratL^M{{;E=0fOO+o*+qrMNV2|2U0x?nd$nG1l0=!TOa$FNELt_m2 zT!}4cPFjtyWg{THgsC3VHl!ziVf9p^27)6-s*vTP>4ic=Fu=%hj*g?u(4L2d%20{1 zC83y&VykAyw+Lz<{{W&^?kSad##Hc2GlwCX$CoY*M0xQgQ_}34QWw7>Rz7 zS~{g`^+AmX!eRBX5JFb--YGhTsrFK390ap=r;tl_&}toKkg%RUh99qznQIhBGFd_; zm3JJGlpkTyb`n0eYG*bS75@NZ2c?J6Z;-l%MYAnpc~(ufe@Msu$kpLxCU?m64EXsK zLe)4!A4mW^U>Ka23*kSu7CZB%`d*V-CCp_)B-o7yB)@asUARqh>&ViXb+` z7Fef~DMVsLu(^|M)DCbmcK9o%gb8EqQlDLI5LaMP6@###{{S#dQc}keW}nnkVDbe4 zv&l%CtjTn}%Vy3GMqQyC7NFcn3Kq+_Dps{o95(*SKM70bY#hj{g7wPsB5pn(i!sCN5=Iq~KeA-arC4*-J{0i(US zNclgil_FA$#A*a%G9s~YA=q^lE*AaUHT8EBx?k!l9VU=ar;Cq?dk(0Kk!O$C3CR^A{e(zL1$JF}4PPS1vk4CUZk5|2 zSoFCbpECk zsxbY#E&~H)2v}BL(A%wQ2$t*wQN2-H7%5?3|QZyn||X z?xIL7Ih(Rz4zjM&0sjD9#8hldi@4cJZRhm|G>I#v1~o8dLtyzU3EU;7Z49GVl>lS? zqJEjA)yfj0Ti9gB*Z~;iKeqxSH8~#!KET*ZD;O}>v~eLyJw3SUn7sS}CX%Hn*cGZ? z5|5MitgpH+XG@>yiJ4x9Aa&fTnk)e70@Gu_(*2LqNk({%{?rV&LR@ZYi>iqb=cd3F zx=bg9k%$m@ofE1(iC>W#%7G;VTx9@g5wg!v{Evw4Rbm=?7K9~|&eB$Xr_fOxs&}%u zsA0KvDPUVYi_lc$2M1-T9XYiyi3JBmw zhp6})7F4oD&xuylk75+%)xkL+nF@MCDQMH)nw?cwcX7)XY0?<<#I$nT8ewH)ZiWag zsG$n|6$RStgTnptC2@$!k0LhH2!zPgMR*Br!kLAV2!FK!l?aq6xka^jU<4>Cn=1g9 zUt~$Am>-V2j`_x1V1+Ky zQf6`@u0{Z@@o|EJuw~$tPS95pwdiq##+R9Jy%ar;iI)2hmvCaiBO6Z$AYM@ch!lvM zXl=RXDGPytzamRp7)(lHlvD5WpbVLiTmZEYFkh%aDk^0!KBLT|QC5`g!ZUgT7s{~F zEI97e1w;BrgGng`Z;KttBT|KM$4E!gqNO0DPRQ$0*OHQe@;#njL7 z6A)FGgrum7nz>L5XvHBx?MRXU8yGKEUpWV&1A(bjYe=r#pi7TVq_*m`U=B^FS|4^` zhxI7|m*uvli+Kjwv6Dh3@Pq^@VkKH+*9N2QSjH?}7#7-skAo@z4219+5y?TfkYBw_ zD}iM-Mu|X&vvoYFK%mMlu8T=Tc;!G1mTaTw>}|5$@?QAxc~({o`2!7tq4T7`*xa{C*z(Y?h9PF$<|DzPYT;RM@r%wzAVdN=kR$RS68l#qy=Y zSwVENQN0=-$DN&i66pyubp;0R?A%=G5T$?UL@kOzVbWHr9xSx$!zrp9MaNl1s#LWN z45l@U$|90c@Igz!U|5Z^UMJbMGov~db=b7_qAB=NQGuAMgu^fQTnraYluKWHh58;! zfwvhB1me&)AFP!ntH`^3iqN;Qt6L-7Ypkx|Izk4P`x^95Sj043nLSL_>^lIjVaSuJ zykWFZR`C3tv4fU;6%nt~6=V+d2Ez|%Tp`VgnRi=NU%BY#M_i>2tsiA7$hLONyEc18Of{*Rz2sKpjOJX=a0h8M5>IfFWbViM${I ztO(zHo@G#rqli&^3BPSW2;-V77wc`vfIRxbL2qEyx$?}`hzO!Zi=snGUc_y9vh>Vh zH`mIg%a5wUm=gOf+>!>tu=&`z0>aOTGOdX}P;?Mx%`ShjJDt`72>V1d0UNl^3#rTk zQ`ja@tzhDeC>)Ha6kS3?RrnoerdPbTIIvxya0dhIdKZ#q_y0J~<1e7J@szv5ArH)5&a0K_X*pm=l!U|E?>k^1F`zUHH zCM1OjFx;M2COa)vGy0K%0RHj zaDh}J;Pe5kbYIYfJ&~Pz3duT4S7Gcmm5{-OX$U}MCZR3fh6{}PfzIo(CapDuRh1X? zK%xHfs8x-HyKDk2;w@A-0BF?7sH;$7?7qP?=K>#Ag&Go-4N#{wiEDgI30JZR{6X&4l{Q(RDM?ik?UVrv2t1Fn?XK7a zwjkiZ{ZCWz1@^Z9@WSGu{XujGB};u6S7;2s@h$;yz;ftiT_6i_c{r)KzhvO{k641ohjLHoGb>)ZSFEnsZeMa zXYQ6rvT`sjJxq!q0D$KoAVCjCA|>PvuE7%;fuxQV^-P)SuF#9>UeZR?M5A^vc@#{p zTsnWShZP%Q;sxdM5EP|he}W@T_1!Yo&-P_Ibta&5Np3zBFfaBc&qqDDO8)@FW$6Jq zIILGHDhk-8Nm!6~t{sU@e8=n&P~eG?0cwUgk)aE(qQg~Ew1N+N0u|W+ER3~UA%YYE zc0`CvAcM4GLXl;N-A-luO9`WK+9ucTIRgL!-pkl;vG!QiVi?QhP9z{#p>bUu7${PM zA5A(>WiLT3n<{w_;vyb4C}zA}55`LU#-b%hD-kOa=(y5oLEtu0^7=vQQjq81jwLH4 zSs$N|Z^orFh=nmD72k0>y@6Nku-{=f>97#WqA}%bb%SJ@(3M9gYp*c10|qt{R<= zz_%?D{UaM>7Uy!HIAFL8XD*WE(gGHvZ4irGY(76hgvS|UcG-%FcN7#JFjykv9|gxg z&PqgZqETcDAs*maX(dIyXNX`+F211#SU}%+%FF|Hwp;EBjb42GOgfi1fl)9zEy2-f zgQ}tS6}tum!0uJ#G}%!K{^J+=MF|9Ye+erVKpFJ>F=}azR%7^%>NZmVSQgZ6EK9Tm z#>2A@>fFU1$!phOuR#9*qXZW&QSH>R4W2<$H4*7%6=v8vSW?G>$XKm5gTL`%VaHIS zH2D$&1yzK<_61yP4~UB@HN^W0$>67`HO0XFgbj67D`B^hxGe~jO=YikM&B6xkqFVq z6U(?k-MHEmEB%o{&oaz%M4%sm5zk_w+<>;WTYN+)VSP#lsEAe;b+Op6e^8M3G8xpO=AVL)S#+s$forQG4u}XLBdgll>qOtC?dJBv`OO)T(eY{HI(@; zYwWX;c*yA!rTyheKL{|2nz->r<&?_KPf19l+`WH5MTV3}2$wXuKr|fBV8Q8D>ICZf zgnS6}kQH$S_Fw-1Z5X<1$*@#Kv9d4h2oV6_GWSTTU1n4qGLFT9E?%+7tt}1dh?iLe z#$AXgm17=ALiQ>Cj4^ZHG+LptnwAVb5mmwj*4tSd9vGVTnpozlwXX<_{{W6bkh3Y4 zkc@W|_64ODEgzBj^xKF4fLm}A81?;(t%MnqlYrRBVfIt7tz0;qHIqq@K*#QkU0~jy zAeTfx-$^T;0>4l|wxty!R;eGLrT}qNYOG_9+%B4zdISMR42w@ll{!sKOAqgoz}NOy zBLy}n>?o=pODACk!U_3e1vUGZ*{(1kPqhpIaPV+QVGKY?u0g5=Z?U(Pq0$%!r1>AJ za30DQE08lBI#e1)vXn0DvKa!Xb~)t_eWN9y(Qje{s+Tk=$&hed4$7Ih?G{oV{^KBQ zPkfgYvH2q|iW0kN|wf^i@+l$8w1xC~`L4O~NOe{88v>QOcbiK_3Cu$*#oFvHj{ z#N@7#Cz7)8EH835>O}#DSL8~`WlVe*a*7_r^|2QXqAWQU4jn#1vGS$Ukx(^0=z~ZA zj>;Qpl`ox!h>oqzgYXvu3(^50Oa&q~iF7nMG+K^o%0`HwSVDRi6hqczflt{`ZF)!C zVlx4+tZli%IF0e&vG>bTp<}>*E(iva>!Pj#9JFkRHjV?W%bGqJQ?dl&K~ zqUpvQE2JO>9za7#LK*jO`5S;qz%Y(3zRL|+>^nGIW0hV5GD`*`PKYSVVh3Tu+ImF& zp?Z;gjW4RVvxleTumL^shPUBx_29Z?!MH%LEh%|0ne_^(tWKEg89T)-412ZiL*orY zu`+kFXkQ`Th`b7{S-V1ZqVL!uFPicuRH&B8ag>drMnzR@AqR{wQ^ArO1b(7W1*?_@ zB`%?n{29{TxWMSu<12#e!dGfP^n-8qW4rbbU~z6cNnG8>!voQ;s2y5wu>n58bNvYe zBypjZ;q4#~AKzGAR?FmN3JAQ4#E&L;coP1Wku~T^NOkm#=aCSp)s#WpkJ!8RgRvcP zVyi|pjL$Qr@gIAkQSi!Gii*>8b#|8`mZcT_g0>S0aVRldq+CNG25~68jX?<11yrF8 zUy`;THTWW`k0#Y@$L zjrN1dRP>3l76S@L>^%1h{1M*?$zn-WE)r;)FCeqZh^n?Bau*D#g}TB+1Z=*reF`IP=CAg%ZKqGgSB0)r!kFuc+prr*6I6kAbV#EqnQnAo`GJ#95Hdy*X#YJLO z8}TSqEB^o?AybJE*gB51BOU_2MfQz@gU@9T=C3=mC;?t@7Qjy z7|IGpjFfa{_LfrtGTtSL?}j0jGlL`D+yd?7S-?hF4zy~9@1qu_R?!<^>AfDabXjqUQV?Y*uPOVeO&Clw@~dcx??M&$U(*gW3pp7Jt5~ zEy_gTeU>6QUQT+1P^yO2DuZAFDFI5m{zVijmP-LqDkZ=ywNAxgfh>GTsPd}dxq-=p z?};j0-`u5Fe2v;}8%LFQ2Juv>ps*A$78;KI`?XNq3}mHJ+(hSRP(rPVErW1zoT>ts zA8tcI8>b+iOGQ61m}&(Io)Tht90nw*xAcnrY;#G~(376!waO>F(0Q`4}~; zn0bN@SfILeOCc3NejFyrsIc-3#up$v4X+`?Y$qFoYinRD;Wr|*0OMB%TTSEyB5^T| zXm}Vrt9ua(!TDJZ5;=q#ff0<|yyRL-^Y#s3^$;cHRAMh9eSk7TJ(jt3FYS?aYQ_X^ zL$_Wgiq1xm!0fTV$PC{!-E z6f8c%*P(*({{SWVj9tbI(i%W_p4u6=Gm{dv}8R=X@zCwnh5@kaDtXv|zPpkXe4 zAQ)OSEG&*UZ`errEpm8WhtHHX@?L5Ya_VD*z7qFVz=eH0gxV3|3dZii4OT-C@BTp@ zj1zfqH!{jMkQ%M-#hen#nGL9x`4B;iT0=gmq`#r4^c1u~=9y&hRDjM|@?)YyWYFex zjoK;;P0PSCHELbEgwoW+_H~R6`8(D21PgR+O9Xg$kVUPp!BDI00-}b>1lR?CSY9bT znSv}dv`cMpo2uNXf`~)`ff*QvRjY1mcEJKi&P&aT>=kh?t&T+?Se%~#H3KL_T>7Zu zuPvBc5^0oBL}epKkige`VMhXshuLK;4I^K0zQ8Z!<67c;pP)E+p ziyQIeO-C!#bjwO(Mb+K?m!6RX6E>lXipD76hViIv?-G4QL|MOpLaJM<2`;{)5~a&Q z>~#{@g%e?bv|MuHyhvuU_fgvwFr5Xzc>;vTj9JB^gA~7WVxVGifLaW`0TEdL0BPe6 z-am0$L&i2p=Oda4ibQ{ZuLuZoxG;()>yByRY3GzGi1UZ z72w3Y5^{>T8kOQ7g6tUsSdAr{VuUe6e`6(KEGa9OsZz=(0d4~QBMkTK0jGa+YJlD0 zG^#*-2ouVHCc>AfJP5AEk0qwiT!CrSpl&KvFas0Jf!YJvgacuK6sShB;^zEaWEzhS z&Tm3m4ny&ie>7s!BubdISldu zQW}c!zmpWUs71oDX`+Y8Y=>o`NgOrXfcqpz`1}|YQgk&>*!oF_L5)f~zy1VEw+ykN ze@rw~`fXMp57KZ-B)JEZ1zkb633@z%8Fa#2g<{0=aFnn~Ks!k3;?l}p5Xd+sK+Bip z6H*u_QAmFb5KVezN21f_$7h9z!m|J~a;PyBmXKUx-BXdY!ahBideRZoTX+)Yhot?5 zBM;m(zY<&*>4^fM)nBQ66;j$@s!!h{th@#df5-!r!V;jg>HxK5orFFh!n=T}UL~j1 z`!sk}FjWwWHY8UWdfZJa0M&agf+JcC>L*zzU9Hu1PquBak zNNRFyV{KCPam*`Xk)N+t$x}lQkg2Bak@mlB)Ld)eV6`>Y;9eŞp5zyR=pB;2%# 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 +u2cgyWScm;5s@ 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 B5BvZC literal 0 HcmV?d00001 diff --git a/website/static/img/community/spotlight/sydney.jpg b/website/static/img/community/spotlight/sydney.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1c847962cf705254d2ef4bc0491c28d39a5d3256 GIT binary patch literal 236000 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

    GomX|k7Cp^4T(pdjnpCC6^#^kvA}$Ma&CPi- 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�oX4_mJr`|Y8+G6H*fY#Gm?jq;U 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

    BD4|}_zz_*l|)V4PgC0s52#Obu_ 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

    Q(L!Ut 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 C9}AuU literal 0 HcmV?d00001 From 550d33340d59f994c2859595130ba0e05f11ed7a Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Thu, 9 Nov 2023 13:35:31 -0800 Subject: [PATCH 124/305] fix a link o'rama --- .../core-upgrade/11-Older versions/upgrading-to-0-15-0.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/dbt-versions/core-upgrade/11-Older versions/upgrading-to-0-15-0.md b/website/docs/docs/dbt-versions/core-upgrade/11-Older versions/upgrading-to-0-15-0.md index 98248a1caa5..7009dc2d088 100644 --- a/website/docs/docs/dbt-versions/core-upgrade/11-Older versions/upgrading-to-0-15-0.md +++ b/website/docs/docs/dbt-versions/core-upgrade/11-Older versions/upgrading-to-0-15-0.md @@ -26,7 +26,7 @@ expect this field will now return errors. See the latest ### Custom materializations -All materializations must now manage dbt's Relation cache. For more information, refer to [Create new materializations](/guides/creating-new-materializations). +All materializations must now manage dbt's Relation cache. For more information, refer to [Create new materializations](/guides/creatie-new-materializations). ### dbt Server From 78f22b5ea4e76a45f163e8be89cf490746404db5 Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Thu, 9 Nov 2023 13:45:31 -0800 Subject: [PATCH 125/305] fix a typo --- .../core-upgrade/11-Older versions/upgrading-to-0-15-0.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/dbt-versions/core-upgrade/11-Older versions/upgrading-to-0-15-0.md b/website/docs/docs/dbt-versions/core-upgrade/11-Older versions/upgrading-to-0-15-0.md index 7009dc2d088..5eba212590f 100644 --- a/website/docs/docs/dbt-versions/core-upgrade/11-Older versions/upgrading-to-0-15-0.md +++ b/website/docs/docs/dbt-versions/core-upgrade/11-Older versions/upgrading-to-0-15-0.md @@ -26,7 +26,7 @@ expect this field will now return errors. See the latest ### Custom materializations -All materializations must now manage dbt's Relation cache. For more information, refer to [Create new materializations](/guides/creatie-new-materializations). +All materializations must now manage dbt's Relation cache. For more information, refer to [Create new materializations](/guides/create-new-materializations). ### dbt Server From 07f9a241e06081d848ca20968596bd118bedc7f1 Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Thu, 9 Nov 2023 15:12:43 -0800 Subject: [PATCH 126/305] adding the forwarders --- website/vercel.json | 490 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 490 insertions(+) diff --git a/website/vercel.json b/website/vercel.json index 3c2c0c6e3ce..7c054b0947e 100644 --- a/website/vercel.json +++ b/website/vercel.json @@ -2,6 +2,496 @@ "cleanUrls": true, "trailingSlash": false, "redirects": [ + { + "source": "/guides/advanced/creating-new-materializations", + "destination": "/guides/create-new-materializations", + "permanent": true + }, + { + "source": "/guides/advanced/using-jinja", + "destination": "/guides/using-jinja", + "permanent": true + }, + { + "source": "/guides/best-practices", + "destination": "/best-practices", + "permanent": true + }, + { + "source": "/guides/best-practices/debugging-errors", + "destination": "/guides/debug-errors", + "permanent": true + }, + { + "source": "/guides/best-practices/how-we-build-our-metrics/semantic-layer-1-intro", + "destination": "/best-practices/how-we-build-our-metrics/semantic-layer-1-intro", + "permanent": true + }, + { + "source": "/guides/best-practices/how-we-build-our-metrics/semantic-layer-2-setup", + "destination": "/best-practices/how-we-build-our-metrics/semantic-layer-2-setup", + "permanent": true + }, + { + "source": "/guides/best-practices/how-we-build-our-metrics/semantic-layer-3-build-semantic-models", + "destination": "/best-practices/how-we-build-our-metrics/semantic-layer-3-build-semantic-models", + "permanent": true + }, + { + "source": "/guides/best-practices/how-we-build-our-metrics/semantic-layer-4-build-metrics", + "destination": "/best-practices/how-we-build-our-metrics/semantic-layer-4-build-metrics", + "permanent": true + }, + { + "source": "/guides/best-practices/how-we-build-our-metrics/semantic-layer-5-refactor-a-mart", + "destination": "/best-practices/how-we-build-our-metrics/semantic-layer-5-refactor-a-mart", + "permanent": true + }, + { + "source": "/guides/best-practices/how-we-build-our-metrics/semantic-layer-6-advanced-metrics", + "destination": "/guides/best-practices/how-we-build-our-metrics/semantic-layer-6-advanced-metrics", + "permanent": true + }, + { + "source": "/guides/best-practices/how-we-build-our-metrics/semantic-layer-7-conclusion", + "destination": "/best-practices/how-we-build-our-metrics/semantic-layer-7-conclusion", + "permanent": true + }, + { + "source": "/guides/best-practices/how-we-structure/1-guide-overview", + "destination": "/best-practices/how-we-structure/1-guide-overview", + "permanent": true + }, + { + "source": "/guides/best-practices/how-we-structure/2-staging", + "destination": "/best-practices/how-we-structure/2-staging", + "permanent": true + }, + { + "source": "/guides/best-practices/how-we-structure/3-intermediate", + "destination": "/best-practices/how-we-structure/3-intermediate", + "permanent": true + }, + { + "source": "/guides/best-practices/how-we-structure/4-marts", + "destination": "/best-practices/how-we-structure/4-marts", + "permanent": true + }, + { + "source": "/guides/best-practices/how-we-structure/5-semantic-layer-marts", + "destination": "/best-practices/how-we-structure/5-semantic-layer-marts", + "permanent": true + }, + { + "source": "/guides/best-practices/how-we-structure/6-the-rest-of-the-project", + "destination": "/best-practices/how-we-structure/6-the-rest-of-the-project", + "permanent": true + }, + { + "source": "/guides/best-practices/how-we-style/0-how-we-style-our-dbt-projects", + "destination": "/best-practices/how-we-style/0-how-we-style-our-dbt-projects", + "permanent": true + }, + { + "source": "/guides/best-practices/how-we-style/1-how-we-style-our-dbt-models", + "destination": "/best-practices/how-we-style/1-how-we-style-our-dbt-models", + "permanent": true + }, + { + "source": "/guides/best-practices/how-we-style/2-how-we-style-our-sql", + "destination": "/best-practices/how-we-style/2-how-we-style-our-sql", + "permanent": true + }, + { + "source": "/guides/best-practices/how-we-style/3-how-we-style-our-python", + "destination": "/best-practices/how-we-style/3-how-we-style-our-python", + "permanent": true + }, + { + "source": "/guides/best-practices/how-we-style/4-how-we-style-our-jinja", + "destination": "/best-practices/how-we-style/4-how-we-style-our-jinja", + "permanent": true + }, + { + "source": "/guides/best-practices/how-we-style/5-how-we-style-our-yaml", + "destination": "/best-practices/how-we-style/5-how-we-style-our-yaml", + "permanent": true + }, + { + "source": "/guides/best-practices/how-we-style/6-how-we-style-conclusion", + "destination": "/best-practices/how-we-style/6-how-we-style-conclusion", + "permanent": true + }, + { + "source": "/guides/best-practices/materializations/1-guide-overview", + "destination": "/best-practices/materializations/1-guide-overview", + "permanent": true + }, + { + "source": "/guides/best-practices/materializations/2-available-materializations", + "destination": "/best-practices/materializations/2-available-materializations", + "permanent": true + }, + { + "source": "/guides/best-practices/materializations/3-configuring-materializations", + "destination": "/best-practices/materializations/3-configuring-materializations", + "permanent": true + }, + { + "source": "/guides/best-practices/materializations/4-incremental-models", + "destination": "/best-practices/materializations/4-incremental-models", + "permanent": true + }, + { + "source": "/guides/best-practices/materializations/5-best-practices", + "destination": "/best-practices/materializations/5-best-practices", + "permanent": true + }, + { + "source": "/guides/best-practices/materializations/6-examining-builds", + "destination": "/best-practices/materializations/6-examining-builds", + "permanent": true + }, + { + "source": "/guides/best-practices/materializations/7-conclusion", + "destination": "/best-practices/materializations/7-conclusion", + "permanent": true + }, + { + "source": "/guides/best-practices/writing-custom-generic-tests", + "destination": "/best-practices/writing-custom-generic-tests", + "permanent": true + }, + { + "source": "/guides/dbt-ecosystem", + "destination": "/guides", + "permanent": true + }, + { + "source": "/guides/dbt-ecosystem/adapter-development/1-what-are-adapters", + "destination": "/guides/adapter-creation", + "permanent": true + }, + { + "source": "/guides/dbt-ecosystem/adapter-development/2-prerequisites-for-a-new-adapter", + "destination": "/guides/adapter-creation", + "permanent": true + }, + { + "source": "/guides/dbt-ecosystem/adapter-development/3-building-a-new-adapter", + "destination": "/guides/adapter-creation", + "permanent": true + }, + { + "source": "/guides/dbt-ecosystem/adapter-development/4-testing-a-new-adapter", + "destination": "/guides/adapter-creation", + "permanent": true + }, + { + "source": "/guides/dbt-ecosystem/adapter-development/5-documenting-a-new-adapter", + "destination": "/guides/adapter-creation", + "permanent": true + }, + { + "source": "/guides/dbt-ecosystem/adapter-development/6-promoting-a-new-adapter", + "destination": "/guides/adapter-creation", + "permanent": true + }, + { + "source": "/guides/dbt-ecosystem/adapter-development/7-verifying-a-new-adapter", + "destination": "/guides/adapter-creation", + "permanent": true + }, + { + "source": "/guides/dbt-ecosystem/databricks-guides/dbt-unity-catalog-best-practices", + "destination": "/best-practices/dbt-unity-catalog-best-practices", + "permanent": true + }, + { + "source": "/guides/dbt-ecosystem/databricks-guides/how_to_optimize_dbt_models_on_databricks", + "destination": "/guides/optimize-dbt-models-on-databricks", + "permanent": true + }, + { + "source": "/guides/dbt-ecosystem/databricks-guides/how-to-set-up-your-databricks-dbt-project", + "destination": "/guides/set-up-your-databricks-dbt-project", + "permanent": true + }, + { + "source": "/guides/dbt-ecosystem/databricks-guides/productionizing-your-dbt-databricks-project", + "destination": "/guides/productionize-your-dbt-databricks-project", + "permanent": true + }, + { + "source": "/guides/dbt-ecosystem/dbt-python-snowpark/1-overview-dbt-python-snowpark", + "destination": "/guides/dbt-python-snowpark", + "permanent": true + }, + { + "source": "/guides/dbt-ecosystem/dbt-python-snowpark/10-python-transformations", + "destination": "/guides/dbt-python-snowpark", + "permanent": true + }, + { + "source": "/guides/dbt-ecosystem/dbt-python-snowpark/11-machine-learning-prep", + "destination": "/guides/dbt-python-snowpark", + "permanent": true + }, + { + "source": "/guides/dbt-ecosystem/dbt-python-snowpark/12-machine-learning-training-prediction", + "destination": "/guides/dbt-python-snowpark", + "permanent": true + }, + { + "source": "/guides/dbt-ecosystem/dbt-python-snowpark/13-testing", + "destination": "/guides/dbt-python-snowpark", + "permanent": true + }, + { + "source": "/guides/dbt-ecosystem/dbt-python-snowpark/14-documentation", + "destination": "/guides/dbt-python-snowpark", + "permanent": true + }, + { + "source": "/guides/dbt-ecosystem/dbt-python-snowpark/15-deployment", + "destination": "/guides/dbt-python-snowpark", + "permanent": true + }, + { + "source": "/guides/dbt-ecosystem/dbt-python-snowpark/2-snowflake-configuration", + "destination": "/guides/dbt-python-snowpark", + "permanent": true + }, + { + "source": "/guides/dbt-ecosystem/dbt-python-snowpark/3-connect-to-data-source", + "destination": "/guides/dbt-python-snowpark", + "permanent": true + }, + { + "source": "/guides/dbt-ecosystem/dbt-python-snowpark/4-configure-dbt", + "destination": "/guides/dbt-python-snowpark", + "permanent": true + }, + { + "source": "/guides/dbt-ecosystem/dbt-python-snowpark/5-development-schema-name", + "destination": "/guides/dbt-python-snowpark", + "permanent": true + }, + { + "source": "/guides/dbt-ecosystem/dbt-python-snowpark/6-foundational-structure", + "destination": "/guides/dbt-python-snowpark", + "permanent": true + }, + { + "source": "/guides/dbt-ecosystem/dbt-python-snowpark/7-folder-structure", + "destination": "/guides/dbt-python-snowpark", + "permanent": true + }, + { + "source": "/guides/dbt-ecosystem/dbt-python-snowpark/8-sources-and-staging", + "destination": "/guides/dbt-python-snowpark", + "permanent": true + }, + { + "source": "/guides/dbt-ecosystem/dbt-python-snowpark/9-sql-transformations", + "destination": "/guides/dbt-python-snowpark", + "permanent": true + }, + { + "source": "/guides/dbt-ecosystem/sl-partner-integration-guide", + "destination": "/guides/sl-partner-integration-guide", + "permanent": true + }, + { + "source": "/guides/legacy/best-practices", + "destination": "/best-practices/best-practice-workflows", + "permanent": true + }, + { + "source": "/guides/legacy/building-packages", + "destination": "/guides/building-packages", + "permanent": true + }, + { + "source": "/guides/legacy/creating-date-partitioned-tables", + "destination": "/docs/build/incremental-models", + "permanent": true + }, + { + "source": "/guides/legacy/debugging-schema-names", + "destination": "/guides/debug-schema-names", + "permanent": true + }, + { + "source": "/guides/legacy/videos", + "destination": "/guides", + "permanent": true + }, + { + "source": "/guides/migration/sl-migration", + "destination": "/guides/sl-migration", + "permanent": true + }, + { + "source": "/guides/migration/tools", + "destination": "/guides", + "permanent": true + }, + { + "source": "/guides/migration/tools/migrating-from-spark-to-databricks", + "destination": "/guides/migrate-from-spark-to-databricks", + "permanent": true + }, + { + "source": "/guides/migration/tools/migrating-from-stored-procedures/1-migrating-from-stored-procedures", + "destination": "/guides/migrate-from-stored-procedures", + "permanent": true + }, + { + "source": "/guides/migration/tools/migrating-from-stored-procedures/2-inserts", + "destination": "/guides/migrate-from-stored-procedures", + "permanent": true + }, + { + "source": "/guides/migration/tools/migrating-from-stored-procedures/3-updates", + "destination": "/guides/migrate-from-stored-procedures", + "permanent": true + }, + { + "source": "/guides/migration/tools/migrating-from-stored-procedures/4-deletes", + "destination": "/guides/migrate-from-stored-procedures", + "permanent": true + }, + { + "source": "/guides/migration/tools/migrating-from-stored-procedures/5-merges", + "destination": "/guides/migrate-from-stored-procedures", + "permanent": true + }, + { + "source": "/guides/migration/tools/migrating-from-stored-procedures/6-migrating-from-stored-procedures-conclusion", + "destination": "/guides/migrate-from-stored-procedures", + "permanent": true + }, + { + "source": "/guides/migration/tools/refactoring-legacy-sql", + "destination": "/guides/refactoring-legacy-sql", + "permanent": true + }, + { + "source": "/guides/orchestration", + "destination": "/guides", + "permanent": true + }, + { + "source": "/guides/orchestration/airflow-and-dbt-cloud/1-airflow-and-dbt-cloud", + "destination": "/guides/airflow-and-dbt-cloud", + "permanent": true + }, + { + "source": "/guides/orchestration/airflow-and-dbt-cloud/2-setting-up-airflow-and-dbt-cloud", + "destination": "/guides/airflow-and-dbt-cloud", + "permanent": true + }, + { + "source": "/guides/orchestration/airflow-and-dbt-cloud/3-running-airflow-and-dbt-cloud", + "destination": "/guides/airflow-and-dbt-cloud", + "permanent": true + }, + { + "source": "/guides/orchestration/airflow-and-dbt-cloud/4-airflow-and-dbt-cloud-faqs", + "destination": "/guides/airflow-and-dbt-cloud", + "permanent": true + }, + { + "source": "/guides/orchestration/custom-cicd-pipelines/1-cicd-background", + "destination": "/guides/custom-cicd-pipelines", + "permanent": true + }, + { + "source": "/guides/orchestration/custom-cicd-pipelines/3-dbt-cloud-job-on-merge", + "destination": "/guides/custom-cicd-pipelines", + "permanent": true + }, + { + "source": "/guides/orchestration/custom-cicd-pipelines/4-dbt-cloud-job-on-pr", + "destination": "/guides/custom-cicd-pipelines", + "permanent": true + }, + { + "source": "/guides/orchestration/custom-cicd-pipelines/5-something-to-consider", + "destination": "/guides/custom-cicd-pipelines", + "permanent": true + }, + { + "source": "/guides/orchestration/how-to-use-databricks-workflows-to-run-dbt-cloud-jobs", + "destination": "/guides/how-to-use-databricks-workflows-to-run-dbt-cloud-jobs", + "permanent": true + }, + { + "source": "/guides/orchestration/set-up-ci/in-15-minutes", + "destination": "/guides/set-up-ci", + "permanent": true + }, + { + "source": "/guides/orchestration/set-up-ci/lint-on-push", + "destination": " /guides/set-up-ci", + "permanent": true + }, + { + "source": "/guides/orchestration/set-up-ci/multiple-environments", + "destination": "/guides/set-up-ci", + "permanent": true + }, + { + "source": "/guides/orchestration/set-up-ci/overview", + "destination": "/guides/set-up-ci", + "permanent": true + }, + { + "source": "/guides/orchestration/set-up-ci/run-dbt-project-evaluator", + "destination": "/guides/set-up-ci", + "permanent": true + }, + { + "source": "/guides/orchestration/webhooks", + "destination": "/guides", + "permanent": true + }, + { + "source": "/guides/orchestration/webhooks/serverless-datadog", + "destination": "/guides/serverless-datadog", + "permanent": true + }, + { + "source": "/guides/orchestration/webhooks/serverless-pagerduty", + "destination": "/guides/serverless-pagerduty", + "permanent": true + }, + { + "source": "/guides/orchestration/webhooks/zapier-ms-teams", + "destination": "/guides/zapier-ms-team", + "permanent": true + }, + { + "source": "/guides/orchestration/webhooks/zapier-new-cloud-job", + "destination": "/guides/zapier-new-cloud-job", + "permanent": true + }, + { + "source": "/guides/orchestration/webhooks/zapier-refresh-mode-report", + "destination": "/guides/zapier-refresh-mode-report", + "permanent": true + }, + { + "source": "/guides/orchestration/webhooks/zapier-refresh-tableau-workbook", + "destination": "/guides/zapier-refresh-tableau-workbook", + "permanent": true + }, + { + "source": "/guides/orchestration/webhooks/zapier-slack", + "destination": "/guides/zapier-slack", + "permanent": true + }, { "source": "/faqs/Project/docs-for-multiple-projects", "destination": "/docs/collaborate/explore-projects#about-project-level-lineage", From 9fc32238cb841299fcaac768fe26608ba795d46a Mon Sep 17 00:00:00 2001 From: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> Date: Thu, 9 Nov 2023 15:13:54 -0800 Subject: [PATCH 127/305] Update website/docs/docs/dbt-versions/release-notes/02-Nov-2023/job-notifications-rn.md --- .../release-notes/02-Nov-2023/job-notifications-rn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/dbt-versions/release-notes/02-Nov-2023/job-notifications-rn.md b/website/docs/docs/dbt-versions/release-notes/02-Nov-2023/job-notifications-rn.md index 32189c66a8e..660129513d7 100644 --- a/website/docs/docs/dbt-versions/release-notes/02-Nov-2023/job-notifications-rn.md +++ b/website/docs/docs/dbt-versions/release-notes/02-Nov-2023/job-notifications-rn.md @@ -8,7 +8,7 @@ tags: [Nov-2023] There are new quality-of-life improvements in dbt Cloud for email and Slack notifications about your jobs: -- You can add external email addresses and receive job notifications from them. External emails can be: +- You can add external email addresses and send job notifications to them. External emails can be: - Addresses that are outside of your dbt Cloud account - Third-party integration addresses for configuring notifications to services like Microsoft Teams or PagerDuty - You can configure notifications for multiple Slack channels. Previously, you could only configure one Slack channel. From 7097d6fd3ac011d67ab85f31b68bd25002d216e0 Mon Sep 17 00:00:00 2001 From: Matt Shaver <60105315+matthewshaver@users.noreply.github.com> Date: Thu, 9 Nov 2023 18:46:01 -0500 Subject: [PATCH 128/305] Adding batch id field --- website/docs/docs/core/connect-data-platform/bigquery-setup.md | 1 + 1 file changed, 1 insertion(+) diff --git a/website/docs/docs/core/connect-data-platform/bigquery-setup.md b/website/docs/docs/core/connect-data-platform/bigquery-setup.md index a630cbb0bd3..1a057ac9dc2 100644 --- a/website/docs/docs/core/connect-data-platform/bigquery-setup.md +++ b/website/docs/docs/core/connect-data-platform/bigquery-setup.md @@ -455,6 +455,7 @@ my-profile: dataproc_region: us-central1 submission_method: serverless dataproc_batch: + batch_id: MY_CUSTOM_BATCH_ID environment_config: execution_config: service_account: dbt@abc-123.iam.gserviceaccount.com From bb41b96811d3b4b045b766ab2ba425fcfc151832 Mon Sep 17 00:00:00 2001 From: Matt Shaver <60105315+matthewshaver@users.noreply.github.com> Date: Thu, 9 Nov 2023 18:49:39 -0500 Subject: [PATCH 129/305] Update website/docs/docs/core/connect-data-platform/bigquery-setup.md --- website/docs/docs/core/connect-data-platform/bigquery-setup.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/core/connect-data-platform/bigquery-setup.md b/website/docs/docs/core/connect-data-platform/bigquery-setup.md index 1a057ac9dc2..96eafadea3b 100644 --- a/website/docs/docs/core/connect-data-platform/bigquery-setup.md +++ b/website/docs/docs/core/connect-data-platform/bigquery-setup.md @@ -455,7 +455,7 @@ my-profile: dataproc_region: us-central1 submission_method: serverless dataproc_batch: - batch_id: MY_CUSTOM_BATCH_ID + batch_id: MY_CUSTOM_BATCH_ID # Supported in v1.7+ environment_config: execution_config: service_account: dbt@abc-123.iam.gserviceaccount.com From ea3f927e8ea037d7fc0a92582b1252c0d454e9a3 Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Thu, 9 Nov 2023 17:04:12 -0800 Subject: [PATCH 130/305] Update website/docs/docs/dbt-versions/release-notes/07-June-2023/product-docs-jun.md Co-authored-by: Matt Shaver <60105315+matthewshaver@users.noreply.github.com> --- .../dbt-versions/release-notes/07-June-2023/product-docs-jun.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/dbt-versions/release-notes/07-June-2023/product-docs-jun.md b/website/docs/docs/dbt-versions/release-notes/07-June-2023/product-docs-jun.md index 7a474cc091f..4ead401a759 100644 --- a/website/docs/docs/dbt-versions/release-notes/07-June-2023/product-docs-jun.md +++ b/website/docs/docs/dbt-versions/release-notes/07-June-2023/product-docs-jun.md @@ -32,4 +32,4 @@ Here's what's new to [docs.getdbt.com](http://docs.getdbt.com/) in June: ## New 📚 Guides, ✏️ blog posts, and FAQs -- Add an Azure DevOps example to the in the [Customizing CI/CD with Custom Pipelines](/guides/custom-cicd-pipelines) guide. +- Add an Azure DevOps example in the [Customizing CI/CD with Custom Pipelines](/guides/custom-cicd-pipelines) guide. From a68ca2e655ead85d6b0be20faa704c27c31eb253 Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Thu, 9 Nov 2023 17:08:45 -0800 Subject: [PATCH 131/305] Update website/docs/guides/dbt-models-on-databricks.md Co-authored-by: Matt Shaver <60105315+matthewshaver@users.noreply.github.com> --- website/docs/guides/dbt-models-on-databricks.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/guides/dbt-models-on-databricks.md b/website/docs/guides/dbt-models-on-databricks.md index f26b7253be9..489a3c28467 100644 --- a/website/docs/guides/dbt-models-on-databricks.md +++ b/website/docs/guides/dbt-models-on-databricks.md @@ -14,7 +14,7 @@ recently_updated: true ## Introduction -Building on the [Set up your dbt project with Databricks](/guides/set-up-your-databricks-dbt-project) guide, we'd like to discuss performance optimization. In this follow-up post,  we outline simple strategies to optimize for cost, performance, and simplicity when you architect data pipelines. We’ve encapsulated these strategies in this acronym-framework: +Building on the [Set up your dbt project with Databricks](/guides/set-up-your-databricks-dbt-project) guide, we'd like to discuss performance optimization. In this follow-up post, we outline simple strategies to optimize for cost, performance, and simplicity when you architect data pipelines. We’ve encapsulated these strategies in this acronym-framework: - Platform Components - Patterns & Best Practices From 51ac90fb4efd553fd550ca7a6529cd618c5b49fb Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Thu, 9 Nov 2023 17:08:53 -0800 Subject: [PATCH 132/305] Update website/docs/guides/debug-schema-names.md Co-authored-by: Matt Shaver <60105315+matthewshaver@users.noreply.github.com> --- website/docs/guides/debug-schema-names.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/guides/debug-schema-names.md b/website/docs/guides/debug-schema-names.md index de713e07df7..e600c772284 100644 --- a/website/docs/guides/debug-schema-names.md +++ b/website/docs/guides/debug-schema-names.md @@ -1,7 +1,7 @@ --- title: Debug schema names id: debug-schema-names -description: Learn how to debug schema names when models build under unexpected schemas +description: Learn how to debug schema names when models build under unexpected schemas. displayText: Debug schema names hoverSnippet: Learn how to debug schema names in dbt. # time_to_complete: '30 minutes' commenting out until we test From 5358095e9ba253406a527fccdc310881ed4364e5 Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Thu, 9 Nov 2023 17:09:04 -0800 Subject: [PATCH 133/305] Update website/docs/guides/debug-schema-names.md Co-authored-by: Matt Shaver <60105315+matthewshaver@users.noreply.github.com> --- website/docs/guides/debug-schema-names.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/guides/debug-schema-names.md b/website/docs/guides/debug-schema-names.md index e600c772284..8f8c6d3580f 100644 --- a/website/docs/guides/debug-schema-names.md +++ b/website/docs/guides/debug-schema-names.md @@ -73,7 +73,7 @@ Your project is switching out the `generate_schema_name` macro for another macro {%- endmacro %} ``` -### I have a `generate_schema_name` macro with custom logic +### You have a `generate_schema_name` macro with custom logic If this is the case — it might be a great idea to reach out to the person who added this macro to your project, as they will have context here — you can use [GitHub's blame feature](https://docs.github.com/en/free-pro-team@latest/github/managing-files-in-a-repository/tracking-changes-in-a-file) to do this. From 2f3699084006913ffd5b9d7bc9e80385580e0913 Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Thu, 9 Nov 2023 17:09:16 -0800 Subject: [PATCH 134/305] Update website/docs/guides/debug-schema-names.md Co-authored-by: Matt Shaver <60105315+matthewshaver@users.noreply.github.com> --- website/docs/guides/debug-schema-names.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/guides/debug-schema-names.md b/website/docs/guides/debug-schema-names.md index 8f8c6d3580f..01c87a0931c 100644 --- a/website/docs/guides/debug-schema-names.md +++ b/website/docs/guides/debug-schema-names.md @@ -27,7 +27,7 @@ You can also follow along via this video: ## Search for a macro named `generate_schema_name` Do a file search to check if you have a macro named `generate_schema_name` in the `macros` directory of your project. -### I do not have a macro named `generate_schema_name` in my project +### You do not have a macro named `generate_schema_name` in my project This means that you are using dbt's default implementation of the macro, as defined [here](https://github.com/dbt-labs/dbt-core/blob/main/core/dbt/include/global_project/macros/get_custom_name/get_custom_schema.sql#L47C1-L60) ```sql From a70225dd7bf9b71a388159d44ade1949a8bf56ac Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Thu, 9 Nov 2023 17:09:22 -0800 Subject: [PATCH 135/305] Update website/docs/guides/serverless-datadog.md Co-authored-by: Matt Shaver <60105315+matthewshaver@users.noreply.github.com> --- website/docs/guides/serverless-datadog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/guides/serverless-datadog.md b/website/docs/guides/serverless-datadog.md index 3b1a3bd6db4..2b8d8341e28 100644 --- a/website/docs/guides/serverless-datadog.md +++ b/website/docs/guides/serverless-datadog.md @@ -1,7 +1,7 @@ --- title: "Create Datadog events from dbt Cloud results" id: serverless-datadog -description: Configure a serverless app to add dbt Cloud events to Datadog logs +description: Configure a serverless app to add dbt Cloud events to Datadog logs. hoverSnippet: Learn how to configure a serverless app to add dbt Cloud events to Datadog logs. # time_to_complete: '30 minutes' commenting out until we test icon: 'guides' From 0129c68a26ee45a27f796f5aa21e039a308be251 Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Thu, 9 Nov 2023 17:09:34 -0800 Subject: [PATCH 136/305] Update website/docs/guides/debug-schema-names.md Co-authored-by: Matt Shaver <60105315+matthewshaver@users.noreply.github.com> --- website/docs/guides/debug-schema-names.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/guides/debug-schema-names.md b/website/docs/guides/debug-schema-names.md index 01c87a0931c..171e1544a19 100644 --- a/website/docs/guides/debug-schema-names.md +++ b/website/docs/guides/debug-schema-names.md @@ -49,7 +49,7 @@ This means that you are using dbt's default implementation of the macro, as defi Note that this logic is designed so that two dbt users won't accidentally overwrite each other's work by writing to the same schema. -### I have a `generate_schema_name` macro in my project that calls another macro +### You have a `generate_schema_name` macro in my project that calls another macro If your `generate_schema_name` macro looks like so: ```sql {% macro generate_schema_name(custom_schema_name, node) -%} From 40aabfa144067ccdfffd25dddd85e5b9de424d61 Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Thu, 9 Nov 2023 17:12:36 -0800 Subject: [PATCH 137/305] Apply suggestions from code review Co-authored-by: Matt Shaver <60105315+matthewshaver@users.noreply.github.com> --- website/docs/guides/migrate-from-spark-to-databricks.md | 2 +- .../docs/guides/productionize-your-dbt-databricks-project.md | 2 +- website/docs/guides/serverless-datadog.md | 2 +- website/docs/guides/serverless-pagerduty.md | 2 +- website/docs/guides/set-up-your-databricks-dbt-project.md | 2 +- website/docs/guides/zapier-ms-teams.md | 2 +- website/docs/guides/zapier-refresh-mode-report.md | 2 +- website/docs/guides/zapier-refresh-tableau-workbook.md | 2 +- website/docs/guides/zapier-slack.md | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/website/docs/guides/migrate-from-spark-to-databricks.md b/website/docs/guides/migrate-from-spark-to-databricks.md index b249021ed50..8fb02ae79d7 100644 --- a/website/docs/guides/migrate-from-spark-to-databricks.md +++ b/website/docs/guides/migrate-from-spark-to-databricks.md @@ -18,7 +18,7 @@ You can migrate your projects from using the `dbt-spark` adapter to using the [d ### Prerequisites -- Your project must be compatible with dbt 1.0 or greater. Refer to [Upgrading to v1.0](/docs/dbt-versions/core-upgrade/upgrading-to-v1.0) for details. For the latest version of dbt, refer to [Upgrading to v1.3](/docs/dbt-versions/core-upgrade/upgrading-to-v1.3). +- Your project must be compatible with dbt 1.0 or greater. Refer to [Upgrading to v1.0](/docs/dbt-versions/core-upgrade/upgrading-to-v1.0) for details. For the latest version of dbt, refer to [Upgrading to v1.7](/docs/dbt-versions/core-upgrade/upgrading-to-v1.7). - For dbt Cloud, you need administrative (admin) privileges to migrate dbt projects. ### Simpler authentication diff --git a/website/docs/guides/productionize-your-dbt-databricks-project.md b/website/docs/guides/productionize-your-dbt-databricks-project.md index 2c6a436a15b..b95d8ffd2dd 100644 --- a/website/docs/guides/productionize-your-dbt-databricks-project.md +++ b/website/docs/guides/productionize-your-dbt-databricks-project.md @@ -1,7 +1,7 @@ --- title: Productionize your dbt Databricks project id: productionize-your-dbt-databricks-project -description: "Learn how to deliver models to end users and use best practices to maintain production data" +description: "Learn how to deliver models to end users and use best practices to maintain production data." displayText: Productionize your dbt Databricks project hoverSnippet: Learn how to Productionize your dbt Databricks project. # time_to_complete: '30 minutes' commenting out until we test diff --git a/website/docs/guides/serverless-datadog.md b/website/docs/guides/serverless-datadog.md index 2b8d8341e28..931ba9832ab 100644 --- a/website/docs/guides/serverless-datadog.md +++ b/website/docs/guides/serverless-datadog.md @@ -98,7 +98,7 @@ Wrote config file fly.toml
    ## Configure a new webhook in dbt Cloud 1. See [Create a webhook subscription](/docs/deploy/webhooks#create-a-webhook-subscription) for full instructions. Your event should be **Run completed**. -2. Set the webhook URL to the host name you created earlier (`APP_NAME.fly.dev`) +2. Set the webhook URL to the host name you created earlier (`APP_NAME.fly.dev`). 3. Make note of the Webhook Secret Key for later. *Do not test the endpoint*; it won't work until you have stored the auth keys (next step) diff --git a/website/docs/guides/serverless-pagerduty.md b/website/docs/guides/serverless-pagerduty.md index 31436221be5..50cc1b2b36e 100644 --- a/website/docs/guides/serverless-pagerduty.md +++ b/website/docs/guides/serverless-pagerduty.md @@ -1,7 +1,7 @@ --- title: "Trigger PagerDuty alarms when dbt Cloud jobs fail" id: serverless-pagerduty -description: Use webhooks to configure a serverless app to trigger PagerDuty alarms +description: Use webhooks to configure a serverless app to trigger PagerDuty alarms. hoverSnippet: Learn how to configure a serverless app that uses webhooks to trigger PagerDuty alarms. # time_to_complete: '30 minutes' commenting out until we test icon: 'guides' diff --git a/website/docs/guides/set-up-your-databricks-dbt-project.md b/website/docs/guides/set-up-your-databricks-dbt-project.md index c47895f7246..c17c6a1f99e 100644 --- a/website/docs/guides/set-up-your-databricks-dbt-project.md +++ b/website/docs/guides/set-up-your-databricks-dbt-project.md @@ -1,7 +1,7 @@ --- title: Set up your dbt project with Databricks id: set-up-your-databricks-dbt-project -description: "Learn more about setting up your dbt project with Databricks" +description: "Learn more about setting up your dbt project with Databricks." displayText: Setting up your dbt project with Databricks hoverSnippet: Learn how to set up your dbt project with Databricks. # time_to_complete: '30 minutes' commenting out until we test diff --git a/website/docs/guides/zapier-ms-teams.md b/website/docs/guides/zapier-ms-teams.md index bd8bdd4aca2..66596d590e0 100644 --- a/website/docs/guides/zapier-ms-teams.md +++ b/website/docs/guides/zapier-ms-teams.md @@ -1,7 +1,7 @@ --- title: "Post to Microsoft Teams when a job finishes" id: zapier-ms-teams -description: Use Zapier and dbt Cloud webhooks to post to Microsoft Teams when a job finishes running +description: Use Zapier and dbt Cloud webhooks to post to Microsoft Teams when a job finishes running. hoverSnippet: Learn how to use Zapier with dbt Cloud webhooks to post in Microsoft Teams when a job finishes running. # time_to_complete: '30 minutes' commenting out until we test icon: 'guides' diff --git a/website/docs/guides/zapier-refresh-mode-report.md b/website/docs/guides/zapier-refresh-mode-report.md index 0ffcec9c96d..5bab165b11d 100644 --- a/website/docs/guides/zapier-refresh-mode-report.md +++ b/website/docs/guides/zapier-refresh-mode-report.md @@ -1,7 +1,7 @@ --- title: "Refresh a Mode dashboard when a job completes" id: zapier-refresh-mode-report -description: Use Zapier to trigger a Mode dashboard refresh when a dbt Cloud job completes +description: Use Zapier to trigger a Mode dashboard refresh when a dbt Cloud job completes. hoverSnippet: Learn how to use Zapier to trigger a Mode dashboard refresh when a dbt Cloud job completes. # time_to_complete: '30 minutes' commenting out until we test icon: 'guides' diff --git a/website/docs/guides/zapier-refresh-tableau-workbook.md b/website/docs/guides/zapier-refresh-tableau-workbook.md index 6e8621659f0..f614b64eaa2 100644 --- a/website/docs/guides/zapier-refresh-tableau-workbook.md +++ b/website/docs/guides/zapier-refresh-tableau-workbook.md @@ -1,7 +1,7 @@ --- title: "Refresh Tableau workbook with extracts after a job finishes" id: zapier-refresh-tableau-workbook -description: Use Zapier to trigger a Tableau workbook refresh once a dbt Cloud job completes successfully +description: Use Zapier to trigger a Tableau workbook refresh once a dbt Cloud job completes successfully. hoverSnippet: Learn how to use Zapier to trigger a Tableau workbook refresh once a dbt Cloud job completes successfully. # time_to_complete: '30 minutes' commenting out until we test icon: 'guides' diff --git a/website/docs/guides/zapier-slack.md b/website/docs/guides/zapier-slack.md index d103e4aa541..61b96658f95 100644 --- a/website/docs/guides/zapier-slack.md +++ b/website/docs/guides/zapier-slack.md @@ -1,7 +1,7 @@ --- title: "Post to Slack with error context when a job fails" id: zapier-slack -description: Use a webhook or Slack message to trigger Zapier and post error context in Slack when a job fails +description: Use a webhook or Slack message to trigger Zapier and post error context in Slack when a job fails. hoverSnippet: Learn how to use a webhook or Slack message to trigger Zapier to post error context in Slack when a job fails. # time_to_complete: '30 minutes' commenting out until we test icon: 'guides' From c2c1f90e454d9fd960820be405caecfc1b721ae4 Mon Sep 17 00:00:00 2001 From: amada-ech <94760092+amada-ech@users.noreply.github.com> Date: Thu, 9 Nov 2023 23:35:43 -0500 Subject: [PATCH 138/305] Create dakota-kelley.md --- .../docs/community/spotlight/dakota-kelley.md | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 website/docs/community/spotlight/dakota-kelley.md diff --git a/website/docs/community/spotlight/dakota-kelley.md b/website/docs/community/spotlight/dakota-kelley.md new file mode 100644 index 00000000000..0176b5de985 --- /dev/null +++ b/website/docs/community/spotlight/dakota-kelley.md @@ -0,0 +1,32 @@ +--- +id: #dakota-kelley +title: Dakota Kelley +description: | + For the last ~2 years I've worked at phData. Before that I spent 8 years working as a Software Developer in the public sector. Currently I'm a Solution Architect, helping our customers and clients implement dbt on Snowflake, working across multiple cloud providers. + + I first started reading about dbt when I was in grad school about 3 years ago. When I began with phData I had a fantastic opportunity to work with dbt. From there I feel in love with the Engineering practices and structure that I always felt were missing from Data Work. Since then, I've been fortunate enough to speak at dbt Coalesce 2022 and I'm speaking again at dbt Coalesce 2023. On top of this, I've written numerous blogs about dbt as well. +image: /img/community/spotlight/dakota.jpg +pronouns: he/him +location: Edmond, USA +jobTitle: Solution Architect +companyName: phData +socialLinks: + - name: Twitter + link: link + - name: LinkedIn + link: https://www.linkedin.com/in/dakota-kelley/ +dateCreated: 2023-10-03 +hide_table_of_contents: true +--- + +## When did you join the dbt community and in what way has it impacted your career? + +I joined the dbt community not too long after my first working experience. One of my passions is giving back and helping others, and being a part of the community allows me to help others with problems I've tackled before. Along the way it helps me learn new ways and see different methods to solve a wide variety of problems. Every time I interact with the community I've learned something new and that energizes me. + +## What dbt community leader do you identify with? How are you looking to grow your leadership in the dbt community? + +This is a tough one. I know there are several, but the main qualities I resonate with are from those who dig in and help each other. There are always nuances to others situations, and it's good to dig in together, understand those, and seek a solution. The other quality I look for is someone who is trying to pull others up with them. At the end of the day we should all be striving to make all things better than they were when we arrived, regardless if that's the dbt Community or the local park we visit for rest and relaxation. + +## What have you learned from community members? What do you hope others can learn from you? + +The thing I hope others take away from me, is to genuinely support others and tackle problems with curiosity. There used to be a time where I was always worried about being wrong, so I wouldn't get too involved. It's okay to be wrong, that's how we learn new ways to handle problems and find new ways to grow. We just all have to be open to learning and trying our best to help and support each other. From f17ee74a9f9e5d2ee7ac3ea1c67887084861fd9c Mon Sep 17 00:00:00 2001 From: Matt Sunderland <40239275+gatewaycat@users.noreply.github.com> Date: Fri, 10 Nov 2023 00:37:06 -0500 Subject: [PATCH 139/305] Link to reference/resource-configs/schema#tests Current text reads "you can configure the schema to a different value," alluding to https://docs.getdbt.com/reference/resource-configs/schema#tests, but does not link to it. Adding such a link. I believe this link will help dbt practitioners find the --store-failures schema configuration, in particular because when you google "--store-failures schema," this page https://docs.getdbt.com/reference/resource-configs/store_failures is the 1st result, but the page you actually want https://docs.getdbt.com/reference/resource-configs/schema#tests does not appear at all, as google hides it "In order to show you the most relevant results, we have omitted some entries very similar to the 100 already displayed." This has been the case since at least 2022. --- website/docs/reference/resource-configs/store_failures.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/reference/resource-configs/store_failures.md b/website/docs/reference/resource-configs/store_failures.md index 6c71cdb9296..2c596d1cf3e 100644 --- a/website/docs/reference/resource-configs/store_failures.md +++ b/website/docs/reference/resource-configs/store_failures.md @@ -10,7 +10,7 @@ Optionally set a test to always or never store its failures in the database. - If specified as `true` or `false`, the `store_failures` config will take precedence over the presence or absence of the `--store-failures` flag. - If the `store_failures` config is `none` or omitted, the resource will use the value of the `--store-failures` flag. -- When true, `store_failures` save all the record(s) that failed the test only if [limit](/reference/resource-configs/limit) is not set or if there are fewer records than the limit. `store_failures` are saved in a new table with the name of the test. By default, `store_failures` use a schema named `dbt_test__audit`, but, you can configure the schema to a different value. +- When true, `store_failures` save all the record(s) that failed the test only if [limit](/reference/resource-configs/limit) is not set or if there are fewer records than the limit. `store_failures` are saved in a new table with the name of the test. By default, `store_failures` use a schema named `dbt_test__audit`, but, you can [configure](/reference/resource-configs/schema#tests) the schema to a different value. This logic is encoded in the [`should_store_failures()`](https://github.com/dbt-labs/dbt-core/blob/98c015b7754779793e44e056905614296c6e4527/core/dbt/include/global_project/macros/materializations/helpers.sql#L77) macro. From 3c01cbeb76c8f1cf26a571ce44fab6810e33fff5 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Fri, 10 Nov 2023 09:59:48 +0000 Subject: [PATCH 140/305] Update version.md consolidate --- .../docs/reference/project-configs/version.md | 45 +++---------------- 1 file changed, 6 insertions(+), 39 deletions(-) diff --git a/website/docs/reference/project-configs/version.md b/website/docs/reference/project-configs/version.md index 7ad6fa7b7d4..aa4ef205e7a 100644 --- a/website/docs/reference/project-configs/version.md +++ b/website/docs/reference/project-configs/version.md @@ -8,15 +8,15 @@ import VersionsCallout from '/snippets/_version-callout.md'; - -dbt projects have two distinct types of the `version` tags. This field has a different meaning depending on its location. +dbt projects have two distinct types of `version` tags. This field has a different meaning depending on its location. ## `dbt_project.yml` versions -The version tag in a `dbt_project` file represents the version of your dbt project. Starting in version 1.5, `version` in the `dbt_project.yml` is an *optional parameter*. If specified, the version must be in a [semantic version](https://semver.org/) format, e.g. `1.0.0`. The default value if not specified is `None`. +The version tag in a `dbt_project` file represents the version of your dbt project. Starting in dbt version 1.5, `version` in the `dbt_project.yml` is an *optional parameter*. If used, the version must be in a [semantic version](https://semver.org/) format, such as `1.0.0`. The default value is `None` if not specified. For users on dbt version 1.4 or lower, this tag is required, though it isn't currently used meaningfully by dbt. For more on Core versions, see [About dbt Core versions](/docs/dbt-versions/core). + ```yml @@ -29,7 +29,7 @@ version: version A version tag in a `.yml` property file provides the control tag, which informs how dbt processes property files. -Starting from version 1.5, dbt will no longer require this configuration in your resource `.yml` files. If you want to know more about why this tag was previously required, you can refer to the [property file FAQs](reference/configs-and-properties#faqs). +Starting from version 1.5, dbt will no longer require this configuration in your resource `.yml` files. If you want to know more about why this tag was previously required, you can refer to the [FAQs](#faqs). For users on dbt version 1.4 or lower, this tag is required, For more on property files, see their general [documentation](/reference/configs-and-properties#where-can-i-define-properties) on the same page. @@ -72,39 +72,6 @@ models: +## FAQS - - - - -dbt projects have two distinct types of `version` tags. This field has a different meaning depending on its location. - -## `dbt_project.yml` versions - -The version tag in a `dbt_project` file represents the version of your dbt project and **is a required parameter**. However, it isn't currently used in a meaningful way by dbt. The version must follow a [semantic version](https://semver.org/) format, such as 1.0.0. For more information about dbt Core versions, refer to [About dbt Core versions](/docs/dbt-versions/core). - - -```yml -version: version -``` - - - -## `.yml` property file versions - -A version tag in a `.yml` property file provides the control tag, which informs how dbt processes property files. For more on why we require this tag, see property file [FAQs](reference/configs-and-properties#faqs). - -For more on property files, see their general [documentation](/reference/configs-and-properties#where-can-i-define-properties) on the same page. - - - -```yml -version: 2 # Only 2 is accepted by current and recent versions of dbt. - -models: - ... -``` - - - - + From 406fc5d919cdf8d8dc11d6431ce53962d09296f3 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Fri, 10 Nov 2023 10:06:33 +0000 Subject: [PATCH 141/305] Update version.md --- website/docs/reference/project-configs/version.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/website/docs/reference/project-configs/version.md b/website/docs/reference/project-configs/version.md index aa4ef205e7a..890ad8542a7 100644 --- a/website/docs/reference/project-configs/version.md +++ b/website/docs/reference/project-configs/version.md @@ -13,7 +13,9 @@ dbt projects have two distinct types of `version` tags. This field has a differe ## `dbt_project.yml` versions -The version tag in a `dbt_project` file represents the version of your dbt project. Starting in dbt version 1.5, `version` in the `dbt_project.yml` is an *optional parameter*. If used, the version must be in a [semantic version](https://semver.org/) format, such as `1.0.0`. The default value is `None` if not specified. For users on dbt version 1.4 or lower, this tag is required, though it isn't currently used meaningfully by dbt. +The version tag in a `dbt_project` file represents the version of your dbt project. + +Starting in dbt version 1.5, `version` in the `dbt_project.yml` is an *optional parameter*. If used, the version must be in a [semantic version](https://semver.org/) format, such as `1.0.0`. The default value is `None` if not specified. For users on dbt version 1.4 or lower, this tag is required, though it isn't currently used meaningfully by dbt. For more on Core versions, see [About dbt Core versions](/docs/dbt-versions/core). From 33c3a5f37454770e7a4625e257d70eba00d47c3c Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Fri, 10 Nov 2023 10:13:57 +0000 Subject: [PATCH 142/305] Update semantic-layer-4-build-metrics.md clarify per [slack convo](https://getdbt.slack.com/archives/C05M77P54FL/p1699556859073509?thread_ts=1699525055.794449&cid=C05M77P54FL) --- .../semantic-layer-4-build-metrics.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/website/docs/guides/best-practices/how-we-build-our-metrics/semantic-layer-4-build-metrics.md b/website/docs/guides/best-practices/how-we-build-our-metrics/semantic-layer-4-build-metrics.md index cd0efdc9e64..8b112f2f828 100644 --- a/website/docs/guides/best-practices/how-we-build-our-metrics/semantic-layer-4-build-metrics.md +++ b/website/docs/guides/best-practices/how-we-build-our-metrics/semantic-layer-4-build-metrics.md @@ -34,8 +34,15 @@ metrics: ## Query your metric -- It's best practice any time we're updating our semantic layer code to run a `dbt parse && mf validate-configs`. +Use [MetricFlow commands](/docs/build/metricflow-commands#metricflow) for metric validation or queries during development, and apply the following conventions based on your environment: + +- For dbt Cloud, use the `dbt sl` prefix before the command (such as, `dbt sl parse` or `dbt sl query`). +- For dbt Core, use the `mf` prefix (such as `mf validate-configs` or `mf query)`. + +Follow these best practices when updating your semantic layer code, using the `mf` command as an example (replace `mf` with `dbt sl` if you're using dbt Cloud): + +- It's best practice any time we're updating our semantic layer code to run `dbt parse` if using dbt Cloud or `dbt parse && mf validate-configs` if using dbt Core, to validate your configs. - If everything passes, we can start querying this metric with `mf query`! - `mf query` is not how you would use the tool in production, that's handled by the dbt Cloud Semantic Layer's features. It's available for testing results of various metric queries in development, exactly as we're using it now. - Try `mf query --metrics revenue --group-by metric_time__day` and see a preview of the data come back. -- Note the structure of the above query. We select the metric(s) we want and the dimensions to group them by — we use dunders (double underscores e.g.`metric_time__[time bucket]`) to designate time dimensions or other non-unique dimensions that need a specified entity path to resolve (e.g. if you have a orders location dimension and a employee location dimension both named 'location' you would need dunders to specify `orders__location` or `employee__location`). +- Note the structure of the above query. We select the metric(s) we want and the dimensions to group them by — we use dunders (double underscores e.g.`metric_time__[time bucket]`) to designate time dimensions or other non-unique dimensions that need a specified entity path to resolve (e.g. if you have an orders location dimension and an employee location dimension both named 'location' you would need dunders to specify `orders__location` or `employee__location`). From dfc922710b866825f77c6139a7b020ab719530d7 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Fri, 10 Nov 2023 10:25:01 +0000 Subject: [PATCH 143/305] Update website/docs/reference/resource-configs/databricks-configs.md --- website/docs/reference/resource-configs/databricks-configs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/reference/resource-configs/databricks-configs.md b/website/docs/reference/resource-configs/databricks-configs.md index b09435770fe..65c6607cdcd 100644 --- a/website/docs/reference/resource-configs/databricks-configs.md +++ b/website/docs/reference/resource-configs/databricks-configs.md @@ -438,7 +438,7 @@ Additionally, if you change the model definition of your materialized view or st We plan to address these limitations during the 1.7.x timeframe. -## Setting Table Properties +## Setting table properties [Table properties](https://docs.databricks.com/en/sql/language-manual/sql-ref-syntax-ddl-tblproperties.html) can be set with your configuration for tables or views using `tblproperties`: From 875f6eb1a14854dda9977cac6f152ca70fbfbe51 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Fri, 10 Nov 2023 10:51:10 +0000 Subject: [PATCH 144/305] clarify dbt rules for defer --- .../docs/docs/cloud/about-cloud-develop-defer.md | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/website/docs/docs/cloud/about-cloud-develop-defer.md b/website/docs/docs/cloud/about-cloud-develop-defer.md index 95e745fe963..48c4388578c 100644 --- a/website/docs/docs/cloud/about-cloud-develop-defer.md +++ b/website/docs/docs/cloud/about-cloud-develop-defer.md @@ -7,9 +7,20 @@ pagination_next: "docs/cloud/cloud-cli-installation" --- -[Defer](/reference/node-selection/defer) is a powerful feature that allows developers to only build and run and test models they've edited without having to first run and build all the models that come before them (upstream parents). This is powered by using a production manifest for comparison, and dbt will resolve the `{{ ref() }}` function with upstream production artifacts. +[Defer](/reference/node-selection/defer) is a powerful feature that allows developers to only build and run and test models they've edited without having to first run and build all the models that come before them (upstream parents). This is powered by using a production manifest for comparison, and dbt will resolve the `{{ ref() }}` function with upstream production artifacts. -Both the dbt Cloud IDE and the dbt Cloud CLI allow users to natively defer to production metadata directly in their development workflows, dramatically reducing development time and warehouse spend by preventing unnecessary model builds. +By default, dbt follows these rules: + +- Defers to the production environment when there's no development schema. +- If a development schema exists, dbt will prioritize those changes, which minimizes development time and avoids unnecessary model builds. + +Both the dbt Cloud IDE and the dbt Cloud CLI allow users to natively defer to production metadata directly in their development workflows. + +For specific scenarios: +- Use [`--favor-state`](/reference/node-selection/defer#favor-state) to always use production artifacts to resolve the ref. +- If facing issues with outdated tables in the dev schema, `--favor-state` is an alternative to defer. + +For a clean slate, it's a good practice to drop the dev schema at the start and end of your development cycle. ## Required setup From 1da1108401184321e93f7614e4baf6019803eb66 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Fri, 10 Nov 2023 10:51:40 +0000 Subject: [PATCH 145/305] consistency --- website/docs/docs/cloud/about-cloud-develop-defer.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docs/docs/cloud/about-cloud-develop-defer.md b/website/docs/docs/cloud/about-cloud-develop-defer.md index 48c4388578c..1861a6d8a79 100644 --- a/website/docs/docs/cloud/about-cloud-develop-defer.md +++ b/website/docs/docs/cloud/about-cloud-develop-defer.md @@ -18,9 +18,9 @@ Both the dbt Cloud IDE and the dbt Cloud CLI allow users to natively defer to pr For specific scenarios: - Use [`--favor-state`](/reference/node-selection/defer#favor-state) to always use production artifacts to resolve the ref. -- If facing issues with outdated tables in the dev schema, `--favor-state` is an alternative to defer. +- If facing issues with outdated tables in the development schema, `--favor-state` is an alternative to defer. -For a clean slate, it's a good practice to drop the dev schema at the start and end of your development cycle. +For a clean slate, it's a good practice to drop the development schema at the start and end of your development cycle. ## Required setup From 5e6cbc4e80d2183d87b419bef8bd7ebfcf373e1a Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Fri, 10 Nov 2023 14:02:18 +0000 Subject: [PATCH 146/305] commit message --- .../docs/docs/collaborate/documentation.md | 4 +- website/docusaurus.config.js | 3 +- website/package-lock.json | 270 ++++++++++++++++-- website/package.json | 1 + .../components/lifecyclePill/ReleaseStatus.js | 13 + website/src/css/custom.css | 47 +++ website/static/js/headerLinkCopy.js | 61 ++-- 7 files changed, 354 insertions(+), 45 deletions(-) create mode 100644 website/src/components/lifecyclePill/ReleaseStatus.js diff --git a/website/docs/docs/collaborate/documentation.md b/website/docs/docs/collaborate/documentation.md index 0fa00c7cca2..8936d924fb2 100644 --- a/website/docs/docs/collaborate/documentation.md +++ b/website/docs/docs/collaborate/documentation.md @@ -6,7 +6,7 @@ pagination_next: "docs/collaborate/build-and-view-your-docs" pagination_prev: null --- -## Related documentation +## Related documentation * [Declaring properties](/reference/configs-and-properties) * [`dbt docs` command](/reference/commands/cmd-docs) @@ -17,7 +17,7 @@ pagination_prev: null * [Tests](/docs/build/tests) -## Overview +## Overview Good documentation for your dbt models will help downstream consumers discover and understand the datasets which you curate for them. diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 96d1a27ad50..eacb8f70949 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -2,6 +2,7 @@ const path = require("path"); const math = require("remark-math"); const katex = require("rehype-katex"); const { versions, versionedPages, versionedCategories } = require("./dbt-versions"); +const reactPlugin = import('remark-react'); require("dotenv").config(); /* Debugging */ @@ -215,7 +216,7 @@ var siteSettings = { path: "docs", routeBasePath: "/", sidebarPath: require.resolve("./sidebars.js"), - remarkPlugins: [math], + remarkPlugins: [math, reactPlugin], rehypePlugins: [katex], editUrl: diff --git a/website/package-lock.json b/website/package-lock.json index e8c1f3b45f3..6bf293f8383 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -41,6 +41,7 @@ "redoc": "^2.0.0-rc.57", "rehype-katex": "^5.0.0", "remark-math": "^3.0.1", + "remark-react": "^9.0.1", "sanitize-html": "^2.8.0", "slugify": "^1.6.1", "styled-components": "5.3.3", @@ -4173,6 +4174,38 @@ "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, + "node_modules/@mapbox/hast-util-table-cell-style": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@mapbox/hast-util-table-cell-style/-/hast-util-table-cell-style-0.2.1.tgz", + "integrity": "sha512-LyQz4XJIdCdY/+temIhD/Ed0x/p4GAOUycpFSEK2Ads1CPKZy6b7V/2ROEtQiLLQ8soIs0xe/QAoR6kwpyW/yw==", + "dependencies": { + "unist-util-visit": "^1.4.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@mapbox/hast-util-table-cell-style/node_modules/unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==" + }, + "node_modules/@mapbox/hast-util-table-cell-style/node_modules/unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "dependencies": { + "unist-util-visit-parents": "^2.0.0" + } + }, + "node_modules/@mapbox/hast-util-table-cell-style/node_modules/unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "dependencies": { + "unist-util-is": "^3.0.0" + } + }, "node_modules/@mdx-js/mdx": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", @@ -5675,16 +5708,6 @@ "node": "^12.20 || >=14.13" } }, - "node_modules/@stoplight/mosaic/node_modules/@types/react": { - "version": "17.0.70", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.70.tgz", - "integrity": "sha512-yqYMK49/cnqw+T8R9/C+RNjRddYmPDGI5lKHi3bOYceQCBAh8X2ngSbZP0gnVeyvHr0T7wEgIIGKT1usNol08w==", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, "node_modules/@stoplight/mosaic/node_modules/use-resize-observer": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/use-resize-observer/-/use-resize-observer-9.1.0.tgz", @@ -6691,9 +6714,9 @@ "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" }, "node_modules/@types/react": { - "version": "18.2.37", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.37.tgz", - "integrity": "sha512-RGAYMi2bhRgEXT3f4B92WTohopH6bIXw05FuGlmJEnv/omEn190+QYEIYxIAuIBdKgboYYdVved2p1AxZVQnaw==", + "version": "17.0.70", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.70.tgz", + "integrity": "sha512-yqYMK49/cnqw+T8R9/C+RNjRddYmPDGI5lKHi3bOYceQCBAh8X2ngSbZP0gnVeyvHr0T7wEgIIGKT1usNol08w==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -6708,16 +6731,6 @@ "@types/react": "^17" } }, - "node_modules/@types/react-dom/node_modules/@types/react": { - "version": "17.0.70", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.70.tgz", - "integrity": "sha512-yqYMK49/cnqw+T8R9/C+RNjRddYmPDGI5lKHi3bOYceQCBAh8X2ngSbZP0gnVeyvHr0T7wEgIIGKT1usNol08w==", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, "node_modules/@types/react-router": { "version": "5.1.20", "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", @@ -21242,6 +21255,217 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/remark-react": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/remark-react/-/remark-react-9.0.1.tgz", + "integrity": "sha512-NtpTMfUIreelaRdUVUtgSizTOSwV6JQvGAPn2gWNoWF+Etd0D8YUdDDFEV3vVOiMIoiNR2bQ0etMb/9uaWhjAw==", + "dependencies": { + "@mapbox/hast-util-table-cell-style": "^0.2.0", + "@types/mdast": "^3.0.0", + "@types/react": "^17.0.0", + "hast-to-hyperscript": "^10.0.0", + "hast-util-sanitize": "^4.0.0", + "mdast-util-to-hast": "^11.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-react/node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-react/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/remark-react/node_modules/mdast-util-definitions": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz", + "integrity": "sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-react/node_modules/mdast-util-to-hast": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-11.3.0.tgz", + "integrity": "sha512-4o3Cli3hXPmm1LhB+6rqhfsIUBjnKFlIUZvudaermXB+4/KONdd/W4saWWkC+LBLbPMqhFSSTSRgafHsT5fVJw==", + "dependencies": { + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "@types/mdurl": "^1.0.0", + "mdast-util-definitions": "^5.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^3.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-react/node_modules/trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-react/node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-react/node_modules/unist-builder": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-3.0.1.tgz", + "integrity": "sha512-gnpOw7DIpCA0vpr6NqdPvTWnlPTApCTRzr+38E6hCWx3rz/cjo83SsKIlS1Z+L5ttScQ2AwutNnb8+tAvpb6qQ==", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-react/node_modules/unist-util-generated": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.1.tgz", + "integrity": "sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-react/node_modules/unist-util-is": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", + "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-react/node_modules/unist-util-position": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.4.tgz", + "integrity": "sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-react/node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-react/node_modules/unist-util-visit": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", + "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-react/node_modules/unist-util-visit-parents": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", + "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-react/node_modules/vfile": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", + "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-react/node_modules/vfile-message": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", + "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/remark-squeeze-paragraphs": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", diff --git a/website/package.json b/website/package.json index 9e812a58355..fb55dbf14fb 100644 --- a/website/package.json +++ b/website/package.json @@ -44,6 +44,7 @@ "redoc": "^2.0.0-rc.57", "rehype-katex": "^5.0.0", "remark-math": "^3.0.1", + "remark-react": "^9.0.1", "sanitize-html": "^2.8.0", "slugify": "^1.6.1", "styled-components": "5.3.3", diff --git a/website/src/components/lifecyclePill/ReleaseStatus.js b/website/src/components/lifecyclePill/ReleaseStatus.js new file mode 100644 index 00000000000..0943de51a7b --- /dev/null +++ b/website/src/components/lifecyclePill/ReleaseStatus.js @@ -0,0 +1,13 @@ +// ReleaseStatus.js +import React from 'react'; +import './custom.css'; // import path + +function ReleaseStatus({ status }) { + return ( +

    + ); +} + +export default ReleaseStatus; diff --git a/website/src/css/custom.css b/website/src/css/custom.css index 9b044a7df3a..f41f1652590 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -2033,6 +2033,7 @@ html[data-theme="dark"] .theme-doc-sidebar-container>div>button.button:hover { margin: 10px; color: #818589; /* You can adjust the color as needed */ } + h3.anchor a.hash-link:before, h2.anchor a.hash-link:before { content: ""; @@ -2042,6 +2043,7 @@ h2.anchor a.hash-link:before { width: 18px; display: inline-block; } + h3.anchor.clicked a.hash-link:before, h2.anchor.clicked a.hash-link:before { background-image: url('/img/check.png'); @@ -2049,6 +2051,51 @@ h2.anchor.clicked a.hash-link:before { height: 13px; } +.copy-popup { + position: fixed; + top: 10px; + left: 50%; + transform: translateX(-50%); + background-color: #047377; + color: rgb(236, 236, 236); + padding: 10px; + border-radius: 5px; + z-index: 9999; +} + +.close-button { + cursor: pointer; + margin-right: 10px; + font-size: 20px; +} + +.close-button:hover { + color: #fff; /* Change color on hover if desired */ +} + +.release-status { + display: inline-block; + padding: 4px 8px; + border-radius: 4px; + font-size: 0.8em; + margin-right: 8px; +} + +.release-status-beta { + background-color:lightgreen; /* Adjust the color as needed */ + color: #eae6e6; +} + +.release-status-public-preview { + background-color: #4caf50; /* Adjust the color as needed */ + color: #fff; +} + +.release-status-private-preview { + background-color: #2196f3; /* Adjust the color as needed */ + color: #fff; +} + @media (max-width: 996px) { .quickstart-container { flex-direction: column; diff --git a/website/static/js/headerLinkCopy.js b/website/static/js/headerLinkCopy.js index 219f74cf135..b32ad3c0c5d 100644 --- a/website/static/js/headerLinkCopy.js +++ b/website/static/js/headerLinkCopy.js @@ -1,29 +1,52 @@ /* eslint-disable */ -window.addEventListener("load", function () { - // Get all the headers with anchor links - const headers = document.querySelectorAll("h2.anchor, h3.anchor"); + // Get all the headers with anchor links + window.addEventListener("load", function() { + const headers = document.querySelectorAll("h2.anchor, h3.anchor"); - headers.forEach((header) => { - header.style.cursor = "pointer"; - const clipboard = new ClipboardJS(header, { +headers.forEach((header) => { + header.style.cursor = "pointer"; + const clipboard = new ClipboardJS(header, { text: function(trigger) { - const anchorLink = trigger.getAttribute("id"); - return window.location.href.split('#')[0] +'#' + anchorLink; + const anchorLink = trigger.getAttribute("id"); + return window.location.href.split('#')[0] + '#' + anchorLink; } - }); - - clipboard.on('success', function(e) { + }); + + clipboard.on('success', function(e) { // Provide user feedback (e.g., alert or tooltip) here - console.log("e",e); + const popup = document.createElement('div'); + popup.classList.add('copy-popup'); + popup.innerText = 'Link copied!'; + document.body.appendChild(popup); + + // Set up timeout to remove the popup after 5 seconds + setTimeout(() => { + document.body.removeChild(popup); + }, 5000); + + // Add close button ('x') + const closeButton = document.createElement('span'); + closeButton.classList.add('close-button'); + closeButton.innerHTML = ' ×'; // '×' symbol for 'x' + closeButton.addEventListener('click', () => { + if (document.body.contains(popup)) { + document.body.removeChild(popup); + } + }); + popup.appendChild(closeButton); + + // Add and remove the 'clicked' class for styling purposes e.trigger.classList.add("clicked"); setTimeout(() => { - e.trigger.classList.remove('clicked') - }, 5000) - }); - - clipboard.on('error', function(e) { + if (document.body.contains(popup)) { + document.body.removeChild(popup); + } + }, 5000); + }); + + clipboard.on('error', function(e) { console.error("Unable to copy to clipboard: " + e.text); - }); }); - }); +}); +}); From 9a5b5530d860de6f296a637ac73d44107953b54b Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Fri, 10 Nov 2023 14:11:42 +0000 Subject: [PATCH 147/305] Update website/docs/community/spotlight/dakota-kelley.md --- website/docs/community/spotlight/dakota-kelley.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/community/spotlight/dakota-kelley.md b/website/docs/community/spotlight/dakota-kelley.md index 0176b5de985..bbd2e30d077 100644 --- a/website/docs/community/spotlight/dakota-kelley.md +++ b/website/docs/community/spotlight/dakota-kelley.md @@ -1,5 +1,5 @@ --- -id: #dakota-kelley +id: dakota-kelley title: Dakota Kelley description: | For the last ~2 years I've worked at phData. Before that I spent 8 years working as a Software Developer in the public sector. Currently I'm a Solution Architect, helping our customers and clients implement dbt on Snowflake, working across multiple cloud providers. From efb11cfd72ff249d010740bb4e21a80590e9a412 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Fri, 10 Nov 2023 16:21:37 +0000 Subject: [PATCH 148/305] add pop upfix --- website/src/css/custom.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/src/css/custom.css b/website/src/css/custom.css index f41f1652590..c0f2c1405c1 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -2065,7 +2065,7 @@ h2.anchor.clicked a.hash-link:before { .close-button { cursor: pointer; - margin-right: 10px; + margin: 0 10px; font-size: 20px; } From 7c00c978c4da2d781c42266ffe6cb4e772f93bf7 Mon Sep 17 00:00:00 2001 From: amada-ech <94760092+amada-ech@users.noreply.github.com> Date: Fri, 10 Nov 2023 11:26:15 -0500 Subject: [PATCH 149/305] Update fabiyi-opeyemi.md updating dateCreated so that Opeyemi transfers from Q3 spotlight to Q4 (Coalesce) award recipients) --- website/docs/community/spotlight/fabiyi-opeyemi.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/community/spotlight/fabiyi-opeyemi.md b/website/docs/community/spotlight/fabiyi-opeyemi.md index f26ee27910b..2bc3a04a65c 100644 --- a/website/docs/community/spotlight/fabiyi-opeyemi.md +++ b/website/docs/community/spotlight/fabiyi-opeyemi.md @@ -16,7 +16,7 @@ socialLinks: link: https://twitter.com/Opiano_1 - name: LinkedIn link: https://www.linkedin.com/in/opeyemifabiyi/ -dateCreated: 2023-07-02 +dateCreated: 2023-11-01 hide_table_of_contents: true --- From dc8802fd101bbac6b71a3c18c28f4a62ce8331a0 Mon Sep 17 00:00:00 2001 From: amada-ech <94760092+amada-ech@users.noreply.github.com> Date: Fri, 10 Nov 2023 14:24:20 -0500 Subject: [PATCH 150/305] Update bruno-de-lima.md updating bruno's answers to: - About section -When did you join the dbt community and in what way has it impacted your career? " Also - I updated the date so he shows up for Q4 --- website/docs/community/spotlight/bruno-de-lima.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/website/docs/community/spotlight/bruno-de-lima.md b/website/docs/community/spotlight/bruno-de-lima.md index 7f40f66859c..a3b5d5fff3e 100644 --- a/website/docs/community/spotlight/bruno-de-lima.md +++ b/website/docs/community/spotlight/bruno-de-lima.md @@ -2,11 +2,12 @@ id: bruno-de-lima title: Bruno de Lima description: | - I am an Analytics Engineer and aspiring tech writer coming from an academic engineering background. + Hi all! I'm a Data Engineer, deeply fascinated by the awesomeness dbt. I love talking about dbt, creating content from daily tips to blogposts and engaging with this vibrant community! - I worked at Indicium as an Analytics Engineer for more than a year, having worked with dbt (of course, every day) for transformation; BigQuery, Snowflake, and Databricks as data warehouses; Power BI and Tableau for BI; and Airflow for orchestration. + Started my career at the beginning of 2022 at Indicium as an Analytics Engineer, working with dbt from day 1. By 2023, my path took a global trajectory as I joined phData as a Data Engineer, expanding my experiences and forging connections beyond Brazil. While dbt is at the heart of my expertise, I've also delved into data warehouses such as Snowflake, Databricks, and BigQuery; visualization tools like Power BI and Tableau; and several minor modern data stack tools. - I actively participate in the dbt community, having attended two dbt meetups in Brazil organized by Indicium; writing about dbt-related topics in my Medium and LinkedIn profiles; contributing to the code; and frequently checking dbt Slack and Discourse, helping (and being helped by) other dbt practitioners. If you are a community member, you may have seen me around! + I actively participate in the dbt community, having attended two dbt meetups in Brazil + organized by Indicium; writing about dbt-related topics in my Medium and LinkedIn profiles; contributing to the code; and frequently checking dbt Slack and Discourse, helping (and being helped by) other dbt practitioners. If you are a community member, you may have seen me around! image: /img/community/spotlight/bruno-de-lima.jpg pronouns: he/him location: Florianópolis, Brazil @@ -18,7 +19,7 @@ socialLinks: link: https://www.linkedin.com/in/brunoszdl/ - name: Medium link: https://medium.com/@bruno.szdl -dateCreated: 2023-03-28 +dateCreated: 2023-11-02 hide_table_of_contents: true --- @@ -30,7 +31,7 @@ It took me some time to become an active member of the dbt community. I started Inspired by other members, especially Josh Devlin and Owen Prough, I began answering questions on Slack and Discourse. For questions I couldn't answer, I would try engaging in discussions about possible solutions or provide useful links. I also started posting dbt tips on LinkedIn to help practitioners learn about new features or to refresh their memories about existing ones. -By being more involved in the community, I felt more connected and supported. I received help from other members, and now, I could help others, too. I was happy with this arrangement, but more unexpected surprises came my way. My active participation in Slack, discourse, and LinkedIn opened doors to new connections and career opportunities. I had the pleasure of meeting a lot of incredible people and receiving exciting job offers. +By being more involved in the community, I felt more connected and supported. I received help from other members, and now, I could help others, too. I was happy with this arrangement, but more unexpected surprises came my way. My active participation in Slack, Discourse, and LinkedIn opened doors to new connections and career opportunities. I had the pleasure of meeting a lot of incredible people and receiving exciting job offers, including the one for working at phData. Thanks to the dbt community, I went from feeling uncertain about my career prospects to having a solid career and being surrounded by incredible people. From 3596e6fc98d2f00f952a8ebaaeb91d7be3b4f3a3 Mon Sep 17 00:00:00 2001 From: amada-ech <94760092+amada-ech@users.noreply.github.com> Date: Fri, 10 Nov 2023 14:47:31 -0500 Subject: [PATCH 151/305] Update karen-hsieh.md -title change from Director of Product & Data to "Director of Tech & Data" -date change from 2023-03-24 to 2023-11-03 --- website/docs/community/spotlight/karen-hsieh.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docs/community/spotlight/karen-hsieh.md b/website/docs/community/spotlight/karen-hsieh.md index 1a5cc8c4788..d2b5969441a 100644 --- a/website/docs/community/spotlight/karen-hsieh.md +++ b/website/docs/community/spotlight/karen-hsieh.md @@ -12,7 +12,7 @@ description: | image: /img/community/spotlight/karen-hsieh.jpg pronouns: she/her location: Taipei, Taiwan -jobTitle: Director of Product & Data +jobTitle: Director of Tech & Data companyName: ALPHA Camp organization: "" socialLinks: @@ -22,7 +22,7 @@ socialLinks: link: https://www.linkedin.com/in/karenhsieh/ - name: Medium link: https://medium.com/@ijacwei -dateCreated: 2023-03-24 +dateCreated: 2023-11-03 hide_table_of_contents: true --- From 0b879b47cb7d0861893b5ae8847967916c4e3429 Mon Sep 17 00:00:00 2001 From: amada-ech <94760092+amada-ech@users.noreply.github.com> Date: Fri, 10 Nov 2023 15:17:46 -0500 Subject: [PATCH 152/305] Update josh-devlin.md Change date from 2023-06-27 to 2023-11-04 edit About Me section --- website/docs/community/spotlight/josh-devlin.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/website/docs/community/spotlight/josh-devlin.md b/website/docs/community/spotlight/josh-devlin.md index 1a1db622209..b27afdab4f4 100644 --- a/website/docs/community/spotlight/josh-devlin.md +++ b/website/docs/community/spotlight/josh-devlin.md @@ -2,11 +2,15 @@ id: josh-devlin title: Josh Devlin description: | - After "discovering" dbt in early 2020, I joined the community and used it as a learning tool while I tried to get dbt introduced at my company. By helping others, I learned about common pitfalls, best practices, and the breadth of the tool. When it came time to implement it months later, I already felt like an expert! + Josh Devlin has a rich history of community involvement and technical expertise in both the dbt and wider analytics communities. - In December 2020 I attended the first virtual Coalesce conference, attending all 4 days across 3 time zones! I found my quirky-nerdy-purple-people, and felt at home. + Discovering dbt in early 2020, he quickly became an integral member of its community, leveraging the platform as a learning tool and aiding others along their dbt journey. Josh has helped thousands of dbt users with his advice and near-encyclopaedic knowledge of dbt. - 3 years later I had the pleasure of presenting at my first dbt Meetup in Sydney, and then at the first in-person Coalesce in New Orleans. My passion is helping people, and I'm glad that the dbt community gives me a place to do that! + Beyond the online community, he transitioned from being an attendee at the first virtual Coalesce conference in December 2020 to a presenter at the first in-person Coalesce event in New Orleans in 2022. He has also contributed to the dbt-core and dbt-snowflake codebases, helping improve the product in the most direct way. + + His continuous contributions echo his philosophy of learning through teaching, a principle that has not only enriched the dbt community but also significantly bolstered his proficiency with the tool, making him a valuable community member. + + Aside from his technical endeavors, Josh carries a heart for communal growth and an individual's ability to contribute to a larger whole, a trait mirrored in his earlier pursuits as an orchestral musician. His story is a blend of technical acumen, communal involvement, and a nuanced appreciation for the symbiotic relationship between teaching and learning, making him a notable figure in the analytics engineering space. image: /img/community/spotlight/josh-devlin.jpg pronouns: he/him location: Melbourne, Australia (but spent most of the last decade in Houston, USA) From 32de5fd843106b5fdaba7fa439aec5b21b31ddfa Mon Sep 17 00:00:00 2001 From: amada-ech <94760092+amada-ech@users.noreply.github.com> Date: Fri, 10 Nov 2023 15:21:22 -0500 Subject: [PATCH 153/305] Update bruno-de-lima.md removed a / after an https link --- website/docs/community/spotlight/bruno-de-lima.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/community/spotlight/bruno-de-lima.md b/website/docs/community/spotlight/bruno-de-lima.md index a3b5d5fff3e..f3f5b2a15a8 100644 --- a/website/docs/community/spotlight/bruno-de-lima.md +++ b/website/docs/community/spotlight/bruno-de-lima.md @@ -6,7 +6,7 @@ description: | Started my career at the beginning of 2022 at Indicium as an Analytics Engineer, working with dbt from day 1. By 2023, my path took a global trajectory as I joined phData as a Data Engineer, expanding my experiences and forging connections beyond Brazil. While dbt is at the heart of my expertise, I've also delved into data warehouses such as Snowflake, Databricks, and BigQuery; visualization tools like Power BI and Tableau; and several minor modern data stack tools. - I actively participate in the dbt community, having attended two dbt meetups in Brazil + I actively participate in the dbt community, having attended two dbt meetups in Brazil organized by Indicium; writing about dbt-related topics in my Medium and LinkedIn profiles; contributing to the code; and frequently checking dbt Slack and Discourse, helping (and being helped by) other dbt practitioners. If you are a community member, you may have seen me around! image: /img/community/spotlight/bruno-de-lima.jpg pronouns: he/him From dbf284ed56c003186e77ce2ebcb4575b63d24cc7 Mon Sep 17 00:00:00 2001 From: amada-ech <94760092+amada-ech@users.noreply.github.com> Date: Fri, 10 Nov 2023 15:23:15 -0500 Subject: [PATCH 154/305] Update dakota-kelley.md deleting this since he doesn't have twitter - name: Twitter link: link --- website/docs/community/spotlight/dakota-kelley.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/website/docs/community/spotlight/dakota-kelley.md b/website/docs/community/spotlight/dakota-kelley.md index bbd2e30d077..eb34c154e2f 100644 --- a/website/docs/community/spotlight/dakota-kelley.md +++ b/website/docs/community/spotlight/dakota-kelley.md @@ -11,8 +11,6 @@ location: Edmond, USA jobTitle: Solution Architect companyName: phData socialLinks: - - name: Twitter - link: link - name: LinkedIn link: https://www.linkedin.com/in/dakota-kelley/ dateCreated: 2023-10-03 From a0ee9ec0b4086987d1122b28ce7b66929b4e9c01 Mon Sep 17 00:00:00 2001 From: amada-ech <94760092+amada-ech@users.noreply.github.com> Date: Fri, 10 Nov 2023 15:28:09 -0500 Subject: [PATCH 155/305] Update bruno-de-lima.md fixed a link on line 9 --- website/docs/community/spotlight/bruno-de-lima.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/website/docs/community/spotlight/bruno-de-lima.md b/website/docs/community/spotlight/bruno-de-lima.md index f3f5b2a15a8..40357dc679b 100644 --- a/website/docs/community/spotlight/bruno-de-lima.md +++ b/website/docs/community/spotlight/bruno-de-lima.md @@ -6,8 +6,7 @@ description: | Started my career at the beginning of 2022 at Indicium as an Analytics Engineer, working with dbt from day 1. By 2023, my path took a global trajectory as I joined phData as a Data Engineer, expanding my experiences and forging connections beyond Brazil. While dbt is at the heart of my expertise, I've also delved into data warehouses such as Snowflake, Databricks, and BigQuery; visualization tools like Power BI and Tableau; and several minor modern data stack tools. - I actively participate in the dbt community, having attended two dbt meetups in Brazil - organized by Indicium; writing about dbt-related topics in my Medium and LinkedIn profiles; contributing to the code; and frequently checking dbt Slack and Discourse, helping (and being helped by) other dbt practitioners. If you are a community member, you may have seen me around! + I actively participate in the dbt community, having attended two dbt meetups in Brazil organized by Indicium; writing about dbt-related topics in my Medium and LinkedIn profiles; contributing to the code; and frequently checking dbt Slack and Discourse, helping (and being helped by) other dbt practitioners. If you are a community member, you may have seen me around! image: /img/community/spotlight/bruno-de-lima.jpg pronouns: he/him location: Florianópolis, Brazil From 88b656c82dd429a900b27e14d67163f66690cddf Mon Sep 17 00:00:00 2001 From: amada-ech <94760092+amada-ech@users.noreply.github.com> Date: Fri, 10 Nov 2023 15:31:38 -0500 Subject: [PATCH 156/305] Update bruno-de-lima.md Added tabs so that everything under description: needs to be consistently tabbed over. --- website/docs/community/spotlight/bruno-de-lima.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/docs/community/spotlight/bruno-de-lima.md b/website/docs/community/spotlight/bruno-de-lima.md index 40357dc679b..79f91503c2a 100644 --- a/website/docs/community/spotlight/bruno-de-lima.md +++ b/website/docs/community/spotlight/bruno-de-lima.md @@ -2,11 +2,11 @@ id: bruno-de-lima title: Bruno de Lima description: | - Hi all! I'm a Data Engineer, deeply fascinated by the awesomeness dbt. I love talking about dbt, creating content from daily tips to blogposts and engaging with this vibrant community! + Hi all! I'm a Data Engineer, deeply fascinated by the awesomeness dbt. I love talking about dbt, creating content from daily tips to blogposts and engaging with this vibrant community! - Started my career at the beginning of 2022 at Indicium as an Analytics Engineer, working with dbt from day 1. By 2023, my path took a global trajectory as I joined phData as a Data Engineer, expanding my experiences and forging connections beyond Brazil. While dbt is at the heart of my expertise, I've also delved into data warehouses such as Snowflake, Databricks, and BigQuery; visualization tools like Power BI and Tableau; and several minor modern data stack tools. + Started my career at the beginning of 2022 at Indicium as an Analytics Engineer, working with dbt from day 1. By 2023, my path took a global trajectory as I joined phData as a Data Engineer, expanding my experiences and forging connections beyond Brazil. While dbt is at the heart of my expertise, I've also delved into data warehouses such as Snowflake, Databricks, and BigQuery; visualization tools like Power BI and Tableau; and several minor modern data stack tools. - I actively participate in the dbt community, having attended two dbt meetups in Brazil organized by Indicium; writing about dbt-related topics in my Medium and LinkedIn profiles; contributing to the code; and frequently checking dbt Slack and Discourse, helping (and being helped by) other dbt practitioners. If you are a community member, you may have seen me around! + I actively participate in the dbt community, having attended two dbt meetups in Brazil organized by Indicium; writing about dbt-related topics in my Medium and LinkedIn profiles; contributing to the code; and frequently checking dbt Slack and Discourse, helping (and being helped by) other dbt practitioners. If you are a community member, you may have seen me around! image: /img/community/spotlight/bruno-de-lima.jpg pronouns: he/him location: Florianópolis, Brazil From f38d426d1abdf355b9bdcb26a773299fe9265622 Mon Sep 17 00:00:00 2001 From: amada-ech <94760092+amada-ech@users.noreply.github.com> Date: Fri, 10 Nov 2023 15:32:38 -0500 Subject: [PATCH 157/305] Update dakota-kelley.md Added tabs so that everything under description: needs to be consistently tabbed over. --- website/docs/community/spotlight/dakota-kelley.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docs/community/spotlight/dakota-kelley.md b/website/docs/community/spotlight/dakota-kelley.md index eb34c154e2f..76134e8fc31 100644 --- a/website/docs/community/spotlight/dakota-kelley.md +++ b/website/docs/community/spotlight/dakota-kelley.md @@ -2,9 +2,9 @@ id: dakota-kelley title: Dakota Kelley description: | - For the last ~2 years I've worked at phData. Before that I spent 8 years working as a Software Developer in the public sector. Currently I'm a Solution Architect, helping our customers and clients implement dbt on Snowflake, working across multiple cloud providers. + For the last ~2 years I've worked at phData. Before that I spent 8 years working as a Software Developer in the public sector. Currently I'm a Solution Architect, helping our customers and clients implement dbt on Snowflake, working across multiple cloud providers. - I first started reading about dbt when I was in grad school about 3 years ago. When I began with phData I had a fantastic opportunity to work with dbt. From there I feel in love with the Engineering practices and structure that I always felt were missing from Data Work. Since then, I've been fortunate enough to speak at dbt Coalesce 2022 and I'm speaking again at dbt Coalesce 2023. On top of this, I've written numerous blogs about dbt as well. + I first started reading about dbt when I was in grad school about 3 years ago. When I began with phData I had a fantastic opportunity to work with dbt. From there I feel in love with the Engineering practices and structure that I always felt were missing from Data Work. Since then, I've been fortunate enough to speak at dbt Coalesce 2022 and I'm speaking again at dbt Coalesce 2023. On top of this, I've written numerous blogs about dbt as well. image: /img/community/spotlight/dakota.jpg pronouns: he/him location: Edmond, USA From 0219c3048a6942ccbf023a341ac90b94e7871c87 Mon Sep 17 00:00:00 2001 From: amada-ech <94760092+amada-ech@users.noreply.github.com> Date: Fri, 10 Nov 2023 15:33:57 -0500 Subject: [PATCH 158/305] Update fabiyi-opeyemi.md Added tabs bc everything under description: needs to be consistently tabbed over. --- website/docs/community/spotlight/fabiyi-opeyemi.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docs/community/spotlight/fabiyi-opeyemi.md b/website/docs/community/spotlight/fabiyi-opeyemi.md index 2bc3a04a65c..27a2a0853dc 100644 --- a/website/docs/community/spotlight/fabiyi-opeyemi.md +++ b/website/docs/community/spotlight/fabiyi-opeyemi.md @@ -2,9 +2,9 @@ id: fabiyi-opeyemi title: Opeyemi Fabiyi description: | - I'm an Analytics Engineer with Data Culture, a Data Consulting firm where I use dbt regularly to help clients build quality-tested data assets. I've also got a background in financial services and supply chain. I'm passionate about helping organizations to become data-driven and I majorly use dbt for data modeling, while the other aspect of the stack is largely dependent on the client infrastructure I'm working for, so I often say I'm tool-agnostic. 😀 + I'm an Analytics Engineer with Data Culture, a Data Consulting firm where I use dbt regularly to help clients build quality-tested data assets. I've also got a background in financial services and supply chain. I'm passionate about helping organizations to become data-driven and I majorly use dbt for data modeling, while the other aspect of the stack is largely dependent on the client infrastructure I'm working for, so I often say I'm tool-agnostic. 😀 - I'm the founder of Nigeria's Young Data Professional Community. I'm also the organizer of the Lagos dbt Meetup which I started, and one of the organizers of the DataFest Africa Conference. I became an active member of the dbt Community in 2021 & spoke at Coalesce 2022. + I'm the founder of Nigeria's Young Data Professional Community. I'm also the organizer of the Lagos dbt Meetup which I started, and one of the organizers of the DataFest Africa Conference. I became an active member of the dbt Community in 2021 & spoke at Coalesce 2022. image: /img/community/spotlight/fabiyi-opeyemi.jpg pronouns: he/him location: Lagos, Nigeria From e0e8309bc879fdc7202f69b25430aa0e19e832e1 Mon Sep 17 00:00:00 2001 From: Doug Beatty Date: Fri, 10 Nov 2023 13:35:10 -0700 Subject: [PATCH 159/305] Update page title --- website/docs/reference/source-properties.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/website/docs/reference/source-properties.md b/website/docs/reference/source-properties.md index d20ef5f2877..d107881967e 100644 --- a/website/docs/reference/source-properties.md +++ b/website/docs/reference/source-properties.md @@ -1,5 +1,5 @@ --- -title: "About source properties" +title: "Source properties" description: "Learn how to use source properties in dbt." --- @@ -8,9 +8,13 @@ description: "Learn how to use source properties in dbt." - [Declaring resource properties](/reference/configs-and-properties) ## Overview -Source properties can be declared in `.yml` files in your `models/` directory (as defined by the [`model-paths` config](/reference/project-configs/model-paths)). -You can name these files `whatever_you_want.yml`, and nest them arbitrarily deeply in subfolders within the `models/` directory. +import PropsCallout from '/snippets/_config-prop-callout.md'; + +Source properties can be declared in any `properties.yml` file in your `models/` directory (as defined by the [`model-paths` config](/reference/project-configs/model-paths)).
    + + +You can name these files `whatever_you_want.yml`, and nest them arbitrarily deeply in subfolders within the `models/` directory: From 26d7cf1fbb3e1b642b5f62264c35527d0cc62dd6 Mon Sep 17 00:00:00 2001 From: Doug Beatty Date: Fri, 10 Nov 2023 14:02:52 -0700 Subject: [PATCH 160/305] Small whitespace and verbiage changes --- website/docs/reference/configs-and-properties.md | 5 ++++- website/docs/reference/dbt_project.yml.md | 3 ++- website/docs/reference/resource-configs/docs.md | 10 ++-------- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/website/docs/reference/configs-and-properties.md b/website/docs/reference/configs-and-properties.md index c2ad5b77629..75c8e1594b1 100644 --- a/website/docs/reference/configs-and-properties.md +++ b/website/docs/reference/configs-and-properties.md @@ -11,7 +11,7 @@ A rule of thumb: properties declare things _about_ your project resources; confi For example, you can use resource **properties** to: * Describe models, snapshots, seed files, and their columns -- Assert "truths" about a model, in the form of [tests](/docs/build/tests), e.g. "this `id` column is unique" +* Assert "truths" about a model, in the form of [tests](/docs/build/tests), e.g. "this `id` column is unique" * Define pointers to existing tables that contain raw data, in the form of [sources](/docs/build/sources), and assert the expected "freshness" of this raw data * Define official downstream uses of your data models, in the form of [exposures](/docs/build/exposures) @@ -67,12 +67,14 @@ Previous versions of the docs referred to these as `schema.yml` files — we've dbt has the ability to define node configs in `.yml` files, in addition to `config()` blocks and `dbt_project.yml`. But the reverse isn't always true: there are some things in `.yml` files that can _only_ be defined there. Certain properties are special, because: + - They have a unique Jinja rendering context - They create new project resources - They don't make sense as hierarchical configuration - They're older properties that haven't yet been redefined as configs These properties are: + - [`description`](/reference/resource-properties/description) - [`tests`](/reference/resource-properties/tests) - [`docs`](/reference/resource-configs/docs) @@ -202,3 +204,4 @@ Runtime Error ``` This error occurred because a semicolon (`;`) was accidentally used instead of a colon (`:`) after the `description` field. To resolve issues like this, find the `.yml` file referenced in the error message and fix any syntax errors present in the file. There are online YAML validators that can be helpful here, but please be mindful of submitting sensitive information to third-party applications! + diff --git a/website/docs/reference/dbt_project.yml.md b/website/docs/reference/dbt_project.yml.md index 9bd85d0d5dd..caf501c27ab 100644 --- a/website/docs/reference/dbt_project.yml.md +++ b/website/docs/reference/dbt_project.yml.md @@ -1,5 +1,5 @@ -Every [dbt project](/docs/build/projects) needs a `dbt_project.yml` file — this is how dbt knows a directory is a dbt project. It also contains important information that tells dbt how to operate on your project. +Every [dbt project](/docs/build/projects) needs a `dbt_project.yml` file — this is how dbt knows a directory is a dbt project. It also contains important information that tells dbt how to operate your project. @@ -96,6 +96,7 @@ vars: + ```yml diff --git a/website/docs/reference/resource-configs/docs.md b/website/docs/reference/resource-configs/docs.md index 0ccd21d7504..d300979a826 100644 --- a/website/docs/reference/resource-configs/docs.md +++ b/website/docs/reference/resource-configs/docs.md @@ -17,10 +17,12 @@ default_value: {show: true} { label: 'Macros', value: 'macros', }, ] }> + + ```yml version: 2 @@ -29,7 +31,6 @@ models: docs: show: true | false node_color: "black" - ``` @@ -53,9 +54,7 @@ seeds: - name: seed_name docs: show: true | false - ``` - @@ -71,9 +70,7 @@ snapshots: - name: snapshot_name docs: show: true | false - ``` - @@ -90,7 +87,6 @@ analyses: docs: show: true | false ``` - @@ -110,9 +106,7 @@ macros: - name: macro_name docs: show: true | false - ``` - Also refer to [macro properties](/reference/macro-properties). From 5863a3d7978aa5b1745ae871541812cff5313f77 Mon Sep 17 00:00:00 2001 From: Doug Beatty Date: Fri, 10 Nov 2023 14:14:05 -0700 Subject: [PATCH 161/305] Revert "Update page title" This reverts commit e0e8309bc879fdc7202f69b25430aa0e19e832e1. --- website/docs/reference/source-properties.md | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/website/docs/reference/source-properties.md b/website/docs/reference/source-properties.md index d107881967e..d20ef5f2877 100644 --- a/website/docs/reference/source-properties.md +++ b/website/docs/reference/source-properties.md @@ -1,5 +1,5 @@ --- -title: "Source properties" +title: "About source properties" description: "Learn how to use source properties in dbt." --- @@ -8,13 +8,9 @@ description: "Learn how to use source properties in dbt." - [Declaring resource properties](/reference/configs-and-properties) ## Overview +Source properties can be declared in `.yml` files in your `models/` directory (as defined by the [`model-paths` config](/reference/project-configs/model-paths)). -import PropsCallout from '/snippets/_config-prop-callout.md'; - -Source properties can be declared in any `properties.yml` file in your `models/` directory (as defined by the [`model-paths` config](/reference/project-configs/model-paths)).
    - - -You can name these files `whatever_you_want.yml`, and nest them arbitrarily deeply in subfolders within the `models/` directory: +You can name these files `whatever_you_want.yml`, and nest them arbitrarily deeply in subfolders within the `models/` directory. From 6431a3a898537fb59127171456f15e8d431db786 Mon Sep 17 00:00:00 2001 From: Doug Beatty Date: Fri, 10 Nov 2023 14:17:27 -0700 Subject: [PATCH 162/305] Update page title --- website/docs/reference/source-properties.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/reference/source-properties.md b/website/docs/reference/source-properties.md index d20ef5f2877..1fc7a4aef55 100644 --- a/website/docs/reference/source-properties.md +++ b/website/docs/reference/source-properties.md @@ -1,5 +1,5 @@ --- -title: "About source properties" +title: "Source properties" description: "Learn how to use source properties in dbt." --- From 05e744905f411c94e6c9d9abb757cea1d7721c2a Mon Sep 17 00:00:00 2001 From: Doug Beatty Date: Fri, 10 Nov 2023 14:40:14 -0700 Subject: [PATCH 163/305] Remove hyphenation --- website/docs/reference/configs-and-properties.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docs/reference/configs-and-properties.md b/website/docs/reference/configs-and-properties.md index 75c8e1594b1..8a557c762ed 100644 --- a/website/docs/reference/configs-and-properties.md +++ b/website/docs/reference/configs-and-properties.md @@ -35,11 +35,11 @@ dbt prioritizes configurations in order of specificity, from most specificity to Note - Generic tests work a little differently when it comes to specificity. See [test configs](/reference/test-configs). -Within the project file, configurations are also applied hierarchically. The most-specific config always "wins": In the project file, configurations applied to a `marketing` subdirectory will take precedence over configurations applied to the entire `jaffle_shop` project. To apply a configuration to a model, or directory of models, define the resource path as nested dictionary keys. +Within the project file, configurations are also applied hierarchically. The most specific config always "wins": In the project file, configurations applied to a `marketing` subdirectory will take precedence over configurations applied to the entire `jaffle_shop` project. To apply a configuration to a model, or directory of models, define the resource path as nested dictionary keys. ### Combining configs -Most configurations are "clobbered" when applied hierarchically. Whenever a more-specific value is available, it will completely replace the less-specific value. Note that a few configs have different merge behavior: +Most configurations are "clobbered" when applied hierarchically. Whenever a more specific value is available, it will completely replace the less specific value. Note that a few configs have different merge behavior: - [`tags`](tags) are additive. If a model has some tags configured in `dbt_project.yml`, and more tags applied in its `.sql` file, the final set of tags will include all of them. - [`meta`](/reference/resource-configs/meta) dictionaries are merged (a more specific key-value pair replaces a less specific value with the same key) - [`pre-hook` and `post-hook`](/reference/resource-configs/pre-hook-post-hook) are also additive. From 926c8cec9734b3429d2d068551cc57dc89c3f814 Mon Sep 17 00:00:00 2001 From: Doug Beatty <44704949+dbeatty10@users.noreply.github.com> Date: Fri, 10 Nov 2023 14:54:01 -0700 Subject: [PATCH 164/305] Small formatting changes for configs & properties (#4438) ### Previews - [configs-and-properties](https://docs-getdbt-com-git-dbeatty-config-properties-f-871117-dbt-labs.vercel.app/reference/configs-and-properties) - [dbt_project.yml](https://docs-getdbt-com-git-dbeatty-config-properties-f-871117-dbt-labs.vercel.app/reference/dbt_project.yml) - [docs](https://docs-getdbt-com-git-dbeatty-config-properties-f-871117-dbt-labs.vercel.app/reference/resource-configs/docs) - [source-properties](https://docs-getdbt-com-git-dbeatty-config-properties-f-871117-dbt-labs.vercel.app/reference/source-properties) ## What are you changing in this pull request and why? These are small formatting these found while working on #3989. Merging these changes independently will reduce the diffs in #3989 and make easier to review some of the tricky technical content in that PR. ## Checklist - [x] Review the [Content style guide](https://github.com/dbt-labs/docs.getdbt.com/blob/current/contributing/content-style-guide.md) and [About versioning](https://github.com/dbt-labs/docs.getdbt.com/blob/current/contributing/single-sourcing-content.md#adding-a-new-version) so my content adheres to these guidelines. - [x] I have examined each preview to make sure it looks correct --- website/docs/reference/configs-and-properties.md | 9 ++++++--- website/docs/reference/dbt_project.yml.md | 3 ++- website/docs/reference/resource-configs/docs.md | 10 ++-------- website/docs/reference/source-properties.md | 2 +- 4 files changed, 11 insertions(+), 13 deletions(-) diff --git a/website/docs/reference/configs-and-properties.md b/website/docs/reference/configs-and-properties.md index c2ad5b77629..8a557c762ed 100644 --- a/website/docs/reference/configs-and-properties.md +++ b/website/docs/reference/configs-and-properties.md @@ -11,7 +11,7 @@ A rule of thumb: properties declare things _about_ your project resources; confi For example, you can use resource **properties** to: * Describe models, snapshots, seed files, and their columns -- Assert "truths" about a model, in the form of [tests](/docs/build/tests), e.g. "this `id` column is unique" +* Assert "truths" about a model, in the form of [tests](/docs/build/tests), e.g. "this `id` column is unique" * Define pointers to existing tables that contain raw data, in the form of [sources](/docs/build/sources), and assert the expected "freshness" of this raw data * Define official downstream uses of your data models, in the form of [exposures](/docs/build/exposures) @@ -35,11 +35,11 @@ dbt prioritizes configurations in order of specificity, from most specificity to Note - Generic tests work a little differently when it comes to specificity. See [test configs](/reference/test-configs). -Within the project file, configurations are also applied hierarchically. The most-specific config always "wins": In the project file, configurations applied to a `marketing` subdirectory will take precedence over configurations applied to the entire `jaffle_shop` project. To apply a configuration to a model, or directory of models, define the resource path as nested dictionary keys. +Within the project file, configurations are also applied hierarchically. The most specific config always "wins": In the project file, configurations applied to a `marketing` subdirectory will take precedence over configurations applied to the entire `jaffle_shop` project. To apply a configuration to a model, or directory of models, define the resource path as nested dictionary keys. ### Combining configs -Most configurations are "clobbered" when applied hierarchically. Whenever a more-specific value is available, it will completely replace the less-specific value. Note that a few configs have different merge behavior: +Most configurations are "clobbered" when applied hierarchically. Whenever a more specific value is available, it will completely replace the less specific value. Note that a few configs have different merge behavior: - [`tags`](tags) are additive. If a model has some tags configured in `dbt_project.yml`, and more tags applied in its `.sql` file, the final set of tags will include all of them. - [`meta`](/reference/resource-configs/meta) dictionaries are merged (a more specific key-value pair replaces a less specific value with the same key) - [`pre-hook` and `post-hook`](/reference/resource-configs/pre-hook-post-hook) are also additive. @@ -67,12 +67,14 @@ Previous versions of the docs referred to these as `schema.yml` files — we've dbt has the ability to define node configs in `.yml` files, in addition to `config()` blocks and `dbt_project.yml`. But the reverse isn't always true: there are some things in `.yml` files that can _only_ be defined there. Certain properties are special, because: + - They have a unique Jinja rendering context - They create new project resources - They don't make sense as hierarchical configuration - They're older properties that haven't yet been redefined as configs These properties are: + - [`description`](/reference/resource-properties/description) - [`tests`](/reference/resource-properties/tests) - [`docs`](/reference/resource-configs/docs) @@ -202,3 +204,4 @@ Runtime Error ``` This error occurred because a semicolon (`;`) was accidentally used instead of a colon (`:`) after the `description` field. To resolve issues like this, find the `.yml` file referenced in the error message and fix any syntax errors present in the file. There are online YAML validators that can be helpful here, but please be mindful of submitting sensitive information to third-party applications! + diff --git a/website/docs/reference/dbt_project.yml.md b/website/docs/reference/dbt_project.yml.md index 9bd85d0d5dd..caf501c27ab 100644 --- a/website/docs/reference/dbt_project.yml.md +++ b/website/docs/reference/dbt_project.yml.md @@ -1,5 +1,5 @@ -Every [dbt project](/docs/build/projects) needs a `dbt_project.yml` file — this is how dbt knows a directory is a dbt project. It also contains important information that tells dbt how to operate on your project. +Every [dbt project](/docs/build/projects) needs a `dbt_project.yml` file — this is how dbt knows a directory is a dbt project. It also contains important information that tells dbt how to operate your project. @@ -96,6 +96,7 @@ vars: + ```yml diff --git a/website/docs/reference/resource-configs/docs.md b/website/docs/reference/resource-configs/docs.md index 0ccd21d7504..d300979a826 100644 --- a/website/docs/reference/resource-configs/docs.md +++ b/website/docs/reference/resource-configs/docs.md @@ -17,10 +17,12 @@ default_value: {show: true} { label: 'Macros', value: 'macros', }, ] }> + + ```yml version: 2 @@ -29,7 +31,6 @@ models: docs: show: true | false node_color: "black" - ``` @@ -53,9 +54,7 @@ seeds: - name: seed_name docs: show: true | false - ``` - @@ -71,9 +70,7 @@ snapshots: - name: snapshot_name docs: show: true | false - ``` - @@ -90,7 +87,6 @@ analyses: docs: show: true | false ``` - @@ -110,9 +106,7 @@ macros: - name: macro_name docs: show: true | false - ``` - Also refer to [macro properties](/reference/macro-properties). diff --git a/website/docs/reference/source-properties.md b/website/docs/reference/source-properties.md index d20ef5f2877..1fc7a4aef55 100644 --- a/website/docs/reference/source-properties.md +++ b/website/docs/reference/source-properties.md @@ -1,5 +1,5 @@ --- -title: "About source properties" +title: "Source properties" description: "Learn how to use source properties in dbt." --- From dac137daca30774e38d46580da95479deb5108cd Mon Sep 17 00:00:00 2001 From: Doug Beatty Date: Fri, 10 Nov 2023 15:16:38 -0700 Subject: [PATCH 165/305] Callout snippet for properties and configs --- website/docs/reference/analysis-properties.md | 4 +++- website/docs/reference/exposure-properties.md | 6 +++++- website/docs/reference/macro-properties.md | 7 +++++-- website/docs/reference/source-properties.md | 8 ++++++-- website/snippets/_config-prop-callout.md | 1 + 5 files changed, 20 insertions(+), 6 deletions(-) create mode 100644 website/snippets/_config-prop-callout.md diff --git a/website/docs/reference/analysis-properties.md b/website/docs/reference/analysis-properties.md index fbc7b05538f..880aeddbb0d 100644 --- a/website/docs/reference/analysis-properties.md +++ b/website/docs/reference/analysis-properties.md @@ -2,7 +2,9 @@ title: Analysis properties --- -We recommend you define analysis properties in your `analyses/` directory, which is illustrated in the [`analysis-paths`](/reference/project-configs/analysis-paths) configuration. +import PropsCallout from '/snippets/_config-prop-callout.md'; + +We recommend you define analysis properties in your `analyses/` directory, which is illustrated in the [`analysis-paths`](/reference/project-configs/analysis-paths) configuration.
    You can name these files `whatever_you_want.yml`, and nest them arbitrarily deeply in subfolders within the `analyses/` or `models/` directory. diff --git a/website/docs/reference/exposure-properties.md b/website/docs/reference/exposure-properties.md index aaed2a20a09..0bd4cf771af 100644 --- a/website/docs/reference/exposure-properties.md +++ b/website/docs/reference/exposure-properties.md @@ -8,7 +8,11 @@ description: "Read this guide to understand exposure properties in dbt." - [Declaring resource properties](/reference/configs-and-properties) ## Overview -Exposures are defined in `.yml` files nested under an `exposures:` key. You may define `exposures` in YAML files that also define define `sources` or `models`. + +import PropsCallout from '/snippets/_config-prop-callout.md'; + +Exposures are defined in `properties.yml` files nested under an `exposures:` key. You may define `exposures` in YAML files that also define `sources` or `models`.
    + You can name these files `whatever_you_want.yml`, and nest them arbitrarily deeply in subfolders within the `models/` directory. diff --git a/website/docs/reference/macro-properties.md b/website/docs/reference/macro-properties.md index 9919835f3c5..91a616ded0d 100644 --- a/website/docs/reference/macro-properties.md +++ b/website/docs/reference/macro-properties.md @@ -1,10 +1,13 @@ --- title: Macro properties +id: macro-properties --- -Macro properties can be declared in `.yml` files. +import PropsCallout from '/snippets/_config-prop-callout.md'; -You can name these files `whatever_you_want.yml`, and nest them arbitrarily deeply in subfolders. +Macro properties can be declared in any `properties.yml` file. + +You can name these files `whatever_you_want.yml` and nest them arbitrarily deep in sub-folders. diff --git a/website/docs/reference/source-properties.md b/website/docs/reference/source-properties.md index 1fc7a4aef55..d107881967e 100644 --- a/website/docs/reference/source-properties.md +++ b/website/docs/reference/source-properties.md @@ -8,9 +8,13 @@ description: "Learn how to use source properties in dbt." - [Declaring resource properties](/reference/configs-and-properties) ## Overview -Source properties can be declared in `.yml` files in your `models/` directory (as defined by the [`model-paths` config](/reference/project-configs/model-paths)). -You can name these files `whatever_you_want.yml`, and nest them arbitrarily deeply in subfolders within the `models/` directory. +import PropsCallout from '/snippets/_config-prop-callout.md'; + +Source properties can be declared in any `properties.yml` file in your `models/` directory (as defined by the [`model-paths` config](/reference/project-configs/model-paths)).
    + + +You can name these files `whatever_you_want.yml`, and nest them arbitrarily deeply in subfolders within the `models/` directory: diff --git a/website/snippets/_config-prop-callout.md b/website/snippets/_config-prop-callout.md new file mode 100644 index 00000000000..f21c335734a --- /dev/null +++ b/website/snippets/_config-prop-callout.md @@ -0,0 +1 @@ +{props.title} are "special properties" in that you can't configure them in the dbt_project.yml file or using config() blocks. Refer to Configs and properties for more info. From 875eb0c59a2c3cba437305b84f0b783c1d8d97b9 Mon Sep 17 00:00:00 2001 From: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> Date: Fri, 10 Nov 2023 14:21:00 -0800 Subject: [PATCH 166/305] Update website/docs/best-practices/best-practice-workflows.md don't need the domain for links when page is within our own docs site --- website/docs/best-practices/best-practice-workflows.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/best-practices/best-practice-workflows.md b/website/docs/best-practices/best-practice-workflows.md index 4760aeff782..f06e785c6db 100644 --- a/website/docs/best-practices/best-practice-workflows.md +++ b/website/docs/best-practices/best-practice-workflows.md @@ -58,7 +58,7 @@ All subsequent data models should be built on top of these models, reducing the Earlier versions of this documentation recommended implementing “base models” as the first layer of transformation, and gave advice on the SQL within these models. We realized that while the reasons behind this convention were valid, the specific advice around "base models" represented an opinion, so we moved it out of the official documentation. -You can instead find our opinions on [how we structure our dbt projects](https://docs.getdbt.com/best-practices/how-we-structure/1-guide-overview). +You can instead find our opinions on [how we structure our dbt projects](/best-practices/how-we-structure/1-guide-overview). ::: From 164a80cc2d8baf62365c1c4ba7394f9de3b9b392 Mon Sep 17 00:00:00 2001 From: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> Date: Fri, 10 Nov 2023 14:27:52 -0800 Subject: [PATCH 167/305] Update website/blog/2023-04-24-framework-refactor-alteryx-dbt.md don't need the domain for links when page is within our own docs site --- website/blog/2023-04-24-framework-refactor-alteryx-dbt.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/blog/2023-04-24-framework-refactor-alteryx-dbt.md b/website/blog/2023-04-24-framework-refactor-alteryx-dbt.md index 9b6135b0984..0049a16ff39 100644 --- a/website/blog/2023-04-24-framework-refactor-alteryx-dbt.md +++ b/website/blog/2023-04-24-framework-refactor-alteryx-dbt.md @@ -94,7 +94,7 @@ It is essential to click on each data source (the green book icons on the leftmo For this step, we identified which operators were used in the data source (for example, joining data, order columns, group by, etc). Usually the Alteryx operators are pretty self-explanatory and all the information needed for understanding appears on the left side of the menu. We also checked the documentation to understand how each Alteryx operator works behind the scenes. -We followed dbt Labs' guide on how to refactor legacy SQL queries in dbt and some [best practices](https://docs.getdbt.com/guides/refactoring-legacy-sql). After we finished refactoring all the Alteryx workflows, we checked if the Alteryx output matched the output of the refactored model built on dbt. +We followed dbt Labs' guide on how to refactor legacy SQL queries in dbt and some [best practices](/guides/refactoring-legacy-sql). After we finished refactoring all the Alteryx workflows, we checked if the Alteryx output matched the output of the refactored model built on dbt. #### Step 3: Use the `audit_helper` package to audit refactored data models From 96c344f7dbbd148451cded980e97d270146ddcdd Mon Sep 17 00:00:00 2001 From: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> Date: Fri, 10 Nov 2023 14:29:41 -0800 Subject: [PATCH 168/305] Update website/blog/2023-04-24-framework-refactor-alteryx-dbt.md don't need the domain for links when page is within our own docs site --- website/blog/2023-04-24-framework-refactor-alteryx-dbt.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/blog/2023-04-24-framework-refactor-alteryx-dbt.md b/website/blog/2023-04-24-framework-refactor-alteryx-dbt.md index 0049a16ff39..46cfcb58cdd 100644 --- a/website/blog/2023-04-24-framework-refactor-alteryx-dbt.md +++ b/website/blog/2023-04-24-framework-refactor-alteryx-dbt.md @@ -131,4 +131,4 @@ As we can see, refactoring Alteryx to dbt was an important step in the direction > > [Audit_helper in dbt: Bringing data auditing to a higher level](https://docs.getdbt.com/blog/audit-helper-for-migration) > -> [Refactoring legacy SQL to dbt](https://docs.getdbt.com/guides/refactoring-legacy-sql) +> [Refactoring legacy SQL to dbt](/guides/refactoring-legacy-sql) From ebbf184c3c582b3a814a411dca2c88e7c02705d6 Mon Sep 17 00:00:00 2001 From: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> Date: Fri, 10 Nov 2023 14:32:42 -0800 Subject: [PATCH 169/305] Update website/docs/best-practices/how-we-structure/5-semantic-layer-marts.md don't need the domain for links when page is within our own docs site --- .../best-practices/how-we-structure/5-semantic-layer-marts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/best-practices/how-we-structure/5-semantic-layer-marts.md b/website/docs/best-practices/how-we-structure/5-semantic-layer-marts.md index aca0ca3f283..d064490354c 100644 --- a/website/docs/best-practices/how-we-structure/5-semantic-layer-marts.md +++ b/website/docs/best-practices/how-we-structure/5-semantic-layer-marts.md @@ -3,7 +3,7 @@ title: "Marts for the Semantic Layer" id: "5-semantic-layer-marts" --- -The Semantic Layer alters some fundamental principles of how you organize your project. Using dbt without the Semantic Layer necessitates creating the most useful combinations of your building block components into wide, denormalized marts. On the other hand, the Semantic Layer leverages MetricFlow to denormalize every possible combination of components we've encoded dynamically. As such we're better served to bring more normalized models through from the logical layer into the Semantic Layer to maximize flexibility. This section will assume familiarity with the best practices laid out in the [How we build our metrics](https://docs.getdbt.com/best-practices/how-we-build-our-metrics/semantic-layer-1-intro) guide, so check that out first for a more hands-on introduction to the Semantic Layer. +The Semantic Layer alters some fundamental principles of how you organize your project. Using dbt without the Semantic Layer necessitates creating the most useful combinations of your building block components into wide, denormalized marts. On the other hand, the Semantic Layer leverages MetricFlow to denormalize every possible combination of components we've encoded dynamically. As such we're better served to bring more normalized models through from the logical layer into the Semantic Layer to maximize flexibility. This section will assume familiarity with the best practices laid out in the [How we build our metrics](/best-practices/how-we-build-our-metrics/semantic-layer-1-intro) guide, so check that out first for a more hands-on introduction to the Semantic Layer. ## Semantic Layer: Files and folders From c0e825303403b7c94d1b31282a18bcaf99acf6fb Mon Sep 17 00:00:00 2001 From: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> Date: Fri, 10 Nov 2023 14:33:35 -0800 Subject: [PATCH 170/305] Update website/docs/best-practices/how-we-structure/5-semantic-layer-marts.md don't need the domain for links when page is within our own docs site --- .../best-practices/how-we-structure/5-semantic-layer-marts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/best-practices/how-we-structure/5-semantic-layer-marts.md b/website/docs/best-practices/how-we-structure/5-semantic-layer-marts.md index d064490354c..62e07a72e36 100644 --- a/website/docs/best-practices/how-we-structure/5-semantic-layer-marts.md +++ b/website/docs/best-practices/how-we-structure/5-semantic-layer-marts.md @@ -39,7 +39,7 @@ models ## When to make a mart - ❓ If we can go directly to staging models and it's better to serve normalized models to the Semantic Layer, then when, where, and why would we make a mart? - - 🕰️ We have models that have measures but no time dimension to aggregate against. The details of this are laid out in the [Semantic Layer guide](https://docs.getdbt.com/best-practices/how-we-build-our-metrics/semantic-layer-1-intro) but in short, we need a time dimension to aggregate against in MetricFlow. Dimensional tables that + - 🕰️ We have models that have measures but no time dimension to aggregate against. The details of this are laid out in the [Semantic Layer guide](/best-practices/how-we-build-our-metrics/semantic-layer-1-intro) but in short, we need a time dimension to aggregate against in MetricFlow. Dimensional tables that - 🧱 We want to **materialize** our model in various ways. - 👯 We want to **version** our model. - 🛒 We have various related models that make more sense as **one wider component**. From 9f2b122fb0bbf492c50aa47d81fb54ebafd3bac2 Mon Sep 17 00:00:00 2001 From: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> Date: Fri, 10 Nov 2023 14:35:02 -0800 Subject: [PATCH 171/305] Update website/docs/best-practices/how-we-style/6-how-we-style-conclusion.md don't need the domain for links when page is within our own docs site --- .../best-practices/how-we-style/6-how-we-style-conclusion.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/best-practices/how-we-style/6-how-we-style-conclusion.md b/website/docs/best-practices/how-we-style/6-how-we-style-conclusion.md index 75551f095d3..24103861b97 100644 --- a/website/docs/best-practices/how-we-style/6-how-we-style-conclusion.md +++ b/website/docs/best-practices/how-we-style/6-how-we-style-conclusion.md @@ -31,7 +31,7 @@ Our models (typically) fit into two main categories:\ Things to note: - There are different types of models that typically exist in each of the above categories. See [Model Layers](#model-layers) for more information. -- Read [How we structure our dbt projects](https://docs.getdbt.com/best-practices/how-we-structure/1-guide-overview) for an example and more details around organization. +- Read [How we structure our dbt projects](/best-practices/how-we-structure/1-guide-overview) for an example and more details around organization. ## Model Layers From 09a859378a937ece3af59d87ec32b8b57c57bdc7 Mon Sep 17 00:00:00 2001 From: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> Date: Fri, 10 Nov 2023 14:45:55 -0800 Subject: [PATCH 172/305] Update website/docs/docs/cloud/dbt-cloud-ide/dbt-cloud-tips.md fix link --- website/docs/docs/cloud/dbt-cloud-ide/dbt-cloud-tips.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/cloud/dbt-cloud-ide/dbt-cloud-tips.md b/website/docs/docs/cloud/dbt-cloud-ide/dbt-cloud-tips.md index b90ac1bce01..0ceb4929530 100644 --- a/website/docs/docs/cloud/dbt-cloud-ide/dbt-cloud-tips.md +++ b/website/docs/docs/cloud/dbt-cloud-ide/dbt-cloud-tips.md @@ -46,7 +46,7 @@ There are default keyboard shortcuts that can help make development more product - Use [severity](/reference/resource-configs/severity) thresholds to set an acceptable number of failures for a test. - Use [incremental_strategy](/docs/build/incremental-models#about-incremental_strategy) in your incremental model config to implement the most effective behavior depending on the volume of your data and reliability of your unique keys. - Set `vars` in your `dbt_project.yml` to define global defaults for certain conditions, which you can then override using the `--vars` flag in your commands. -- Use [for loops](/guides/using-jinja#use-a-for-loop-in-models-for-repeated-sql) in Jinja to [DRY](https://docs.getdbt.com/terms/dry) up repetitive logic, such as selecting a series of columns that all require the same transformations and naming patterns to be applied. +- Use [for loops](/guides/using-jinja?step=3) in Jinja to DRY up repetitive logic, such as selecting a series of columns that all require the same transformations and naming patterns to be applied. - Instead of relying on post-hooks, use the [grants config](/reference/resource-configs/grants) to apply permission grants in the warehouse resiliently. - Define [source-freshness](/docs/build/sources#snapshotting-source-data-freshness) thresholds on your sources to avoid running transformations on data that has already been processed. - Use the `+` operator on the left of a model `dbt build --select +model_name` to run a model and all of its upstream dependencies. Use the `+` operator on the right of the model `dbt build --select model_name+` to run a model and everything downstream that depends on it. From 17bc23ada5ef5e65c941a2b8eb8c0bea63cc6059 Mon Sep 17 00:00:00 2001 From: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> Date: Fri, 10 Nov 2023 14:54:50 -0800 Subject: [PATCH 173/305] Update website/docs/docs/dbt-versions/release-notes/24-Nov-2022/dbt-databricks-unity-catalog-support.md --- .../24-Nov-2022/dbt-databricks-unity-catalog-support.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/dbt-versions/release-notes/24-Nov-2022/dbt-databricks-unity-catalog-support.md b/website/docs/docs/dbt-versions/release-notes/24-Nov-2022/dbt-databricks-unity-catalog-support.md index ee46cb5f558..ce702434cf3 100644 --- a/website/docs/docs/dbt-versions/release-notes/24-Nov-2022/dbt-databricks-unity-catalog-support.md +++ b/website/docs/docs/dbt-versions/release-notes/24-Nov-2022/dbt-databricks-unity-catalog-support.md @@ -8,6 +8,6 @@ tags: [Nov-2022, v1.1.66.15] dbt Cloud is the easiest and most reliable way to develop and deploy a dbt project. It helps remove complexity while also giving you more features and better performance. A simpler Databricks connection experience with support for Databricks’ Unity Catalog and better modeling defaults is now available for your use. -For all the Databricks customers already using dbt Cloud with the dbt-spark adapter, you can now [migrate](/guides/migrate-from-spark-to-databricks) your connection to the [dbt-databricks adapter](https://docs.getdbt.com/reference/warehouse-setups/databricks-setup) to get the benefits. [Databricks](https://www.databricks.com/blog/2022/11/17/introducing-native-high-performance-integration-dbt-cloud.html) is committed to maintaining and improving the adapter, so this integrated experience will continue to provide the best of dbt and Databricks. +For all the Databricks customers already using dbt Cloud with the dbt-spark adapter, you can now [migrate](/guides/migrate-from-spark-to-databricks) your connection to the [dbt-databricks adapter](/reference/warehouse-setups/databricks-setup) to get the benefits. [Databricks](https://www.databricks.com/blog/2022/11/17/introducing-native-high-performance-integration-dbt-cloud.html) is committed to maintaining and improving the adapter, so this integrated experience will continue to provide the best of dbt and Databricks. Check out our [live blog post](https://www.getdbt.com/blog/dbt-cloud-databricks-experience/) to learn more. From 830da91f8c4ea602ef16085331c46589425e3f27 Mon Sep 17 00:00:00 2001 From: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> Date: Fri, 10 Nov 2023 14:56:27 -0800 Subject: [PATCH 174/305] Update website/docs/docs/deploy/deploy-environments.md --- website/docs/docs/deploy/deploy-environments.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/deploy/deploy-environments.md b/website/docs/docs/deploy/deploy-environments.md index 8f3353d07d1..237626dffc9 100644 --- a/website/docs/docs/deploy/deploy-environments.md +++ b/website/docs/docs/deploy/deploy-environments.md @@ -13,7 +13,7 @@ Deployment environments in dbt Cloud are crucial for deploying dbt jobs in produ A dbt Cloud project can have multiple deployment environments, providing you the flexibility and customization to tailor the execution of dbt jobs. You can use deployment environments to [create and schedule jobs](/docs/deploy/deploy-jobs#create-and-schedule-jobs), [enable continuous integration](/docs/deploy/continuous-integration), or more based on your specific needs or requirements. :::tip Learn how to manage dbt Cloud environments -To learn different approaches to managing dbt Cloud environments and recommendations for your organization's unique needs, read [dbt Cloud environment best practices](https://docs.getdbt.com/best-practices/environment-setup/1-env-guide-overview). +To learn different approaches to managing dbt Cloud environments and recommendations for your organization's unique needs, read [dbt Cloud environment best practices](/best-practices/environment-setup/1-env-guide-overview). ::: This page reviews the different types of environments and how to configure your deployment environment in dbt Cloud. From 3d3da06e91ebebd4ff9e2bdbafd0df7f6498f290 Mon Sep 17 00:00:00 2001 From: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> Date: Fri, 10 Nov 2023 14:57:41 -0800 Subject: [PATCH 175/305] Update website/docs/docs/deploy/deploy-environments.md --- website/docs/docs/deploy/deploy-environments.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/deploy/deploy-environments.md b/website/docs/docs/deploy/deploy-environments.md index 237626dffc9..21308784434 100644 --- a/website/docs/docs/deploy/deploy-environments.md +++ b/website/docs/docs/deploy/deploy-environments.md @@ -186,7 +186,7 @@ This section allows you to determine the credentials that should be used when co ## Related docs -- [dbt Cloud environment best practices](https://docs.getdbt.com/best-practices/environment-setup/1-env-guide-overview) +- [dbt Cloud environment best practices](/best-practices/environment-setup/1-env-guide-overview) - [Deploy jobs](/docs/deploy/deploy-jobs) - [CI jobs](/docs/deploy/continuous-integration) - [Delete a job or environment in dbt Cloud](/faqs/Environments/delete-environment-job) From 4d0ba52ad55c91e0fc8e6e465444eb8f6c5da5ba Mon Sep 17 00:00:00 2001 From: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> Date: Fri, 10 Nov 2023 14:59:36 -0800 Subject: [PATCH 176/305] Update website/docs/docs/environments-in-dbt.md --- website/docs/docs/environments-in-dbt.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/environments-in-dbt.md b/website/docs/docs/environments-in-dbt.md index 0361a272c4f..ab899b09516 100644 --- a/website/docs/docs/environments-in-dbt.md +++ b/website/docs/docs/environments-in-dbt.md @@ -33,7 +33,7 @@ Configure environments to tell dbt Cloud or dbt Core how to build and execute yo ## Related docs -- [dbt Cloud environment best practices](https://docs.getdbt.com/best-practices/environment-setup/1-env-guide-overview) +- [dbt Cloud environment best practices](/best-practices/environment-setup/1-env-guide-overview) - [Deployment environments](/docs/deploy/deploy-environments) - [About dbt Core versions](/docs/dbt-versions/core) - [Set Environment variables in dbt Cloud](/docs/build/environment-variables#special-environment-variables) From 29e0de831e8f07cfbb187151af52c894bce25be1 Mon Sep 17 00:00:00 2001 From: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> Date: Fri, 10 Nov 2023 15:01:57 -0800 Subject: [PATCH 177/305] Update website/docs/faqs/Project/multiple-resource-yml-files.md --- website/docs/faqs/Project/multiple-resource-yml-files.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/faqs/Project/multiple-resource-yml-files.md b/website/docs/faqs/Project/multiple-resource-yml-files.md index a60c198de5d..04e1702a162 100644 --- a/website/docs/faqs/Project/multiple-resource-yml-files.md +++ b/website/docs/faqs/Project/multiple-resource-yml-files.md @@ -9,4 +9,4 @@ It's up to you: - Some folks find it useful to have one file per model (or source / snapshot / seed etc) - Some find it useful to have one per directory, documenting and testing multiple models in one file -Choose what works for your team. We have more recommendations in our guide on [structuring dbt projects](https://docs.getdbt.com/best-practices/how-we-structure/1-guide-overview). +Choose what works for your team. We have more recommendations in our guide on [structuring dbt projects](/best-practices/how-we-structure/1-guide-overview). From 48ad5e25e5665cd81a47a2ab5934d1e106667b64 Mon Sep 17 00:00:00 2001 From: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> Date: Fri, 10 Nov 2023 15:02:47 -0800 Subject: [PATCH 178/305] Update website/docs/faqs/Project/resource-yml-name.md --- website/docs/faqs/Project/resource-yml-name.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/faqs/Project/resource-yml-name.md b/website/docs/faqs/Project/resource-yml-name.md index 78d541cbd54..c26cff26474 100644 --- a/website/docs/faqs/Project/resource-yml-name.md +++ b/website/docs/faqs/Project/resource-yml-name.md @@ -10,4 +10,4 @@ It's up to you! Here's a few options: - Use the same name as your directory (assuming you're using sensible names for your directories) - If you test and document one model (or seed, snapshot, macro etc.) per file, you can give it the same name as the model (or seed, snapshot, macro etc.) -Choose what works for your team. We have more recommendations in our guide on [structuring dbt projects](https://docs.getdbt.com/best-practices/how-we-structure/1-guide-overview). +Choose what works for your team. We have more recommendations in our guide on [structuring dbt projects](/best-practices/how-we-structure/1-guide-overview). From 6d4959f9242d3036d0be114ab4a2d2b1ac2ae3e8 Mon Sep 17 00:00:00 2001 From: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> Date: Fri, 10 Nov 2023 15:03:44 -0800 Subject: [PATCH 179/305] Update website/docs/faqs/Project/structure-a-project.md --- website/docs/faqs/Project/structure-a-project.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/faqs/Project/structure-a-project.md b/website/docs/faqs/Project/structure-a-project.md index 136c5b188bf..a9ef53f5c8f 100644 --- a/website/docs/faqs/Project/structure-a-project.md +++ b/website/docs/faqs/Project/structure-a-project.md @@ -8,4 +8,4 @@ id: structure-a-project There's no one best way to structure a project! Every organization is unique. -If you're just getting started, check out how we (dbt Labs) [structure our dbt projects](https://docs.getdbt.com/best-practices/how-we-structure/1-guide-overview). +If you're just getting started, check out how we (dbt Labs) [structure our dbt projects](/best-practices/how-we-structure/1-guide-overview). From 3b4e603ce5b1a7a578558803fde2b543f17f7e26 Mon Sep 17 00:00:00 2001 From: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> Date: Fri, 10 Nov 2023 15:08:44 -0800 Subject: [PATCH 180/305] Update website/docs/guides/debug-schema-names.md --- website/docs/guides/debug-schema-names.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/guides/debug-schema-names.md b/website/docs/guides/debug-schema-names.md index 171e1544a19..795128d83ff 100644 --- a/website/docs/guides/debug-schema-names.md +++ b/website/docs/guides/debug-schema-names.md @@ -27,7 +27,7 @@ You can also follow along via this video: ## Search for a macro named `generate_schema_name` Do a file search to check if you have a macro named `generate_schema_name` in the `macros` directory of your project. -### You do not have a macro named `generate_schema_name` in my project +### You do not have a macro named `generate_schema_name` in your project This means that you are using dbt's default implementation of the macro, as defined [here](https://github.com/dbt-labs/dbt-core/blob/main/core/dbt/include/global_project/macros/get_custom_name/get_custom_schema.sql#L47C1-L60) ```sql From c77fe1ebf695fe8c2e6edc25c984dc649e0c0fa0 Mon Sep 17 00:00:00 2001 From: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> Date: Fri, 10 Nov 2023 15:10:26 -0800 Subject: [PATCH 181/305] Update website/docs/guides/debug-schema-names.md --- website/docs/guides/debug-schema-names.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/guides/debug-schema-names.md b/website/docs/guides/debug-schema-names.md index 795128d83ff..c7bf1a195b1 100644 --- a/website/docs/guides/debug-schema-names.md +++ b/website/docs/guides/debug-schema-names.md @@ -49,7 +49,7 @@ This means that you are using dbt's default implementation of the macro, as defi Note that this logic is designed so that two dbt users won't accidentally overwrite each other's work by writing to the same schema. -### You have a `generate_schema_name` macro in my project that calls another macro +### You have a `generate_schema_name` macro in a project that calls another macro If your `generate_schema_name` macro looks like so: ```sql {% macro generate_schema_name(custom_schema_name, node) -%} From 5013b67b56b9e5be1ff0b5c27cd3c149d785a73e Mon Sep 17 00:00:00 2001 From: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> Date: Fri, 10 Nov 2023 15:17:22 -0800 Subject: [PATCH 182/305] Update website/docs/sql-reference/aggregate-functions/sql-array-agg.md --- website/docs/sql-reference/aggregate-functions/sql-array-agg.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/sql-reference/aggregate-functions/sql-array-agg.md b/website/docs/sql-reference/aggregate-functions/sql-array-agg.md index 9f4af7ca1fc..a6f508a7bef 100644 --- a/website/docs/sql-reference/aggregate-functions/sql-array-agg.md +++ b/website/docs/sql-reference/aggregate-functions/sql-array-agg.md @@ -59,4 +59,4 @@ Looking at the query results—this makes sense! We’d expect newer orders to l There are definitely too many use cases to list out for using the ARRAY_AGG function in your dbt models, but it’s very likely that ARRAY_AGG is used pretty downstream in your since you likely don’t want your data so bundled up earlier in your DAG to improve modularity and dryness. A few downstream use cases for ARRAY_AGG: - In [`export_` models](https://www.getdbt.com/open-source-data-culture/reverse-etl-playbook) that are used to send data to platforms using a tool to pair down multiple rows into a single row. Some downstream platforms, for example, require certain values that we’d usually keep as separate rows to be one singular row per customer or user. ARRAY_AGG is handy to bring multiple column values together by a singular id, such as creating an array of all items a user has ever purchased and sending that array downstream to an email platform to create a custom email campaign. -- Similar to export models, you may see ARRAY_AGG used in [mart tables](https://docs.getdbt.com/best-practices/how-we-structure/4-marts) to create final aggregate arrays per a singular dimension; performance concerns of ARRAY_AGG in these likely larger tables can potentially be bypassed with use of [incremental models in dbt](https://docs.getdbt.com/docs/build/incremental-models). +- Similar to export models, you may see ARRAY_AGG used in [mart tables](/best-practices/how-we-structure/4-marts) to create final aggregate arrays per a singular dimension; performance concerns of ARRAY_AGG in these likely larger tables can potentially be bypassed with use of [incremental models in dbt](/docs/build/incremental-models). From b49f8c40e962646199d1ab254104bac8af790243 Mon Sep 17 00:00:00 2001 From: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> Date: Fri, 10 Nov 2023 15:18:24 -0800 Subject: [PATCH 183/305] Update website/docs/sql-reference/aggregate-functions/sql-avg.md --- website/docs/sql-reference/aggregate-functions/sql-avg.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/sql-reference/aggregate-functions/sql-avg.md b/website/docs/sql-reference/aggregate-functions/sql-avg.md index afb766f12e2..d1dba119292 100644 --- a/website/docs/sql-reference/aggregate-functions/sql-avg.md +++ b/website/docs/sql-reference/aggregate-functions/sql-avg.md @@ -48,7 +48,7 @@ Snowflake, Databricks, Google BigQuery, and Amazon Redshift all support the abil ## AVG function use cases We most commonly see the AVG function used in data work to calculate: -- The average of key metrics (ex. Average CSAT, average lead time, average order amount) in downstream [fact or dim models](https://docs.getdbt.com/best-practices/how-we-structure/4-marts) +- The average of key metrics (ex. Average CSAT, average lead time, average order amount) in downstream [fact or dim models](/best-practices/how-we-structure/4-marts) - Rolling or moving averages (ex. 7-day, 30-day averages for key metrics) using window functions - Averages in [dbt metrics](https://docs.getdbt.com/docs/build/metrics) From ace443fcd3484b674408c434f59834ea9f483063 Mon Sep 17 00:00:00 2001 From: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> Date: Fri, 10 Nov 2023 15:19:51 -0800 Subject: [PATCH 184/305] Update website/docs/sql-reference/aggregate-functions/sql-round.md --- website/docs/sql-reference/aggregate-functions/sql-round.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/sql-reference/aggregate-functions/sql-round.md b/website/docs/sql-reference/aggregate-functions/sql-round.md index 7652c881789..bc9669e22cb 100644 --- a/website/docs/sql-reference/aggregate-functions/sql-round.md +++ b/website/docs/sql-reference/aggregate-functions/sql-round.md @@ -57,7 +57,7 @@ Google BigQuery, Amazon Redshift, Snowflake, and Databricks all support the abil ## ROUND function use cases -If you find yourself rounding numeric data, either in data models or ad-hoc analyses, you’re probably rounding to improve the readability and usability of your data using downstream [intermediate](https://docs.getdbt.com/best-practices/how-we-structure/3-intermediate) or [mart models](https://docs.getdbt.com/best-practices/how-we-structure/4-marts). Specifically, you’ll likely use the ROUND function to: +If you find yourself rounding numeric data, either in data models or ad-hoc analyses, you’re probably rounding to improve the readability and usability of your data using downstream [intermediate](/best-practices/how-we-structure/3-intermediate) or [mart models](/best-practices/how-we-structure/4-marts). Specifically, you’ll likely use the ROUND function to: - Make numeric calculations using division or averages a little cleaner and easier to understand - Create concrete buckets of data for a cleaner distribution of values during ad-hoc analysis From f16389426375a6f97782a75d0199bba89a3e3d4d Mon Sep 17 00:00:00 2001 From: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> Date: Fri, 10 Nov 2023 15:21:07 -0800 Subject: [PATCH 185/305] Update website/docs/sql-reference/clauses/sql-limit.md --- website/docs/sql-reference/clauses/sql-limit.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/sql-reference/clauses/sql-limit.md b/website/docs/sql-reference/clauses/sql-limit.md index a2c49866592..a02b851e37d 100644 --- a/website/docs/sql-reference/clauses/sql-limit.md +++ b/website/docs/sql-reference/clauses/sql-limit.md @@ -51,7 +51,7 @@ This simple query using the [Jaffle Shop’s](https://github.com/dbt-labs/jaffle After ensuring that this is the result you want from this query, you can omit the LIMIT in your final data model. :::tip Save money and time by limiting data in development -You could limit your data used for development by manually adding a LIMIT statement, a WHERE clause to your query, or by using a [dbt macro to automatically limit data based](https://docs.getdbt.com/best-practices/best-practice-workflows#limit-the-data-processed-when-in-development) on your development environment to help reduce your warehouse usage during dev periods. +You could limit your data used for development by manually adding a LIMIT statement, a WHERE clause to your query, or by using a [dbt macro to automatically limit data based](/best-practices/best-practice-workflows#limit-the-data-processed-when-in-development) on your development environment to help reduce your warehouse usage during dev periods. ::: ## LIMIT syntax in Snowflake, Databricks, BigQuery, and Redshift From 4036a140d8d47b1471cd3810a62f275587e7e68c Mon Sep 17 00:00:00 2001 From: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> Date: Fri, 10 Nov 2023 15:26:02 -0800 Subject: [PATCH 186/305] Update website/docs/sql-reference/clauses/sql-order-by.md --- website/docs/sql-reference/clauses/sql-order-by.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/sql-reference/clauses/sql-order-by.md b/website/docs/sql-reference/clauses/sql-order-by.md index 39337de1e48..d18946d0d16 100644 --- a/website/docs/sql-reference/clauses/sql-order-by.md +++ b/website/docs/sql-reference/clauses/sql-order-by.md @@ -57,7 +57,7 @@ Since the ORDER BY clause is a SQL fundamental, data warehouses, including Snowf ## ORDER BY use cases We most commonly see the ORDER BY clause used in data work to: -- Analyze data for both initial exploration of raw data sources and ad hoc querying of [mart datasets](https://docs.getdbt.com/best-practices/how-we-structure/4-marts) +- Analyze data for both initial exploration of raw data sources and ad hoc querying of [mart datasets](/best-practices/how-we-structure/4-marts) - Identify the top 5/10/50/100 of a dataset when used in pair with a [LIMIT](/sql-reference/limit) - (For Snowflake) Optimize the performance of large incremental models that use both a `cluster_by` [configuration](https://docs.getdbt.com/reference/resource-configs/snowflake-configs#using-cluster_by) and ORDER BY statement - Control the ordering of window function partitions (ex. `row_number() over (partition by user_id order by updated_at)`) From ec705a277db0c95959b503dcc6d9adc59fae470e Mon Sep 17 00:00:00 2001 From: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> Date: Fri, 10 Nov 2023 15:26:34 -0800 Subject: [PATCH 187/305] Update website/docs/sql-reference/joins/sql-self-join.md --- website/docs/sql-reference/joins/sql-self-join.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/sql-reference/joins/sql-self-join.md b/website/docs/sql-reference/joins/sql-self-join.md index bb4237319f0..6d9a7d3261e 100644 --- a/website/docs/sql-reference/joins/sql-self-join.md +++ b/website/docs/sql-reference/joins/sql-self-join.md @@ -66,6 +66,6 @@ This query utilizing a self join adds the `parent_name` of skus that have non-nu ## SQL self join use cases -Again, self joins are probably rare in your dbt project and will most often be utilized in tables that contain a hierarchical structure, such as consisting of a column which is a foreign key to the primary key of the same table. If you do have use cases for self joins, such as in the example above, you’ll typically want to perform that self join early upstream in your , such as in a [staging](https://docs.getdbt.com/best-practices/how-we-structure/2-staging) or [intermediate](https://docs.getdbt.com/best-practices/how-we-structure/3-intermediate) model; if your raw, unjoined table is going to need to be accessed further downstream sans self join, that self join should happen in a modular intermediate model. +Again, self joins are probably rare in your dbt project and will most often be utilized in tables that contain a hierarchical structure, such as consisting of a column which is a foreign key to the primary key of the same table. If you do have use cases for self joins, such as in the example above, you’ll typically want to perform that self join early upstream in your , such as in a [staging](/best-practices/how-we-structure/2-staging) or [intermediate](/best-practices/how-we-structure/3-intermediate) model; if your raw, unjoined table is going to need to be accessed further downstream sans self join, that self join should happen in a modular intermediate model. You can also use self joins to create a cartesian product (aka a cross join) of a table against itself. Again, slim use cases, but still there for you if you need it 😉 From 2a07b7b0294ae3421d29b376fe84026110a99a2e Mon Sep 17 00:00:00 2001 From: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> Date: Fri, 10 Nov 2023 15:27:29 -0800 Subject: [PATCH 188/305] Update website/docs/sql-reference/joins/sql-left-join.md --- website/docs/sql-reference/joins/sql-left-join.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/sql-reference/joins/sql-left-join.md b/website/docs/sql-reference/joins/sql-left-join.md index 24fbb2bfa0c..914f83bb7e3 100644 --- a/website/docs/sql-reference/joins/sql-left-join.md +++ b/website/docs/sql-reference/joins/sql-left-join.md @@ -73,4 +73,4 @@ Left joins are a fundamental in data modeling and analytics engineering work—t Something to note if you use left joins: if there are multiple records for an individual key in the left join database object, be aware that duplicates can potentially be introduced in the final query result. This is where dbt tests, such as testing for uniqueness and [equal row count](https://github.com/dbt-labs/dbt-utils#equal_rowcount-source) across upstream source tables and downstream child models, can help you identify faulty data modeling logic and improve data quality. ::: -Where you will not (and should not) see left joins is in [staging models](https://docs.getdbt.com/best-practices/how-we-structure/2-staging) that are used to clean and prep raw source data for analytics uses. Any joins in your dbt projects should happen further downstream in [intermediate](https://docs.getdbt.com/best-practices/how-we-structure/3-intermediate) and [mart models](https://docs.getdbt.com/best-practices/how-we-structure/4-marts) to improve modularity and cleanliness. +Where you will not (and should not) see left joins is in [staging models](/best-practices/how-we-structure/2-staging) that are used to clean and prep raw source data for analytics uses. Any joins in your dbt projects should happen further downstream in [intermediate](/best-practices/how-we-structure/3-intermediate) and [mart models](/best-practices/how-we-structure/4-marts) to improve modularity and cleanliness. From 7c065e1d1567be21ad7938589cfb6fbb1d89a8bf Mon Sep 17 00:00:00 2001 From: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> Date: Fri, 10 Nov 2023 15:28:07 -0800 Subject: [PATCH 189/305] Update website/docs/sql-reference/joins/sql-inner-join.md --- website/docs/sql-reference/joins/sql-inner-join.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/sql-reference/joins/sql-inner-join.md b/website/docs/sql-reference/joins/sql-inner-join.md index e1c2d6151c8..951e3675bc7 100644 --- a/website/docs/sql-reference/joins/sql-inner-join.md +++ b/website/docs/sql-reference/joins/sql-inner-join.md @@ -66,5 +66,5 @@ Because there’s no `user_id` = 4 in Table A and no `user_id` = 2 in Table B, r ## SQL inner join use cases -There are probably countless scenarios where you’d want to inner join multiple tables together—perhaps you have some really nicely structured tables with the exact same primary keys that should really just be one larger, wider table or you’re joining two tables together don’t want any null or missing column values if you used a left or right join—it’s all pretty dependent on your source data and end use cases. Where you will not (and should not) see inner joins is in [staging models](https://docs.getdbt.com/best-practices/how-we-structure/2-staging) that are used to clean and prep raw source data for analytics uses. Any joins in your dbt projects should happen further downstream in [intermediate](https://docs.getdbt.com/best-practices/how-we-structure/3-intermediate) and [mart models](https://docs.getdbt.com/best-practices/how-we-structure/4-marts) to improve modularity and DAG cleanliness. +There are probably countless scenarios where you’d want to inner join multiple tables together—perhaps you have some really nicely structured tables with the exact same primary keys that should really just be one larger, wider table or you’re joining two tables together don’t want any null or missing column values if you used a left or right join—it’s all pretty dependent on your source data and end use cases. Where you will not (and should not) see inner joins is in [staging models](/best-practices/how-we-structure/2-staging) that are used to clean and prep raw source data for analytics uses. Any joins in your dbt projects should happen further downstream in [intermediate](/best-practices/how-we-structure/3-intermediate) and [mart models](/best-practices/how-we-structure/4-marts) to improve modularity and DAG cleanliness. From d866035e5cfc05742c827f19401e26ba42964bf1 Mon Sep 17 00:00:00 2001 From: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> Date: Fri, 10 Nov 2023 15:50:08 -0800 Subject: [PATCH 190/305] Update website/docs/guides/custom-cicd-pipelines.md per style guide, use sentence case for titles --- website/docs/guides/custom-cicd-pipelines.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/guides/custom-cicd-pipelines.md b/website/docs/guides/custom-cicd-pipelines.md index bf781204fc5..672c6e6dab8 100644 --- a/website/docs/guides/custom-cicd-pipelines.md +++ b/website/docs/guides/custom-cicd-pipelines.md @@ -1,5 +1,5 @@ --- -title: Customizing CI/CD with Custom Pipelines +title: Customizing CI/CD with custom pipelines id: custom-cicd-pipelines description: "Learn the benefits of version-controlled analytics code and custom pipelines in dbt for enhanced code testing and workflow automation during the development process." displayText: Learn version-controlled code, custom pipelines, and enhanced code testing. From 0fe005a39997e67dde10184ec3bb7b91377d3f37 Mon Sep 17 00:00:00 2001 From: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> Date: Fri, 10 Nov 2023 15:53:06 -0800 Subject: [PATCH 191/305] Update website/docs/docs/cloud/billing.md --- website/docs/docs/cloud/billing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/cloud/billing.md b/website/docs/docs/cloud/billing.md index f66e2aad363..31b7689ceb9 100644 --- a/website/docs/docs/cloud/billing.md +++ b/website/docs/docs/cloud/billing.md @@ -215,7 +215,7 @@ If you want to ensure that you're building views whenever the logic is changed, Executing `dbt build` in this context is unnecessary because the CI job was used to both run and test the code that just got merged into main. 5. Under the **Execution Settings**, select the default production job to compare changes against: - **Defer to a previous run state** — Select the “Merge Job” you created so the job compares and identifies what has changed since the last merge. -6. In your dbt project, follow the steps in Run a dbt Cloud job on merge in the [Customizing CI/CD with Custom Pipelines](/guides/custom-cicd-pipelines) guide to create a script to trigger the dbt Cloud API to run your job after a merge happens within your git repository or watch this [video](https://www.loom.com/share/e7035c61dbed47d2b9b36b5effd5ee78?sid=bcf4dd2e-b249-4e5d-b173-8ca204d9becb). +6. In your dbt project, follow the steps in Run a dbt Cloud job on merge in the [Customizing CI/CD with custom pipelines](/guides/custom-cicd-pipelines) guide to create a script to trigger the dbt Cloud API to run your job after a merge happens within your git repository or watch this [video](https://www.loom.com/share/e7035c61dbed47d2b9b36b5effd5ee78?sid=bcf4dd2e-b249-4e5d-b173-8ca204d9becb). The purpose of the merge job is to: From 7de9d7285fe915a7db1c12e25c7f2de5f506f036 Mon Sep 17 00:00:00 2001 From: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> Date: Fri, 10 Nov 2023 15:54:03 -0800 Subject: [PATCH 192/305] Update website/docs/docs/dbt-versions/release-notes/07-June-2023/product-docs-jun.md --- .../dbt-versions/release-notes/07-June-2023/product-docs-jun.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/dbt-versions/release-notes/07-June-2023/product-docs-jun.md b/website/docs/docs/dbt-versions/release-notes/07-June-2023/product-docs-jun.md index 4ead401a759..db73597cd63 100644 --- a/website/docs/docs/dbt-versions/release-notes/07-June-2023/product-docs-jun.md +++ b/website/docs/docs/dbt-versions/release-notes/07-June-2023/product-docs-jun.md @@ -32,4 +32,4 @@ Here's what's new to [docs.getdbt.com](http://docs.getdbt.com/) in June: ## New 📚 Guides, ✏️ blog posts, and FAQs -- Add an Azure DevOps example in the [Customizing CI/CD with Custom Pipelines](/guides/custom-cicd-pipelines) guide. +- Add an Azure DevOps example in the [Customizing CI/CD with custom pipelines](/guides/custom-cicd-pipelines) guide. From 6d1473150d8105dd70e30fdaff3190c01610794b Mon Sep 17 00:00:00 2001 From: Ly Nguyen Date: Fri, 10 Nov 2023 16:21:25 -0800 Subject: [PATCH 193/305] Fix old redirects, remove duplicate steps --- .../dbt-databricks-unity-catalog-support.md | 2 +- .../docs/docs/deploy/deploy-environments.md | 4 ++-- website/docs/docs/environments-in-dbt.md | 2 +- website/docs/guides/dbt-python-snowpark.md | 21 ------------------- 4 files changed, 4 insertions(+), 25 deletions(-) diff --git a/website/docs/docs/dbt-versions/release-notes/24-Nov-2022/dbt-databricks-unity-catalog-support.md b/website/docs/docs/dbt-versions/release-notes/24-Nov-2022/dbt-databricks-unity-catalog-support.md index ce702434cf3..012615e1e4e 100644 --- a/website/docs/docs/dbt-versions/release-notes/24-Nov-2022/dbt-databricks-unity-catalog-support.md +++ b/website/docs/docs/dbt-versions/release-notes/24-Nov-2022/dbt-databricks-unity-catalog-support.md @@ -8,6 +8,6 @@ tags: [Nov-2022, v1.1.66.15] dbt Cloud is the easiest and most reliable way to develop and deploy a dbt project. It helps remove complexity while also giving you more features and better performance. A simpler Databricks connection experience with support for Databricks’ Unity Catalog and better modeling defaults is now available for your use. -For all the Databricks customers already using dbt Cloud with the dbt-spark adapter, you can now [migrate](/guides/migrate-from-spark-to-databricks) your connection to the [dbt-databricks adapter](/reference/warehouse-setups/databricks-setup) to get the benefits. [Databricks](https://www.databricks.com/blog/2022/11/17/introducing-native-high-performance-integration-dbt-cloud.html) is committed to maintaining and improving the adapter, so this integrated experience will continue to provide the best of dbt and Databricks. +For all the Databricks customers already using dbt Cloud with the dbt-spark adapter, you can now [migrate](/guides/migrate-from-spark-to-databricks) your connection to the [dbt-databricks adapter](/docs/core/connect-data-platform/databricks-setup) to get the benefits. [Databricks](https://www.databricks.com/blog/2022/11/17/introducing-native-high-performance-integration-dbt-cloud.html) is committed to maintaining and improving the adapter, so this integrated experience will continue to provide the best of dbt and Databricks. Check out our [live blog post](https://www.getdbt.com/blog/dbt-cloud-databricks-experience/) to learn more. diff --git a/website/docs/docs/deploy/deploy-environments.md b/website/docs/docs/deploy/deploy-environments.md index 21308784434..650fdb1c28a 100644 --- a/website/docs/docs/deploy/deploy-environments.md +++ b/website/docs/docs/deploy/deploy-environments.md @@ -13,7 +13,7 @@ Deployment environments in dbt Cloud are crucial for deploying dbt jobs in produ A dbt Cloud project can have multiple deployment environments, providing you the flexibility and customization to tailor the execution of dbt jobs. You can use deployment environments to [create and schedule jobs](/docs/deploy/deploy-jobs#create-and-schedule-jobs), [enable continuous integration](/docs/deploy/continuous-integration), or more based on your specific needs or requirements. :::tip Learn how to manage dbt Cloud environments -To learn different approaches to managing dbt Cloud environments and recommendations for your organization's unique needs, read [dbt Cloud environment best practices](/best-practices/environment-setup/1-env-guide-overview). +To learn different approaches to managing dbt Cloud environments and recommendations for your organization's unique needs, read [dbt Cloud environment best practices](/guides/set-up-ci). ::: This page reviews the different types of environments and how to configure your deployment environment in dbt Cloud. @@ -186,7 +186,7 @@ This section allows you to determine the credentials that should be used when co ## Related docs -- [dbt Cloud environment best practices](/best-practices/environment-setup/1-env-guide-overview) +- [dbt Cloud environment best practices](/guides/set-up-ci) - [Deploy jobs](/docs/deploy/deploy-jobs) - [CI jobs](/docs/deploy/continuous-integration) - [Delete a job or environment in dbt Cloud](/faqs/Environments/delete-environment-job) diff --git a/website/docs/docs/environments-in-dbt.md b/website/docs/docs/environments-in-dbt.md index ab899b09516..f0691761dd6 100644 --- a/website/docs/docs/environments-in-dbt.md +++ b/website/docs/docs/environments-in-dbt.md @@ -33,7 +33,7 @@ Configure environments to tell dbt Cloud or dbt Core how to build and execute yo ## Related docs -- [dbt Cloud environment best practices](/best-practices/environment-setup/1-env-guide-overview) +- [dbt Cloud environment best practices](/guides/set-up-ci) - [Deployment environments](/docs/deploy/deploy-environments) - [About dbt Core versions](/docs/dbt-versions/core) - [Set Environment variables in dbt Cloud](/docs/build/environment-variables#special-environment-variables) diff --git a/website/docs/guides/dbt-python-snowpark.md b/website/docs/guides/dbt-python-snowpark.md index 35842eb8d91..55e6b68c172 100644 --- a/website/docs/guides/dbt-python-snowpark.md +++ b/website/docs/guides/dbt-python-snowpark.md @@ -67,27 +67,6 @@ Overall we are going to set up the environments, build scalable pipelines in dbt 6. Finally, create a new Worksheet by selecting **+ Worksheet** in the upper right corner. - -33 1. Log in to your trial Snowflake account. You can [sign up for a Snowflake Trial Account using this form](https://signup.snowflake.com/) if you don’t have one. -2. Ensure that your account is set up using **AWS** in the **US East (N. Virginia)**. We will be copying the data from a public AWS S3 bucket hosted by dbt Labs in the us-east-1 region. By ensuring our Snowflake environment setup matches our bucket region, we avoid any multi-region data copy and retrieval latency issues. - - - -3. After creating your account and verifying it from your sign-up email, Snowflake will direct you back to the UI called Snowsight. - -4. When Snowsight first opens, your window should look like the following, with you logged in as the ACCOUNTADMIN with demo worksheets open: - - - - -5. Navigate to **Admin > Billing & Terms**. Click **Enable > Acknowledge & Continue** to enable Anaconda Python Packages to run in Snowflake. - - - - - -6. Finally, create a new Worksheet by selecting **+ Worksheet** in the upper right corner. - ## Connect to data source We need to obtain our data source by copying our Formula 1 data into Snowflake tables from a public S3 bucket that dbt Labs hosts. From cf000ccaa9d552e34ede9b2858d134f759d79b65 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Mon, 13 Nov 2023 10:59:48 +0000 Subject: [PATCH 194/305] folding in williams' feedback --- .../semantic-layer-4-build-metrics.md | 2 +- website/docs/docs/build/metricflow-commands.md | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/website/docs/best-practices/how-we-build-our-metrics/semantic-layer-4-build-metrics.md b/website/docs/best-practices/how-we-build-our-metrics/semantic-layer-4-build-metrics.md index 8b112f2f828..da83adbdc69 100644 --- a/website/docs/best-practices/how-we-build-our-metrics/semantic-layer-4-build-metrics.md +++ b/website/docs/best-practices/how-we-build-our-metrics/semantic-layer-4-build-metrics.md @@ -36,7 +36,7 @@ metrics: Use [MetricFlow commands](/docs/build/metricflow-commands#metricflow) for metric validation or queries during development, and apply the following conventions based on your environment: -- For dbt Cloud, use the `dbt sl` prefix before the command (such as, `dbt sl parse` or `dbt sl query`). +- For dbt Cloud, use the `dbt sl` prefix before the command (such as, `dbt sl query`). - For dbt Core, use the `mf` prefix (such as `mf validate-configs` or `mf query)`. Follow these best practices when updating your semantic layer code, using the `mf` command as an example (replace `mf` with `dbt sl` if you're using dbt Cloud): diff --git a/website/docs/docs/build/metricflow-commands.md b/website/docs/docs/build/metricflow-commands.md index fd120591900..4d2477ad2ed 100644 --- a/website/docs/docs/build/metricflow-commands.md +++ b/website/docs/docs/build/metricflow-commands.md @@ -179,8 +179,9 @@ Options: ### Validate-configs -This command performs validations against the defined semantic model configurations: - +The following command performs validations against the defined semantic model configurations. + +Note, in dbt Cloud you don't need to validate the Semantic Layer config separately. Running a dbt command (such as `dbt parse`, `dbt build`, `dbt compile`, `dbt run`) automatically checks it. ```bash @@ -205,11 +206,12 @@ Options: ### Health checks -This command performs a health check against the data platform you provided in the configs: - +The following command performs a health check against the data platform you provided in the configs. + +Note, in dbt Cloud the `health-checks` command isn't required since it uses dbt Cloud's credentials to perform the health check. ```bash -mf health-checks #in dbt Core +mf health-checks # In dbt Core ``` ### Tutorial From 437f78faa2351005bc94256ecc948fcc39ca37b9 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Mon, 13 Nov 2023 11:02:11 +0000 Subject: [PATCH 195/305] Update website/snippets/_sl-deprecation-notice.md Co-authored-by: Matt Shaver <60105315+matthewshaver@users.noreply.github.com> --- website/snippets/_sl-deprecation-notice.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/snippets/_sl-deprecation-notice.md b/website/snippets/_sl-deprecation-notice.md index 8d107f39fff..07b672c1929 100644 --- a/website/snippets/_sl-deprecation-notice.md +++ b/website/snippets/_sl-deprecation-notice.md @@ -1,6 +1,6 @@ :::info Deprecation of dbt Metrics and the legacy dbt Semantic Layer For users on dbt version 1.5 or earlier — starting on December 15th, 2023, support for dbt Metrics and the old dbt Semantic Layer (v1.5 and below) will end. To benefit from the latest features, upgrade to the most [recent version](/guides/migration/sl-migration) of dbt and embrace the enhanced dbt Semantic Layer, powered by MetricFlow. -After this date, dbt Labs won't offer support, bug fixes, or security updates for these deprecated features. Documentation for them will be discontinued, and they will be removed from the dbt Cloud user interface. +After December 15th, dbt Labs will no longer support these deprecated features, they will be removed from the dbt Cloud user interface, and their documentation removed from the docs site. ::: From e106c524c36ee3188070bb92d0e8ae0a0b734a53 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Mon, 13 Nov 2023 11:12:53 +0000 Subject: [PATCH 196/305] clarify language --- website/snippets/_sl-deprecation-notice.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/website/snippets/_sl-deprecation-notice.md b/website/snippets/_sl-deprecation-notice.md index 07b672c1929..95a7c7e26c7 100644 --- a/website/snippets/_sl-deprecation-notice.md +++ b/website/snippets/_sl-deprecation-notice.md @@ -1,5 +1,6 @@ :::info Deprecation of dbt Metrics and the legacy dbt Semantic Layer -For users on dbt version 1.5 or earlier — starting on December 15th, 2023, support for dbt Metrics and the old dbt Semantic Layer (v1.5 and below) will end. To benefit from the latest features, upgrade to the most [recent version](/guides/migration/sl-migration) of dbt and embrace the enhanced dbt Semantic Layer, powered by MetricFlow. +For users of the dbt Semantic Layer on version 1.5 or earlier — Support for dbt Metrics and the legacy dbt Semantic Layer ends on December 15th, 2023. To access enhanced features, migrate to the updated version using the [dbt Semantic Layer migration guide](/guides/migration/sl-migration). + After December 15th, dbt Labs will no longer support these deprecated features, they will be removed from the dbt Cloud user interface, and their documentation removed from the docs site. From 4062f9e1e3175eca691b467beb988fde1443db61 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Mon, 13 Nov 2023 11:13:13 +0000 Subject: [PATCH 197/305] use latest --- website/snippets/_sl-deprecation-notice.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/snippets/_sl-deprecation-notice.md b/website/snippets/_sl-deprecation-notice.md index 95a7c7e26c7..0e07f315976 100644 --- a/website/snippets/_sl-deprecation-notice.md +++ b/website/snippets/_sl-deprecation-notice.md @@ -1,5 +1,5 @@ :::info Deprecation of dbt Metrics and the legacy dbt Semantic Layer -For users of the dbt Semantic Layer on version 1.5 or earlier — Support for dbt Metrics and the legacy dbt Semantic Layer ends on December 15th, 2023. To access enhanced features, migrate to the updated version using the [dbt Semantic Layer migration guide](/guides/migration/sl-migration). +For users of the dbt Semantic Layer on version 1.5 or earlier — Support for dbt Metrics and the legacy dbt Semantic Layer ends on December 15th, 2023. To access the latest features, migrate to the updated version using the [dbt Semantic Layer migration guide](/guides/migration/sl-migration). After December 15th, dbt Labs will no longer support these deprecated features, they will be removed from the dbt Cloud user interface, and their documentation removed from the docs site. From 0e9bd1518cc99a41f8a50b4dd87223177842a070 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Mon, 13 Nov 2023 11:15:40 +0000 Subject: [PATCH 198/305] fix link --- website/snippets/_sl-deprecation-notice.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/snippets/_sl-deprecation-notice.md b/website/snippets/_sl-deprecation-notice.md index 0e07f315976..f521fedc7b4 100644 --- a/website/snippets/_sl-deprecation-notice.md +++ b/website/snippets/_sl-deprecation-notice.md @@ -1,5 +1,5 @@ :::info Deprecation of dbt Metrics and the legacy dbt Semantic Layer -For users of the dbt Semantic Layer on version 1.5 or earlier — Support for dbt Metrics and the legacy dbt Semantic Layer ends on December 15th, 2023. To access the latest features, migrate to the updated version using the [dbt Semantic Layer migration guide](/guides/migration/sl-migration). +For users of the dbt Semantic Layer on version 1.5 or earlier — Support for dbt Metrics and the legacy dbt Semantic Layer ends on December 15th, 2023. To access the latest features, migrate to the updated version using the [dbt Semantic Layer migration guide](/guides/sl-migration). After December 15th, dbt Labs will no longer support these deprecated features, they will be removed from the dbt Cloud user interface, and their documentation removed from the docs site. From a36c3e71a56210159931fbf432aa68172a5dedcb Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Mon, 13 Nov 2023 11:16:19 +0000 Subject: [PATCH 199/305] fix link --- website/snippets/_legacy-sl-callout.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/website/snippets/_legacy-sl-callout.md b/website/snippets/_legacy-sl-callout.md index 61d3a1c910f..ae40151ab1c 100644 --- a/website/snippets/_legacy-sl-callout.md +++ b/website/snippets/_legacy-sl-callout.md @@ -2,9 +2,8 @@ The dbt Semantic Layer has undergone a [significant revamp](https://www.getdbt.com/blog/dbt-semantic-layer-whats-next/), introducing new features such as dbt Semantic Layer APIs. The APIs integrate with data applications, such as Tableau and Google Sheets, to query metrics and unlock insights. -For users on dbt version 1.5 or earlier, starting on December 15th, 2023, support for dbt Metrics and the old dbt Semantic Layer (v1.5 and below) will end. To benefit from the latest features, upgrade to the most [recent version](/guides/migration/sl-migration) of dbt and embrace the enhanced dbt Semantic Layer, powered by MetricFlow. +For users of the dbt Semantic Layer on version 1.5 or earlier — Support for dbt Metrics and the legacy dbt Semantic Layer ends on December 15th, 2023. To access the latest features, migrate to the updated version using the [dbt Semantic Layer migration guide](/guides/sl-migration). -After this date, dbt Labs won't offer support, bug fixes, or security updates for these deprecated features. Documentation for them will be discontinued, and they will be removed from the dbt Cloud user interface. +After December 15th, dbt Labs will no longer support these deprecated features, they will be removed from the dbt Cloud user interface, and their documentation removed from the docs site. ::: -support for dbt Metrics and the old dbt Semantic Layer (v1.5 and below) will end. From 882d19bbf68d9cc992a139a02feecb40c726a5dd Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Mon, 13 Nov 2023 11:17:21 +0000 Subject: [PATCH 200/305] consistency --- website/snippets/_legacy-sl-callout.md | 2 +- website/snippets/_sl-deprecation-notice.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/website/snippets/_legacy-sl-callout.md b/website/snippets/_legacy-sl-callout.md index ae40151ab1c..b0575b60729 100644 --- a/website/snippets/_legacy-sl-callout.md +++ b/website/snippets/_legacy-sl-callout.md @@ -2,7 +2,7 @@ The dbt Semantic Layer has undergone a [significant revamp](https://www.getdbt.com/blog/dbt-semantic-layer-whats-next/), introducing new features such as dbt Semantic Layer APIs. The APIs integrate with data applications, such as Tableau and Google Sheets, to query metrics and unlock insights. -For users of the dbt Semantic Layer on version 1.5 or earlier — Support for dbt Metrics and the legacy dbt Semantic Layer ends on December 15th, 2023. To access the latest features, migrate to the updated version using the [dbt Semantic Layer migration guide](/guides/sl-migration). +For users of the dbt Semantic Layer on version 1.5 or lower — Support for dbt Metrics and the legacy dbt Semantic Layer ends on December 15th, 2023. To access the latest features, migrate to the updated version using the [dbt Semantic Layer migration guide](/guides/sl-migration). After December 15th, dbt Labs will no longer support these deprecated features, they will be removed from the dbt Cloud user interface, and their documentation removed from the docs site. diff --git a/website/snippets/_sl-deprecation-notice.md b/website/snippets/_sl-deprecation-notice.md index f521fedc7b4..19bf19c2d90 100644 --- a/website/snippets/_sl-deprecation-notice.md +++ b/website/snippets/_sl-deprecation-notice.md @@ -1,5 +1,5 @@ :::info Deprecation of dbt Metrics and the legacy dbt Semantic Layer -For users of the dbt Semantic Layer on version 1.5 or earlier — Support for dbt Metrics and the legacy dbt Semantic Layer ends on December 15th, 2023. To access the latest features, migrate to the updated version using the [dbt Semantic Layer migration guide](/guides/sl-migration). +For users of the dbt Semantic Layer on version 1.5 or lower — Support for dbt Metrics and the legacy dbt Semantic Layer ends on December 15th, 2023. To access the latest features, migrate to the updated version using the [dbt Semantic Layer migration guide](/guides/sl-migration). After December 15th, dbt Labs will no longer support these deprecated features, they will be removed from the dbt Cloud user interface, and their documentation removed from the docs site. From 9abe20d09b5a67f058591ec7244571f70b6612ab Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Mon, 13 Nov 2023 11:40:10 +0000 Subject: [PATCH 201/305] Update meta.md fix header --- website/docs/reference/resource-configs/meta.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docs/reference/resource-configs/meta.md b/website/docs/reference/resource-configs/meta.md index 9ccf2cc60dc..bc0c0c7c041 100644 --- a/website/docs/reference/resource-configs/meta.md +++ b/website/docs/reference/resource-configs/meta.md @@ -277,8 +277,8 @@ seeds: select 1 as id ``` - - +

    + ### Assign owner in the dbt_project.yml as a config property From f92efe9c224329d4f92a1a69deb07186e653d9fb Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Mon, 13 Nov 2023 13:54:37 +0000 Subject: [PATCH 202/305] fix load --- website/static/js/headerLinkCopy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/static/js/headerLinkCopy.js b/website/static/js/headerLinkCopy.js index b32ad3c0c5d..4773a25a8e8 100644 --- a/website/static/js/headerLinkCopy.js +++ b/website/static/js/headerLinkCopy.js @@ -1,7 +1,7 @@ /* eslint-disable */ // Get all the headers with anchor links - window.addEventListener("load", function() { + window.addEventListener("popstate", function() { const headers = document.querySelectorAll("h2.anchor, h3.anchor"); headers.forEach((header) => { From e0764c5044b2503b548c546c0bdb29c5679404b7 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Mon, 13 Nov 2023 15:14:33 +0000 Subject: [PATCH 203/305] adding badge but broken --- .../docs/docs/collaborate/documentation.md | 2 +- website/docusaurus.config.js | 4 +- .../components/lifecyclePill/ReleaseStatus.js | 13 --- website/src/css/custom.css | 32 +++--- website/static/js/headerLinkCopy.js | 104 +++++++++++------- 5 files changed, 85 insertions(+), 70 deletions(-) delete mode 100644 website/src/components/lifecyclePill/ReleaseStatus.js diff --git a/website/docs/docs/collaborate/documentation.md b/website/docs/docs/collaborate/documentation.md index 8936d924fb2..10587cf34a0 100644 --- a/website/docs/docs/collaborate/documentation.md +++ b/website/docs/docs/collaborate/documentation.md @@ -6,7 +6,7 @@ pagination_next: "docs/collaborate/build-and-view-your-docs" pagination_prev: null --- -## Related documentation +## Related documentation * [Declaring properties](/reference/configs-and-properties) * [`dbt docs` command](/reference/commands/cmd-docs) diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index eacb8f70949..90cf9131955 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -1,8 +1,8 @@ const path = require("path"); const math = require("remark-math"); const katex = require("rehype-katex"); + const { versions, versionedPages, versionedCategories } = require("./dbt-versions"); -const reactPlugin = import('remark-react'); require("dotenv").config(); /* Debugging */ @@ -216,7 +216,7 @@ var siteSettings = { path: "docs", routeBasePath: "/", sidebarPath: require.resolve("./sidebars.js"), - remarkPlugins: [math, reactPlugin], + remarkPlugins: [math], rehypePlugins: [katex], editUrl: diff --git a/website/src/components/lifecyclePill/ReleaseStatus.js b/website/src/components/lifecyclePill/ReleaseStatus.js deleted file mode 100644 index 0943de51a7b..00000000000 --- a/website/src/components/lifecyclePill/ReleaseStatus.js +++ /dev/null @@ -1,13 +0,0 @@ -// ReleaseStatus.js -import React from 'react'; -import './custom.css'; // import path - -function ReleaseStatus({ status }) { - return ( -
    - {status} -
    - ); -} - -export default ReleaseStatus; diff --git a/website/src/css/custom.css b/website/src/css/custom.css index c0f2c1405c1..f4f5957f89a 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -2073,29 +2073,33 @@ h2.anchor.clicked a.hash-link:before { color: #fff; /* Change color on hover if desired */ } -.release-status { +.lifecycle-badge { display: inline-block; - padding: 4px 8px; - border-radius: 4px; - font-size: 0.8em; - margin-right: 8px; + padding: 0.25em 0.5em; + font-size: 75%; + font-weight: 700; + line-height: 1; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: 0.25rem; + margin-left: 0.5em; /* Adjust for spacing */ + color: #020101; /* Black text for all badges */ } -.release-status-beta { - background-color:lightgreen; /* Adjust the color as needed */ - color: #eae6e6; +.lifecycle-badge.beta { + background-color: #28a745; /* Green for beta */ } -.release-status-public-preview { - background-color: #4caf50; /* Adjust the color as needed */ - color: #fff; +.lifecycle-badge.public-preview { + background-color: #007bff; /* Blue for public preview */ } -.release-status-private-preview { - background-color: #2196f3; /* Adjust the color as needed */ - color: #fff; +.lifecycle-badge.private-preview { + background-color: #6c757d; /* Grey for private preview */ } + @media (max-width: 996px) { .quickstart-container { flex-direction: column; diff --git a/website/static/js/headerLinkCopy.js b/website/static/js/headerLinkCopy.js index 4773a25a8e8..fc15f4f382a 100644 --- a/website/static/js/headerLinkCopy.js +++ b/website/static/js/headerLinkCopy.js @@ -1,52 +1,76 @@ /* eslint-disable */ - // Get all the headers with anchor links - window.addEventListener("popstate", function() { - const headers = document.querySelectorAll("h2.anchor, h3.anchor"); - -headers.forEach((header) => { - header.style.cursor = "pointer"; - const clipboard = new ClipboardJS(header, { - text: function(trigger) { - const anchorLink = trigger.getAttribute("id"); - return window.location.href.split('#')[0] + '#' + anchorLink; +// Function to add the lifecycle badge +function addLifecycleBadge(headers) { + headers.forEach((header) => { + // Check if the header contains the Lifecycle component + const lifecycleMatch = header.innerHTML.match(//); + if (lifecycleMatch) { + // Normalize the status to lowercase and replace spaces with hyphens + const statusClass = lifecycleMatch[1].toLowerCase().replace(/\s+/g, '-'); + badge.classList.add("lifecycle-badge", statusClass); + + // Remove the Lifecycle component from the header text + header.innerHTML = header.innerHTML.replace(//, ""); + + // Create the badge + const badge = document.createElement("span"); + badge.classList.add("lifecycle-badge", statusClass); + badge.textContent = lifecycleMatch[1]; // e.g., "Beta" + + // Insert the badge before the header text + header.insertBefore(badge, header.firstChild); } }); +} - clipboard.on('success', function(e) { - // Provide user feedback (e.g., alert or tooltip) here - const popup = document.createElement('div'); - popup.classList.add('copy-popup'); - popup.innerText = 'Link copied!'; - document.body.appendChild(popup); - - // Set up timeout to remove the popup after 5 seconds - setTimeout(() => { - document.body.removeChild(popup); - }, 5000); - - // Add close button ('x') - const closeButton = document.createElement('span'); - closeButton.classList.add('close-button'); - closeButton.innerHTML = ' ×'; // '×' symbol for 'x' - closeButton.addEventListener('click', () => { - if (document.body.contains(popup)) { - document.body.removeChild(popup); +// Function to add the copy button functionality +function addCopyButton(headers) { + headers.forEach((header) => { + header.style.cursor = "pointer"; + const clipboard = new ClipboardJS(header, { + text: function(trigger) { + const anchorLink = trigger.getAttribute("id"); + return window.location.href.split('#')[0] + '#' + anchorLink; } }); - popup.appendChild(closeButton); - // Add and remove the 'clicked' class for styling purposes - e.trigger.classList.add("clicked"); - setTimeout(() => { - if (document.body.contains(popup)) { + clipboard.on('success', function(e) { + // Provide user feedback (e.g., alert or tooltip) here + const popup = document.createElement('div'); + popup.classList.add('copy-popup'); + popup.innerText = 'Link copied!'; + document.body.appendChild(popup); + + // Set up timeout to remove the popup after 3 seconds + setTimeout(() => { document.body.removeChild(popup); - } - }, 5000); - }); + }, 3000); + + // Add close button ('x') + const closeButton = document.createElement('span'); + closeButton.classList.add('close-button'); + closeButton.innerHTML = ' ×'; // '×' symbol for 'x' + closeButton.addEventListener('click', () => { + if (document.body.contains(popup)) { + document.body.removeChild(popup); + } + }); + popup.appendChild(closeButton); - clipboard.on('error', function(e) { - console.error("Unable to copy to clipboard: " + e.text); + // Add and remove the 'clicked' class for styling purposes + e.trigger.classList.add("clicked"); + }); + + clipboard.on('error', function(e) { + console.error("Unable to copy to clipboard: " + e.text); + }); }); -}); +} + +// Event listener for when the DOM content is loaded +window.addEventListener("click", function() { + const headers = document.querySelectorAll("h2.anchor, h3.anchor"); + addLifecycleBadge(headers); + addCopyButton(headers); }); From 4060af1075ef0c716c6359b66a88f54bce8d7f29 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Mon, 13 Nov 2023 15:23:02 +0000 Subject: [PATCH 204/305] revert to original --- website/src/css/custom.css | 27 ------- website/static/js/headerLinkCopy.js | 105 +++++++++++----------------- 2 files changed, 41 insertions(+), 91 deletions(-) diff --git a/website/src/css/custom.css b/website/src/css/custom.css index f4f5957f89a..1feb5510cc5 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -2073,33 +2073,6 @@ h2.anchor.clicked a.hash-link:before { color: #fff; /* Change color on hover if desired */ } -.lifecycle-badge { - display: inline-block; - padding: 0.25em 0.5em; - font-size: 75%; - font-weight: 700; - line-height: 1; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: 0.25rem; - margin-left: 0.5em; /* Adjust for spacing */ - color: #020101; /* Black text for all badges */ -} - -.lifecycle-badge.beta { - background-color: #28a745; /* Green for beta */ -} - -.lifecycle-badge.public-preview { - background-color: #007bff; /* Blue for public preview */ -} - -.lifecycle-badge.private-preview { - background-color: #6c757d; /* Grey for private preview */ -} - - @media (max-width: 996px) { .quickstart-container { flex-direction: column; diff --git a/website/static/js/headerLinkCopy.js b/website/static/js/headerLinkCopy.js index fc15f4f382a..c23a294add1 100644 --- a/website/static/js/headerLinkCopy.js +++ b/website/static/js/headerLinkCopy.js @@ -1,76 +1,53 @@ /* eslint-disable */ -// Function to add the lifecycle badge -function addLifecycleBadge(headers) { - headers.forEach((header) => { - // Check if the header contains the Lifecycle component - const lifecycleMatch = header.innerHTML.match(//); - if (lifecycleMatch) { - // Normalize the status to lowercase and replace spaces with hyphens - const statusClass = lifecycleMatch[1].toLowerCase().replace(/\s+/g, '-'); - badge.classList.add("lifecycle-badge", statusClass); - - // Remove the Lifecycle component from the header text - header.innerHTML = header.innerHTML.replace(//, ""); - - // Create the badge - const badge = document.createElement("span"); - badge.classList.add("lifecycle-badge", statusClass); - badge.textContent = lifecycleMatch[1]; // e.g., "Beta" - - // Insert the badge before the header text - header.insertBefore(badge, header.firstChild); + // Get all the headers with anchor links. + // The 'click' event worked over 'popstate' because click captures page triggers, as well as back/forward button triggers + window.addEventListener("click", function() { + const headers = document.querySelectorAll("h2.anchor, h3.anchor"); + +headers.forEach((header) => { + header.style.cursor = "pointer"; + const clipboard = new ClipboardJS(header, { + text: function(trigger) { + const anchorLink = trigger.getAttribute("id"); + return window.location.href.split('#')[0] + '#' + anchorLink; } }); -} -// Function to add the copy button functionality -function addCopyButton(headers) { - headers.forEach((header) => { - header.style.cursor = "pointer"; - const clipboard = new ClipboardJS(header, { - text: function(trigger) { - const anchorLink = trigger.getAttribute("id"); - return window.location.href.split('#')[0] + '#' + anchorLink; + clipboard.on('success', function(e) { + // Provide user feedback (e.g., alert or tooltip) here + const popup = document.createElement('div'); + popup.classList.add('copy-popup'); + popup.innerText = 'Link copied!'; + document.body.appendChild(popup); + + // Set up timeout to remove the popup after 3 seconds + setTimeout(() => { + document.body.removeChild(popup); + }, 3000); + + // Add close button ('x') + const closeButton = document.createElement('span'); + closeButton.classList.add('close-button'); + closeButton.innerHTML = ' ×'; // '×' symbol for 'x' + closeButton.addEventListener('click', () => { + if (document.body.contains(popup)) { + document.body.removeChild(popup); } }); + popup.appendChild(closeButton); - clipboard.on('success', function(e) { - // Provide user feedback (e.g., alert or tooltip) here - const popup = document.createElement('div'); - popup.classList.add('copy-popup'); - popup.innerText = 'Link copied!'; - document.body.appendChild(popup); - - // Set up timeout to remove the popup after 3 seconds - setTimeout(() => { + // Add and remove the 'clicked' class for styling purposes + e.trigger.classList.add("clicked"); + setTimeout(() => { + if (document.body.contains(popup)) { document.body.removeChild(popup); - }, 3000); - - // Add close button ('x') - const closeButton = document.createElement('span'); - closeButton.classList.add('close-button'); - closeButton.innerHTML = ' ×'; // '×' symbol for 'x' - closeButton.addEventListener('click', () => { - if (document.body.contains(popup)) { - document.body.removeChild(popup); - } - }); - popup.appendChild(closeButton); - - // Add and remove the 'clicked' class for styling purposes - e.trigger.classList.add("clicked"); - }); - - clipboard.on('error', function(e) { - console.error("Unable to copy to clipboard: " + e.text); - }); + } + }, 3000); }); -} -// Event listener for when the DOM content is loaded -window.addEventListener("click", function() { - const headers = document.querySelectorAll("h2.anchor, h3.anchor"); - addLifecycleBadge(headers); - addCopyButton(headers); + clipboard.on('error', function(e) { + console.error("Unable to copy to clipboard: " + e.text); + }); +}); }); From 76ef6384eccbc71d3c786d3aaa251cdc918baa31 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Mon, 13 Nov 2023 15:39:23 +0000 Subject: [PATCH 205/305] add --- website/package.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/website/package.json b/website/package.json index 591d1520469..b0105102359 100644 --- a/website/package.json +++ b/website/package.json @@ -20,7 +20,6 @@ "@svgr/webpack": "^6.0.0", "axios": "^0.27.2", "classnames": "^2.3.1", - "clipboard": "^2.0.11", "clsx": "^1.1.1", "color": "^3.1.2", "core-js": "^3.20.0", @@ -45,7 +44,6 @@ "redoc": "^2.0.0-rc.57", "rehype-katex": "^5.0.0", "remark-math": "^3.0.1", - "remark-react": "^9.0.1", "sanitize-html": "^2.8.0", "slugify": "^1.6.1", "styled-components": "5.3.3", From 39449daf6f9e4211af4b43346d2efd249140bda9 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Mon, 13 Nov 2023 15:44:18 +0000 Subject: [PATCH 206/305] tweak defer lanuge --- .../docs/docs/cloud/about-cloud-develop-defer.md | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/website/docs/docs/cloud/about-cloud-develop-defer.md b/website/docs/docs/cloud/about-cloud-develop-defer.md index 1861a6d8a79..302a3548351 100644 --- a/website/docs/docs/cloud/about-cloud-develop-defer.md +++ b/website/docs/docs/cloud/about-cloud-develop-defer.md @@ -9,16 +9,12 @@ pagination_next: "docs/cloud/cloud-cli-installation" [Defer](/reference/node-selection/defer) is a powerful feature that allows developers to only build and run and test models they've edited without having to first run and build all the models that come before them (upstream parents). This is powered by using a production manifest for comparison, and dbt will resolve the `{{ ref() }}` function with upstream production artifacts. -By default, dbt follows these rules: +Both the dbt Cloud IDE and the dbt Cloud CLI allow users to natively defer to production metadata directly in their development workflows. By default, dbt follows these rules: -- Defers to the production environment when there's no development schema. -- If a development schema exists, dbt will prioritize those changes, which minimizes development time and avoids unnecessary model builds. - -Both the dbt Cloud IDE and the dbt Cloud CLI allow users to natively defer to production metadata directly in their development workflows. - -For specific scenarios: -- Use [`--favor-state`](/reference/node-selection/defer#favor-state) to always use production artifacts to resolve the ref. -- If facing issues with outdated tables in the development schema, `--favor-state` is an alternative to defer. +- dbt uses the production locations of parent models to resolve `{{ ref() }}` functions, based on metadata from the production environment. +- If a development version of a deferred model exists, dbt preferentially uses that table when resolving the reference. +- Passing the [`--favor-state`](/reference/node-selection/defer#favor-state) flag will override this behavior and _always_ resolve refs using the production metadata, regardless of the presence of a development relation. + - If facing issues with outdated tables in the development schema, `--favor-state` is an alternative to defer. For a clean slate, it's a good practice to drop the development schema at the start and end of your development cycle. From dba2bfc51a3c1dc5fea73a32335207ddc538db1c Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Mon, 13 Nov 2023 15:49:02 +0000 Subject: [PATCH 207/305] Update website/docs/docs/collaborate/documentation.md --- website/docs/docs/collaborate/documentation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/collaborate/documentation.md b/website/docs/docs/collaborate/documentation.md index 24d47208bad..54a88454ae6 100644 --- a/website/docs/docs/collaborate/documentation.md +++ b/website/docs/docs/collaborate/documentation.md @@ -6,7 +6,7 @@ pagination_next: "docs/collaborate/build-and-view-your-docs" pagination_prev: null --- -## Related documentation +## Related documentation * [Declaring properties](/reference/configs-and-properties) * [`dbt docs` command](/reference/commands/cmd-docs) From 5467027d0d2f4c8c7d2c65d236e48a1c49397ddd Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Mon, 13 Nov 2023 15:49:59 +0000 Subject: [PATCH 208/305] Update website/docs/docs/cloud/about-cloud-develop-defer.md Co-authored-by: dave-connors-3 <73915542+dave-connors-3@users.noreply.github.com> --- website/docs/docs/cloud/about-cloud-develop-defer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/cloud/about-cloud-develop-defer.md b/website/docs/docs/cloud/about-cloud-develop-defer.md index 302a3548351..f0fcaec9f39 100644 --- a/website/docs/docs/cloud/about-cloud-develop-defer.md +++ b/website/docs/docs/cloud/about-cloud-develop-defer.md @@ -12,7 +12,7 @@ pagination_next: "docs/cloud/cloud-cli-installation" Both the dbt Cloud IDE and the dbt Cloud CLI allow users to natively defer to production metadata directly in their development workflows. By default, dbt follows these rules: - dbt uses the production locations of parent models to resolve `{{ ref() }}` functions, based on metadata from the production environment. -- If a development version of a deferred model exists, dbt preferentially uses that table when resolving the reference. +- If a development version of a deferred model exists, dbt preferentially uses that database location when resolving the reference. - Passing the [`--favor-state`](/reference/node-selection/defer#favor-state) flag will override this behavior and _always_ resolve refs using the production metadata, regardless of the presence of a development relation. - If facing issues with outdated tables in the development schema, `--favor-state` is an alternative to defer. From caa28652e56f0bff48a13029262c6a035624ad16 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Mon, 13 Nov 2023 15:52:45 +0000 Subject: [PATCH 209/305] Update website/docs/docs/cloud/about-cloud-develop-defer.md Co-authored-by: dave-connors-3 <73915542+dave-connors-3@users.noreply.github.com> --- website/docs/docs/cloud/about-cloud-develop-defer.md | 1 - 1 file changed, 1 deletion(-) diff --git a/website/docs/docs/cloud/about-cloud-develop-defer.md b/website/docs/docs/cloud/about-cloud-develop-defer.md index f0fcaec9f39..fca09530f62 100644 --- a/website/docs/docs/cloud/about-cloud-develop-defer.md +++ b/website/docs/docs/cloud/about-cloud-develop-defer.md @@ -14,7 +14,6 @@ Both the dbt Cloud IDE and the dbt Cloud CLI allow users to natively defer to pr - dbt uses the production locations of parent models to resolve `{{ ref() }}` functions, based on metadata from the production environment. - If a development version of a deferred model exists, dbt preferentially uses that database location when resolving the reference. - Passing the [`--favor-state`](/reference/node-selection/defer#favor-state) flag will override this behavior and _always_ resolve refs using the production metadata, regardless of the presence of a development relation. - - If facing issues with outdated tables in the development schema, `--favor-state` is an alternative to defer. For a clean slate, it's a good practice to drop the development schema at the start and end of your development cycle. From 2ea6ba1b02fd369d7ff33cd1e5b20fd08f8b6983 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Mon, 13 Nov 2023 15:53:55 +0000 Subject: [PATCH 210/305] Update website/docs/docs/cloud/about-cloud-develop-defer.md --- website/docs/docs/cloud/about-cloud-develop-defer.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/website/docs/docs/cloud/about-cloud-develop-defer.md b/website/docs/docs/cloud/about-cloud-develop-defer.md index fca09530f62..d261a990b90 100644 --- a/website/docs/docs/cloud/about-cloud-develop-defer.md +++ b/website/docs/docs/cloud/about-cloud-develop-defer.md @@ -9,7 +9,9 @@ pagination_next: "docs/cloud/cloud-cli-installation" [Defer](/reference/node-selection/defer) is a powerful feature that allows developers to only build and run and test models they've edited without having to first run and build all the models that come before them (upstream parents). This is powered by using a production manifest for comparison, and dbt will resolve the `{{ ref() }}` function with upstream production artifacts. -Both the dbt Cloud IDE and the dbt Cloud CLI allow users to natively defer to production metadata directly in their development workflows. By default, dbt follows these rules: +Both the dbt Cloud IDE and the dbt Cloud CLI allow users to natively defer to production metadata directly in their development workflows. + +By default, dbt follows these rules: - dbt uses the production locations of parent models to resolve `{{ ref() }}` functions, based on metadata from the production environment. - If a development version of a deferred model exists, dbt preferentially uses that database location when resolving the reference. From 4fdd102d2b57977455cf294084af82b7da41e0e4 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Mon, 13 Nov 2023 16:28:41 +0000 Subject: [PATCH 211/305] add table --- website/docs/docs/dbt-support.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/website/docs/docs/dbt-support.md b/website/docs/docs/dbt-support.md index 513d5fff588..d1580fdb16e 100644 --- a/website/docs/docs/dbt-support.md +++ b/website/docs/docs/dbt-support.md @@ -30,7 +30,9 @@ Types of dbt Cloud-related questions our Support team can assist you with, regar - why my CI jobs are not kicking off as expected. -### dbt Cloud Enterprise accounts +Developer and Team accounts are not subject to a service level agreement. If you are interested in adding one, [contact Sales](https://www.getdbt.com/pricing/) to ask about our Enterprise plan. + +## dbt Cloud Enterprise accounts For customers on a dbt Cloud Enterprise plan, we **also** offer basic assistance in troubleshooting issues with your dbt project. - **Something isn't working the way I would expect it to...** @@ -50,5 +52,16 @@ Types of questions you should ask your Solutions Architect and Sales Director: - Here is our data road map for the next year - can we talk through how dbt fits into it and what features we may not be utilizing that can help us achieve our goals? - It is time for our contract renewal, what options do I have? +### Severity level + +Support tickets are assigned a severity level based on the impact of the issue to your business. The severity level determines the priority level of support you will receive. For specific ticket response time, Support does not have access to an Enterprise account's service level agreement (SLA). Please contact your legal team for a copy of your contract. <-- NOT SURE WE SHOULD USE STATE THIS - IT MAKES IT SEEM LIKE SUPPORT DONT KNOW WHEN WE HAVE TO RESPOND TO AN ENTERPRISE'S TICKET SINCE WE'RE SAYING WE DON'T HAVE ACCESS TO THEIR CONTRACT. I WOULDN'T WANT USERS TO THINK WE'RE NOT TREATING THEIR TICKET BASED ON THEIR SPECIFIC SLA. + + +| Severity Level | Description | +| -------------- | ----------- | +| Severity Level 1 | Any Error which makes the use or continued use of the Subscription or material features impossible; Subscription is not operational, with no alternative available. | +| Severity Level 2 | AFeature failure, without a workaround, but Subscription is operational. | +| Severity Level 3 | Feature failure, but a workaround exists. | +| Severity Level 4 | Error with low-to-no impact on Client’s access to or use of the Subscription, or Client has a general question or feature enhancement request. | When you need help writing SQL, reviewing the overall performance of your project, or want someone to actually help build your dbt project, check out our list of [dbt Preferred Consulting Providers](https://www.getdbt.com/ecosystem/) or our [Services](https://www.getdbt.com/dbt-labs/services/) page! From 08cd63b4675e2c44ca329e6d8062e6b30fde4c28 Mon Sep 17 00:00:00 2001 From: Doug Beatty <44704949+dbeatty10@users.noreply.github.com> Date: Mon, 13 Nov 2023 09:55:43 -0700 Subject: [PATCH 212/305] Fix rendering of hyperlink (#4450) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Preview - Click on the "macros" tab: - https://docs-getdbt-com-git-dbeatty-docs-config-fix-link-dbt-labs.vercel.app/reference/resource-configs/docs ## What are you changing in this pull request and why? This hyperlink isn't rendering correctly: image ### 🎩 Preview after the fix: image ## Checklist - [x] Review the [Content style guide](https://github.com/dbt-labs/docs.getdbt.com/blob/current/contributing/content-style-guide.md) and [About versioning](https://github.com/dbt-labs/docs.getdbt.com/blob/current/contributing/single-sourcing-content.md#adding-a-new-version) so my content adheres to these guidelines. - [x] I have checked the preview renders correctly --- website/docs/reference/resource-configs/docs.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/website/docs/reference/resource-configs/docs.md b/website/docs/reference/resource-configs/docs.md index d300979a826..c5e35dd64f4 100644 --- a/website/docs/reference/resource-configs/docs.md +++ b/website/docs/reference/resource-configs/docs.md @@ -108,7 +108,9 @@ macros: show: true | false ```
    + Also refer to [macro properties](/reference/macro-properties). + From 902ac274f5a42980774ed562491f1ae605e55a30 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Mon, 13 Nov 2023 17:18:56 +0000 Subject: [PATCH 213/305] tweaks --- website/docs/docs/dbt-support.md | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/website/docs/docs/dbt-support.md b/website/docs/docs/dbt-support.md index d1580fdb16e..267d8cbe1a0 100644 --- a/website/docs/docs/dbt-support.md +++ b/website/docs/docs/dbt-support.md @@ -5,13 +5,24 @@ pagination_next: null pagination_prev: null --- +Support for dbt is available to all users through the following channels: + +- The dbt Support team (dbt Cloud users). +- [The Community Forum](https://discourse.getdbt.com/). +- [dbt Community slack](https://www.getdbt.com/community/join-the-community/). + ## dbt Core support If you're developing on the command line (CLI) and have questions or need some help — reach out to the helpful dbt community through [the Community Forum](https://discourse.getdbt.com/) or [dbt Community slack](https://www.getdbt.com/community/join-the-community/). ## dbt Cloud support +The global dbt Support team is available to dbt Cloud customers by email or in-product live chat: +- **Enterprise plans** — Have priority access and options for custom coverage, receive implementation assistance, dedicated account management, and a dbt Labs Security and Legal review. +- **Developer and Team plans** — Have 24x5 support. Developer and Team accounts are not subject to a service level agreement. If you are interested in adding one, [contact Sales](https://www.getdbt.com/pricing/) to ask about our Enterprise plan. + We want to help you work through implementing and utilizing dbt Cloud at your organization. Have a question you can't find an answer to in [our docs](https://docs.getdbt.com/) or [the Community Forum](https://discourse.getdbt.com/)? Our Support team is here to `dbt help` you! + Check out our guide on [getting help](/community/resources/getting-help) - half of the problem is often knowing where to look... and how to ask good questions! Types of dbt Cloud-related questions our Support team can assist you with, regardless of your dbt Cloud plan: @@ -30,8 +41,6 @@ Types of dbt Cloud-related questions our Support team can assist you with, regar - why my CI jobs are not kicking off as expected. -Developer and Team accounts are not subject to a service level agreement. If you are interested in adding one, [contact Sales](https://www.getdbt.com/pricing/) to ask about our Enterprise plan. - ## dbt Cloud Enterprise accounts For customers on a dbt Cloud Enterprise plan, we **also** offer basic assistance in troubleshooting issues with your dbt project. @@ -52,6 +61,11 @@ Types of questions you should ask your Solutions Architect and Sales Director: - Here is our data road map for the next year - can we talk through how dbt fits into it and what features we may not be utilizing that can help us achieve our goals? - It is time for our contract renewal, what options do I have? + +For help writing SQL, reviewing the overall performance of your project, or want someone to actually help build your dbt project, refer to the following pages: +- List of [dbt Preferred Consulting Providers](https://www.getdbt.com/ecosystem/). +- dbt Labs' [Services](https://www.getdbt.com/dbt-labs/services/). + ### Severity level Support tickets are assigned a severity level based on the impact of the issue to your business. The severity level determines the priority level of support you will receive. For specific ticket response time, Support does not have access to an Enterprise account's service level agreement (SLA). Please contact your legal team for a copy of your contract. <-- NOT SURE WE SHOULD USE STATE THIS - IT MAKES IT SEEM LIKE SUPPORT DONT KNOW WHEN WE HAVE TO RESPOND TO AN ENTERPRISE'S TICKET SINCE WE'RE SAYING WE DON'T HAVE ACCESS TO THEIR CONTRACT. I WOULDN'T WANT USERS TO THINK WE'RE NOT TREATING THEIR TICKET BASED ON THEIR SPECIFIC SLA. @@ -60,8 +74,8 @@ Support tickets are assigned a severity level based on the impact of the issue t | Severity Level | Description | | -------------- | ----------- | | Severity Level 1 | Any Error which makes the use or continued use of the Subscription or material features impossible; Subscription is not operational, with no alternative available. | -| Severity Level 2 | AFeature failure, without a workaround, but Subscription is operational. | +| Severity Level 2 | Feature failure, without a workaround, but Subscription is operational. | | Severity Level 3 | Feature failure, but a workaround exists. | | Severity Level 4 | Error with low-to-no impact on Client’s access to or use of the Subscription, or Client has a general question or feature enhancement request. | -When you need help writing SQL, reviewing the overall performance of your project, or want someone to actually help build your dbt project, check out our list of [dbt Preferred Consulting Providers](https://www.getdbt.com/ecosystem/) or our [Services](https://www.getdbt.com/dbt-labs/services/) page! + From b85f2b8bd2657921a127b194cc499f3a543432cc Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Mon, 13 Nov 2023 17:22:15 +0000 Subject: [PATCH 214/305] removing comment --- website/docs/docs/dbt-support.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/docs/docs/dbt-support.md b/website/docs/docs/dbt-support.md index 267d8cbe1a0..5542af7ed52 100644 --- a/website/docs/docs/dbt-support.md +++ b/website/docs/docs/dbt-support.md @@ -68,11 +68,11 @@ For help writing SQL, reviewing the overall performance of your project, or want ### Severity level -Support tickets are assigned a severity level based on the impact of the issue to your business. The severity level determines the priority level of support you will receive. For specific ticket response time, Support does not have access to an Enterprise account's service level agreement (SLA). Please contact your legal team for a copy of your contract. <-- NOT SURE WE SHOULD USE STATE THIS - IT MAKES IT SEEM LIKE SUPPORT DONT KNOW WHEN WE HAVE TO RESPOND TO AN ENTERPRISE'S TICKET SINCE WE'RE SAYING WE DON'T HAVE ACCESS TO THEIR CONTRACT. I WOULDN'T WANT USERS TO THINK WE'RE NOT TREATING THEIR TICKET BASED ON THEIR SPECIFIC SLA. +Support tickets are assigned a severity level based on the impact of the issue to your business. The severity level determines the priority level of support you will receive. For specific ticket response time, Support does not have access to an Enterprise account's service level agreement (SLA). Please contact your legal team for a copy of your contract. -| Severity Level | Description | -| -------------- | ----------- | +| Severity Level | Description | +| -------------- | ----------- | | Severity Level 1 | Any Error which makes the use or continued use of the Subscription or material features impossible; Subscription is not operational, with no alternative available. | | Severity Level 2 | Feature failure, without a workaround, but Subscription is operational. | | Severity Level 3 | Feature failure, but a workaround exists. | From 43d95665e4cefb866c484669be4b44b2144d2c5e Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Mon, 13 Nov 2023 17:42:05 +0000 Subject: [PATCH 215/305] tweaks --- website/docs/docs/dbt-support.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docs/docs/dbt-support.md b/website/docs/docs/dbt-support.md index 5542af7ed52..d1d21570536 100644 --- a/website/docs/docs/dbt-support.md +++ b/website/docs/docs/dbt-support.md @@ -7,7 +7,7 @@ pagination_prev: null Support for dbt is available to all users through the following channels: -- The dbt Support team (dbt Cloud users). +- Dedicated dbt Support team (For dbt Cloud users). - [The Community Forum](https://discourse.getdbt.com/). - [dbt Community slack](https://www.getdbt.com/community/join-the-community/). @@ -68,7 +68,7 @@ For help writing SQL, reviewing the overall performance of your project, or want ### Severity level -Support tickets are assigned a severity level based on the impact of the issue to your business. The severity level determines the priority level of support you will receive. For specific ticket response time, Support does not have access to an Enterprise account's service level agreement (SLA). Please contact your legal team for a copy of your contract. +Enterprise support tickets are assigned a severity level based on the impact of the issue to your business. The severity level determines the priority level of support you will receive. For specific ticket response times, Support does not have access to an Enterprise account's service level agreement (SLA). Please contact your legal team for a copy of your contract. | Severity Level | Description | From 9a9118b827f42ea7983027ec62cd081ca2659063 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Mon, 13 Nov 2023 17:46:04 +0000 Subject: [PATCH 216/305] Update website/docs/docs/cloud/about-cloud-develop-defer.md Co-authored-by: Leona B. Campbell <3880403+runleonarun@users.noreply.github.com> --- website/docs/docs/cloud/about-cloud-develop-defer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/cloud/about-cloud-develop-defer.md b/website/docs/docs/cloud/about-cloud-develop-defer.md index d261a990b90..0c961cf0db1 100644 --- a/website/docs/docs/cloud/about-cloud-develop-defer.md +++ b/website/docs/docs/cloud/about-cloud-develop-defer.md @@ -15,7 +15,7 @@ By default, dbt follows these rules: - dbt uses the production locations of parent models to resolve `{{ ref() }}` functions, based on metadata from the production environment. - If a development version of a deferred model exists, dbt preferentially uses that database location when resolving the reference. -- Passing the [`--favor-state`](/reference/node-selection/defer#favor-state) flag will override this behavior and _always_ resolve refs using the production metadata, regardless of the presence of a development relation. +- Passing the [`--favor-state`](/reference/node-selection/defer#favor-state) flag overrides the default behavior and _always_ resolve refs using production metadata, regardless of the presence of a development relation. For a clean slate, it's a good practice to drop the development schema at the start and end of your development cycle. From e24ee7074cd5ae781d4a8027d116b49c6b6842f7 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Mon, 13 Nov 2023 17:46:10 +0000 Subject: [PATCH 217/305] Update website/docs/docs/cloud/about-cloud-develop-defer.md Co-authored-by: Leona B. Campbell <3880403+runleonarun@users.noreply.github.com> --- website/docs/docs/cloud/about-cloud-develop-defer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/cloud/about-cloud-develop-defer.md b/website/docs/docs/cloud/about-cloud-develop-defer.md index 0c961cf0db1..5d3b76c7430 100644 --- a/website/docs/docs/cloud/about-cloud-develop-defer.md +++ b/website/docs/docs/cloud/about-cloud-develop-defer.md @@ -14,7 +14,7 @@ Both the dbt Cloud IDE and the dbt Cloud CLI allow users to natively defer to pr By default, dbt follows these rules: - dbt uses the production locations of parent models to resolve `{{ ref() }}` functions, based on metadata from the production environment. -- If a development version of a deferred model exists, dbt preferentially uses that database location when resolving the reference. +- If a development version of a deferred model exists, dbt preferentially uses the development database location when resolving the reference. - Passing the [`--favor-state`](/reference/node-selection/defer#favor-state) flag overrides the default behavior and _always_ resolve refs using production metadata, regardless of the presence of a development relation. For a clean slate, it's a good practice to drop the development schema at the start and end of your development cycle. From c5c4a69d028595eb0fd556475a493afaf5bd2de9 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Mon, 13 Nov 2023 17:46:18 +0000 Subject: [PATCH 218/305] Update website/docs/docs/cloud/about-cloud-develop-defer.md Co-authored-by: Leona B. Campbell <3880403+runleonarun@users.noreply.github.com> --- website/docs/docs/cloud/about-cloud-develop-defer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/cloud/about-cloud-develop-defer.md b/website/docs/docs/cloud/about-cloud-develop-defer.md index 5d3b76c7430..0158ed8a7eb 100644 --- a/website/docs/docs/cloud/about-cloud-develop-defer.md +++ b/website/docs/docs/cloud/about-cloud-develop-defer.md @@ -7,7 +7,7 @@ pagination_next: "docs/cloud/cloud-cli-installation" --- -[Defer](/reference/node-selection/defer) is a powerful feature that allows developers to only build and run and test models they've edited without having to first run and build all the models that come before them (upstream parents). This is powered by using a production manifest for comparison, and dbt will resolve the `{{ ref() }}` function with upstream production artifacts. +[Defer](/reference/node-selection/defer) is a powerful feature that allows developers to only build and run and test models they've edited without having to first run and build all the models that come before them (upstream parents). dbt powers this by using a production manifest for comparison, and resolves the `{{ ref() }}` function with upstream production artifacts. Both the dbt Cloud IDE and the dbt Cloud CLI allow users to natively defer to production metadata directly in their development workflows. From 2cba7d1baac86cf4796158f748b57b1395646163 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Mon, 13 Nov 2023 17:46:25 +0000 Subject: [PATCH 219/305] Update website/docs/docs/cloud/about-cloud-develop-defer.md Co-authored-by: Leona B. Campbell <3880403+runleonarun@users.noreply.github.com> --- website/docs/docs/cloud/about-cloud-develop-defer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/cloud/about-cloud-develop-defer.md b/website/docs/docs/cloud/about-cloud-develop-defer.md index 0158ed8a7eb..37bfaacfd0c 100644 --- a/website/docs/docs/cloud/about-cloud-develop-defer.md +++ b/website/docs/docs/cloud/about-cloud-develop-defer.md @@ -9,7 +9,7 @@ pagination_next: "docs/cloud/cloud-cli-installation" [Defer](/reference/node-selection/defer) is a powerful feature that allows developers to only build and run and test models they've edited without having to first run and build all the models that come before them (upstream parents). dbt powers this by using a production manifest for comparison, and resolves the `{{ ref() }}` function with upstream production artifacts. -Both the dbt Cloud IDE and the dbt Cloud CLI allow users to natively defer to production metadata directly in their development workflows. +Both the dbt Cloud IDE and the dbt Cloud CLI enable users to natively defer to production metadata directly in their development workflows. By default, dbt follows these rules: From accbc41a38ae612ffca5d20d1bf564f5dca8ff0e Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Mon, 13 Nov 2023 09:52:13 -0800 Subject: [PATCH 220/305] Fixing set up ci forwarder (#4453) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What are you changing in this pull request and why? Fixing link so old search goes to an actual page for https://docs.getdbt.com/guides/orchestration/set-up-ci/lint-on-push. It was forwarding to `https://docs.getdbt.com/%20/guides/set-up-ci` but now forwards correctly to `https://docs.getdbt.com/guides/set-up-ci` ❓ One question for reviewers: Is this forwarded link helpful? I wavered between directly linking to Step 4 for SQL Fluff and linking to the entire guide. I opted for the guide because it feels less fragile. --- website/vercel.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/vercel.json b/website/vercel.json index 7c054b0947e..7b240c35553 100644 --- a/website/vercel.json +++ b/website/vercel.json @@ -434,7 +434,7 @@ }, { "source": "/guides/orchestration/set-up-ci/lint-on-push", - "destination": " /guides/set-up-ci", + "destination": "/guides/set-up-ci", "permanent": true }, { From 0f74128fa23238819f55687aa693f8951f86ae46 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Mon, 13 Nov 2023 17:59:29 +0000 Subject: [PATCH 221/305] updates --- website/docs/docs/dbt-support.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docs/docs/dbt-support.md b/website/docs/docs/dbt-support.md index d1d21570536..4d8bdf74876 100644 --- a/website/docs/docs/dbt-support.md +++ b/website/docs/docs/dbt-support.md @@ -18,8 +18,8 @@ If you're developing on the command line (CLI) and have questions or need some h ## dbt Cloud support The global dbt Support team is available to dbt Cloud customers by email or in-product live chat: -- **Enterprise plans** — Have priority access and options for custom coverage, receive implementation assistance, dedicated account management, and a dbt Labs Security and Legal review. -- **Developer and Team plans** — Have 24x5 support. Developer and Team accounts are not subject to a service level agreement. If you are interested in adding one, [contact Sales](https://www.getdbt.com/pricing/) to ask about our Enterprise plan. +- **Enterprise plans** — Have [priority access](#severity-level), options for custom coverage, receive implementation assistance, dedicated account management, and a dbt Labs Security and Legal review. +- **Developer and Team plans** — Have 24x5 support and not subject to a service level agreement. If you are interested in adding one, [contact Sales](https://www.getdbt.com/pricing/) to ask about our Enterprise plan. We want to help you work through implementing and utilizing dbt Cloud at your organization. Have a question you can't find an answer to in [our docs](https://docs.getdbt.com/) or [the Community Forum](https://discourse.getdbt.com/)? Our Support team is here to `dbt help` you! From 178717f3f17c8a7c6575b5ab3a0bb36de9ab309c Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Mon, 13 Nov 2023 18:02:02 +0000 Subject: [PATCH 222/305] tweak --- website/docs/docs/dbt-support.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/website/docs/docs/dbt-support.md b/website/docs/docs/dbt-support.md index 4d8bdf74876..b746e2cf661 100644 --- a/website/docs/docs/dbt-support.md +++ b/website/docs/docs/dbt-support.md @@ -18,8 +18,17 @@ If you're developing on the command line (CLI) and have questions or need some h ## dbt Cloud support The global dbt Support team is available to dbt Cloud customers by email or in-product live chat: -- **Enterprise plans** — Have [priority access](#severity-level), options for custom coverage, receive implementation assistance, dedicated account management, and a dbt Labs Security and Legal review. -- **Developer and Team plans** — Have 24x5 support and not subject to a service level agreement. If you are interested in adding one, [contact Sales](https://www.getdbt.com/pricing/) to ask about our Enterprise plan. + +- **Enterprise plans** — + - Have [priority access](#severity-level) + - Options for custom support coverage hours + - Receive implementation assistance + - Dedicated account management + - Security and legal review by dbt Labs +- +- **Developer and Team plans** — + - 24x5 support + - No service level agreement included. If you are interested in adding one, [contact Sales](https://www.getdbt.com/pricing/) to ask about our Enterprise plan. We want to help you work through implementing and utilizing dbt Cloud at your organization. Have a question you can't find an answer to in [our docs](https://docs.getdbt.com/) or [the Community Forum](https://discourse.getdbt.com/)? Our Support team is here to `dbt help` you! From 3be4c4b0467e52d6128d66824b6ee67725638710 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Mon, 13 Nov 2023 18:12:50 +0000 Subject: [PATCH 223/305] tweak --- website/docs/docs/dbt-support.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/docs/docs/dbt-support.md b/website/docs/docs/dbt-support.md index b746e2cf661..283c8fd67a7 100644 --- a/website/docs/docs/dbt-support.md +++ b/website/docs/docs/dbt-support.md @@ -19,14 +19,14 @@ If you're developing on the command line (CLI) and have questions or need some h The global dbt Support team is available to dbt Cloud customers by email or in-product live chat: -- **Enterprise plans** — +- **Enterprise plans** - Have [priority access](#severity-level) - Options for custom support coverage hours - Receive implementation assistance - Dedicated account management - Security and legal review by dbt Labs -- -- **Developer and Team plans** — + +- **Developer and Team plans** - 24x5 support - No service level agreement included. If you are interested in adding one, [contact Sales](https://www.getdbt.com/pricing/) to ask about our Enterprise plan. From 6983bdb43f7ced6a923c2e0dfa73391187cac3f0 Mon Sep 17 00:00:00 2001 From: Matt Shaver <60105315+matthewshaver@users.noreply.github.com> Date: Mon, 13 Nov 2023 13:15:28 -0500 Subject: [PATCH 224/305] Correcting grain: MONTH syntax --- website/docs/docs/dbt-cloud-apis/sl-graphql.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/website/docs/docs/dbt-cloud-apis/sl-graphql.md b/website/docs/docs/dbt-cloud-apis/sl-graphql.md index 0e39f50f60a..71ad175c11c 100644 --- a/website/docs/docs/dbt-cloud-apis/sl-graphql.md +++ b/website/docs/docs/dbt-cloud-apis/sl-graphql.md @@ -282,7 +282,7 @@ mutation { createQuery( environmentId: BigInt! metrics: [{name: "order_total"}] - groupBy: [{name: "metric_time", grain: "month"}] + groupBy: [{name: "metric_time", grain: MONTH}] ) { queryId } @@ -298,7 +298,7 @@ mutation { createQuery( environmentId: BigInt! metrics: [{name: "food_order_amount"}, {name: "order_gross_profit"}] - groupBy: [{name: "metric_time, grain: "month"}, {name: "customer__customer_type"}] + groupBy: [{name: "metric_time, grain: MONTH}, {name: "customer__customer_type"}] ) { queryId } @@ -320,7 +320,7 @@ mutation { createQuery( environmentId: BigInt! metrics:[{name: "order_total"}] - groupBy:[{name: "customer__customer_type"}, {name: "metric_time", grain: "month"}] + groupBy:[{name: "customer__customer_type"}, {name: "metric_time", grain: MONTH}] where:[{sql: "{{ Dimension('customer__customer_type') }} = 'new'"}, {sql:"{{ Dimension('metric_time').grain('month') }} > '2022-10-01'"}] ) { queryId @@ -335,8 +335,8 @@ mutation { createQuery( environmentId: BigInt! metrics: [{name: "order_total"}] - groupBy: [{name: "metric_time", grain: "month"}] - orderBy: [{metric: {name: "order_total"}}, {groupBy: {name: "metric_time", grain: "month"}, descending:true}] + groupBy: [{name: "metric_time", grain: MONTH}] + orderBy: [{metric: {name: "order_total"}}, {groupBy: {name: "metric_time", grain: MONTH}, descending:true}] ) { queryId } @@ -351,7 +351,7 @@ mutation { createQuery( environmentId: BigInt! metrics: [{name:"food_order_amount"}, {name: "order_gross_profit"}] - groupBy: [{name:"metric_time, grain: "month"}, {name: "customer__customer_type"}] + groupBy: [{name:"metric_time, grain: MONTH}, {name: "customer__customer_type"}] limit: 10 ) { queryId From b991e3a1b8f0ab500afb0e1276af06e612e10fb7 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Mon, 13 Nov 2023 18:17:14 +0000 Subject: [PATCH 225/305] Update dbt-support.md --- website/docs/docs/dbt-support.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/docs/docs/dbt-support.md b/website/docs/docs/dbt-support.md index b746e2cf661..283c8fd67a7 100644 --- a/website/docs/docs/dbt-support.md +++ b/website/docs/docs/dbt-support.md @@ -19,14 +19,14 @@ If you're developing on the command line (CLI) and have questions or need some h The global dbt Support team is available to dbt Cloud customers by email or in-product live chat: -- **Enterprise plans** — +- **Enterprise plans** - Have [priority access](#severity-level) - Options for custom support coverage hours - Receive implementation assistance - Dedicated account management - Security and legal review by dbt Labs -- -- **Developer and Team plans** — + +- **Developer and Team plans** - 24x5 support - No service level agreement included. If you are interested in adding one, [contact Sales](https://www.getdbt.com/pricing/) to ask about our Enterprise plan. From b55e329d832ea004db99914136bccda92d388857 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Mon, 13 Nov 2023 18:17:40 +0000 Subject: [PATCH 226/305] Update dbt-support.md --- website/docs/docs/dbt-support.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/docs/docs/dbt-support.md b/website/docs/docs/dbt-support.md index 283c8fd67a7..746d9b81e74 100644 --- a/website/docs/docs/dbt-support.md +++ b/website/docs/docs/dbt-support.md @@ -39,14 +39,14 @@ Types of dbt Cloud-related questions our Support team can assist you with, regar - set up a dbt Cloud project? - set up a private package in dbt Cloud? - configure custom branches on git repos? - - link dbt to a new github account? + - link dbt to a new GitHub account? - **Help! I can't...** - log in. - access logs. - update user groups. - **I need help understanding...** - why this run failed. - - why I am getting this error message in dbt Cloud. + - why I am getting this error message in dbt Cloud? - why my CI jobs are not kicking off as expected. @@ -77,7 +77,7 @@ For help writing SQL, reviewing the overall performance of your project, or want ### Severity level -Enterprise support tickets are assigned a severity level based on the impact of the issue to your business. The severity level determines the priority level of support you will receive. For specific ticket response times, Support does not have access to an Enterprise account's service level agreement (SLA). Please contact your legal team for a copy of your contract. +Enterprise support tickets are assigned a severity level based on the impact of the issue on your business. The severity level determines the priority level of support you will receive. For specific ticket response times, Support does not have access to an Enterprise account's service level agreement (SLA). Please contact your legal team for a copy of your contract. | Severity Level | Description | From 6f98fdf2396795f3bf99430890623eca3621e807 Mon Sep 17 00:00:00 2001 From: Matt Shaver <60105315+matthewshaver@users.noreply.github.com> Date: Mon, 13 Nov 2023 13:30:01 -0500 Subject: [PATCH 227/305] Additional change --- website/docs/docs/dbt-cloud-apis/sl-graphql.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/dbt-cloud-apis/sl-graphql.md b/website/docs/docs/dbt-cloud-apis/sl-graphql.md index 71ad175c11c..f73007c9a02 100644 --- a/website/docs/docs/dbt-cloud-apis/sl-graphql.md +++ b/website/docs/docs/dbt-cloud-apis/sl-graphql.md @@ -368,7 +368,7 @@ mutation { compileSql( environmentId: BigInt! metrics: [{name:"food_order_amount"} {name:"order_gross_profit"}] - groupBy: [{name:"metric_time, grain:"month"}, {name:"customer__customer_type"}] + groupBy: [{name:"metric_time, grain: MONTH}, {name:"customer__customer_type"}] ) { sql } From 4803b09a208f56862c309d2d1d49f594f5038d23 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Mon, 13 Nov 2023 18:30:39 +0000 Subject: [PATCH 228/305] Update website/docs/docs/dbt-support.md --- website/docs/docs/dbt-support.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/dbt-support.md b/website/docs/docs/dbt-support.md index 746d9b81e74..38d56fe7464 100644 --- a/website/docs/docs/dbt-support.md +++ b/website/docs/docs/dbt-support.md @@ -7,7 +7,7 @@ pagination_prev: null Support for dbt is available to all users through the following channels: -- Dedicated dbt Support team (For dbt Cloud users). +- Dedicated dbt Support team (dbt Cloud users). - [The Community Forum](https://discourse.getdbt.com/). - [dbt Community slack](https://www.getdbt.com/community/join-the-community/). From c1be1ec66e2713c50c79e78f3e572f06f4f33336 Mon Sep 17 00:00:00 2001 From: Matt Shaver <60105315+matthewshaver@users.noreply.github.com> Date: Mon, 13 Nov 2023 13:45:47 -0500 Subject: [PATCH 229/305] Fixing generic examples on group page --- .../docs/reference/resource-configs/group.md | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/website/docs/reference/resource-configs/group.md b/website/docs/reference/resource-configs/group.md index bce2a72136e..df4d5ab8e3b 100644 --- a/website/docs/reference/resource-configs/group.md +++ b/website/docs/reference/resource-configs/group.md @@ -35,8 +35,8 @@ Support for grouping models was added in dbt Core v1.5 version: 2 models: - - name: model_name - group: finance + - name: MODEL_NAME + group: GROUP_NAME ``` @@ -46,7 +46,7 @@ models: ```yml models: [](resource-path): - +group: finance + +group: GROUP_NAME ``` @@ -57,7 +57,7 @@ models: ```sql {{ config( - group='finance' + group='GROUP_NAME' ) }} select ... @@ -85,7 +85,7 @@ Support for grouping seeds was added in dbt Core v1.5 ```yml models: [](resource-path): - +group: finance + +group: GROUP_NAME ``` @@ -94,8 +94,8 @@ models: ```yml seeds: - - name: [] - group: finance + - name: [SEED_NAME] + group: GROUP_NAME ``` @@ -120,7 +120,7 @@ Support for grouping snapshots was added in dbt Core v1.5 ```yml snapshots: [](resource-path): - +group: finance + +group: GROUP_NAME ``` @@ -131,7 +131,7 @@ snapshots: {% snapshot [snapshot_name](snapshot_name) %} {{ config( - group='finance' + group='GROUP_NAME' ) }} select ... @@ -161,7 +161,7 @@ Support for grouping tests was added in dbt Core v1.5 ```yml tests: [](resource-path): - +group: finance + +group: GROUP_NAME ``` @@ -176,7 +176,7 @@ version: 2 tests: - : config: - group: finance + group: GROUP_NAME ``` @@ -187,7 +187,7 @@ version: 2 {% test () %} {{ config( - group='finance' + group='GROUP_NAME' ) }} select ... @@ -202,7 +202,7 @@ select ... ```sql {{ config( - group='finance' + group='GROUP_NAME' ) }} ``` @@ -220,8 +220,8 @@ select ... version: 2 analyses: - - name: - group: finance + - name: ANALYSIS_NAME + group: GROUP_NAME ``` @@ -244,7 +244,7 @@ Support for grouping metrics was added in dbt Core v1.5 ```yaml metrics: [](resource-path): - [+](plus-prefix)group: finance + [+](plus-prefix)group: GROUP_NAME ``` @@ -255,8 +255,8 @@ metrics: version: 2 metrics: - - name: [] - group: finance + - name: [METRIC_NAME] + group: GROUP_NAME ``` @@ -281,8 +281,8 @@ Support for grouping semantic models has been added in dbt Core v1.7. ```yaml semantic_models: - - name: - group: + - name: SEMANTIC_MODEL_NAME + group: GROUP_NAME ``` @@ -293,7 +293,7 @@ semantic_models: ```yaml semantic-models: [](resource-path): - [+](plus-prefix)group: + [+](plus-prefix)group: GROUP_NAME ``` From 5d55661685b61b6e0f638f4dd1b6c6354ef043ef Mon Sep 17 00:00:00 2001 From: Matt Shaver <60105315+matthewshaver@users.noreply.github.com> Date: Mon, 13 Nov 2023 14:29:48 -0500 Subject: [PATCH 230/305] Updating order of examples --- .../reference/resource-configs/enabled.md | 48 +++++++++---------- .../docs/reference/resource-configs/group.md | 36 +++++++------- 2 files changed, 42 insertions(+), 42 deletions(-) diff --git a/website/docs/reference/resource-configs/enabled.md b/website/docs/reference/resource-configs/enabled.md index d146f229494..552777c5c81 100644 --- a/website/docs/reference/resource-configs/enabled.md +++ b/website/docs/reference/resource-configs/enabled.md @@ -20,6 +20,17 @@ default_value: true }> + + +```yml +models: + [](/reference/resource-configs/resource-path): + +enabled: true | false + +``` + + + ```sql @@ -35,10 +46,15 @@ select ... + + + + + ```yml -models: +seeds: [](/reference/resource-configs/resource-path): +enabled: true | false @@ -48,13 +64,12 @@ models: - - + ```yml -seeds: +snapshots: [](/reference/resource-configs/resource-path): +enabled: true | false @@ -62,10 +77,6 @@ seeds: - - - - ```sql @@ -83,10 +94,14 @@ select ... + + + + ```yml -snapshots: +tests: [](/reference/resource-configs/resource-path): +enabled: true | false @@ -94,10 +109,6 @@ snapshots: - - - - ```sql @@ -125,17 +136,6 @@ select ... - - -```yml -tests: - [](/reference/resource-configs/resource-path): - +enabled: true | false - -``` - - - diff --git a/website/docs/reference/resource-configs/group.md b/website/docs/reference/resource-configs/group.md index bce2a72136e..a096feb0eef 100644 --- a/website/docs/reference/resource-configs/group.md +++ b/website/docs/reference/resource-configs/group.md @@ -29,27 +29,27 @@ Support for grouping models was added in dbt Core v1.5 - + ```yml -version: 2 - models: - - name: model_name - group: finance + [](resource-path): + +group: finance ``` + - + ```yml +version: 2 + models: - [](resource-path): - +group: finance + - name: model_name + group: finance ``` - @@ -277,23 +277,23 @@ Support for grouping semantic models has been added in dbt Core v1.7. - + ```yaml -semantic_models: - - name: - group: - +semantic-models: + [](resource-path): + [+](plus-prefix)group: GROUP_NAME ``` - + ```yaml -semantic-models: - [](resource-path): - [+](plus-prefix)group: +semantic_models: + - name: SEMANTIC_MODEL_NAME + group: GROUP_NAME + ``` From 7ff60bd12d588aee53cb29a146147311533084ba Mon Sep 17 00:00:00 2001 From: Matt Shaver <60105315+matthewshaver@users.noreply.github.com> Date: Mon, 13 Nov 2023 16:26:59 -0500 Subject: [PATCH 231/305] Removing Future Release Dates --- website/snippets/core-versions-table.md | 8 -------- 1 file changed, 8 deletions(-) diff --git a/website/snippets/core-versions-table.md b/website/snippets/core-versions-table.md index 71e11974a56..f1241d8301b 100644 --- a/website/snippets/core-versions-table.md +++ b/website/snippets/core-versions-table.md @@ -12,11 +12,3 @@ | [**v1.0**](/docs/dbt-versions/core-upgrade/upgrading-to-v1.0) ⚠️ | Dec 3, 2021 | Deprecated ⛔️ | Deprecated ⛔️ | | **v0.X** ⛔️ | (Various dates) | Deprecated ⛔️ | Deprecated ⛔️ | _*All versions of dbt Core since v1.0 are available in dbt Cloud until further notice. Versions that are EOL do not receive any fixes. For the best support, we recommend upgrading to a version released within the past 12 months._ -### Planned future releases - -_Future release dates are tentative and subject to change._ - -| dbt Core | Planned Release | Critical & dbt Cloud Support Until | -|----------|-----------------|-------------------------------------| -| **v1.8** | _Jan 2024_ | _Jan 2025_ | -| **v1.9** | _Apr 2024_ | _Apr 2025_ | From af6e2d1ed53375a818063fc5f46b33208aba200b Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Mon, 13 Nov 2023 13:50:03 -0800 Subject: [PATCH 232/305] Adding mesh guide redirects (#4458) ## What are you changing in this pull request and why? I missed the mesh guides redirects when working on the quickstarts project. It was published after I ran the script for the URLs affected by the changes. --- website/vercel.json | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/website/vercel.json b/website/vercel.json index 7b240c35553..269ae29116d 100644 --- a/website/vercel.json +++ b/website/vercel.json @@ -22,6 +22,21 @@ "destination": "/guides/debug-errors", "permanent": true }, + { + "source": "/guides/best-practices/how-we-mesh/mesh-1-intro", + "destination": "/best-practices/how-we-mesh/mesh-1-intro", + "permanent": true + }, + { + "source": "/guides/best-practices/how-we-mesh/mesh-2-structures", + "destination": "/best-practices/how-we-mesh/mesh-2-structures", + "permanent": true + }, + { + "source": "/guides/best-practices/how-we-mesh/mesh-3-implementation", + "destination": "/best-practices/how-we-mesh/mesh-3-implementation", + "permanent": true + }, { "source": "/guides/best-practices/how-we-build-our-metrics/semantic-layer-1-intro", "destination": "/best-practices/how-we-build-our-metrics/semantic-layer-1-intro", @@ -434,7 +449,7 @@ }, { "source": "/guides/orchestration/set-up-ci/lint-on-push", - "destination": "/guides/set-up-ci", + "destination": " /guides/set-up-ci", "permanent": true }, { From 4c6ff0efae43111464b1ab4991f7e194f501ff58 Mon Sep 17 00:00:00 2001 From: Matt Shaver <60105315+matthewshaver@users.noreply.github.com> Date: Mon, 13 Nov 2023 19:08:33 -0500 Subject: [PATCH 233/305] Updating run results Schema to v5 --- website/docs/reference/artifacts/run-results-json.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/reference/artifacts/run-results-json.md b/website/docs/reference/artifacts/run-results-json.md index dd92a9c4e53..5b3549db55b 100644 --- a/website/docs/reference/artifacts/run-results-json.md +++ b/website/docs/reference/artifacts/run-results-json.md @@ -3,7 +3,7 @@ title: "Run results JSON file" sidebar_label: "Run results" --- -**Current schema**: [`v4`](https://schemas.getdbt.com/dbt/run-results/v4/index.html) +**Current schema**: [`v5`](https://schemas.getdbt.com/dbt/run-results/v5/index.html) **Produced by:** [`build`](/reference/commands/build) From 5d70a1ab3b5258889c07497c3eabfc7710ca8ee6 Mon Sep 17 00:00:00 2001 From: Matt Shaver <60105315+matthewshaver@users.noreply.github.com> Date: Mon, 13 Nov 2023 19:11:52 -0500 Subject: [PATCH 234/305] Adding enteprise availability to multicell --- website/docs/docs/cloud/about-cloud/regions-ip-addresses.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/cloud/about-cloud/regions-ip-addresses.md b/website/docs/docs/cloud/about-cloud/regions-ip-addresses.md index 64743f85afa..cc1c2531f56 100644 --- a/website/docs/docs/cloud/about-cloud/regions-ip-addresses.md +++ b/website/docs/docs/cloud/about-cloud/regions-ip-addresses.md @@ -12,7 +12,7 @@ dbt Cloud is [hosted](/docs/cloud/about-cloud/architecture) in multiple regions | Region | Location | Access URL | IP addresses | Developer plan | Team plan | Enterprise plan | |--------|----------|------------|--------------|----------------|-----------|-----------------| | North America multi-tenant [^1] | AWS us-east-1 (N. Virginia) | cloud.getdbt.com | 52.45.144.63
    54.81.134.249
    52.22.161.231 | ✅ | ✅ | ✅ | -| North America Cell 1 [^1] | AWS us-east-1 (N.Virginia) | {account prefix}.us1.dbt.com | [Located in Account Settings](#locating-your-dbt-cloud-ip-addresses) | ❌ | ❌ | ❌ | +| North America Cell 1 [^1] | AWS us-east-1 (N.Virginia) | {account prefix}.us1.dbt.com | [Located in Account Settings](#locating-your-dbt-cloud-ip-addresses) | ❌ | ❌ | ✅ | | EMEA [^1] | AWS eu-central-1 (Frankfurt) | emea.dbt.com | 3.123.45.39
    3.126.140.248
    3.72.153.148 | ❌ | ❌ | ✅ | | APAC [^1] | AWS ap-southeast-2 (Sydney)| au.dbt.com | 52.65.89.235
    3.106.40.33
    13.239.155.206
    | ❌ | ❌ | ✅ | | Virtual Private dbt or Single tenant | Customized | Customized | Ask [Support](/community/resources/getting-help#dbt-cloud-support) for your IPs | ❌ | ❌ | ✅ | From b348f8fea9d9a5becff03155b7a3a164d4ebe9ba Mon Sep 17 00:00:00 2001 From: rpourzand Date: Mon, 13 Nov 2023 16:25:33 -0800 Subject: [PATCH 235/305] Update tableau.md Adding information about Tableau Server - needs review by Diego --- .../docs/use-dbt-semantic-layer/tableau.md | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/website/docs/docs/use-dbt-semantic-layer/tableau.md b/website/docs/docs/use-dbt-semantic-layer/tableau.md index 8e6d7d8ed27..ab5a91273a7 100644 --- a/website/docs/docs/use-dbt-semantic-layer/tableau.md +++ b/website/docs/docs/use-dbt-semantic-layer/tableau.md @@ -12,30 +12,33 @@ The Tableau integration with the dbt Semantic Layer is a [beta feature](/docs/db The Tableau integration allows you to use worksheets to query the Semantic Layer directly and produce your dashboards with trusted data. -This integration provides a live connection to the dbt Semantic Layer through Tableau Desktop. +This integration provides a live connection to the dbt Semantic Layer through Tableau Desktop or Tableau Server. ## Prerequisites - You have [configured the dbt Semantic Layer](/docs/use-dbt-semantic-layer/setup-sl) and are using dbt v1.6 or higher. -- You must have [Tableau Desktop](https://www.tableau.com/en-gb/products/desktop) installed with version 2021.1 or greater - - Note that Tableau Online does not currently support custom connectors natively. -- Log in to Tableau Desktop using either your license or the login details you use for Tableau Server or Tableau Online. +- You must have [Tableau Desktop](https://www.tableau.com/en-gb/products/desktop) version 2021.1 and greater or Tableau Server. + - Note that Tableau Online does not currently support custom connectors natively. If you use Tableau Online, you will only be able to access the connector in Tableau Desktop. +- Log in to Tableau Desktop (with Online or Server credentials) or a license to Tableau Server - You need your dbt Cloud host, [Environment ID](/docs/use-dbt-semantic-layer/setup-sl#set-up-dbt-semantic-layer) and [service token](/docs/dbt-cloud-apis/service-tokens) to log in. This account should be set up with the dbt Semantic Layer. - You must have a dbt Cloud Team or Enterprise [account](https://www.getdbt.com/pricing) and multi-tenant [deployment](/docs/cloud/about-cloud/regions-ip-addresses). (Single-Tenant coming soon) -## Installing +## Installing the Connector 1. Download the GitHub [connector file](https://github.com/dbt-labs/semantic-layer-tableau-connector/releases/download/v1.0.2/dbt_semantic_layer.taco) locally and add it to your default folder: - - Windows: `C:\Users\\[Windows User]\Documents\My Tableau Repository\Connectors` - - Mac: `/Users/[user]/Documents/My Tableau Repository/Connectors` - - Linux: `/opt/tableau/connectors` + +|Tableau Desktop|Tableau Server| +|Windows|`C:\Users\\[Windows User]\Documents\My Tableau Repository\Connectors`|`C:\Program Files\Tableau\Connectors`| +|Mac|`/Users/[user]/Documents/My Tableau Repository/Connectors`|n/a| +|Linux|`/opt/tableau/connectors`| `/opt/tableau/connectors`| + 2. Install the [JDBC driver](/docs/dbt-cloud-apis/sl-jdbc) to the folder based on your operating system: - Windows: `C:\Program Files\Tableau\Drivers` - Mac: `~/Library/Tableau/Drivers` - Linux: ` /opt/tableau/tableau_driver/jdbc` 3. Open Tableau Desktop and find the **dbt Semantic Layer by dbt Labs** connector on the left-hand side. -4. Connect with your Host, Environment ID, and service token information that's provided to you in your dbt Cloud Semantic Layer configuration. +4. Connect with your Host, Environment ID, and ServiceTtoken information that's provided to you in your dbt Cloud Semantic Layer configuration. In Tableau Server, the authentication screen may show "User" & "Password" instead, in which case the User is the Environment ID and the password is the Service Token. ## Using the integration @@ -47,6 +50,11 @@ Once you authenticate, the system will direct you to the data source page with a Visit the [Tableau documentation](https://help.tableau.com/current/pro/desktop/en-us/gettingstarted_overview.htm) to learn more about how to use Tableau worksheets and dashboards. +**Publishing from Tableau Desktop to Tableau Server** + +Like any Tableau workflow, you can publish your workbook from Tableau Desktop to Tableau Server. Follow [these](https://help.tableau.com/current/pro/desktop/en-us/publish_workbooks_share.htm) instructions on Tableau's documentation site. + + ## Things to note - All metrics use the "SUM" aggregation type, and this can't be altered. The dbt Semantic Layer controls the aggregation type and it is intentionally fixed. Keep in mind that the underlying aggregation in the dbt Semantic Layer might not be "SUM" (even though "SUM" is Tableau's default). From 27b09c58335985c3e717e3543db64747b72d773a Mon Sep 17 00:00:00 2001 From: rpourzand Date: Mon, 13 Nov 2023 16:27:11 -0800 Subject: [PATCH 236/305] Update tableau.md fixing table --- website/docs/docs/use-dbt-semantic-layer/tableau.md | 1 + 1 file changed, 1 insertion(+) diff --git a/website/docs/docs/use-dbt-semantic-layer/tableau.md b/website/docs/docs/use-dbt-semantic-layer/tableau.md index ab5a91273a7..dd30bb131a2 100644 --- a/website/docs/docs/use-dbt-semantic-layer/tableau.md +++ b/website/docs/docs/use-dbt-semantic-layer/tableau.md @@ -29,6 +29,7 @@ This integration provides a live connection to the dbt Semantic Layer through Ta 1. Download the GitHub [connector file](https://github.com/dbt-labs/semantic-layer-tableau-connector/releases/download/v1.0.2/dbt_semantic_layer.taco) locally and add it to your default folder: |Tableau Desktop|Tableau Server| +-------------------------------- |Windows|`C:\Users\\[Windows User]\Documents\My Tableau Repository\Connectors`|`C:\Program Files\Tableau\Connectors`| |Mac|`/Users/[user]/Documents/My Tableau Repository/Connectors`|n/a| |Linux|`/opt/tableau/connectors`| `/opt/tableau/connectors`| From c05a7e8faa7b95ee8d4dc238ef0f6c4d9866cf71 Mon Sep 17 00:00:00 2001 From: rpourzand Date: Mon, 13 Nov 2023 16:28:21 -0800 Subject: [PATCH 237/305] Update tableau.md fixing table again --- website/docs/docs/use-dbt-semantic-layer/tableau.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/use-dbt-semantic-layer/tableau.md b/website/docs/docs/use-dbt-semantic-layer/tableau.md index dd30bb131a2..326a728de56 100644 --- a/website/docs/docs/use-dbt-semantic-layer/tableau.md +++ b/website/docs/docs/use-dbt-semantic-layer/tableau.md @@ -28,7 +28,7 @@ This integration provides a live connection to the dbt Semantic Layer through Ta 1. Download the GitHub [connector file](https://github.com/dbt-labs/semantic-layer-tableau-connector/releases/download/v1.0.2/dbt_semantic_layer.taco) locally and add it to your default folder: -|Tableau Desktop|Tableau Server| +|OS|Tableau Desktop|Tableau Server| -------------------------------- |Windows|`C:\Users\\[Windows User]\Documents\My Tableau Repository\Connectors`|`C:\Program Files\Tableau\Connectors`| |Mac|`/Users/[user]/Documents/My Tableau Repository/Connectors`|n/a| From ea34e272b06d1df8311d3ff6c7d7ca0ee61a6fd5 Mon Sep 17 00:00:00 2001 From: rpourzand Date: Mon, 13 Nov 2023 16:29:18 -0800 Subject: [PATCH 238/305] Update tableau.md one more try on the table fix --- website/docs/docs/use-dbt-semantic-layer/tableau.md | 1 - 1 file changed, 1 deletion(-) diff --git a/website/docs/docs/use-dbt-semantic-layer/tableau.md b/website/docs/docs/use-dbt-semantic-layer/tableau.md index 326a728de56..ed3f18b64c5 100644 --- a/website/docs/docs/use-dbt-semantic-layer/tableau.md +++ b/website/docs/docs/use-dbt-semantic-layer/tableau.md @@ -29,7 +29,6 @@ This integration provides a live connection to the dbt Semantic Layer through Ta 1. Download the GitHub [connector file](https://github.com/dbt-labs/semantic-layer-tableau-connector/releases/download/v1.0.2/dbt_semantic_layer.taco) locally and add it to your default folder: |OS|Tableau Desktop|Tableau Server| --------------------------------- |Windows|`C:\Users\\[Windows User]\Documents\My Tableau Repository\Connectors`|`C:\Program Files\Tableau\Connectors`| |Mac|`/Users/[user]/Documents/My Tableau Repository/Connectors`|n/a| |Linux|`/opt/tableau/connectors`| `/opt/tableau/connectors`| From de708ade38dbf7458505fe8e461251376a146228 Mon Sep 17 00:00:00 2001 From: rpourzand Date: Mon, 13 Nov 2023 16:37:01 -0800 Subject: [PATCH 239/305] Update tableau.md adding note about initial SQL --- website/docs/docs/use-dbt-semantic-layer/tableau.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/use-dbt-semantic-layer/tableau.md b/website/docs/docs/use-dbt-semantic-layer/tableau.md index ed3f18b64c5..cf92433294c 100644 --- a/website/docs/docs/use-dbt-semantic-layer/tableau.md +++ b/website/docs/docs/use-dbt-semantic-layer/tableau.md @@ -72,7 +72,7 @@ The following Tableau features aren't supported at this time, however, the dbt S - Updating the data source page - Using "Extract" mode to view your data - Unioning Tables -- Writing Custom SQL +- Writing Custom SQL / Initial SQL - Table Extensions - Cross Database Joins - All functions in Analysis --> Create Calculated Field From 62f130ac0c79fbef5f033ab5dbfe3e062cacb9d0 Mon Sep 17 00:00:00 2001 From: Joel Labes Date: Tue, 14 Nov 2023 13:43:53 +1300 Subject: [PATCH 240/305] Create devblog for environment differentiation (#4407) ## What are you changing in this pull request and why? Adds a new developer blog article explaining the importance of splitting out your production and CI environments if you haven't already, to take advantage of dbt Explorer and the improved Slim CI experience. --- .../2023-11-14-specify-prod-environment.md | 73 ++ website/blog/categories.yml | 2 + .../data-landscape.excalidraw | 1008 +++++++++++++++++ .../data-landscape.png | Bin 0 -> 889660 bytes 4 files changed, 1083 insertions(+) create mode 100644 website/blog/2023-11-14-specify-prod-environment.md create mode 100644 website/static/img/blog/2023-11-06-differentiate-prod-and-staging-environments/data-landscape.excalidraw create mode 100644 website/static/img/blog/2023-11-06-differentiate-prod-and-staging-environments/data-landscape.png diff --git a/website/blog/2023-11-14-specify-prod-environment.md b/website/blog/2023-11-14-specify-prod-environment.md new file mode 100644 index 00000000000..c6ad2b31027 --- /dev/null +++ b/website/blog/2023-11-14-specify-prod-environment.md @@ -0,0 +1,73 @@ +--- + +title: Why you should specify a production environment in dbt Cloud +description: "The bottom line: You should split your Environments in dbt Cloud based on their purposes (e.g. Production and Staging/CI) and mark one environment as Production. This will improve your CI experience and enable you to use dbt Explorer." +slug: specify-prod-environment + +authors: [joel_labes] + +tags: [dbt Cloud] +hide_table_of_contents: false + +date: 2023-11-14 +is_featured: false + +--- + +:::tip The Bottom Line: +You should [split your Jobs](#how) across Environments in dbt Cloud based on their purposes (e.g. Production and Staging/CI) and set one environment as Production. This will improve your CI experience and enable you to use dbt Explorer. +::: + +[Environmental segmentation](/docs/environments-in-dbt) has always been an important part of the analytics engineering workflow: + +- When developing new models you can [process a smaller subset of your data](/reference/dbt-jinja-functions/target#use-targetname-to-limit-data-in-dev) by using `target.name` or an environment variable. +- By building your production-grade models into [a different schema and database](https://docs.getdbt.com/docs/build/custom-schemas#managing-environments), you can experiment in peace without being worried that your changes will accidentally impact downstream users. +- Using dedicated credentials for production runs, instead of an analytics engineer's individual dev credentials, ensures that things don't break when that long-tenured employee finally hangs up their IDE. + +Historically, dbt Cloud required a separate environment for _Development_, but was otherwise unopinionated in how you configured your account. This mostly just worked – as long as you didn't have anything more complex than a CI job mixed in with a couple of production jobs – because important constructs like deferral in CI and documentation were only ever tied to a single job. + +But as companies' dbt deployments have grown more complex, it doesn't make sense to assume that a single job is enough anymore. We need to exchange a job-oriented strategy for a more mature and scalable environment-centric view of the world. To support this, a recent change in dbt Cloud enables project administrators to [mark one of their environments as the Production environment](/docs/deploy/deploy-environments#set-as-production-environment-beta), just as has long been possible for the Development environment. + +Explicitly separating your Production workloads lets dbt Cloud be smarter with the metadata it creates, and is particularly important for two new features: dbt Explorer and the revised CI workflows. + + + +## Make sure dbt Explorer always has the freshest information available + +**The old way**: Your dbt docs site was based on a single job's run. + +**The new way**: dbt Explorer uses metadata from across every invocation in a defined Production environment to build the richest and most up-to-date understanding of your project. + +Because dbt docs could only be updated by a single predetermined job, users who needed their documentation to immediately reflect changes deployed throughout the day (regardless of which job executed them) would find themselves forced to run a dedicated job which did nothing other than run `dbt docs generate` on a regular schedule. + +The Discovery API that powers dbt Explorer ingests all metadata generated by any dbt invocation, which means that it can always be up to date with the applied state of your project. However it doesn't make sense for dbt Explorer to show docs based on a PR that hasn't been merged yet. + +To avoid this conflation, you need to mark an environment as the Production environment. All runs completed in _that_ environment will contribute to dbt Explorer's, while others will be excluded. (Future versions of Explorer will support environment selection, so that you can preview your documentation changes as well.) + +## Run Slimmer CI than ever with environment-level deferral + +**The old way**: [Slim CI](/guides/set-up-ci?step=2) deferred to a single job, and would only detect changes as of that job's last build time. + +**The new way**: Changes are detected regardless of the job they were deployed in, removing false positives and overbuilding of models in CI. + +Just like dbt docs, relying on a single job to define your state for comparison purposes leads to a choice between unnecessarily rebuilding models which were deployed by another job, or creating a dedicated job that runs `dbt compile` on repeat to keep on top of all changes. + +By using the environment as the arbiter of state, any time a change is made to your Production deployment it will immediately be taken into consideration by subsequent Slim CI runs. + +## The easiest way to break apart your jobs {#how} + + + +For most projects, changing from a job-centric to environment-centric approach to metadata is straightforward and immediately pays dividends as described above. Assuming that your Staging/CI and Production jobs are currently intermingled, you can extricate them as follows: + +1. Create a new dbt Cloud environment called Staging +2. For each job that belongs to the Staging environment, edit the job and update its environment +3. Tick the ["Mark as Production environment" box](/docs/deploy/deploy-environments#set-as-production-environment-beta) in your original environment's settings + +## Conclusion + +Until very recently, I only thought of Environments in dbt Cloud as a way to use different authentication credentials in different contexts. And until very recently, I was mostly right. + +Not anymore. The metadata dbt creates is critical for effective data teams – whether you're concerned about cost savings, discoverability, increased development speed or reliable results across your organization – but is only fully effective if it's segmented by the environment that created it. + +Take a few minutes to clean up your environments - it'll make all the difference. diff --git a/website/blog/categories.yml b/website/blog/categories.yml index 8103f58cc33..45acf246dff 100644 --- a/website/blog/categories.yml +++ b/website/blog/categories.yml @@ -19,3 +19,5 @@ display_title: SQL magic description: Stories of dbt developers making SQL sing across warehouses. is_featured: true +- name: dbt Cloud + description: Using dbt Cloud to build for scale \ No newline at end of file diff --git a/website/static/img/blog/2023-11-06-differentiate-prod-and-staging-environments/data-landscape.excalidraw b/website/static/img/blog/2023-11-06-differentiate-prod-and-staging-environments/data-landscape.excalidraw new file mode 100644 index 00000000000..be8a0923345 --- /dev/null +++ b/website/static/img/blog/2023-11-06-differentiate-prod-and-staging-environments/data-landscape.excalidraw @@ -0,0 +1,1008 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw.com", + "elements": [ + { + "type": "rectangle", + "version": 129, + "versionNonce": 1482751856, + "isDeleted": false, + "id": "Udy5rK-Jz8k0Fq4imQCvd", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 341.8627251519098, + "y": 39.92541164822043, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 2156.810506184896, + "height": 1036.2360975477432, + "seed": 1146131484, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1699413163923, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 93, + "versionNonce": 432336784, + "isDeleted": false, + "id": "yFoHv_ZLVYq5DdwJxTXrQ", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 393.7163289388021, + "y": 248.74700927734375, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 142.6879425048828, + "height": 70, + "seed": 1947174180, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1699413163923, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 1, + "text": "Data \nWarehouse", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Data \nWarehouse", + "lineHeight": 1.25, + "baseline": 60 + }, + { + "type": "text", + "version": 147, + "versionNonce": 82809200, + "isDeleted": false, + "id": "18XKDb5pYJYJQPYEshmg4", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 411.73432668050134, + "y": 485.4708455403644, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 106.65194702148438, + "height": 35, + "seed": 574631460, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1699413163923, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 1, + "text": "git repo", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "git repo", + "lineHeight": 1.25, + "baseline": 25 + }, + { + "type": "text", + "version": 72, + "versionNonce": 815824272, + "isDeleted": false, + "id": "5eUI6A7oSEvd69NrXYNoc", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 398.70032246907556, + "y": 803.185655381944, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 132.71995544433594, + "height": 35, + "seed": 1782580380, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1699413163923, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 1, + "text": "dbt Cloud", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "dbt Cloud", + "lineHeight": 1.25, + "baseline": 25 + }, + { + "type": "rectangle", + "version": 138, + "versionNonce": 98296688, + "isDeleted": false, + "id": "L_y_veh-MeHyKFX1eH_jc", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 625.8938259548611, + "y": 154.95136854383676, + "strokeColor": "#f08c00", + "backgroundColor": "transparent", + "width": 506.8489583333335, + "height": 875.4567464192709, + "seed": 89476252, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1699413163923, + "link": null, + "locked": false + }, + { + "type": "rectangle", + "version": 353, + "versionNonce": 1088048016, + "isDeleted": false, + "id": "cXSP5cBcW7nCrji0UWwUB", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 1247.2498236762153, + "y": 154.95136854383676, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "width": 506.8489583333335, + "height": 875.4567464192709, + "seed": 303420452, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1699413163924, + "link": null, + "locked": false + }, + { + "type": "rectangle", + "version": 211, + "versionNonce": 158201200, + "isDeleted": false, + "id": "Zx2HStRZKGZ9rinR0kE5E", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 1868.892550998264, + "y": 155.0846964518229, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "width": 506.8489583333335, + "height": 875.4567464192709, + "seed": 650869924, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1699413163924, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 91, + "versionNonce": 78272912, + "isDeleted": false, + "id": "epO5kSyuGRV5wTUD-s9zZ", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 853.561743842231, + "y": 97.15853542751734, + "strokeColor": "#f08c00", + "backgroundColor": "transparent", + "width": 51.79998779296875, + "height": 35, + "seed": 2015553052, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1699413163924, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 1, + "text": "Dev", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Dev", + "lineHeight": 1.25, + "baseline": 25 + }, + { + "type": "text", + "version": 209, + "versionNonce": 887998320, + "isDeleted": false, + "id": "fT31nBE0B8HbloZlX-nDt", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 1484.1716715494792, + "y": 97.15853542751734, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "width": 33.2919921875, + "height": 35, + "seed": 549760924, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1699413163924, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 1, + "text": "CI", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "CI", + "lineHeight": 1.25, + "baseline": 25 + }, + { + "type": "text", + "version": 184, + "versionNonce": 793290640, + "isDeleted": false, + "id": "eTKqHyL2wEJwRjyzONlcj", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 2091.321043226454, + "y": 97.15853542751734, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "width": 61.991973876953125, + "height": 35, + "seed": 1462334492, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1699413163924, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 1, + "text": "Prod", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Prod", + "lineHeight": 1.25, + "baseline": 25 + }, + { + "type": "rectangle", + "version": 96, + "versionNonce": 1151555952, + "isDeleted": false, + "id": "VhROTjE1abDd9ZOeAMg-U", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 689.6759711371528, + "y": 201.00466579861114, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 376.7974175347222, + "height": 165.48468695746527, + "seed": 2047365540, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1699413163924, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 141, + "versionNonce": 1290614160, + "isDeleted": false, + "id": "k5MJxECeWuQJb8SwV3oVW", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 721.2427775065105, + "y": 248.74700927734375, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 313.3758544921875, + "height": 70, + "seed": 1555453724, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1699413163924, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 1, + "text": "Dev DB\n(user-specific schemas)", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Dev DB\n(user-specific schemas)", + "lineHeight": 1.25, + "baseline": 60 + }, + { + "type": "rectangle", + "version": 184, + "versionNonce": 36425616, + "isDeleted": false, + "id": "BO6Wxrm4rZ1QDt8vBFRFl", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1293.0316162109375, + "y": 201.0046657986111, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 376.7974175347222, + "height": 165.48468695746527, + "seed": 334336668, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1699413166096, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 284, + "versionNonce": 621357968, + "isDeleted": false, + "id": "Xavgjps0qvZVKUHlsPVna", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1317.1822781032986, + "y": 248.74700927734375, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 330.65185546875, + "height": 70, + "seed": 1180229404, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1699413169453, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 1, + "text": "QA DB\n(temporary PR schemas)", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "QA DB\n(temporary PR schemas)", + "lineHeight": 1.25, + "baseline": 60 + }, + { + "type": "rectangle", + "version": 284, + "versionNonce": 886029680, + "isDeleted": false, + "id": "oDdg4x6QABrYXglaDBIHt", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1926.055840386285, + "y": 201.0046657986111, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 376.7974175347222, + "height": 165.48468695746527, + "seed": 576422428, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1699413163924, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 376, + "versionNonce": 254349712, + "isDeleted": false, + "id": "iTxeg4gQp5KRDrzokIgmt", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1973.012624104818, + "y": 248.74700927734375, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 282.88385009765625, + "height": 70, + "seed": 1079828124, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1699413163924, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 1, + "text": "Prod DB\n(production schemas)", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Prod DB\n(production schemas)", + "lineHeight": 1.25, + "baseline": 60 + }, + { + "type": "text", + "version": 139, + "versionNonce": 550932336, + "isDeleted": false, + "id": "HQeJiZeuOVrvP9ru2C-78", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 689.5203925238716, + "y": 467.98152669270837, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 379.5958251953125, + "height": 70, + "seed": 508113948, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1699413163924, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 1, + "text": "branches:\nfeature branches from main", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "branches:\nfeature branches from main", + "lineHeight": 1.25, + "baseline": 60 + }, + { + "type": "text", + "version": 125, + "versionNonce": 1764777872, + "isDeleted": false, + "id": "M7ejyx8utxANmCPivcWvL", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1370.0543535020618, + "y": 485.48152669270837, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 261.2398986816406, + "height": 35, + "seed": 558908580, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1699413163924, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 1, + "text": "PRs targeting main", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "PRs targeting main", + "lineHeight": 1.25, + "baseline": 25 + }, + { + "type": "text", + "version": 27, + "versionNonce": 1211310448, + "isDeleted": false, + "id": "QmOKeCjEaTMIfbw46sNFl", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 2041.1730711195205, + "y": 485.48152669270837, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 162.2879180908203, + "height": 35, + "seed": 672916900, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1699413163924, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 1, + "text": "branch: main", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "branch: main", + "lineHeight": 1.25, + "baseline": 25 + }, + { + "type": "rectangle", + "version": 355, + "versionNonce": 1629351312, + "isDeleted": false, + "id": "L8G-_VdBlPmtNgQKn0G2x", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 649.1752794053821, + "y": 426.521769205729, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 1692.284138997396, + "height": 153.18637424045136, + "seed": 1687815964, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1699413163924, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 110, + "versionNonce": 976057200, + "isDeleted": false, + "id": "rUcnW6bo9uKCXl1tVfZXO", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 668.4320305718317, + "y": 397.55624728732636, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 89.83990478515625, + "height": 25, + "seed": 1724197028, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1699413163924, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "dbt_repo", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "dbt_repo", + "lineHeight": 1.25, + "baseline": 18 + }, + { + "type": "rectangle", + "version": 552, + "versionNonce": 1613347728, + "isDeleted": false, + "id": "1L7lF8fe7tHoTO95AB_6Z", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 649.1752794053821, + "y": 666.7112833658852, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 1704.8221164279514, + "height": 306.15851508246516, + "seed": 147107236, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1699413163924, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 290, + "versionNonce": 1561167216, + "isDeleted": false, + "id": "br8j-OyjfCajGYHkvT2_0", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 668.4320305718317, + "y": 635.5079413519964, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 176.5398406982422, + "height": 25, + "seed": 1051154724, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1699413163924, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "dbt Cloud Project", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "dbt Cloud Project", + "lineHeight": 1.25, + "baseline": 18 + }, + { + "type": "rectangle", + "version": 84, + "versionNonce": 1753991568, + "isDeleted": false, + "id": "HaZZKdXMOfsniJsylOZZA", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 698.8494194878472, + "y": 706.6618109809027, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 365.6057400173611, + "height": 232.40898980034729, + "seed": 1118957596, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1699413163924, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 144, + "versionNonce": 236672880, + "isDeleted": false, + "id": "GVw8HsZ3jf_eN3qat8EnV", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 752.6179436577692, + "y": 726.0786539713541, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 256.78790283203125, + "height": 175, + "seed": 36319388, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1699413163924, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 1, + "text": "Env Name:\nDevelopment (IDE)\n\nJobs:\nnone", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Env Name:\nDevelopment (IDE)\n\nJobs:\nnone", + "lineHeight": 1.25, + "baseline": 165 + }, + { + "type": "rectangle", + "version": 306, + "versionNonce": 1971066768, + "isDeleted": false, + "id": "25b7C18GbdjocbHu7mNFv", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 1272.3475477430557, + "y": 697.7114122178818, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 456.6535101996529, + "height": 232.40898980034729, + "seed": 503421476, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1699413163924, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 321, + "versionNonce": 1100933488, + "isDeleted": false, + "id": "YGODDCDk9jIVk8fCbxC-f", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 1290.6323869493274, + "y": 726.2222222222222, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 420.0838317871094, + "height": 175, + "seed": 1720890788, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1699413163924, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 1, + "text": "Env Name:\nCI\n\nJobs:\nSlim CI: feature branch > main", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Env Name:\nCI\n\nJobs:\nSlim CI: feature branch > main", + "lineHeight": 1.25, + "baseline": 165 + }, + { + "type": "rectangle", + "version": 246, + "versionNonce": 1530045840, + "isDeleted": false, + "id": "--xRdulSAOVkraMLOgPcU", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 1904.9254014756943, + "y": 697.5177951388889, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 434.7832573784722, + "height": 232.40898980034729, + "seed": 807301284, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1699413163924, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 287, + "versionNonce": 585120624, + "isDeleted": false, + "id": "7C0I5zrwwMb_rw70yiGVh", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 2022.917074415419, + "y": 726.3555501302083, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 198.79991149902344, + "height": 175, + "seed": 2077277220, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1699413163924, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 1, + "text": "Env Name:\nProducation\n\nJobs:\nScheduled jobs", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Env Name:\nProducation\n\nJobs:\nScheduled jobs", + "lineHeight": 1.25, + "baseline": 165 + }, + { + "type": "text", + "version": 43, + "versionNonce": 652702608, + "isDeleted": false, + "id": "0vfDvWeVlJv5WnFpmnAXX", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 1139.5400729709202, + "y": -17.269870334201613, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 561.455810546875, + "height": 45, + "seed": 2048509604, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1699413163924, + "link": null, + "locked": false, + "fontSize": 36, + "fontFamily": 1, + "text": "Organization's Data Landscape", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Organization's Data Landscape", + "lineHeight": 1.25, + "baseline": 32 + } + ], + "appState": { + "gridSize": null, + "viewBackgroundColor": "#ffffff" + }, + "files": {} +} \ No newline at end of file diff --git a/website/static/img/blog/2023-11-06-differentiate-prod-and-staging-environments/data-landscape.png b/website/static/img/blog/2023-11-06-differentiate-prod-and-staging-environments/data-landscape.png new file mode 100644 index 0000000000000000000000000000000000000000..71f94531fcf972946210d6ec78428a290375118c GIT binary patch literal 889660 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 nZAtLB1+*}MV=KeUJhK7S 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

    Configuring {frontMatter.meta.pypi_package}

    From 47cb1dc3b1709a77d45b1f43c8113f9c91dbf50b Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Tue, 14 Nov 2023 10:57:45 +0000 Subject: [PATCH 243/305] legal feedback --- website/docs/docs/dbt-support.md | 75 +++++++++++++++++--------------- 1 file changed, 41 insertions(+), 34 deletions(-) diff --git a/website/docs/docs/dbt-support.md b/website/docs/docs/dbt-support.md index 38d56fe7464..a558121326f 100644 --- a/website/docs/docs/dbt-support.md +++ b/website/docs/docs/dbt-support.md @@ -17,42 +17,50 @@ If you're developing on the command line (CLI) and have questions or need some h ## dbt Cloud support -The global dbt Support team is available to dbt Cloud customers by email or in-product live chat: - +The global dbt Support team is available to dbt Cloud customers by email or in-product live chat. We want to help you work through implementing and utilizing dbt Cloud at your organization. Have a question you can't find an answer to in [our docs](https://docs.getdbt.com/) or [the Community Forum](https://discourse.getdbt.com/)? Our Support team is here to `dbt help` you! + +- **Enterprise plans** — Priority [support](#severity-level-for-enterprise-support), options for custom support coverage hours, implementation assistance, dedicated management, and dbt Labs security reviews depending on price point. +- **Developer and Team plans** — 24x5 support (no service level agreement (SLA); [contact Sales](https://www.getdbt.com/pricing/) for Enterprise plan inquiries). +- **Support team help** — Assistance with dbt Cloud questions, like project setup, login issues, error understanding, setup private packages, link to a new GitHub account, and so on. +- **Resource guide** — Check the [guide](/community/resources/getting-help) for effective help-seeking strategies. + +
    +Example of common support questions +Types of dbt Cloud-related questions our Support team can assist you with, regardless of your dbt Cloud plan:

    +How do I...
    + - set up a dbt Cloud project?
    + - set up a private package in dbt Cloud?
    + - configure custom branches on git repos?
    + - link dbt to a new GitHub account?

    +Help! I can't...
    + - log in.
    + - access logs.
    + - update user groups.

    +I need help understanding...
    + - why this run failed.
    + - why I am getting this error message in dbt Cloud?
    + - why my CI jobs are not kicking off as expected.
    +
    + + ## dbt Cloud Enterprise accounts -For customers on a dbt Cloud Enterprise plan, we **also** offer basic assistance in troubleshooting issues with your dbt project. +Basic assistance with dbt project troubleshooting. +Help with errors and issues in macros, models, and dbt Labs' packages. +For strategic advice, expansion, and project setup, consult Solutions Architect and Sales Director. + +For customers on a dbt Cloud Enterprise plan, we **also** offer basic assistance in troubleshooting issues with your dbt project: - **Something isn't working the way I would expect it to...** - in a macro I created... - in an incremental model I'm building... @@ -70,15 +78,9 @@ Types of questions you should ask your Solutions Architect and Sales Director: - Here is our data road map for the next year - can we talk through how dbt fits into it and what features we may not be utilizing that can help us achieve our goals? - It is time for our contract renewal, what options do I have? +### Severity level for Enterprise support -For help writing SQL, reviewing the overall performance of your project, or want someone to actually help build your dbt project, refer to the following pages: -- List of [dbt Preferred Consulting Providers](https://www.getdbt.com/ecosystem/). -- dbt Labs' [Services](https://www.getdbt.com/dbt-labs/services/). - -### Severity level - -Enterprise support tickets are assigned a severity level based on the impact of the issue on your business. The severity level determines the priority level of support you will receive. For specific ticket response times, Support does not have access to an Enterprise account's service level agreement (SLA). Please contact your legal team for a copy of your contract. - +Support tickets are assigned a severity level based on the impact of the issue on your business. The severity level is assigned by dbt Labs at its sole discretion, and determines the priority level of support you will receive. For specific ticket response time or other questions that relate to your Enterprise account’s SLA, please refer to your Enterprise contract. | Severity Level | Description | | -------------- | ----------- | @@ -87,4 +89,9 @@ Enterprise support tickets are assigned a severity level based on the impact of | Severity Level 3 | Feature failure, but a workaround exists. | | Severity Level 4 | Error with low-to-no impact on Client’s access to or use of the Subscription, or Client has a general question or feature enhancement request. | +## External help +For SQL writing, project performance review, or project building, refer to dbt Preferred Consulting Providers and dbt Labs' Services. +For help writing SQL, reviewing the overall performance of your project, or want someone to actually help build your dbt project, refer to the following pages: +- List of [dbt Preferred Consulting Providers](https://www.getdbt.com/ecosystem/). +- dbt Labs' [Services](https://www.getdbt.com/dbt-labs/services/). From c4a368d48bfae9be1aa97f865f55349925ab150e Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Tue, 14 Nov 2023 11:00:48 +0000 Subject: [PATCH 244/305] Update tableau.md --- website/docs/docs/use-dbt-semantic-layer/tableau.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docs/docs/use-dbt-semantic-layer/tableau.md b/website/docs/docs/use-dbt-semantic-layer/tableau.md index cf92433294c..919493ac775 100644 --- a/website/docs/docs/use-dbt-semantic-layer/tableau.md +++ b/website/docs/docs/use-dbt-semantic-layer/tableau.md @@ -38,7 +38,7 @@ This integration provides a live connection to the dbt Semantic Layer through Ta - Mac: `~/Library/Tableau/Drivers` - Linux: ` /opt/tableau/tableau_driver/jdbc` 3. Open Tableau Desktop and find the **dbt Semantic Layer by dbt Labs** connector on the left-hand side. -4. Connect with your Host, Environment ID, and ServiceTtoken information that's provided to you in your dbt Cloud Semantic Layer configuration. In Tableau Server, the authentication screen may show "User" & "Password" instead, in which case the User is the Environment ID and the password is the Service Token. +4. Connect with your Host, Environment ID, and Service Token information that's provided to you in your dbt Cloud Semantic Layer configuration. In Tableau Server, the authentication screen may show "User" & "Password" instead, in which case the User is the Environment ID and the password is the Service Token. ## Using the integration @@ -74,7 +74,7 @@ The following Tableau features aren't supported at this time, however, the dbt S - Unioning Tables - Writing Custom SQL / Initial SQL - Table Extensions -- Cross Database Joins +- Cross-Database Joins - All functions in Analysis --> Create Calculated Field - Filtering on a Date Part time dimension for a Cumulative metric type - Changing your date dimension to use "Week Number" From 5d951f54f85c14d7b1616674afd016a12e2b87e8 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Tue, 14 Nov 2023 12:02:21 +0000 Subject: [PATCH 245/305] fix table and turn bold into h3 --- .../docs/use-dbt-semantic-layer/tableau.md | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/website/docs/docs/use-dbt-semantic-layer/tableau.md b/website/docs/docs/use-dbt-semantic-layer/tableau.md index 919493ac775..1edb469e825 100644 --- a/website/docs/docs/use-dbt-semantic-layer/tableau.md +++ b/website/docs/docs/use-dbt-semantic-layer/tableau.md @@ -28,31 +28,32 @@ This integration provides a live connection to the dbt Semantic Layer through Ta 1. Download the GitHub [connector file](https://github.com/dbt-labs/semantic-layer-tableau-connector/releases/download/v1.0.2/dbt_semantic_layer.taco) locally and add it to your default folder: -|OS|Tableau Desktop|Tableau Server| -|Windows|`C:\Users\\[Windows User]\Documents\My Tableau Repository\Connectors`|`C:\Program Files\Tableau\Connectors`| -|Mac|`/Users/[user]/Documents/My Tableau Repository/Connectors`|n/a| -|Linux|`/opt/tableau/connectors`| `/opt/tableau/connectors`| +| Operating system |Tableau Desktop | Tableau Server | +| ---------------- | -------------- | -------------- | +| Windows | `C:\Users\\[Windows User]\Documents\My Tableau Repository\Connectors` | `C:\Program Files\Tableau\Connectors` | +| Mac | `/Users/[user]/Documents/My Tableau Repository/Connectors` | Not applicable | +| Linux | `/opt/tableau/connectors` | `/opt/tableau/connectors` | -2. Install the [JDBC driver](/docs/dbt-cloud-apis/sl-jdbc) to the folder based on your operating system: +1. Install the [JDBC driver](/docs/dbt-cloud-apis/sl-jdbc) to the folder based on your operating system: - Windows: `C:\Program Files\Tableau\Drivers` - Mac: `~/Library/Tableau/Drivers` - Linux: ` /opt/tableau/tableau_driver/jdbc` -3. Open Tableau Desktop and find the **dbt Semantic Layer by dbt Labs** connector on the left-hand side. -4. Connect with your Host, Environment ID, and Service Token information that's provided to you in your dbt Cloud Semantic Layer configuration. In Tableau Server, the authentication screen may show "User" & "Password" instead, in which case the User is the Environment ID and the password is the Service Token. +2. Open Tableau Desktop and find the **dbt Semantic Layer by dbt Labs** connector on the left-hand side. +3. Connect with your Host, Environment ID, and Service Token information dbt Cloud provides during [Semantic Layer configuration](/docs/use-dbt-semantic-layer/setup-sl#:~:text=After%20saving%20it%2C%20you%27ll%20be%20provided%20with%20the%20connection%20information%20that%20allows%20you%20to%20connect%20to%20downstream%20tools). + - In Tableau Server, the authentication screen may show "User" & "Password" instead, in which case the User is the Environment ID and the password is the Service Token. ## Using the integration -Once you authenticate, the system will direct you to the data source page with all the metrics and dimensions configured in your Semantic Layer. - -- From there, go directly to a worksheet in the bottom left-hand corner. -- Then, you'll find all the metrics and dimensions that are available to query on the left-hand side of your window. +1. **Authentication** — Once you authenticate, the system will direct you to the data source page with all the metrics and dimensions configured in your dbt Semantic Layer. +2. **Access worksheet** — From there, go directly to a worksheet in the bottom left-hand corner. +3. **Access metrics and dimensions** — Then, you'll find all the metrics and dimensions that are available to query on the left side of your window. Visit the [Tableau documentation](https://help.tableau.com/current/pro/desktop/en-us/gettingstarted_overview.htm) to learn more about how to use Tableau worksheets and dashboards. -**Publishing from Tableau Desktop to Tableau Server** +### Publish from Tableau Desktop to Tableau Server -Like any Tableau workflow, you can publish your workbook from Tableau Desktop to Tableau Server. Follow [these](https://help.tableau.com/current/pro/desktop/en-us/publish_workbooks_share.htm) instructions on Tableau's documentation site. +- **From Desktop to Server** — Like any Tableau workflow, you can publish your workbook from Tableau Desktop to Tableau Server. For step-by-step instructions, visit Tableau's [publishing guide](https://help.tableau.com/current/pro/desktop/en-us/publish_workbooks_share.htm). ## Things to note From 7e2771691852c679e83a4bff3137b9073569162b Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Tue, 14 Nov 2023 12:16:38 +0000 Subject: [PATCH 246/305] Update tableau.md --- website/docs/docs/use-dbt-semantic-layer/tableau.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/docs/docs/use-dbt-semantic-layer/tableau.md b/website/docs/docs/use-dbt-semantic-layer/tableau.md index 1edb469e825..01024b0e1ad 100644 --- a/website/docs/docs/use-dbt-semantic-layer/tableau.md +++ b/website/docs/docs/use-dbt-semantic-layer/tableau.md @@ -34,12 +34,12 @@ This integration provides a live connection to the dbt Semantic Layer through Ta | Mac | `/Users/[user]/Documents/My Tableau Repository/Connectors` | Not applicable | | Linux | `/opt/tableau/connectors` | `/opt/tableau/connectors` | -1. Install the [JDBC driver](/docs/dbt-cloud-apis/sl-jdbc) to the folder based on your operating system: +2. Install the [JDBC driver](/docs/dbt-cloud-apis/sl-jdbc) to the folder based on your operating system: - Windows: `C:\Program Files\Tableau\Drivers` - Mac: `~/Library/Tableau/Drivers` - Linux: ` /opt/tableau/tableau_driver/jdbc` -2. Open Tableau Desktop and find the **dbt Semantic Layer by dbt Labs** connector on the left-hand side. -3. Connect with your Host, Environment ID, and Service Token information dbt Cloud provides during [Semantic Layer configuration](/docs/use-dbt-semantic-layer/setup-sl#:~:text=After%20saving%20it%2C%20you%27ll%20be%20provided%20with%20the%20connection%20information%20that%20allows%20you%20to%20connect%20to%20downstream%20tools). +3. Open Tableau Desktop and find the **dbt Semantic Layer by dbt Labs** connector on the left-hand side. +4. Connect with your Host, Environment ID, and Service Token information dbt Cloud provides during [Semantic Layer configuration](/docs/use-dbt-semantic-layer/setup-sl#:~:text=After%20saving%20it%2C%20you%27ll%20be%20provided%20with%20the%20connection%20information%20that%20allows%20you%20to%20connect%20to%20downstream%20tools). - In Tableau Server, the authentication screen may show "User" & "Password" instead, in which case the User is the Environment ID and the password is the Service Token. From 1894b42cacd3a49366eaea3681fec2bf89ac1a49 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Tue, 14 Nov 2023 14:21:10 +0000 Subject: [PATCH 247/305] tweak from legal --- website/docs/docs/dbt-support.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/dbt-support.md b/website/docs/docs/dbt-support.md index a558121326f..40968b9d763 100644 --- a/website/docs/docs/dbt-support.md +++ b/website/docs/docs/dbt-support.md @@ -80,7 +80,7 @@ Types of questions you should ask your Solutions Architect and Sales Director: ### Severity level for Enterprise support -Support tickets are assigned a severity level based on the impact of the issue on your business. The severity level is assigned by dbt Labs at its sole discretion, and determines the priority level of support you will receive. For specific ticket response time or other questions that relate to your Enterprise account’s SLA, please refer to your Enterprise contract. +Support tickets are assigned a severity level based on the impact of the issue on your business. The severity level is assigned by dbt Labs, and the level assigned determines the priority level of support you will receive. For specific ticket response time or other questions that relate to your Enterprise account’s SLA, please refer to your Enterprise contract. | Severity Level | Description | | -------------- | ----------- | From bb966338c4385bca981682ccfd0402299bc9a03f Mon Sep 17 00:00:00 2001 From: richardgourley Date: Tue, 14 Nov 2023 17:06:45 +0100 Subject: [PATCH 248/305] Fixed small typo in Data warehouse vs data lake section. --- website/docs/terms/data-warehouse.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/terms/data-warehouse.md b/website/docs/terms/data-warehouse.md index 2c64fbaa7b7..cf6f5de3d20 100644 --- a/website/docs/terms/data-warehouse.md +++ b/website/docs/terms/data-warehouse.md @@ -75,7 +75,7 @@ Because all of your data is located in the same place, it allows for faster repo ## Data warehouse vs data lake -A data lake is a system where you store, process, and query unstructured, semi-structured, and structured data at almost any scale. The main difference between a data warehouse and a data lake is the type and way data is stored. Data warehouses contain structured data that is meant to organize data for analytics use. Data lakes can contain pretty much any kind of data—structured or unstructured—and data is usually left it its raw format until it's ready to use. Compare that to data warehouses, whose primary goal is to be a place for data teams to store both raw and transformed, usable data. +A data lake is a system where you store, process, and query unstructured, semi-structured, and structured data at almost any scale. The main difference between a data warehouse and a data lake is the type and way data is stored. Data warehouses contain structured data that is meant to organize data for analytics use. Data lakes can contain pretty much any kind of data—structured or unstructured—and data is usually left in its raw format until it's ready to use. Compare that to data warehouses, whose primary goal is to be a place for data teams to store both raw and transformed, usable data. ## Conclusion From 11999a617807023dbee31119753edcf7c372952e Mon Sep 17 00:00:00 2001 From: amada-ech <94760092+amada-ech@users.noreply.github.com> Date: Tue, 14 Nov 2023 11:43:41 -0500 Subject: [PATCH 249/305] Create sydney-burns.md Adding Sydney Burns to Spotlight Q4 --- .../docs/community/spotlight/sydney-burns.md | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 website/docs/community/spotlight/sydney-burns.md diff --git a/website/docs/community/spotlight/sydney-burns.md b/website/docs/community/spotlight/sydney-burns.md new file mode 100644 index 00000000000..3e3e8bc87b5 --- /dev/null +++ b/website/docs/community/spotlight/sydney-burns.md @@ -0,0 +1,34 @@ +--- +id: sydney-burns +title: Sydney Burns +description: | + In 2019, I started as an analytics intern at a healthcare tech startup. I learned about dbt in 2020 and joined the community to self-teach. The following year, I started using dbt professionally as a consultant, and was able to pick up various parts of the stack and dive into different implementations. That experience empowered me to strike a better balance between "best practices" and what suits a specific team best. I also spoke at Coalesce 2022, a highlight of my career! + + Now, I collaborate with other data professionals at Webflow, where focused on enhancing and scaling our data operations. I strive to share the same enthusiasm, support, and knowledge with my team that I've gained from the broader community! +image: /img/community/spotlight/sydney.jpg +pronouns: she/her +location: Panama City, FL, USA +jobTitle: Senior Analytics Engineer +companyName: Webflow +socialLinks: + - name: LinkedIn + link: https://www.linkedin.com/in/sydneyeburns/ +dateCreated: 2023-11-05 +hide_table_of_contents: true +--- + +## When did you join the dbt community and in what way has it impacted your career? + +The stack I used in my first data role was outdated and highly manual. Where I live, modern tech companies are few and far between, and I didn't have many in-person resources nor enough knowledge to realize that another world was possible at my skill level. I was thrilled to find a pocket of the Internet where similarly frustrated but creative data folks were sharing thoughtful solutions to problems I'd been struggling with! + +## What dbt community leader do you identify with? How are you looking to grow your leadership in the dbt community? + +Christine Berger was my first ever (best ever!) data colleague, and the one who first introduced me to dbt. + +There are certain qualities I've always valued in her, that I've found in many others across the community, and strive to cultivate in myself — earnestness, curiosity, creativity, and consistently doing good work with deep care. + +## What have you learned from community members? What do you hope others can learn from you? + +I spent too much time in my early career feeling scared to ask for help because I didn't want others to think I was incompetent. I'd spin my wheels on something for hours before finally asking someone to help me. + +The community has proven one thing to me time and time again: there are people here who will not only help you, but will be palpably *excited* to help you and share what they know, especially if it's clear you've made efforts to use your resources and try things on your own first. I'm one of those people now! From a408f46715a6d4bf74b6547b81fef299369772df Mon Sep 17 00:00:00 2001 From: amada-ech <94760092+amada-ech@users.noreply.github.com> Date: Tue, 14 Nov 2023 12:34:54 -0500 Subject: [PATCH 250/305] Create oliver-cramer.md Adding Oliver --- .../img/community/spotlight/oliver-cramer.md | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 website/static/img/community/spotlight/oliver-cramer.md diff --git a/website/static/img/community/spotlight/oliver-cramer.md b/website/static/img/community/spotlight/oliver-cramer.md new file mode 100644 index 00000000000..d0d9fd7eb23 --- /dev/null +++ b/website/static/img/community/spotlight/oliver-cramer.md @@ -0,0 +1,33 @@ +--- +id: oliver-cramer +title: Oliver Cramer +description: | + When I joined Aquila Capital in early 2022, I had the ModernDataStack with SqlDBM, dbt & Snowflake available. During the first half year I joined the dbt community. I have been working in the business intelligence field for many years. In 2006 I founded the first TDWI Roudtable in the DACH region.I often speak at conferences, such as the Snowflake Summit and the German TDWI conference. Currently I have a group looking at the Data Vault dbt packages. The German Data Vault User Group (DDVUG) has published a sample database to test Data Warehouse Automation tools, I addition I founded the Analytics Engineering Northern Germany Meetup Group, which will transition into an official dbt Meetup, the Northern Germany dbt Meetup. +image: /img/community/spotlight/name.jpg +pronouns: he/him +location: Celle, Germany +jobTitle: Lead Data Warehouse Architect +companyName: Aquila Capital +organization: TDWI Germany +socialLinks: + - name: LinkedIn + link: https://www.linkedin.com/in/oliver-cramer/ +dateCreated: 2023-11-06 +hide_table_of_contents: true +--- + +## When did you join the dbt community and in what way has it impacted your career? + +I joined the dbt community in 2022. My current focus is on building modern data teams. There is no magic formula for structuring your analytics function. Given the pace of technological change in our industry, the structure of a data team must evolve over time. + +## What dbt community leader do you identify with? How are you looking to grow your leadership in the dbt community? + +I like working with dbt Labs' Sean McIntyre to promote Data Vault in Europe and Victoria Mola, also from dbt Labs, is always a great help when I have questions about dbt. + +## What have you learned from community members? What do you hope others can learn from you? + +I just think it's good to have a community, to be able to ask questions and get good answers. + +## Anything else interesting you want to tell us? + +content here From f9638018ef325cbf5447be4acdba176391afee59 Mon Sep 17 00:00:00 2001 From: amada-ech <94760092+amada-ech@users.noreply.github.com> Date: Tue, 14 Nov 2023 15:23:10 -0500 Subject: [PATCH 251/305] Create sam-debruyn.md sam's page --- .../img/community/spotlight/sam-debruyn.md | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 website/static/img/community/spotlight/sam-debruyn.md diff --git a/website/static/img/community/spotlight/sam-debruyn.md b/website/static/img/community/spotlight/sam-debruyn.md new file mode 100644 index 00000000000..f5fcff5045e --- /dev/null +++ b/website/static/img/community/spotlight/sam-debruyn.md @@ -0,0 +1,37 @@ +--- +id: sam-debruyn +title: Sam Debruyn +description: | + I have a background of about 10 years in software engineering and moved to data engineering in 2020. Today, I lead dataroots's data & cloud unit on a technical level, allowing me to share knowledge and help multiple teams and customers, while still being hands-on every day. In 2021 and 2022, I did a lot of work on dbt-core and the dbt adapters for Microsoft SQL Server, Azure SQL, Azure Synapse, and now also Microsoft Fabric. I spoke at a few meetups and conferences about dbt and other technologies which I'm passionate about. Sharing knowledge is what drives me, so in 2023 I founded the Belgium dbt Meetup. Every meetup reached its maximum capacity ever since. +image: /img/community/spotlight/sam.jpg +pronouns: he/him +location: Heist-op-den-Berg, Belgium +jobTitle: Tech Lead Data & Cloud +companyName: dataroots +organization: "" +socialLinks: + - name: Twitter + link: https://twitter.com/s_debruyn + - name: LinkedIn + link: https://www.linkedin.com/in/samueldebruyn/ + - name: Blog + link: https://debruyn.dev/ +dateCreated: 2023-11-07 +hide_table_of_contents: true +--- + +## When did you join the dbt community and in what way has it impacted your career? + +I joined the dbt community at the end of 2020, when we had dbt 0.18. At first, I was a bit suspicious. I thought to myself, how could a tool this simple make such a big difference? But after giving it a try, I was convinced: this is what we'll all be using for our data transformations in the future. dbt shines in its simplicity and very low learning curve. Thanks to dbt, a lot more people can become proficient in data analytics. I became a dbt evangelist, both at my job as well as in local and online data communities. I think that data holds the truth. And I think that the more people we can give access to work with data, so that they don't having to depend on others to work with complex tooling, the more we can achieve together. + +## What dbt community leader do you identify with? How are you looking to grow your leadership in the dbt community? + +It's hard to pick one person. There are lots of folks who inspired me along the way. There is Anders Swanson (known as dataders on Github), with whom I've spent countless hours discussing how we can bring two things I like together: dbt and the Microsoft SQL products. It's amazing to look back on what we achieved now that dbt Labs and Microsoft are working together to bring dbt support for Fabric and Synapse. There is also Jeremy Cohen (jerco) whose lengthy GitHub discussions bring inspiration to how you can do even more with dbt and what the future might hold. Cor Zuurmond (JCZuurmond) inspired me to start contributing to dbt-core, adapters, and related packages. He did an impressive amount of work by making dbt-spark even better, building pytest integration for dbt, and of course by bringing dbt to world's most used database: dbt-excel. + +## What have you learned from community members? What do you hope others can learn from you? + +dbt doesn't only shine when you're using it, but also under the hood. dbt's codebase is very approachable and consistently well written with code that is clean, elegant, and easy to understand. When you're thinking about a potential feature, a bugfix, or building integrations with dbt, just go to Slack or GitHub and see what you can do to make that happen. You can contribute by discussing potential features, adding documentation, writing code, and more. You don't need to be a Python expert to get started. + +## Anything else interesting you want to tell us? + +The dbt community is one of the biggest data communities globally, but also the most welcoming one. It's amazing how nice, friendly, and approachable everyone is. It's great to be part of this community. From 8a17c0282cf38d94de5b7f6dff453ff14410e8ef Mon Sep 17 00:00:00 2001 From: amada-ech <94760092+amada-ech@users.noreply.github.com> Date: Tue, 14 Nov 2023 15:23:46 -0500 Subject: [PATCH 252/305] Update oliver-cramer.md adding oliver's photo, i had forgotten to edit the "image" line 6 --- website/static/img/community/spotlight/oliver-cramer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/static/img/community/spotlight/oliver-cramer.md b/website/static/img/community/spotlight/oliver-cramer.md index d0d9fd7eb23..c23f462359c 100644 --- a/website/static/img/community/spotlight/oliver-cramer.md +++ b/website/static/img/community/spotlight/oliver-cramer.md @@ -3,7 +3,7 @@ id: oliver-cramer title: Oliver Cramer description: | When I joined Aquila Capital in early 2022, I had the ModernDataStack with SqlDBM, dbt & Snowflake available. During the first half year I joined the dbt community. I have been working in the business intelligence field for many years. In 2006 I founded the first TDWI Roudtable in the DACH region.I often speak at conferences, such as the Snowflake Summit and the German TDWI conference. Currently I have a group looking at the Data Vault dbt packages. The German Data Vault User Group (DDVUG) has published a sample database to test Data Warehouse Automation tools, I addition I founded the Analytics Engineering Northern Germany Meetup Group, which will transition into an official dbt Meetup, the Northern Germany dbt Meetup. -image: /img/community/spotlight/name.jpg +image: /img/community/spotlight/oliver.jpg pronouns: he/him location: Celle, Germany jobTitle: Lead Data Warehouse Architect From fc191d5dc875301266186a95fe58a8ed32907a69 Mon Sep 17 00:00:00 2001 From: amada-ech <94760092+amada-ech@users.noreply.github.com> Date: Tue, 14 Nov 2023 15:26:11 -0500 Subject: [PATCH 253/305] Update dakota-kelley.md removed excess "tabs" in description --- website/docs/community/spotlight/dakota-kelley.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docs/community/spotlight/dakota-kelley.md b/website/docs/community/spotlight/dakota-kelley.md index 76134e8fc31..eb34c154e2f 100644 --- a/website/docs/community/spotlight/dakota-kelley.md +++ b/website/docs/community/spotlight/dakota-kelley.md @@ -2,9 +2,9 @@ id: dakota-kelley title: Dakota Kelley description: | - For the last ~2 years I've worked at phData. Before that I spent 8 years working as a Software Developer in the public sector. Currently I'm a Solution Architect, helping our customers and clients implement dbt on Snowflake, working across multiple cloud providers. + For the last ~2 years I've worked at phData. Before that I spent 8 years working as a Software Developer in the public sector. Currently I'm a Solution Architect, helping our customers and clients implement dbt on Snowflake, working across multiple cloud providers. - I first started reading about dbt when I was in grad school about 3 years ago. When I began with phData I had a fantastic opportunity to work with dbt. From there I feel in love with the Engineering practices and structure that I always felt were missing from Data Work. Since then, I've been fortunate enough to speak at dbt Coalesce 2022 and I'm speaking again at dbt Coalesce 2023. On top of this, I've written numerous blogs about dbt as well. + I first started reading about dbt when I was in grad school about 3 years ago. When I began with phData I had a fantastic opportunity to work with dbt. From there I feel in love with the Engineering practices and structure that I always felt were missing from Data Work. Since then, I've been fortunate enough to speak at dbt Coalesce 2022 and I'm speaking again at dbt Coalesce 2023. On top of this, I've written numerous blogs about dbt as well. image: /img/community/spotlight/dakota.jpg pronouns: he/him location: Edmond, USA From 3f9863d54e0ced93fed6dc2f654c7ba9b811dd05 Mon Sep 17 00:00:00 2001 From: Thomas Lento Date: Tue, 14 Nov 2023 12:35:46 -0800 Subject: [PATCH 254/305] Update saved query documentation for MetricFlow release With the release of MetricFlow 0.203.0 and dbt-metricflow 0.4.0 we now have support for saved queries. This commit removes the "coming soon" marker and updates the spec to match the final release version. --- website/docs/docs/build/saved-queries.md | 25 ++++++++++-------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/website/docs/docs/build/saved-queries.md b/website/docs/docs/build/saved-queries.md index 39a4b2e52fd..a447fbb1a1a 100644 --- a/website/docs/docs/build/saved-queries.md +++ b/website/docs/docs/build/saved-queries.md @@ -6,10 +6,6 @@ sidebar_label: "Saved queries" tags: [Metrics, Semantic Layer] --- -:::info Saved queries coming soon -Saved queries isn't currently available in MetricFlow but support is coming soon. -::: - Saved queries are a way to save commonly used queries in MetricFlow. You can group metrics, dimensions, and filters that are logically related into a saved query. To define a saved query, refer to the following specification: @@ -18,9 +14,7 @@ To define a saved query, refer to the following specification: | --------- | ----------- | ---- | | `name` | The name of the metric. | Required | | `description` | The description of the metric. | Optional | -| `metrics` | The metrics included in the saved query. | Required | -| `group_bys` | The value displayed in downstream tools. | Required | -| `where` | Filter applied to the query. | Optional | +| `query_params` | The query parameters for the saved query: `metrics`, `group_by`, and `where`. | Required | The following is an example of a saved query: @@ -28,14 +22,15 @@ The following is an example of a saved query: saved_query: name: p0_booking description: Booking-related metrics that are of the highest priority. - metrics: - - bookings - - instant_bookings - group_bys: - - TimeDimension('metric_time', 'day') - - Dimension('listing__capacity_latest') - where: - - "{{ Dimension('listing__capacity_latest') }} > 3" + query_params: + metrics: + - bookings + - instant_bookings + group_bys: + - TimeDimension('metric_time', 'day') + - Dimension('listing__capacity_latest') + where: + - "{{ Dimension('listing__capacity_latest') }} > 3" ``` ### FAQs From 631d5deba35ac696dba23233506783739618b320 Mon Sep 17 00:00:00 2001 From: amada-ech <94760092+amada-ech@users.noreply.github.com> Date: Tue, 14 Nov 2023 15:40:55 -0500 Subject: [PATCH 255/305] Create stacy-lo.md stacy's entry --- .../img/community/spotlight/stacy-lo.md | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 website/static/img/community/spotlight/stacy-lo.md diff --git a/website/static/img/community/spotlight/stacy-lo.md b/website/static/img/community/spotlight/stacy-lo.md new file mode 100644 index 00000000000..064d5b8ff56 --- /dev/null +++ b/website/static/img/community/spotlight/stacy-lo.md @@ -0,0 +1,40 @@ +--- +id: stacy-lo +title: Stacy Lo +description: | + I began my career as a data analyst, then transitioned to a few different roles in data and software development. Analytics Engineer is the best title to describe my expertise in data. + + I’ve been in the dbt Community for almost a year. In April, I shared my experience adopting dbt at the Taipei dbt Meetup, which inspired me to write technical articles. + + In Taiwan, the annual "iThome Iron Man Contest" happens in September, where participants post a technical article written in Mandarin every day for 30 consecutive days. Since no one has ever written about dbt in the contest, I'd like to be the first person, and that’s what I have been busy with for in the past couple of months. +image: /img/community/spotlight/stacy.jpg +pronouns: she/her +location: Taipei, Taiwan +jobTitle: Senior IT Developer +companyName: Teamson +socialLinks: + - name: LinkedIn + link: https://www.linkedin.com/in/olycats/ +dateCreated: 2023-11-08 +hide_table_of_contents: true +--- + +## When did you join the dbt community and in what way has it impacted your career? + +I joined dbt Slack on November 2022. It was the time our company decided to use dbt in our data architecture, so I joined the #local-taipei channel in dbt Slack and introduced myself. To my surprise, I was immediately invited to share my experience at a Taipei dbt Meetup. I just joined the community, never joined any other meetups, did not know anyone there, and was very new to dbt. + +The biggest impact to my career is that I gained a lot of visibility! I got to know a lot of great data people, and now I have one meetup presentation recorded on YouTube, 30 technical articles on iThome Iron Man Contest, and now I am featured in the dbt Community Spotlight! + +## What dbt community leader do you identify with? How are you looking to grow your leadership in the dbt community? + +Karen Hsieh is the best! She not only brought me in to the dbt Community by way of the #local-taipei channel in dbt Slack, but she also encouraged me to contribute to the community in many ways, without making me feel pressured. With her passion and leading style, Karen successfully built a friendly and diverse group of people in #local-taipei. + +I’d also like to recommend Bruno de Lima's LinkedIn posts. His 'dbt Tips of the Day' effectively delivery knowledge in a user-friendly way. In addition, I really enjoyed the dbt exam practice polls. Learning dbt can be a challenge, but Bruno makes it both easy and fun! + +## What have you learned from community members? What do you hope others can learn from you? + +I learned that there are many ways to contribute to the community, regardless of our background or skill level. Everyone has something valuable to offer, and we should never be afraid to share. Let's find our own ways to make an impact! + +## Anything else interesting you want to tell us? + +Although the #local-taipei channel in dbt Slack is not made up of many, many people, we still managed to assemble a team of 7 people to join the Iron Man Contest. We produced a total of 200 articles in 30 days in topics around dbt and data. I don’t know how many people will find them useful, but it's definitely a great start to raising awareness of dbt in Taiwan. From 7f2920aefc60be3346e4bb1dc14213d9e38c217c Mon Sep 17 00:00:00 2001 From: amada-ech <94760092+amada-ech@users.noreply.github.com> Date: Tue, 14 Nov 2023 15:52:32 -0500 Subject: [PATCH 256/305] Create alison-stanton.md alison's page --- .../img/community/spotlight/alison-stanton.md | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 website/static/img/community/spotlight/alison-stanton.md diff --git a/website/static/img/community/spotlight/alison-stanton.md b/website/static/img/community/spotlight/alison-stanton.md new file mode 100644 index 00000000000..ae734dc05f2 --- /dev/null +++ b/website/static/img/community/spotlight/alison-stanton.md @@ -0,0 +1,89 @@ +--- +id: alison-stanton +title: Alison Stanton +description: | + I started programming 20+ years ago. I moved from web applications into transforming data and business intelligence reporting because it's both hard and useful. The majority of my career has been engineering for SaaS companies. For my last few positions I've been brought in to transition larger, older companies to a modern data platform and ways of thinking. + + I am dbt Certified. I attend Coalesce and other dbt events virtually. I speak up in dbt Slack and on the dbt-core, dbt-redshift, and dbt-sqlserver repositories. dbt Slack is my happy place, especially #advice-for-dbt-power-users. I care a lot about the dbt documentation and dbt doc. +image: /img/community/spotlight/alison.jpg +pronouns: she/her +location: Chicago, IL, USA +jobTitle: AVP, Analytics Engineering Lead +organization: Advocates for SOGIE Data Collection +socialLinks: + - name: LinkedIn + link: https://www.linkedin.com/in/alisonstanton/ + - name: Github + link: https://github.com/alison985/ +dateCreated: 2023-07-18 +hide_table_of_contents: true +--- + +## When did you join the dbt community and in what way has it impacted your career? + +I joined the dbt community when I joined an employer in mid-2020. To summarize the important things that dbt has given me: it allowed me to focus on the next set of data challenges instead of staying in toil. Data folks joke that we're plumbers, but we're digital plumbers and that distinction should enable us to be DRY. That means not only writing DRY code like dbt allows, but also having tooling automation to DRY up repetitive tasks like dbt provides. + +dbt's existence flipped the experience of data testing on it's head for me. I went from a)years of instigating tech discussions on how to systematize data quality checks and b) building my own SQL tests and design patterns, to having built-in mechanisms for data testing. + +dbt and the dbt community materials are assets I can use in order to provide validation for things I have, do, and will say about data. Having outside voices to point to when requesting investment in data up-front - to avoid problems later - is an under-appreciated tool for data leader's toolboxes. + +dbt's community has given me access to both a) high-quality, seasoned SMEs in my field to learn from and b) newer folks I can help. Both are gifts that I cherish. + +## What dbt community leader do you identify with? How are you looking to grow your leadership in the dbt community? + +I want to be when I grow up: + +MJ, who was the first person to ever say "data build tool" to me. If I'd listened to her then I could have been part of the dbt community years sooner. + +Christine Dixon who presented "Could You Defend Your Data in Court?" at Coalesce 2023. In your entire data career, that is the most important piece of education you'll get. + +The dbt community team in general. Hands-down the most important work they do is the dbt Slack community, which gives me and others the accessibility we need to participate. Gwen Windflower (Winnie) for her extraordinary ability to bridge technical nuance with business needs on-the-fly. Dave Connors for being the first voice for "a node is a node is a node". Joel Labes for creating the ability to emoji-react with :sparkles: to post to the #best-of-slack channel. And so on. The decision to foster a space for data instead of just for their product because that enhances their product. The extremely impressive ability to maintain a problem-solving-is-cool, participate-as-you-can, chorus-of-voices, international, not-only-cis-men, and we're-all-in-this-together community. + +Other (all?) dbt labs employees who engage with the community, instead of having a false separation with it - like most software companies. Welcoming feedback, listening to it, and actioning or filtering it out (ex. Mirna Wong, account reps). Thinking holistically about the eco-system not just one feature at a time (ex. Anders). Responsiveness and ability to translate diverse items into technical clarity and focused actions (ex. Doug Beatty, the dbt support team). I've been in software and open source and online communities for a long time - these are rare things we should not take for granted. + +Josh Devlin for prolificness that demonstrates expertise and dedication to helping. + +The maintainers of dbt packages like dbt-utils, dbt-expectations, dbt-date, etc. + +Everyone who gets over their fear to ask a question, propose an answer that may not work, or otherwise take a risk by sharing their voice. + +I hope I can support my employer and my professional development and my dbt community through the following: + +Elevate dbt understanding of and support for Enterprise-size company use cases through dialogue, requests, and examples. + +Emphasize rigor with defensive coding and comprehensive testing practices. + +Improve the onboarding and up-skilling of dbt engineers through feedback and edits on docs.getdbt.com. + +Contribute to the maintenance of a collaborative and helpful dbt community as the number of dbt practitioners reaches various growth stages and tipping points. + +Engage in dialogue. Providing feedback. Champion developer experience as a priority. Be a good open source citizen on Github. + +## What have you learned from community members? What do you hope others can learn from you? + +I have learned: + +Details on DAG sequencing. +How to make an engineering proposal a community conversation. +The dbt semantic layer +. +So many things that are now so engrained in me that I can't remember not knowing them. + +I can teach and share about: + +Naming new concepts and how to choose those names. +Reproducibility, reconciliation, and audits. +Data ethics. +Demographic questions for sexual orientation and/or gender identity on a form. I'm happy to be your shortcut to the most complicated data and most-engrained tech debt in history. +I also geek out talking about: reusing functionality in creative ways, balancing trade-offs in data schema modeling, dealing with all of an organization's data holistically, tracking instrumentation, and philosophy on prioritization. + +The next things on my agenda to learn about: + +Successes and failures in data literacy work. The best I've found so far is 1:1 interactions and that doesn't scale. +How to reduce the amount of time running dbt test takes while maintaining coverage. +Data ethics. +The things you think are most important by giving them a :sparkles: emoji reaction in Slack. + +## Anything else interesting you want to tell us? + +My gratitude to each community member for this community. From c2aacda657ab88a4aaff0c0f117a5ece0c3a61c4 Mon Sep 17 00:00:00 2001 From: amada-ech <94760092+amada-ech@users.noreply.github.com> Date: Tue, 14 Nov 2023 15:53:36 -0500 Subject: [PATCH 257/305] Update stacy-lo.md fixing link to Bruno's name so it opens in new tab --- website/static/img/community/spotlight/stacy-lo.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/static/img/community/spotlight/stacy-lo.md b/website/static/img/community/spotlight/stacy-lo.md index 064d5b8ff56..eb063152c1c 100644 --- a/website/static/img/community/spotlight/stacy-lo.md +++ b/website/static/img/community/spotlight/stacy-lo.md @@ -29,7 +29,7 @@ The biggest impact to my career is that I gained a lot of visibility! I got to k Karen Hsieh is the best! She not only brought me in to the dbt Community by way of the #local-taipei channel in dbt Slack, but she also encouraged me to contribute to the community in many ways, without making me feel pressured. With her passion and leading style, Karen successfully built a friendly and diverse group of people in #local-taipei. -I’d also like to recommend Bruno de Lima's LinkedIn posts. His 'dbt Tips of the Day' effectively delivery knowledge in a user-friendly way. In addition, I really enjoyed the dbt exam practice polls. Learning dbt can be a challenge, but Bruno makes it both easy and fun! +I’d also like to recommend Date: Tue, 14 Nov 2023 16:07:34 -0500 Subject: [PATCH 259/305] Update bruno-de-lima.md fixes meetup link --- website/docs/community/spotlight/bruno-de-lima.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/community/spotlight/bruno-de-lima.md b/website/docs/community/spotlight/bruno-de-lima.md index 79f91503c2a..2ef3c48c0c6 100644 --- a/website/docs/community/spotlight/bruno-de-lima.md +++ b/website/docs/community/spotlight/bruno-de-lima.md @@ -6,7 +6,7 @@ description: | Started my career at the beginning of 2022 at Indicium as an Analytics Engineer, working with dbt from day 1. By 2023, my path took a global trajectory as I joined phData as a Data Engineer, expanding my experiences and forging connections beyond Brazil. While dbt is at the heart of my expertise, I've also delved into data warehouses such as Snowflake, Databricks, and BigQuery; visualization tools like Power BI and Tableau; and several minor modern data stack tools. - I actively participate in the dbt community, having attended two dbt meetups in Brazil organized by Indicium; writing about dbt-related topics in my Medium and LinkedIn profiles; contributing to the code; and frequently checking dbt Slack and Discourse, helping (and being helped by) other dbt practitioners. If you are a community member, you may have seen me around! + I actively participate in the dbt community, having attended two dbt meetups in Brazil organized by Indicium; writing about dbt-related topics in my Medium and LinkedIn profiles; contributing to the code; and frequently checking dbt Slack and Discourse, helping (and being helped by) other dbt practitioners. If you are a community member, you may have seen me around! image: /img/community/spotlight/bruno-de-lima.jpg pronouns: he/him location: Florianópolis, Brazil From fca20fbd404298052223aa2634fb6917226d38c2 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Tue, 14 Nov 2023 16:10:49 -0500 Subject: [PATCH 260/305] Update fabiyi-opeyemi.md fix coalesce link --- website/docs/community/spotlight/fabiyi-opeyemi.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/community/spotlight/fabiyi-opeyemi.md b/website/docs/community/spotlight/fabiyi-opeyemi.md index 27a2a0853dc..655e29e3d3d 100644 --- a/website/docs/community/spotlight/fabiyi-opeyemi.md +++ b/website/docs/community/spotlight/fabiyi-opeyemi.md @@ -4,7 +4,7 @@ title: Opeyemi Fabiyi description: | I'm an Analytics Engineer with Data Culture, a Data Consulting firm where I use dbt regularly to help clients build quality-tested data assets. I've also got a background in financial services and supply chain. I'm passionate about helping organizations to become data-driven and I majorly use dbt for data modeling, while the other aspect of the stack is largely dependent on the client infrastructure I'm working for, so I often say I'm tool-agnostic. 😀 - I'm the founder of Nigeria's Young Data Professional Community. I'm also the organizer of the Lagos dbt Meetup which I started, and one of the organizers of the DataFest Africa Conference. I became an active member of the dbt Community in 2021 & spoke at Coalesce 2022. + I'm the founder of Nigeria's Young Data Professional Community. I'm also the organizer of the Lagos dbt Meetup which I started, and one of the organizers of the DataFest Africa Conference. I became an active member of the dbt Community in 2021 & spoke at Coalesce 2022. image: /img/community/spotlight/fabiyi-opeyemi.jpg pronouns: he/him location: Lagos, Nigeria From a3cf04ff0d3307e2304a56b5fa2511981ebc451b Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Tue, 14 Nov 2023 16:18:00 -0500 Subject: [PATCH 261/305] update dakota date --- website/docs/community/spotlight/dakota-kelley.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/community/spotlight/dakota-kelley.md b/website/docs/community/spotlight/dakota-kelley.md index eb34c154e2f..790cd55d954 100644 --- a/website/docs/community/spotlight/dakota-kelley.md +++ b/website/docs/community/spotlight/dakota-kelley.md @@ -13,7 +13,7 @@ companyName: phData socialLinks: - name: LinkedIn link: https://www.linkedin.com/in/dakota-kelley/ -dateCreated: 2023-10-03 +dateCreated: 2023-11-03 hide_table_of_contents: true --- From db4dad8c6d7f260284f218d837305ebaf19dbfa8 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Tue, 14 Nov 2023 16:25:56 -0500 Subject: [PATCH 262/305] move spotlight files to correct directory --- .../{static/img => docs}/community/spotlight/alison-stanton.md | 0 .../{static/img => docs}/community/spotlight/oliver-cramer.md | 0 website/{static/img => docs}/community/spotlight/sam-debruyn.md | 0 website/{static/img => docs}/community/spotlight/stacy-lo.md | 2 +- 4 files changed, 1 insertion(+), 1 deletion(-) rename website/{static/img => docs}/community/spotlight/alison-stanton.md (100%) rename website/{static/img => docs}/community/spotlight/oliver-cramer.md (100%) rename website/{static/img => docs}/community/spotlight/sam-debruyn.md (100%) rename website/{static/img => docs}/community/spotlight/stacy-lo.md (92%) diff --git a/website/static/img/community/spotlight/alison-stanton.md b/website/docs/community/spotlight/alison-stanton.md similarity index 100% rename from website/static/img/community/spotlight/alison-stanton.md rename to website/docs/community/spotlight/alison-stanton.md diff --git a/website/static/img/community/spotlight/oliver-cramer.md b/website/docs/community/spotlight/oliver-cramer.md similarity index 100% rename from website/static/img/community/spotlight/oliver-cramer.md rename to website/docs/community/spotlight/oliver-cramer.md diff --git a/website/static/img/community/spotlight/sam-debruyn.md b/website/docs/community/spotlight/sam-debruyn.md similarity index 100% rename from website/static/img/community/spotlight/sam-debruyn.md rename to website/docs/community/spotlight/sam-debruyn.md diff --git a/website/static/img/community/spotlight/stacy-lo.md b/website/docs/community/spotlight/stacy-lo.md similarity index 92% rename from website/static/img/community/spotlight/stacy-lo.md rename to website/docs/community/spotlight/stacy-lo.md index eb063152c1c..277af687abe 100644 --- a/website/static/img/community/spotlight/stacy-lo.md +++ b/website/docs/community/spotlight/stacy-lo.md @@ -29,7 +29,7 @@ The biggest impact to my career is that I gained a lot of visibility! I got to k Karen Hsieh is the best! She not only brought me in to the dbt Community by way of the #local-taipei channel in dbt Slack, but she also encouraged me to contribute to the community in many ways, without making me feel pressured. With her passion and leading style, Karen successfully built a friendly and diverse group of people in #local-taipei. -I’d also like to recommend Bruno de Lima's LinkedIn posts. His 'dbt Tips of the Day' effectively delivery knowledge in a user-friendly way. In addition, I really enjoyed the dbt exam practice polls. Learning dbt can be a challenge, but Bruno makes it both easy and fun! ## What have you learned from community members? What do you hope others can learn from you? From 7ecc53f0496c55e00b21748be99db171004f36a0 Mon Sep 17 00:00:00 2001 From: Jason Karlavige Date: Tue, 14 Nov 2023 16:26:59 -0500 Subject: [PATCH 263/305] adjust links to docs site to be relative --- website/docs/community/spotlight/alison-stanton.md | 2 +- website/docs/community/spotlight/stacy-lo.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docs/community/spotlight/alison-stanton.md b/website/docs/community/spotlight/alison-stanton.md index ae734dc05f2..a0f99a59527 100644 --- a/website/docs/community/spotlight/alison-stanton.md +++ b/website/docs/community/spotlight/alison-stanton.md @@ -53,7 +53,7 @@ Elevate dbt understanding of and support for Enterprise-size company use cases t Emphasize rigor with defensive coding and comprehensive testing practices. -Improve the onboarding and up-skilling of dbt engineers through feedback and edits on docs.getdbt.com. +Improve the onboarding and up-skilling of dbt engineers through feedback and edits on docs.getdbt.com. Contribute to the maintenance of a collaborative and helpful dbt community as the number of dbt practitioners reaches various growth stages and tipping points. diff --git a/website/docs/community/spotlight/stacy-lo.md b/website/docs/community/spotlight/stacy-lo.md index 277af687abe..a9033b7bbb9 100644 --- a/website/docs/community/spotlight/stacy-lo.md +++ b/website/docs/community/spotlight/stacy-lo.md @@ -29,7 +29,7 @@ The biggest impact to my career is that I gained a lot of visibility! I got to k Karen Hsieh is the best! She not only brought me in to the dbt Community by way of the #local-taipei channel in dbt Slack, but she also encouraged me to contribute to the community in many ways, without making me feel pressured. With her passion and leading style, Karen successfully built a friendly and diverse group of people in #local-taipei. -I’d also like to recommend Bruno de Lima's LinkedIn posts. His 'dbt Tips of the Day' effectively delivery knowledge in a user-friendly way. In addition, I really enjoyed the dbt exam practice polls. Learning dbt can be a challenge, but Bruno makes it both easy and fun! +I’d also like to recommend Bruno de Lima's LinkedIn posts. His 'dbt Tips of the Day' effectively delivery knowledge in a user-friendly way. In addition, I really enjoyed the dbt exam practice polls. Learning dbt can be a challenge, but Bruno makes it both easy and fun! ## What have you learned from community members? What do you hope others can learn from you? From c755fe5e85d62ff072cca8f9eda2b383057d4c6a Mon Sep 17 00:00:00 2001 From: amada-ech <94760092+amada-ech@users.noreply.github.com> Date: Tue, 14 Nov 2023 16:51:49 -0500 Subject: [PATCH 264/305] Update josh-devlin.md -updating datecreated -updating community link so that it opens in another tab --- website/docs/community/spotlight/josh-devlin.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/website/docs/community/spotlight/josh-devlin.md b/website/docs/community/spotlight/josh-devlin.md index b27afdab4f4..d8a9b91c282 100644 --- a/website/docs/community/spotlight/josh-devlin.md +++ b/website/docs/community/spotlight/josh-devlin.md @@ -4,7 +4,7 @@ title: Josh Devlin description: | Josh Devlin has a rich history of community involvement and technical expertise in both the dbt and wider analytics communities. - Discovering dbt in early 2020, he quickly became an integral member of its community, leveraging the platform as a learning tool and aiding others along their dbt journey. Josh has helped thousands of dbt users with his advice and near-encyclopaedic knowledge of dbt. + Discovering dbt in early 2020, he quickly became an integral member of its community, leveraging the platform as a learning tool and aiding others along their dbt journey. Josh has helped thousands of dbt users with his advice and near-encyclopaedic knowledge of dbt. Beyond the online community, he transitioned from being an attendee at the first virtual Coalesce conference in December 2020 to a presenter at the first in-person Coalesce event in New Orleans in 2022. He has also contributed to the dbt-core and dbt-snowflake codebases, helping improve the product in the most direct way. @@ -16,13 +16,12 @@ pronouns: he/him location: Melbourne, Australia (but spent most of the last decade in Houston, USA) jobTitle: Senior Analytics Engineer companyName: Canva -organization: "" socialLinks: - name: Twitter link: https://twitter.com/JayPeeDevlin - name: LinkedIn link: https://www.linkedin.com/in/josh-devlin/ -dateCreated: 2023-06-27 +dateCreated: 2023-11-10 hide_table_of_contents: true --- From 1bc0b9a92271090b3fab1c1c389f0d3812d502cb Mon Sep 17 00:00:00 2001 From: amada-ech <94760092+amada-ech@users.noreply.github.com> Date: Tue, 14 Nov 2023 16:55:16 -0500 Subject: [PATCH 265/305] Update sydney-burns.md -edited dateCreated -added "joined the community" link to Slack --- website/docs/community/spotlight/sydney-burns.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docs/community/spotlight/sydney-burns.md b/website/docs/community/spotlight/sydney-burns.md index 3e3e8bc87b5..ecebd6cdec0 100644 --- a/website/docs/community/spotlight/sydney-burns.md +++ b/website/docs/community/spotlight/sydney-burns.md @@ -2,7 +2,7 @@ id: sydney-burns title: Sydney Burns description: | - In 2019, I started as an analytics intern at a healthcare tech startup. I learned about dbt in 2020 and joined the community to self-teach. The following year, I started using dbt professionally as a consultant, and was able to pick up various parts of the stack and dive into different implementations. That experience empowered me to strike a better balance between "best practices" and what suits a specific team best. I also spoke at Coalesce 2022, a highlight of my career! + In 2019, I started as an analytics intern at a healthcare tech startup. I learned about dbt in 2020 and joined the community to self-teach. The following year, I started using dbt professionally as a consultant, and was able to pick up various parts of the stack and dive into different implementations. That experience empowered me to strike a better balance between "best practices" and what suits a specific team best. I also spoke at Coalesce 2022, a highlight of my career! Now, I collaborate with other data professionals at Webflow, where focused on enhancing and scaling our data operations. I strive to share the same enthusiasm, support, and knowledge with my team that I've gained from the broader community! image: /img/community/spotlight/sydney.jpg @@ -13,7 +13,7 @@ companyName: Webflow socialLinks: - name: LinkedIn link: https://www.linkedin.com/in/sydneyeburns/ -dateCreated: 2023-11-05 +dateCreated: 2023-11-09 hide_table_of_contents: true --- From 6b8360c2db3c033e0f2b33c79608ccfcc86ea901 Mon Sep 17 00:00:00 2001 From: rpourzand Date: Tue, 14 Nov 2023 13:59:51 -0800 Subject: [PATCH 266/305] Update tableau.md --- website/docs/docs/use-dbt-semantic-layer/tableau.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/use-dbt-semantic-layer/tableau.md b/website/docs/docs/use-dbt-semantic-layer/tableau.md index 01024b0e1ad..1d283023dda 100644 --- a/website/docs/docs/use-dbt-semantic-layer/tableau.md +++ b/website/docs/docs/use-dbt-semantic-layer/tableau.md @@ -38,7 +38,7 @@ This integration provides a live connection to the dbt Semantic Layer through Ta - Windows: `C:\Program Files\Tableau\Drivers` - Mac: `~/Library/Tableau/Drivers` - Linux: ` /opt/tableau/tableau_driver/jdbc` -3. Open Tableau Desktop and find the **dbt Semantic Layer by dbt Labs** connector on the left-hand side. +3. Open Tableau Desktop or Tableau Server and find the **dbt Semantic Layer by dbt Labs** connector on the left-hand side. You may need to restart these applications for the connector to be available. 4. Connect with your Host, Environment ID, and Service Token information dbt Cloud provides during [Semantic Layer configuration](/docs/use-dbt-semantic-layer/setup-sl#:~:text=After%20saving%20it%2C%20you%27ll%20be%20provided%20with%20the%20connection%20information%20that%20allows%20you%20to%20connect%20to%20downstream%20tools). - In Tableau Server, the authentication screen may show "User" & "Password" instead, in which case the User is the Environment ID and the password is the Service Token. From 484e7e181267e94bbd02025cb4db6f6e3871dbd3 Mon Sep 17 00:00:00 2001 From: amada-ech <94760092+amada-ech@users.noreply.github.com> Date: Tue, 14 Nov 2023 17:03:20 -0500 Subject: [PATCH 267/305] Update dakota-kelley.md -changed datecreated -added Slack link to joined the dbt community text -added link to his Coalesce 2023 talk --- website/docs/community/spotlight/dakota-kelley.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/docs/community/spotlight/dakota-kelley.md b/website/docs/community/spotlight/dakota-kelley.md index 790cd55d954..57834d9cdff 100644 --- a/website/docs/community/spotlight/dakota-kelley.md +++ b/website/docs/community/spotlight/dakota-kelley.md @@ -4,7 +4,7 @@ title: Dakota Kelley description: | For the last ~2 years I've worked at phData. Before that I spent 8 years working as a Software Developer in the public sector. Currently I'm a Solution Architect, helping our customers and clients implement dbt on Snowflake, working across multiple cloud providers. - I first started reading about dbt when I was in grad school about 3 years ago. When I began with phData I had a fantastic opportunity to work with dbt. From there I feel in love with the Engineering practices and structure that I always felt were missing from Data Work. Since then, I've been fortunate enough to speak at dbt Coalesce 2022 and I'm speaking again at dbt Coalesce 2023. On top of this, I've written numerous blogs about dbt as well. + I first started reading about dbt when I was in grad school about 3 years ago. When I began with phData I had a fantastic opportunity to work with dbt. From there I feel in love with the Engineering practices and structure that I always felt were missing from Data Work. Since then, I've been fortunate enough to speak at Coalesce 2022 and at Coalesce 2023. On top of this, I've written numerous blogs about dbt as well. image: /img/community/spotlight/dakota.jpg pronouns: he/him location: Edmond, USA @@ -13,13 +13,13 @@ companyName: phData socialLinks: - name: LinkedIn link: https://www.linkedin.com/in/dakota-kelley/ -dateCreated: 2023-11-03 +dateCreated: 2023-11-08 hide_table_of_contents: true --- ## When did you join the dbt community and in what way has it impacted your career? -I joined the dbt community not too long after my first working experience. One of my passions is giving back and helping others, and being a part of the community allows me to help others with problems I've tackled before. Along the way it helps me learn new ways and see different methods to solve a wide variety of problems. Every time I interact with the community I've learned something new and that energizes me. +I joined the dbt Community not too long after my first working experience. One of my passions is giving back and helping others, and being a part of the community allows me to help others with problems I've tackled before. Along the way it helps me learn new ways and see different methods to solve a wide variety of problems. Every time I interact with the community I've learned something new and that energizes me. ## What dbt community leader do you identify with? How are you looking to grow your leadership in the dbt community? From c7c8a0c1590587bf03f6391667af872955dddd50 Mon Sep 17 00:00:00 2001 From: amada-ech <94760092+amada-ech@users.noreply.github.com> Date: Tue, 14 Nov 2023 17:06:17 -0500 Subject: [PATCH 268/305] Update alison-stanton.md edited date created Added hyphens as bullets under "I hope...." to condense spacing --- .../docs/community/spotlight/alison-stanton.md | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/website/docs/community/spotlight/alison-stanton.md b/website/docs/community/spotlight/alison-stanton.md index a0f99a59527..ffa5e8499c7 100644 --- a/website/docs/community/spotlight/alison-stanton.md +++ b/website/docs/community/spotlight/alison-stanton.md @@ -15,7 +15,7 @@ socialLinks: link: https://www.linkedin.com/in/alisonstanton/ - name: Github link: https://github.com/alison985/ -dateCreated: 2023-07-18 +dateCreated: 2023-11-07 hide_table_of_contents: true --- @@ -48,16 +48,11 @@ The maintainers of dbt packages like dbt-utils, dbt-expectations, dbt-date, etc. Everyone who gets over their fear to ask a question, propose an answer that may not work, or otherwise take a risk by sharing their voice. I hope I can support my employer and my professional development and my dbt community through the following: - -Elevate dbt understanding of and support for Enterprise-size company use cases through dialogue, requests, and examples. - -Emphasize rigor with defensive coding and comprehensive testing practices. - -Improve the onboarding and up-skilling of dbt engineers through feedback and edits on docs.getdbt.com. - -Contribute to the maintenance of a collaborative and helpful dbt community as the number of dbt practitioners reaches various growth stages and tipping points. - -Engage in dialogue. Providing feedback. Champion developer experience as a priority. Be a good open source citizen on Github. +-Elevate dbt understanding of and support for Enterprise-size company use cases through dialogue, requests, and examples. +-Emphasize rigor with defensive coding and comprehensive testing practices. +-Improve the onboarding and up-skilling of dbt engineers through feedback and edits on docs.getdbt.com. +-Contribute to the maintenance of a collaborative and helpful dbt community as the number of dbt practitioners reaches various growth stages and tipping points. +-Engage in dialogue. Providing feedback. Champion developer experience as a priority. Be a good open source citizen on Github. ## What have you learned from community members? What do you hope others can learn from you? From 0ac22b664193499887ec3ef6fcf7de4d1fc1a232 Mon Sep 17 00:00:00 2001 From: amada-ech <94760092+amada-ech@users.noreply.github.com> Date: Tue, 14 Nov 2023 17:07:27 -0500 Subject: [PATCH 269/305] Update fabiyi-opeyemi.md edited dateCreated --- website/docs/community/spotlight/fabiyi-opeyemi.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/community/spotlight/fabiyi-opeyemi.md b/website/docs/community/spotlight/fabiyi-opeyemi.md index 655e29e3d3d..f67ff4aaefc 100644 --- a/website/docs/community/spotlight/fabiyi-opeyemi.md +++ b/website/docs/community/spotlight/fabiyi-opeyemi.md @@ -16,7 +16,7 @@ socialLinks: link: https://twitter.com/Opiano_1 - name: LinkedIn link: https://www.linkedin.com/in/opeyemifabiyi/ -dateCreated: 2023-11-01 +dateCreated: 2023-11-06 hide_table_of_contents: true --- From c24b1945c17b27d37dcdac7fe26a7f7288bf98de Mon Sep 17 00:00:00 2001 From: amada-ech <94760092+amada-ech@users.noreply.github.com> Date: Tue, 14 Nov 2023 17:12:34 -0500 Subject: [PATCH 270/305] Update bruno-de-lima.md edited dateCreated edited Slack link, Discourse Link, and dbt Meetups in Brazil link so they open in new tabs --- website/docs/community/spotlight/bruno-de-lima.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docs/community/spotlight/bruno-de-lima.md b/website/docs/community/spotlight/bruno-de-lima.md index 2ef3c48c0c6..0365ee6c6a8 100644 --- a/website/docs/community/spotlight/bruno-de-lima.md +++ b/website/docs/community/spotlight/bruno-de-lima.md @@ -6,7 +6,7 @@ description: | Started my career at the beginning of 2022 at Indicium as an Analytics Engineer, working with dbt from day 1. By 2023, my path took a global trajectory as I joined phData as a Data Engineer, expanding my experiences and forging connections beyond Brazil. While dbt is at the heart of my expertise, I've also delved into data warehouses such as Snowflake, Databricks, and BigQuery; visualization tools like Power BI and Tableau; and several minor modern data stack tools. - I actively participate in the dbt community, having attended two dbt meetups in Brazil organized by Indicium; writing about dbt-related topics in my Medium and LinkedIn profiles; contributing to the code; and frequently checking dbt Slack and Discourse, helping (and being helped by) other dbt practitioners. If you are a community member, you may have seen me around! + I actively participate in the dbt community, having attended two dbt Meetups in Brazil organized by Indicium; writing about dbt-related topics in my Medium and LinkedIn profiles; contributing to the code; and frequently checking dbt Slack and Discourse, helping (and being helped by) other dbt practitioners. If you are a community member, you may have seen me around! image: /img/community/spotlight/bruno-de-lima.jpg pronouns: he/him location: Florianópolis, Brazil @@ -18,7 +18,7 @@ socialLinks: link: https://www.linkedin.com/in/brunoszdl/ - name: Medium link: https://medium.com/@bruno.szdl -dateCreated: 2023-11-02 +dateCreated: 2023-11-05 hide_table_of_contents: true --- From f61f4c4339fd3263aa02fa85f2be21c7dcfdfd30 Mon Sep 17 00:00:00 2001 From: amada-ech <94760092+amada-ech@users.noreply.github.com> Date: Tue, 14 Nov 2023 17:14:16 -0500 Subject: [PATCH 271/305] Update karen-hsieh.md edit DateCreated --- website/docs/community/spotlight/karen-hsieh.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/community/spotlight/karen-hsieh.md b/website/docs/community/spotlight/karen-hsieh.md index d2b5969441a..5147f39ce59 100644 --- a/website/docs/community/spotlight/karen-hsieh.md +++ b/website/docs/community/spotlight/karen-hsieh.md @@ -22,7 +22,7 @@ socialLinks: link: https://www.linkedin.com/in/karenhsieh/ - name: Medium link: https://medium.com/@ijacwei -dateCreated: 2023-11-03 +dateCreated: 2023-11-04 hide_table_of_contents: true --- From 1759d30e046f9bdf03775c35da7e2fa264c6b2ad Mon Sep 17 00:00:00 2001 From: amada-ech <94760092+amada-ech@users.noreply.github.com> Date: Tue, 14 Nov 2023 17:19:27 -0500 Subject: [PATCH 272/305] Update sam-debruyn.md edited date created changed join the community link to another hyperlinked github --- website/docs/community/spotlight/sam-debruyn.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/website/docs/community/spotlight/sam-debruyn.md b/website/docs/community/spotlight/sam-debruyn.md index f5fcff5045e..166adf58b09 100644 --- a/website/docs/community/spotlight/sam-debruyn.md +++ b/website/docs/community/spotlight/sam-debruyn.md @@ -16,13 +16,13 @@ socialLinks: link: https://www.linkedin.com/in/samueldebruyn/ - name: Blog link: https://debruyn.dev/ -dateCreated: 2023-11-07 +dateCreated: 2023-11-03 hide_table_of_contents: true --- ## When did you join the dbt community and in what way has it impacted your career? -I joined the dbt community at the end of 2020, when we had dbt 0.18. At first, I was a bit suspicious. I thought to myself, how could a tool this simple make such a big difference? But after giving it a try, I was convinced: this is what we'll all be using for our data transformations in the future. dbt shines in its simplicity and very low learning curve. Thanks to dbt, a lot more people can become proficient in data analytics. I became a dbt evangelist, both at my job as well as in local and online data communities. I think that data holds the truth. And I think that the more people we can give access to work with data, so that they don't having to depend on others to work with complex tooling, the more we can achieve together. +I joined the dbt Community at the end of 2020, when we had dbt 0.18. At first, I was a bit suspicious. I thought to myself, how could a tool this simple make such a big difference? But after giving it a try, I was convinced: this is what we'll all be using for our data transformations in the future. dbt shines in its simplicity and very low learning curve. Thanks to dbt, a lot more people can become proficient in data analytics. I became a dbt evangelist, both at my job as well as in local and online data communities. I think that data holds the truth. And I think that the more people we can give access to work with data, so that they don't having to depend on others to work with complex tooling, the more we can achieve together. ## What dbt community leader do you identify with? How are you looking to grow your leadership in the dbt community? @@ -30,8 +30,8 @@ It's hard to pick one person. There are lots of folks who inspired me along the ## What have you learned from community members? What do you hope others can learn from you? -dbt doesn't only shine when you're using it, but also under the hood. dbt's codebase is very approachable and consistently well written with code that is clean, elegant, and easy to understand. When you're thinking about a potential feature, a bugfix, or building integrations with dbt, just go to Slack or GitHub and see what you can do to make that happen. You can contribute by discussing potential features, adding documentation, writing code, and more. You don't need to be a Python expert to get started. +dbt doesn't only shine when you're using it, but also under the hood. dbt's codebase is very approachable and consistently well written with code that is clean, elegant, and easy to understand. When you're thinking about a potential feature, a bugfix, or building integrations with dbt, just go to Slack or Github and see what you can do to make that happen. You can contribute by discussing potential features, adding documentation, writing code, and more. You don't need to be a Python expert to get started. ## Anything else interesting you want to tell us? -The dbt community is one of the biggest data communities globally, but also the most welcoming one. It's amazing how nice, friendly, and approachable everyone is. It's great to be part of this community. +The dbt community is one of the biggest data communities globally, but also the most welcoming one. It's amazing how nice, friendly, and approachable everyone is. It's great to be part of this community. From 9d5577f4d16e58716ffa4eb0ba1b742dd45ace4a Mon Sep 17 00:00:00 2001 From: amada-ech <94760092+amada-ech@users.noreply.github.com> Date: Tue, 14 Nov 2023 17:21:03 -0500 Subject: [PATCH 273/305] Update stacy-lo.md edit DateCreated --- website/docs/community/spotlight/stacy-lo.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/community/spotlight/stacy-lo.md b/website/docs/community/spotlight/stacy-lo.md index a9033b7bbb9..f0b70fcc225 100644 --- a/website/docs/community/spotlight/stacy-lo.md +++ b/website/docs/community/spotlight/stacy-lo.md @@ -15,7 +15,7 @@ companyName: Teamson socialLinks: - name: LinkedIn link: https://www.linkedin.com/in/olycats/ -dateCreated: 2023-11-08 +dateCreated: 2023-11-01 hide_table_of_contents: true --- From 1ccad6c3bd39ef954dbbff44c5400b645ab9b664 Mon Sep 17 00:00:00 2001 From: amada-ech <94760092+amada-ech@users.noreply.github.com> Date: Tue, 14 Nov 2023 17:36:58 -0500 Subject: [PATCH 274/305] Update oliver-cramer.md edited date created edited about me and "anything else you want" to add section --- website/docs/community/spotlight/oliver-cramer.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/website/docs/community/spotlight/oliver-cramer.md b/website/docs/community/spotlight/oliver-cramer.md index c23f462359c..194c22ddcd1 100644 --- a/website/docs/community/spotlight/oliver-cramer.md +++ b/website/docs/community/spotlight/oliver-cramer.md @@ -2,7 +2,9 @@ id: oliver-cramer title: Oliver Cramer description: | - When I joined Aquila Capital in early 2022, I had the ModernDataStack with SqlDBM, dbt & Snowflake available. During the first half year I joined the dbt community. I have been working in the business intelligence field for many years. In 2006 I founded the first TDWI Roudtable in the DACH region.I often speak at conferences, such as the Snowflake Summit and the German TDWI conference. Currently I have a group looking at the Data Vault dbt packages. The German Data Vault User Group (DDVUG) has published a sample database to test Data Warehouse Automation tools, I addition I founded the Analytics Engineering Northern Germany Meetup Group, which will transition into an official dbt Meetup, the Northern Germany dbt Meetup. + When I joined Aquila Capital in early 2022, I had the ModernDataStack with SqlDBM, dbt & Snowflake available. During the first half year I joined the dbt community. I have been working in the business intelligence field for many years. In 2006 I founded the first TDWI Roudtable in the DACH region. I often speak at conferences, such as the Snowflake Summit and the German TDWI conference. + I have been very involved in the data vault community for over 20 years and I do a lot of work with dbt Labs’ Sean McIntyre and Victoria Mola to promote Data Vault in EMEA. I have even travelled to Canada and China to meet data vault community members! Currently I have a group looking at the Data Vault dbt packages. The German Data Vault User Group (DDVUG) has published a sample database to test Data Warehouse Automation tools. + In addition, I founded the Analytics Engineering Northern Germany Meetup Group, which will transition into an official dbt Meetup, the Northern Germany dbt Meetup. image: /img/community/spotlight/oliver.jpg pronouns: he/him location: Celle, Germany @@ -12,7 +14,7 @@ organization: TDWI Germany socialLinks: - name: LinkedIn link: https://www.linkedin.com/in/oliver-cramer/ -dateCreated: 2023-11-06 +dateCreated: 2023-11-02 hide_table_of_contents: true --- @@ -30,4 +32,4 @@ I just think it's good to have a community, to be able to ask questions and get ## Anything else interesting you want to tell us? -content here +Data Vault is actively looking forward to supporting the messaging that dbt Cloud (+packages) is a real alternative that works. From b20e5665cadfeac472a6f572090e9bd1ef231be1 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Wed, 15 Nov 2023 13:02:21 +0000 Subject: [PATCH 275/305] add clone step --- .../docs/docs/cloud/cloud-cli-installation.md | 18 +++++++++++++----- website/docs/docs/cloud/configure-cloud-cli.md | 2 ++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/website/docs/docs/cloud/cloud-cli-installation.md b/website/docs/docs/cloud/cloud-cli-installation.md index 70ae74c3df7..896b3c92f75 100644 --- a/website/docs/docs/cloud/cloud-cli-installation.md +++ b/website/docs/docs/cloud/cloud-cli-installation.md @@ -73,7 +73,9 @@ Before you begin, make sure you have [Homebrew installed](http://brew.sh/) in yo * Note that you no longer need to run the `dbt deps` command when your environment starts. This step was previously required during initialization. However, you should still run `dbt deps` if you make any changes to your `packages.yml` file. -4. After you've verified the installation, [configure](/docs/cloud/configure-cloud-cli) the dbt Cloud CLI for your dbt Cloud project and use it to run [dbt commands](/reference/dbt-commands) similar to dbt Core. For example, execute `dbt compile` to compile a project using dbt Cloud and validate your models and tests. +4. Clone your repository to your local computer using `git clone`. For example, to clone a GitHub repo using HTTPS format, run `git clone https://github.com/YOUR-USERNAME/YOUR-REPOSITORY`. + +5. After cloning your repo, [configure](/docs/cloud/configure-cloud-cli) the dbt Cloud CLI for your dbt Cloud project. This lets you run dbt commands like `dbt compile` to compile your project and validate models and tests. You can also add, edit, and synchronize files with your repo.

    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%0D+Hp%0ekH7b!Z6Mg6 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 literal 0 HcmV?d00001 From dc660efbb0255e75903238152207ba97269cf250 Mon Sep 17 00:00:00 2001 From: Marta Paes Date: Tue, 14 Nov 2023 02:29:20 +0100 Subject: [PATCH 241/305] Update source-freshness.md Minor patches as I read through the page. --- website/docs/docs/deploy/source-freshness.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docs/docs/deploy/source-freshness.md b/website/docs/docs/deploy/source-freshness.md index 78500416c56..2f9fe6bc007 100644 --- a/website/docs/docs/deploy/source-freshness.md +++ b/website/docs/docs/deploy/source-freshness.md @@ -13,7 +13,7 @@ dbt Cloud provides a helpful interface around dbt's [source data freshness](/doc [`dbt build`](reference/commands/build) does _not_ include source freshness checks when building and testing resources in your DAG. Instead, you can use one of these common patterns for defining jobs: - Add `dbt build` to the run step to run models, tests, and so on. - Select the **Generate docs on run** checkbox to automatically [generate project docs](/docs/collaborate/build-and-view-your-docs#set-up-a-documentation-job). -- Select the **Run on source freshness** checkbox to enable [source freshness](#checkbox) as the first to step of the job. +- Select the **Run source freshness** checkbox to enable [source freshness](#checkbox) as the first step of the job. @@ -24,7 +24,7 @@ Review the following options and outcomes: | Options | Outcomes | |--------| ------- | | **Select checkbox ** | The **Run source freshness** checkbox in your **Execution Settings** will run `dbt source freshness` as the first step in your job and won't break subsequent steps if it fails. If you wanted your job dedicated *exclusively* to running freshness checks, you still need to include at least one placeholder step, such as `dbt compile`. | -| **Add as a run step** | Add the `dbt source freshness` command to a job anywhere in your list of run steps. However, if your source data is out of date — this step will "fail', and subsequent steps will not run. dbt Cloud will trigger email notifications (if configured) based on the end state of this step.

    You can create a new job to snapshot source freshness.

    If you *do not* want your models to run if your source data is out of date, then it could be a good idea to run `dbt source freshness` as the first step in your job. Otherwise, we recommend adding `dbt source freshness` as the last step in the job, or creating a separate job just for this task. | +| **Add as a run step** | Add the `dbt source freshness` command to a job anywhere in your list of run steps. However, if your source data is out of date — this step will "fail", and subsequent steps will not run. dbt Cloud will trigger email notifications (if configured) based on the end state of this step.

    You can create a new job to snapshot source freshness.

    If you *do not* want your models to run if your source data is out of date, then it could be a good idea to run `dbt source freshness` as the first step in your job. Otherwise, we recommend adding `dbt source freshness` as the last step in the job, or creating a separate job just for this task. | From cf1658d4406602c05f0e436f4a726a60740dacda Mon Sep 17 00:00:00 2001 From: Talla Date: Tue, 14 Nov 2023 15:06:06 +0530 Subject: [PATCH 242/305] updated dbt-teradata-util compatibility matrix --- website/docs/docs/core/connect-data-platform/teradata-setup.md | 1 + 1 file changed, 1 insertion(+) diff --git a/website/docs/docs/core/connect-data-platform/teradata-setup.md b/website/docs/docs/core/connect-data-platform/teradata-setup.md index 1ba8e506b88..85767edee72 100644 --- a/website/docs/docs/core/connect-data-platform/teradata-setup.md +++ b/website/docs/docs/core/connect-data-platform/teradata-setup.md @@ -61,6 +61,7 @@ pip is the easiest way to install the adapter: | dbt-teradata | dbt-core | dbt-teradata-util | dbt-util | |--------------|------------|-------------------|----------------| | 1.2.x | 1.2.x | 0.1.0 | 0.9.x or below | +| 1.6.7 | 1.6.7 | 1.1.1 | 1.1.1 |

    @@ -102,7 +104,9 @@ Note that if you are using VS Code, you must restart it to pick up modified envi * Note that you no longer need to run the `dbt deps` command when your environment starts. This step was previously required during initialization. However, you should still run `dbt deps` if you make any changes to your `packages.yml` file. -4. After installation, [configure](/docs/cloud/configure-cloud-cli) the dbt Cloud CLI for your dbt Cloud project and use it to run [dbt commands](/reference/dbt-commands) similar to dbt Core. For example, execute `dbt compile`, to compile a project using dbt Cloud and confirm that it works. +4. Clone your repository to your local computer using `git clone`. For example, to clone a GitHub repo using HTTPS format, run `git clone https://github.com/YOUR-USERNAME/YOUR-REPOSITORY`. + +5. After cloning your repo, [configure](/docs/cloud/configure-cloud-cli) the dbt Cloud CLI for your dbt Cloud project. This lets you run dbt commands like `dbt compile` to compile your project and validate models and tests. You can also add, edit, and synchronize files with your repo.
    @@ -134,7 +138,9 @@ Advanced users can configure multiple projects to use the same Cloud CLI executa * Note that you no longer need to run the `dbt deps` command when your environment starts. This step was previously required during initialization. However, you should still run `dbt deps` if you make any changes to your `packages.yml` file. -4. After installation, [configure](/docs/cloud/configure-cloud-cli) the dbt Cloud CLI for your dbt Cloud project and use it to run [dbt commands](/reference/dbt-commands) similar to dbt Core. For example, execute `dbt compile`, to compile a project using dbt Cloud and confirm that it works. +4. Clone your repository to your local computer using `git clone`. For example, to clone a GitHub repo using HTTPS format, run `git clone https://github.com/YOUR-USERNAME/YOUR-REPOSITORY`. + +5. After cloning your repo, [configure](/docs/cloud/configure-cloud-cli) the dbt Cloud CLI for your dbt Cloud project. This lets you run dbt commands like `dbt compile` to compile your project and validate models and tests. You can also add, edit, and synchronize files with your repo. @@ -190,14 +196,16 @@ We recommend using virtual environments (venv) to namespace `cloud-cli`. pip3 install dbt ``` -1. (Optional) To revert back to dbt Core, first uninstall both the dbt Cloud CLI and dbt Core. Then reinstall dbt Core. +3. (Optional) To revert back to dbt Core, first uninstall both the dbt Cloud CLI and dbt Core. Then reinstall dbt Core. ```bash pip3 uninstall dbt-core dbt pip install dbt-adapter_name --force-reinstall ``` -4. After you've verified the installation, [configure](/docs/cloud/configure-cloud-cli) the dbt Cloud CLI for your dbt Cloud project. You can then use it to run [dbt commands](/reference/dbt-commands) similar to dbt Core. For example, execute `dbt compile` to compile a project using dbt Cloud and validate your models and tests. +4. Clone your repository to your local computer using `git clone`. For example, to clone a GitHub repo using HTTPS format, run `git clone https://github.com/YOUR-USERNAME/YOUR-REPOSITORY`. + +5. After cloning your repo, [configure](/docs/cloud/configure-cloud-cli) the dbt Cloud CLI for your dbt Cloud project. This lets you run dbt commands like `dbt compile` to compile your project and validate models and tests. You can also add, edit, and synchronize files with your repo. diff --git a/website/docs/docs/cloud/configure-cloud-cli.md b/website/docs/docs/cloud/configure-cloud-cli.md index 35f82cff8cf..d6fca00cf25 100644 --- a/website/docs/docs/cloud/configure-cloud-cli.md +++ b/website/docs/docs/cloud/configure-cloud-cli.md @@ -76,6 +76,8 @@ Once you install the dbt Cloud CLI, you need to configure it to connect to a dbt - To find your project ID, select **Develop** in the dbt Cloud navigation menu. You can use the URL to find the project ID. For example, in `https://cloud.getdbt.com/develop/26228/projects/123456`, the project ID is `123456`. +6. You can now [use the dbt Cloud CLI](#use-the-dbt-cloud-cli) and run [dbt commands](/reference/dbt-commands) like `dbt compile`. With your repo recloned, you can add, edit, and sync files with your repo. + ### Set environment variables To set environment variables in the dbt Cloud CLI for your dbt project: From 79a6a4dbc03efe4403173a0d444f4e91a37401fa Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Wed, 15 Nov 2023 15:58:27 +0000 Subject: [PATCH 276/305] final tweaks --- website/docs/docs/collaborate/documentation.md | 2 +- website/static/js/headerLinkCopy.js | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/website/docs/docs/collaborate/documentation.md b/website/docs/docs/collaborate/documentation.md index 54a88454ae6..16a4e610c70 100644 --- a/website/docs/docs/collaborate/documentation.md +++ b/website/docs/docs/collaborate/documentation.md @@ -17,7 +17,7 @@ pagination_prev: null * [Tests](/docs/build/tests) -## Overview +## Overview Good documentation for your dbt models will help downstream consumers discover and understand the datasets which you curate for them. diff --git a/website/static/js/headerLinkCopy.js b/website/static/js/headerLinkCopy.js index c23a294add1..66821d282cd 100644 --- a/website/static/js/headerLinkCopy.js +++ b/website/static/js/headerLinkCopy.js @@ -2,8 +2,12 @@ // Get all the headers with anchor links. // The 'click' event worked over 'popstate' because click captures page triggers, as well as back/forward button triggers - window.addEventListener("click", function() { + window.addEventListener("click", copyHeader); + + // separating function from eventlistener to understand they are two separate things + function copyHeader () { const headers = document.querySelectorAll("h2.anchor, h3.anchor"); + console.log("click"); headers.forEach((header) => { header.style.cursor = "pointer"; @@ -50,4 +54,4 @@ headers.forEach((header) => { console.error("Unable to copy to clipboard: " + e.text); }); }); -}); +}; From aa7ffb132196578676ecaa82ab21ee827ab1a7db Mon Sep 17 00:00:00 2001 From: Jordan Stein Date: Wed, 15 Nov 2023 08:38:18 -0800 Subject: [PATCH 277/305] update query spec --- website/docs/docs/build/saved-queries.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docs/docs/build/saved-queries.md b/website/docs/docs/build/saved-queries.md index a447fbb1a1a..7b88a052726 100644 --- a/website/docs/docs/build/saved-queries.md +++ b/website/docs/docs/build/saved-queries.md @@ -19,14 +19,14 @@ To define a saved query, refer to the following specification: The following is an example of a saved query: ```yaml -saved_query: +saved_queries: name: p0_booking description: Booking-related metrics that are of the highest priority. query_params: metrics: - bookings - instant_bookings - group_bys: + group_by: - TimeDimension('metric_time', 'day') - Dimension('listing__capacity_latest') where: From d9148295898350327b85a426be7b896415301bd1 Mon Sep 17 00:00:00 2001 From: Ly Nguyen Date: Wed, 15 Nov 2023 09:04:51 -0800 Subject: [PATCH 278/305] dbt Cloud and Microsoft Fabric quickstart --- website/docs/guides/microsoft-fabric-qs.md | 313 ++++++++++++++++++ .../dbt-cloud/example-load-data-ms-fabric.png | Bin 0 -> 157616 bytes .../dbt-cloud/example-start-fabric.png | Bin 0 -> 213496 bytes 3 files changed, 313 insertions(+) create mode 100644 website/docs/guides/microsoft-fabric-qs.md create mode 100644 website/static/img/quickstarts/dbt-cloud/example-load-data-ms-fabric.png create mode 100644 website/static/img/quickstarts/dbt-cloud/example-start-fabric.png diff --git a/website/docs/guides/microsoft-fabric-qs.md b/website/docs/guides/microsoft-fabric-qs.md new file mode 100644 index 00000000000..5aea9304ac2 --- /dev/null +++ b/website/docs/guides/microsoft-fabric-qs.md @@ -0,0 +1,313 @@ +--- +title: "Quickstart for dbt Cloud and Microsoft Fabric" +id: "microsoft-fabric" +level: 'Beginner' +icon: 'starburst' +hide_table_of_contents: true +tags: ['dbt Cloud','Quickstart'] +--- +## Introduction + +In this quickstart guide, you'll learn how to use dbt Cloud with Microsoft Fabric. It will show you how to: + +- Load the Jaffle Shop sample data (provided by dbt Labs) into your Microsoft Fabric warehouse. +- Connect dbt Cloud to Microsoft Fabric. +- Take a sample query and turn it into a model in your dbt project. A model in dbt is a select statement. +- Add tests to your models. +- Document your models. +- Schedule a job to run. + +:::tip Public preview + +A public preview of dbt Cloud support for Microsoft Fabric in now available! + +::: + +### Prerequisites +- You have a [dbt Cloud](https://www.getdbt.com/signup/) account. +- You have started the Microsoft Fabric (Preview) trial. For details, refer to [Microsoft Fabric (Preview) trial](https://learn.microsoft.com/en-us/fabric/get-started/fabric-trial) in the Microsoft docs. +- As a Microsoft admin, you’ve enabled service principal authentication. For details, refer to [Enable service principal authentication](https://learn.microsoft.com/en-us/fabric/admin/metadata-scanning-enable-read-only-apis) in the Microsoft docs. dbt Cloud needs these authentication credentials to connect to Microsoft Fabric. + +### Related content +- [dbt Courses](https://courses.getdbt.com/collections) +- [About continuous integration jobs](/docs/deploy/continuous-integration) +- [Deploy jobs](/docs/deploy/deploy-jobs) +- [Job notifications](/docs/deploy/job-notifications) +- [Source freshness](/docs/deploy/source-freshness) + +## Load data into your Microsoft Fabric warehouse + +1. Log in to your [Microsoft Fabric](http://app.fabric.microsoft.com) account. +2. On the home page, select the **Synapse Data Warehouse** tile. + + + +3. From **Workspaces** on the left sidebar, navigate to your organization’s workspace. Or, you can create a new workspace to work from; refer to [Create a workspace](https://learn.microsoft.com/en-us/fabric/get-started/create-workspaces) in the Microsoft docs for more details. +4. Choose your warehouse from the table. Or, you can create a new warehouse; refer to [Create a warehouse](https://learn.microsoft.com/en-us/fabric/data-warehouse/tutorial-create-warehouse) in the Microsoft docs for more details. +5. Open the SQL editor by selecting **New SQL query** from the top bar. +6. Load the Jaffle Shop example data. Copy these statements into the SQL editor: + + ```sql + DROP TABLE dbo.customers; + + CREATE TABLE dbo.customers + ( + [ID] [int], + [FIRST_NAME] [varchar] (8000), + [LAST_NAME] [varchar] (8000) + ); + + COPY INTO [dbo].[customers] + FROM 'https://dbtlabsynapsedatalake.blob.core.windows.net/dbt-quickstart-public/jaffle_shop_customers.parquet' + WITH ( + FILE_TYPE = 'PARQUET' + ); + + DROP TABLE dbo.orders; + + CREATE TABLE dbo.orders + ( + [ID] [int], + [USER_ID] [int], + -- [ORDER_DATE] [int], + [ORDER_DATE] [date], + [STATUS] [varchar] (8000) + ); + + COPY INTO [dbo].[orders] + FROM 'https://dbtlabsynapsedatalake.blob.core.windows.net/dbt-quickstart-public/jaffle_shop_orders.parquet' + WITH ( + FILE_TYPE = 'PARQUET' + ); + + DROP TABLE dbo.payments; + + CREATE TABLE dbo.payments + ( + [ID] [int], + [ORDERID] [int], + [PAYMENTMETHOD] [varchar] (8000), + [STATUS] [varchar] (8000), + [AMOUNT] [int], + [CREATED] [date] + ); + + COPY INTO [dbo].[payments] + FROM 'https://dbtlabsynapsedatalake.blob.core.windows.net/dbt-quickstart-public/stripe_payments.parquet' + WITH ( + FILE_TYPE = 'PARQUET' + ); + ``` + + + +## Connect dbt Cloud to Microsoft Fabric + +1. Create a new project in dbt Cloud. From **Account settings** (using the gear menu in the top right corner), click **+ New Project**. +2. Enter a project name and click **Continue**. +3. Choose **Fabric** as your connection and click **Next**. +4. In the **Configure your environment** section, enter the **Settings** for your new project: +5. Enter the **Development credentials** for your new project: + - **Authentication** — Choose **Service Principal** from the dropdown. + - **Tenant ID** — Use the service principal’s **Directory (tenant) id** as the value. + - **Client ID** — Use the service principal’s **application (client) ID id** as the value. + - **Client secret** — Use the service principal’s **client secret** (not the **client secret id**) as the value. +6. Click **Test connection**. This verifies that dbt Cloud can access your Microsoft Fabric account. +7. Click **Next** when the test succeeds. If it failed, you might need to check your Microsoft service principal. + +## Set up a dbt Cloud managed repository + + +## Initialize your dbt project​ and start developing +Now that you have a repository configured, you can initialize your project and start development in dbt Cloud: + +1. Click **Start developing in the IDE**. It might take a few minutes for your project to spin up for the first time as it establishes your git connection, clones your repo, and tests the connection to the warehouse. +2. Above the file tree to the left, click **Initialize dbt project**. This builds out your folder structure with example models. +3. Make your initial commit by clicking **Commit and sync**. Use the commit message `initial commit` and click **Commit**. This creates the first commit to your managed repo and allows you to open a branch where you can add new dbt code. +4. You can now directly query data from your warehouse and execute `dbt run`. You can try this out now: + - In the command line bar at the bottom, enter `dbt run` and click **Enter**. You should see a `dbt run succeeded` message. + +## Build your first model +1. Under **Version Control** on the left, click **Create branch**. You can name it `add-customers-model`. You need to create a new branch since the main branch is set to read-only mode. +1. Click the **...** next to the `models` directory, then select **Create file**. +1. Name the file `customers.sql`, then click **Create**. +1. Copy the following query into the file and click **Save**. + + + + ```sql + with customers as ( + + select + ID as customer_id, + FIRST_NAME as first_name, + LAST_NAME as last_name + + from dbo.customers + ), + + orders as ( + + select + ID as order_id, + USER_ID as customer_id, + ORDER_DATE as order_date, + STATUS as status + + from dbo.orders + ), + + customer_orders as ( + + select + customer_id, + + min(order_date) as first_order_date, + max(order_date) as most_recent_order_date, + count(order_id) as number_of_orders + + from orders + + group by customer_id + ), + + final as ( + + select + customers.customer_id, + customers.first_name, + customers.last_name, + customer_orders.first_order_date, + customer_orders.most_recent_order_date, + coalesce(customer_orders.number_of_orders, 0) as number_of_orders + + from customers + + left join customer_orders on customers.customer_id = customer_orders.customer_id + ) + + select * from final + ``` + + +1. Enter `dbt run` in the command prompt at the bottom of the screen. You should get a successful run and see the three models. + +Later, you can connect your business intelligence (BI) tools to these views and tables so they only read cleaned up data rather than raw data in your BI tool. + +#### FAQs + + + + + + + +## Change the way your model is materialized + + + +## Delete the example models + + + +## Build models on top of other models + + + +1. Create a new SQL file, `models/stg_customers.sql`, with the SQL from the `customers` CTE in our original query. +2. Create a second new SQL file, `models/stg_orders.sql`, with the SQL from the `orders` CTE in our original query. + + + + ```sql + select + ID as customer_id, + FIRST_NAME as first_name, + LAST_NAME as last_name + + from dbo.customers + ``` + + + + + + ```sql + select + ID as order_id, + USER_ID as customer_id, + ORDER_DATE as order_date, + STATUS as status + + from dbo.orders + ``` + + + +3. Edit the SQL in your `models/customers.sql` file as follows: + + + + ```sql + with customers as ( + + select * from {{ ref('stg_customers') }} + + ), + + orders as ( + + select * from {{ ref('stg_orders') }} + + ), + + customer_orders as ( + + select + customer_id, + + min(order_date) as first_order_date, + max(order_date) as most_recent_order_date, + count(order_id) as number_of_orders + + from orders + + group by customer_id + + ), + + final as ( + + select + customers.customer_id, + customers.first_name, + customers.last_name, + customer_orders.first_order_date, + customer_orders.most_recent_order_date, + coalesce(customer_orders.number_of_orders, 0) as number_of_orders + + from customers + + left join customer_orders on customers.customer_id = customer_orders.customer_id + + ) + + select * from final + + ``` + + + +4. Execute `dbt run`. + + This time, when you performed a `dbt run`, separate views/tables were created for `stg_customers`, `stg_orders` and `customers`. dbt inferred the order to run these models. Because `customers` depends on `stg_customers` and `stg_orders`, dbt builds `customers` last. You do not need to explicitly define these dependencies. + +#### FAQs {#faq-2} + + + + + + + + \ No newline at end of file diff --git a/website/static/img/quickstarts/dbt-cloud/example-load-data-ms-fabric.png b/website/static/img/quickstarts/dbt-cloud/example-load-data-ms-fabric.png new file mode 100644 index 0000000000000000000000000000000000000000..e34eebfd82718862c3c9cd941b74eb75bec94ecc GIT binary patch literal 157616 zcmafb1y~kc*EQXZNOwzv(hU+)H!a;D(hbtxDJcy~H`3kRNOyNi*FQY{z5f$l!^JRp z=A3=@UVE=~3wW@}NKY#i)bM&63;l!p*UO$)nxYLXzt-ScanyImTw@ z9@qvVVwVjm_|MqM*WA0bB#;&vNGV=?ff^+G-JPOf?*ryq5}c;N$t+4aC8{20pL9ZD zB6V7!!GgUxeN|hB08{&nd)fr--=DUUS6-axFPSF>xQoVzJ{OO{)*2nqUF zL3e(*@?&Ub!uLY0pJzqF6e=h)gKb?WqcmE5xFEUFcuqOJSJCi=3FrqyLqI3ENj|#l zo!0&tiqQTCP(c?Y+PzG0A*wUxFXciMuZ8hhyXbR#1P0It?%%mDCTvi#V%?Tj-kAII z=cuQoMj^34>xYsFDZJ<`K;wD2(H%%<-u=R)GAqEmGltXj{v}$^sXr;Wt$PuTA^|~e z8Pfn0&KIU?E{)a*g_Q^YS@_JedtD372zn1r>;nv)UTK2yRqU^#NJIWTs7Ns*gs$D# zRNZv;{6PqiYa0eOAv8>4dXdSe=fYnbaXU+(-=2n)J1dZCM%lXaDk|Z8CW*vk8eaA5 z>RoS3@P=!J@b*HXC^PnwB!PwFzQem)No}OYvG&3-1n0K~F^iDL81V@^hr@QQ$OT4V5s&(+RlI%^hwRNCdiE29d|35Hgi^|zik_R>-8lSaQ0ki{6)CVP*qglT%0ANnqO|x_JF0D~*<;2`I==&qM#{A0doOgNZDT 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 From 520c5a27a6737fd39c1d5316b8c5b0e947de96b5 Mon Sep 17 00:00:00 2001 From: Doug Beatty <44704949+dbeatty10@users.noreply.github.com> Date: Thu, 16 Nov 2023 08:11:33 -0700 Subject: [PATCH 305/305] `config` for semantic models (#4221) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit related to: #3997 ## What are you changing in this pull request and why? - Add "Semantic models" tab for `config` - Add a "Definition" header (like other similar pages, like [`group`](https://docs.getdbt.com/reference/resource-configs/group), [`enabled`](https://docs.getdbt.com/reference/resource-configs/enabled), etc.) ## Other - Added semantic models & metrics to [#3957](https://github.com/dbt-labs/docs.getdbt.com/issues/3957) ## 🎩 ### Previews - [1.6](https://docs-getdbt-com-git-dbeatty-semantic-models-config-dbt-labs.vercel.app/reference/resource-properties/config?version=1.6) - [1.7](https://docs-getdbt-com-git-dbeatty-semantic-models-config-dbt-labs.vercel.app/reference/resource-properties/config?version=1.7) ### v1.6 image ### v1.7 image ## Checklist - [x] I have tested that the code examples work - [x] I have tested that the changes look correct in the Vercel preview - [x] Review the [Content style guide](https://github.com/dbt-labs/docs.getdbt.com/blob/current/contributing/content-style-guide.md) and [About versioning](https://github.com/dbt-labs/docs.getdbt.com/blob/current/contributing/single-sourcing-content.md#adding-a-new-version) so my content adheres to these guidelines. --------- Co-authored-by: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> --- .../reference/resource-properties/config.md | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/website/docs/reference/resource-properties/config.md b/website/docs/reference/resource-properties/config.md index e6021def852..55d2f64d9ff 100644 --- a/website/docs/reference/resource-properties/config.md +++ b/website/docs/reference/resource-properties/config.md @@ -16,6 +16,7 @@ datatype: "{dictionary}" { label: 'Sources', value: 'sources', }, { label: 'Metrics', value: 'metrics', }, { label: 'Exposures', value: 'exposures', }, + { label: 'Semantic models', value: 'semantic models', }, ] }> @@ -182,6 +183,36 @@ exposures: + + + + +Support for the `config` property on `semantic_models` was added in dbt Core v1.7 + + + + + + + +```yml +version: 2 + +semantic_models: + - name: + config: + enabled: true | false + group: + meta: {dictionary} +``` + + + + + + + +## Definition The `config` property allows you to configure resources at the same time you're defining properties in YAML files.

    ?mj{}Y@NTs#3g@0~(UsPtsXY0P z9!6p`kCVDW&c1ul-O=46P6TkZ2`nv^-P5CY1(Z3X91-z6GTC@0=F{!7!m4r^R)C4y zRfAURJrMiqc7PjCY=DC$6LC>KoxcjWrtUK$zA39}E)syfk;FT9rx!2B!{#qdTehZjMb)=?*nHcHT;*c@;hqoUxb!Cy4JG-%MLz(k`cVx3D~5Rm6b8NC(Gmpg-J~7 z#q|ID{;6z@!W#2pF$dc11L68{IhB008;!A@>qCzQj?&9xyT#+uR|7VK;OS{&({1g&-jvt+ZKceGmX9HK2dgDKY?VSHj3B2Z?*8TsLKysL}0LwonYw zHefP2o{>nMzk5FS>0g40VjK#;-qcjRU}#0{|YOrmdZli_wPI7ej8FmzVc~h`{nkdsfz~ zrUiYPARm}PmBNaOhQUFZF%pGU;k*c^_Cc)OGl1pt-I7tGvh(e801Lmj7+(fl7J-7J zob8W)zl{H!J3mdGxL?Wqm~p2`3c%w0Anq*L2~!jd1A+a~q}BFxd8p02mZSQ(`$-0k zRLEy35NVJ>quxrhx!Wsc5G9S<{+oq`MXQkiUXJB(y1-&I3D1`U=1gnU_dCtqA(#!P zrw(Img~i3yz(1aL!h}cwTyZArU&g}kVS3xv>1TU!%U4@1q-{r`PR9YSMv+yM)hP@H zgH1!;TzTJ|_KIwQ=L!uz$)Jh{Vp$}V?$ftW@HRVC?6`YL{&jlzJyBASBd~V}t^zE1 zQu;RBy{qk?5vOv0y$k<2S0}m@m%n~W!oooXuKzX2{Dk$;3hCubo0^*XWl%TkUNDFJ zTRi#+lOY$r_dNg}-8|9@OgmCw>bN2NTb#hapK4K*pZn+MQ-gpd={~{c=52fDr=LiN zH;c30Phiholqa^+vCD>z^5eV`N6mlPPG{?vaUq|(5kqltaW#GYW9ljmbmD*c?C%pd zAnG3-{rv9sqU7Or--uX2TYE8U*dH8-s3|UvFcNllLY}Jr_X!yI@(vU>tFE)*tKUOO z*|Z@70s_FJX0f!itZ8oMm8U~Sy0E2RA^WeC<$q=x{|s#k74#piPk^bw!Bv8<7Uk#4 zuRoBdTr+cXdlnWK54T2AX6EL0z_8Y{&6#-V$x rb`J~CL&yE&%b^UP8#QTKn+ztJEOf-Q68Se24r0 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�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�l{);>+!UB0I8{6?)VmEsXL0#3 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 literal 0 HcmV?d00001 From c3960473d968d3ff25fb2421aa7377c6cd4823ce Mon Sep 17 00:00:00 2001 From: Ly Nguyen Date: Wed, 15 Nov 2023 09:23:22 -0800 Subject: [PATCH 279/305] Fabric logo --- website/docs/guides/microsoft-fabric-qs.md | 3 +- website/static/img/icons/fabric.svg | 62 ++++++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 website/static/img/icons/fabric.svg diff --git a/website/docs/guides/microsoft-fabric-qs.md b/website/docs/guides/microsoft-fabric-qs.md index 5aea9304ac2..416ba77f5f5 100644 --- a/website/docs/guides/microsoft-fabric-qs.md +++ b/website/docs/guides/microsoft-fabric-qs.md @@ -2,9 +2,10 @@ title: "Quickstart for dbt Cloud and Microsoft Fabric" id: "microsoft-fabric" level: 'Beginner' -icon: 'starburst' +icon: 'fabric' hide_table_of_contents: true tags: ['dbt Cloud','Quickstart'] +recently_updated: true --- ## Introduction diff --git a/website/static/img/icons/fabric.svg b/website/static/img/icons/fabric.svg new file mode 100644 index 00000000000..b03e8cb9d01 --- /dev/null +++ b/website/static/img/icons/fabric.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From b8b961fcf539e5a056e36ea2614d5ac40d823413 Mon Sep 17 00:00:00 2001 From: Ly Nguyen Date: Wed, 15 Nov 2023 09:47:22 -0800 Subject: [PATCH 280/305] Update callout / verified adapter list --- website/snippets/_adapters-verified.md | 6 +++--- website/snippets/_microsoft-adapters-soon.md | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/website/snippets/_adapters-verified.md b/website/snippets/_adapters-verified.md index 3cc1e800448..ebb91cb4544 100644 --- a/website/snippets/_adapters-verified.md +++ b/website/snippets/_adapters-verified.md @@ -45,9 +45,9 @@ icon="starburst"/> + title="Microsoft Fabric" + body="Set up in dbt Cloud
    Install with dbt Core

    " + icon="fabric"/> Date: Wed, 15 Nov 2023 09:57:25 -0800 Subject: [PATCH 281/305] add release note --- .../02-Nov-2023/microsoft-fabric-support-rn.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 website/docs/docs/dbt-versions/release-notes/02-Nov-2023/microsoft-fabric-support-rn.md diff --git a/website/docs/docs/dbt-versions/release-notes/02-Nov-2023/microsoft-fabric-support-rn.md b/website/docs/docs/dbt-versions/release-notes/02-Nov-2023/microsoft-fabric-support-rn.md new file mode 100644 index 00000000000..32a12dda17f --- /dev/null +++ b/website/docs/docs/dbt-versions/release-notes/02-Nov-2023/microsoft-fabric-support-rn.md @@ -0,0 +1,18 @@ +--- +title: "New: Public Preview of Microsoft Fabric support in dbt Cloud" +description: "November 2023: Public Preview now available for Microsoft Fabric in dbt Cloud" +sidebar_label: "New: Public Preview of Microsoft Fabric support" +sidebar_position: 09 +tags: [Nov-2023] +--- + +Public Preview is now available in dbt Cloud for Microsoft Fabric! + +To learn more, check out the [Quickstart for dbt Cloud and Microsoft Fabric](/guides/microsoft-fabric?step=1) to learn more. The guide walks you through: + +- Loading the Jaffle Shop sample data (provided by dbt Labs) into your Microsoft Fabric warehouse. +- Connecting dbt Cloud to Microsoft Fabric. +- Taking a sample query and turn it into a model in your dbt project. A model in dbt is a select statement. +- Adding tests to your models. +- Documenting your models. +- Scheduling a job to run. \ No newline at end of file From b58129613fc2d98123c94ca9d4bcf4b79612b8a4 Mon Sep 17 00:00:00 2001 From: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> Date: Wed, 15 Nov 2023 10:10:22 -0800 Subject: [PATCH 282/305] Update website/docs/docs/dbt-versions/release-notes/02-Nov-2023/microsoft-fabric-support-rn.md Co-authored-by: Matt Shaver <60105315+matthewshaver@users.noreply.github.com> --- .../release-notes/02-Nov-2023/microsoft-fabric-support-rn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/dbt-versions/release-notes/02-Nov-2023/microsoft-fabric-support-rn.md b/website/docs/docs/dbt-versions/release-notes/02-Nov-2023/microsoft-fabric-support-rn.md index 32a12dda17f..f6432d6c6b3 100644 --- a/website/docs/docs/dbt-versions/release-notes/02-Nov-2023/microsoft-fabric-support-rn.md +++ b/website/docs/docs/dbt-versions/release-notes/02-Nov-2023/microsoft-fabric-support-rn.md @@ -8,7 +8,7 @@ tags: [Nov-2023] Public Preview is now available in dbt Cloud for Microsoft Fabric! -To learn more, check out the [Quickstart for dbt Cloud and Microsoft Fabric](/guides/microsoft-fabric?step=1) to learn more. The guide walks you through: +To learn more, check out the [Quickstart for dbt Cloud and Microsoft Fabric](/guides/microsoft-fabric?step=1). The guide walks you through: - Loading the Jaffle Shop sample data (provided by dbt Labs) into your Microsoft Fabric warehouse. - Connecting dbt Cloud to Microsoft Fabric. From b312342f4805ec20f91f65f509772a4c58a00d60 Mon Sep 17 00:00:00 2001 From: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> Date: Wed, 15 Nov 2023 10:13:23 -0800 Subject: [PATCH 283/305] Update website/docs/docs/dbt-versions/release-notes/02-Nov-2023/microsoft-fabric-support-rn.md Co-authored-by: Matt Shaver <60105315+matthewshaver@users.noreply.github.com> --- .../release-notes/02-Nov-2023/microsoft-fabric-support-rn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/dbt-versions/release-notes/02-Nov-2023/microsoft-fabric-support-rn.md b/website/docs/docs/dbt-versions/release-notes/02-Nov-2023/microsoft-fabric-support-rn.md index f6432d6c6b3..13aefa80ffc 100644 --- a/website/docs/docs/dbt-versions/release-notes/02-Nov-2023/microsoft-fabric-support-rn.md +++ b/website/docs/docs/dbt-versions/release-notes/02-Nov-2023/microsoft-fabric-support-rn.md @@ -12,7 +12,7 @@ To learn more, check out the [Quickstart for dbt Cloud and Microsoft Fabric](/gu - Loading the Jaffle Shop sample data (provided by dbt Labs) into your Microsoft Fabric warehouse. - Connecting dbt Cloud to Microsoft Fabric. -- Taking a sample query and turn it into a model in your dbt project. A model in dbt is a select statement. +- Turning a sample query into a model in your dbt project. A model in dbt is a SELECT statement. - Adding tests to your models. - Documenting your models. - Scheduling a job to run. \ No newline at end of file From f4f388352ad2cdf7da772a15fcfd16089e365c81 Mon Sep 17 00:00:00 2001 From: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> Date: Wed, 15 Nov 2023 10:13:29 -0800 Subject: [PATCH 284/305] Update website/docs/guides/microsoft-fabric-qs.md Co-authored-by: Matt Shaver <60105315+matthewshaver@users.noreply.github.com> --- website/docs/guides/microsoft-fabric-qs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/guides/microsoft-fabric-qs.md b/website/docs/guides/microsoft-fabric-qs.md index 416ba77f5f5..d310d24acd0 100644 --- a/website/docs/guides/microsoft-fabric-qs.md +++ b/website/docs/guides/microsoft-fabric-qs.md @@ -13,7 +13,7 @@ In this quickstart guide, you'll learn how to use dbt Cloud with Microsoft Fabri - Load the Jaffle Shop sample data (provided by dbt Labs) into your Microsoft Fabric warehouse. - Connect dbt Cloud to Microsoft Fabric. -- Take a sample query and turn it into a model in your dbt project. A model in dbt is a select statement. +- Turn a sample query into a model in your dbt project. A model in dbt is a SELECT statement. - Add tests to your models. - Document your models. - Schedule a job to run. From 075adf6e539d17f712baa2e424399077c96ffda7 Mon Sep 17 00:00:00 2001 From: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> Date: Wed, 15 Nov 2023 10:17:03 -0800 Subject: [PATCH 285/305] Update website/docs/guides/microsoft-fabric-qs.md Co-authored-by: Matt Shaver <60105315+matthewshaver@users.noreply.github.com> --- website/docs/guides/microsoft-fabric-qs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/guides/microsoft-fabric-qs.md b/website/docs/guides/microsoft-fabric-qs.md index d310d24acd0..636afd0453e 100644 --- a/website/docs/guides/microsoft-fabric-qs.md +++ b/website/docs/guides/microsoft-fabric-qs.md @@ -43,7 +43,7 @@ A public preview of dbt Cloud support for Microsoft Fabric in now available! -3. From **Workspaces** on the left sidebar, navigate to your organization’s workspace. Or, you can create a new workspace to work from; refer to [Create a workspace](https://learn.microsoft.com/en-us/fabric/get-started/create-workspaces) in the Microsoft docs for more details. +3. From **Workspaces** on the left sidebar, navigate to your organization’s workspace. Or, you can create a new workspace; refer to [Create a workspace](https://learn.microsoft.com/en-us/fabric/get-started/create-workspaces) in the Microsoft docs for more details. 4. Choose your warehouse from the table. Or, you can create a new warehouse; refer to [Create a warehouse](https://learn.microsoft.com/en-us/fabric/data-warehouse/tutorial-create-warehouse) in the Microsoft docs for more details. 5. Open the SQL editor by selecting **New SQL query** from the top bar. 6. Load the Jaffle Shop example data. Copy these statements into the SQL editor: From 31bc0ff1f97aa887c2d3f87dfb196ad2758375ef Mon Sep 17 00:00:00 2001 From: Ly Nguyen <107218380+nghi-ly@users.noreply.github.com> Date: Wed, 15 Nov 2023 10:27:37 -0800 Subject: [PATCH 286/305] Update website/docs/guides/microsoft-fabric-qs.md Co-authored-by: Matt Shaver <60105315+matthewshaver@users.noreply.github.com> --- website/docs/guides/microsoft-fabric-qs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/guides/microsoft-fabric-qs.md b/website/docs/guides/microsoft-fabric-qs.md index 636afd0453e..f27fcaa5c79 100644 --- a/website/docs/guides/microsoft-fabric-qs.md +++ b/website/docs/guides/microsoft-fabric-qs.md @@ -46,7 +46,7 @@ A public preview of dbt Cloud support for Microsoft Fabric in now available! 3. From **Workspaces** on the left sidebar, navigate to your organization’s workspace. Or, you can create a new workspace; refer to [Create a workspace](https://learn.microsoft.com/en-us/fabric/get-started/create-workspaces) in the Microsoft docs for more details. 4. Choose your warehouse from the table. Or, you can create a new warehouse; refer to [Create a warehouse](https://learn.microsoft.com/en-us/fabric/data-warehouse/tutorial-create-warehouse) in the Microsoft docs for more details. 5. Open the SQL editor by selecting **New SQL query** from the top bar. -6. Load the Jaffle Shop example data. Copy these statements into the SQL editor: +6. Copy these statements into the SQL editor to load the Jaffle Shop example data: ```sql DROP TABLE dbo.customers; From 2a0773515f94d787da49313bebcd3a10a72511ca Mon Sep 17 00:00:00 2001 From: amada-ech <94760092+amada-ech@users.noreply.github.com> Date: Wed, 15 Nov 2023 13:28:29 -0500 Subject: [PATCH 287/305] Update oliver-cramer.md fixing victorias name --- website/docs/community/spotlight/oliver-cramer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/community/spotlight/oliver-cramer.md b/website/docs/community/spotlight/oliver-cramer.md index 194c22ddcd1..bfd62db0908 100644 --- a/website/docs/community/spotlight/oliver-cramer.md +++ b/website/docs/community/spotlight/oliver-cramer.md @@ -24,7 +24,7 @@ I joined the dbt community in 2022. My current focus is on building modern data ## What dbt community leader do you identify with? How are you looking to grow your leadership in the dbt community? -I like working with dbt Labs' Sean McIntyre to promote Data Vault in Europe and Victoria Mola, also from dbt Labs, is always a great help when I have questions about dbt. +I like working with dbt Labs' Sean McIntyre to promote Data Vault in Europe and Victoria Perez Mola, also from dbt Labs, is always a great help when I have questions about dbt. ## What have you learned from community members? What do you hope others can learn from you? From b50e4bef00181c6453838b3d56b5772628f036de Mon Sep 17 00:00:00 2001 From: Ly Nguyen Date: Wed, 15 Nov 2023 11:10:13 -0800 Subject: [PATCH 288/305] Remove preview --- website/docs/docs/core/connect-data-platform/fabric-setup.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/core/connect-data-platform/fabric-setup.md b/website/docs/docs/core/connect-data-platform/fabric-setup.md index aa7784d96ec..c9f3e61567d 100644 --- a/website/docs/docs/core/connect-data-platform/fabric-setup.md +++ b/website/docs/docs/core/connect-data-platform/fabric-setup.md @@ -15,7 +15,7 @@ meta: :::info -Below is a guide for use with "Synapse Data Warehouse" a new product within Microsoft Fabric (preview) ([more info](https://learn.microsoft.com/en-us/fabric/data-warehouse/data-warehousing#synapse-data-warehouse)) +Below is a guide for use with "Synapse Data Warehouse" a new product within Microsoft Fabric ([more info](https://learn.microsoft.com/en-us/fabric/data-warehouse/data-warehousing#synapse-data-warehouse)) To learn how to set up dbt with Azure Synapse Dedicated Pools, see [Microsoft Azure Synapse DWH setup](/docs/core/connect-data-platform/azuresynapse-setup) From 05cd99cb8990848890f138c10ea815d5ef46d575 Mon Sep 17 00:00:00 2001 From: Ly Nguyen Date: Wed, 15 Nov 2023 11:12:02 -0800 Subject: [PATCH 289/305] Nits --- website/docs/docs/core/connect-data-platform/fabric-setup.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docs/docs/core/connect-data-platform/fabric-setup.md b/website/docs/docs/core/connect-data-platform/fabric-setup.md index c9f3e61567d..ef5a748552d 100644 --- a/website/docs/docs/core/connect-data-platform/fabric-setup.md +++ b/website/docs/docs/core/connect-data-platform/fabric-setup.md @@ -15,9 +15,9 @@ meta: :::info -Below is a guide for use with "Synapse Data Warehouse" a new product within Microsoft Fabric ([more info](https://learn.microsoft.com/en-us/fabric/data-warehouse/data-warehousing#synapse-data-warehouse)) +Below is a guide for use with [Synapse Data Warehouse](https://learn.microsoft.com/en-us/fabric/data-warehouse/data-warehousing#synapse-data-warehouse), a new product within Microsoft Fabric. -To learn how to set up dbt with Azure Synapse Dedicated Pools, see [Microsoft Azure Synapse DWH setup](/docs/core/connect-data-platform/azuresynapse-setup) +To learn how to set up dbt with Azure Synapse Dedicated Pools, refer to [Microsoft Azure Synapse DWH setup](/docs/core/connect-data-platform/azuresynapse-setup). ::: From d1dea5e690436ea0c3c1126795979dbeac4bf309 Mon Sep 17 00:00:00 2001 From: richardgourley Date: Wed, 15 Nov 2023 20:38:14 +0100 Subject: [PATCH 290/305] Removed repeated line of text. --- website/docs/terms/data-wrangling.md | 1 - 1 file changed, 1 deletion(-) diff --git a/website/docs/terms/data-wrangling.md b/website/docs/terms/data-wrangling.md index 4a26507adfd..58034fe8e91 100644 --- a/website/docs/terms/data-wrangling.md +++ b/website/docs/terms/data-wrangling.md @@ -37,7 +37,6 @@ Structuring your data is a type of transformation that involves reformatting and - Is your data in the format you need to perform analysis on it? Does your data need to be potentially unnested? *Should you nest or objectize columns together?* - Do the column names and values look correct for your use case? -Do the column names and values look correct for your use case? If your data is not in a format that is usable, you can look into different solutions such as pivoting or using different functions to unpack lists and JSON files so that they are in a tabular format. Pivoting is helpful because it allows you to change the way your dataset is structured by rearranging the way columns, rows, and their values are displayed. dbt has a [pre-built macro](https://github.com/dbt-labs/dbt-utils/blob/main/macros/sql/pivot.sql) that makes pivoting less of a headache and more of a breeze. From 01fac977af44b303c2e3624fc0fabc30081af889 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Wed, 15 Nov 2023 19:38:56 +0000 Subject: [PATCH 291/305] Update cloud-cli-installation.md adding --no-cache-dir as installation due to [caching convo](https://dbt-labs.slack.com/archives/C051TUB7S9W/p1700077007992369?thread_ts=1700008115.722329&cid=C051TUB7S9W) --- website/docs/docs/cloud/cloud-cli-installation.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/docs/docs/cloud/cloud-cli-installation.md b/website/docs/docs/cloud/cloud-cli-installation.md index 896b3c92f75..b945bede160 100644 --- a/website/docs/docs/cloud/cloud-cli-installation.md +++ b/website/docs/docs/cloud/cloud-cli-installation.md @@ -193,13 +193,13 @@ We recommend using virtual environments (venv) to namespace `cloud-cli`. 2. Make sure you're in your virtual environment and run the following command to install the dbt Cloud CLI: ```bash - pip3 install dbt + pip install dbt --no-cache-dir ``` -3. (Optional) To revert back to dbt Core, first uninstall both the dbt Cloud CLI and dbt Core. Then reinstall dbt Core. +3. (Optional) To revert to dbt Core, first uninstall both the dbt Cloud CLI and dbt Core. Then reinstall dbt Core. ```bash - pip3 uninstall dbt-core dbt + pip uninstall dbt-core dbt pip install dbt-adapter_name --force-reinstall ``` From a3b4b5058f1a5b75fc3eb6cc0337b2ebe0a685a6 Mon Sep 17 00:00:00 2001 From: Ly Nguyen Date: Wed, 15 Nov 2023 11:40:34 -0800 Subject: [PATCH 292/305] Dark mode icon --- website/docs/guides/microsoft-fabric-qs.md | 2 +- website/static/img/icons/white/fabric.svg | 62 ++++++++++++++++++++++ 2 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 website/static/img/icons/white/fabric.svg diff --git a/website/docs/guides/microsoft-fabric-qs.md b/website/docs/guides/microsoft-fabric-qs.md index f27fcaa5c79..c7c53a2aac7 100644 --- a/website/docs/guides/microsoft-fabric-qs.md +++ b/website/docs/guides/microsoft-fabric-qs.md @@ -20,7 +20,7 @@ In this quickstart guide, you'll learn how to use dbt Cloud with Microsoft Fabri :::tip Public preview -A public preview of dbt Cloud support for Microsoft Fabric in now available! +A public preview of Microsoft Fabric in dbt Cloud is now available! ::: diff --git a/website/static/img/icons/white/fabric.svg b/website/static/img/icons/white/fabric.svg new file mode 100644 index 00000000000..b03e8cb9d01 --- /dev/null +++ b/website/static/img/icons/white/fabric.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 3acceedb6c16df40f94fb9e132bf285642749924 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Wed, 15 Nov 2023 19:44:02 +0000 Subject: [PATCH 293/305] add new eventlistener --- website/static/js/headerLinkCopy.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/website/static/js/headerLinkCopy.js b/website/static/js/headerLinkCopy.js index 66821d282cd..a41f4f4e7ce 100644 --- a/website/static/js/headerLinkCopy.js +++ b/website/static/js/headerLinkCopy.js @@ -2,12 +2,13 @@ // Get all the headers with anchor links. // The 'click' event worked over 'popstate' because click captures page triggers, as well as back/forward button triggers + // Adding the 'load' event to also capture the initial page load window.addEventListener("click", copyHeader); + window.addEventListener("load", copyHeader); // separating function from eventlistener to understand they are two separate things function copyHeader () { const headers = document.querySelectorAll("h2.anchor, h3.anchor"); - console.log("click"); headers.forEach((header) => { header.style.cursor = "pointer"; From ac5ad7b73bbe53f092ab4c37d2ae8c46ec6886be Mon Sep 17 00:00:00 2001 From: Doug Beatty <44704949+dbeatty10@users.noreply.github.com> Date: Wed, 15 Nov 2023 14:40:50 -0700 Subject: [PATCH 294/305] Fix examples for `dbt deps --add-package` (#4470) [Preview](https://docs-getdbt-com-git-dbeatty-fix-dbt-deps-add-package-dbt-labs.vercel.app/reference/commands/deps) ## What are you changing in this pull request and why? Fixing the code examples per https://github.com/dbt-labs/dbt-core/issues/9076 by using test examples from https://github.com/dbt-labs/dbt-core/pull/8408 ## Checklist - [x] Review the [Content style guide](https://github.com/dbt-labs/docs.getdbt.com/blob/current/contributing/content-style-guide.md) and [About versioning](https://github.com/dbt-labs/docs.getdbt.com/blob/current/contributing/single-sourcing-content.md#adding-a-new-version) so my content adheres to these guidelines. - [x] I've checked that the code examples work - [x] I've confirmed that the preview renders correctly --- website/docs/reference/commands/deps.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/website/docs/reference/commands/deps.md b/website/docs/reference/commands/deps.md index f4f8153c115..60ccd091ad7 100644 --- a/website/docs/reference/commands/deps.md +++ b/website/docs/reference/commands/deps.md @@ -60,28 +60,28 @@ Update your versions in packages.yml, then run dbt deps -dbt generates the `package-lock.yml` file in the _project_root_ where `packages.yml` is recorded, which contains all the resolved packages, the first time you run `dbt deps`. Each subsequent run records the packages installed in this file. If the subsequent `dbt deps` runs contain no updated packages in `depenedencies.yml` or `packages.yml`, dbt-core installs from `package-lock.yml`. +dbt generates the `package-lock.yml` file in the _project_root_ where `packages.yml` is recorded, which contains all the resolved packages, the first time you run `dbt deps`. Each subsequent run records the packages installed in this file. If the subsequent `dbt deps` runs contain no updated packages in `dependencies.yml` or `packages.yml`, dbt-core installs from `package-lock.yml`. When you update the package spec and run `dbt deps` again, the package-lock and package files update accordingly. You can run `dbt deps --lock` to update the `package-lock.yml` with the most recent dependencies from `packages`. -The `--add` flag allows you to add a package to the `packages.yml` with configurable `--version` and `--source` information. The `--dry-run` flag, when set to `False`(default), recompiles the `package-lock.yml` file after a new package is added to the `packages.yml` file. Set the flag to `True` for the changes to not persist. +The `--add-package` flag allows you to add a package to the `packages.yml` with configurable `--version` and `--source` information. The `--dry-run` flag, when set to `False`(default), recompiles the `package-lock.yml` file after a new package is added to the `packages.yml` file. Set the flag to `True` for the changes to not persist. -Examples of the `--add` flag: +Examples of the `--add-package` flag: ```shell # add package from hub (--source arg defaults to "hub") -dbt deps add --package dbt-labs/dbt_utils --version 1.0.0 +dbt deps --add-package dbt-labs/dbt_utils@1.0.0 -# add package from hub with semantic version -dbt deps add --package dbt-labs/snowplow --version ">=0.7.0,<0.8.0" +# add package from hub with semantic version range +dbt deps --add-package dbt-labs/snowplow@">=0.7.0,<0.8.0" # add package from git -dbt deps add --package https://github.com/fivetran/dbt_amplitude --version v0.3.0 --source git +dbt deps --add-package https://github.com/fivetran/dbt_amplitude@v0.3.0 --source git -# add package from local (--version not required for local) -dbt deps add --package /opt/dbt/redshift --source local +# add package from local +dbt deps --add-package /opt/dbt/redshift --source local -# add package to packages.yml WITHOUT updating package-lock.yml -dbt deps add --package dbt-labs/dbt_utils --version 1.0.0 --dry-run True +# add package to packages.yml and package-lock.yml WITHOUT actually installing dependencies +dbt deps --add-package dbt-labs/dbt_utils@1.0.0 --dry-run ``` - \ No newline at end of file + From 8694388caee89cd716e5950d07a8aba594ff25ac Mon Sep 17 00:00:00 2001 From: Doug Beatty <44704949+dbeatty10@users.noreply.github.com> Date: Wed, 15 Nov 2023 16:18:35 -0700 Subject: [PATCH 295/305] Fix config example for `dbt_project.yml` (#4443) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Previews - [Semantic models](https://docs-getdbt-com-git-dbeatty-semantic-model-conf-4886b9-dbt-labs.vercel.app/docs/build/semantic-models) ## What are you changing in this pull request and why? Within `dbt_project.yml`, resource types have dashes (`-`) instead of underscores (`_`), so we need to update this code example accordingly. ### Backstory Within the description for https://github.com/dbt-labs/docs.getdbt.com/issues/4180, I added some examples of what I _guessed_ the syntax would be, but I didn't specify that these were completely unverified guesses 😬. This particular example got missed during #4281. ### 🎩 image ## Checklist - [x] Review the [Content style guide](https://github.com/dbt-labs/docs.getdbt.com/blob/current/contributing/content-style-guide.md) and [About versioning](https://github.com/dbt-labs/docs.getdbt.com/blob/current/contributing/single-sourcing-content.md#adding-a-new-version) so my content adheres to these guidelines. - [x] I have verified that the code examples work - [x] I have checked that the preview renders correctly --------- Co-authored-by: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> --- website/docs/docs/build/semantic-models.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/website/docs/docs/build/semantic-models.md b/website/docs/docs/build/semantic-models.md index 118e93a26b1..99ccef237f9 100644 --- a/website/docs/docs/build/semantic-models.md +++ b/website/docs/docs/build/semantic-models.md @@ -123,14 +123,18 @@ semantic_models: config: enabled: true | false group: some_group + meta: + some_key: some_value ``` Semantic model config in `dbt_project.yml`: ```yml -semantic_models: +semantic-models: my_project_name: +enabled: true | false +group: some_group + +meta: + some_key: some_value ``` From 39ddb79244c38090d32993978d67476826589679 Mon Sep 17 00:00:00 2001 From: Ly Nguyen Date: Wed, 15 Nov 2023 15:41:29 -0800 Subject: [PATCH 296/305] Update prereqs for CI and GitLab --- website/docs/docs/deploy/ci-jobs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/deploy/ci-jobs.md b/website/docs/docs/deploy/ci-jobs.md index 6114ed1ca14..149a6951fdc 100644 --- a/website/docs/docs/deploy/ci-jobs.md +++ b/website/docs/docs/deploy/ci-jobs.md @@ -15,7 +15,7 @@ dbt Labs recommends that you create your CI job in a dedicated dbt Cloud [deploy - You have a dbt Cloud account. - For the [Concurrent CI checks](/docs/deploy/continuous-integration#concurrent-ci-checks) and [Smart cancellation of stale builds](/docs/deploy/continuous-integration#smart-cancellation) features, your dbt Cloud account must be on the [Team or Enterprise plan](https://www.getdbt.com/pricing/). - You must be connected using dbt Cloud’s native Git integration with [GitHub](/docs/cloud/git/connect-github), [GitLab](/docs/cloud/git/connect-gitlab), or [Azure DevOps](/docs/cloud/git/connect-azure-devops). - - If you’re using GitLab, you must use a paid or self-hosted account which includes support for GitLab webhooks. + - With GitLab, you need a paid or self-hosted account which includes support for GitLab webhooks and [project access tokens](https://docs.gitlab.com/ee/user/project/settings/project_access_tokens.html). With GitLab Free, merge requests will invoke CI jobs but CI status updates (success or failure of the job) will not be reported back to GitLab. - If you previously configured your dbt project by providing a generic git URL that clones using SSH, you must reconfigure the project to connect through dbt Cloud's native integration. From 5430026b325fe37a18ed694a97c387f6b028fea2 Mon Sep 17 00:00:00 2001 From: Cameron Afzal Date: Wed, 15 Nov 2023 18:57:42 -0800 Subject: [PATCH 297/305] correct exposure definition state in metadata docs correct exposure definition state --- website/docs/docs/dbt-cloud-apis/project-state.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/dbt-cloud-apis/project-state.md b/website/docs/docs/dbt-cloud-apis/project-state.md index a5ee71ebb1b..62136b35463 100644 --- a/website/docs/docs/dbt-cloud-apis/project-state.md +++ b/website/docs/docs/dbt-cloud-apis/project-state.md @@ -66,7 +66,7 @@ Most Discovery API use cases will favor the _applied state_ since it pertains to | Seed | Yes | Yes | Yes | Downstream | Applied & definition | | Snapshot | Yes | Yes | Yes | Upstream & downstream | Applied & definition | | Test | Yes | Yes | No | Upstream | Applied & definition | -| Exposure | No | No | No | Upstream | Applied & definition | +| Exposure | No | No | No | Upstream | Definition | | Metric | No | No | No | Upstream & downstream | Definition | | Semantic model | No | No | No | Upstream & downstream | Definition | | Group | No | No | No | Downstream | Definition | From 033de3acbc960dfa28e609c794b8f7a7dbc195e9 Mon Sep 17 00:00:00 2001 From: richardgourley Date: Thu, 16 Nov 2023 10:55:47 +0100 Subject: [PATCH 298/305] Conclusion section - fixed typo --- website/docs/terms/data-catalog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/terms/data-catalog.md b/website/docs/terms/data-catalog.md index feb529e82e6..64c6ea6448e 100644 --- a/website/docs/terms/data-catalog.md +++ b/website/docs/terms/data-catalog.md @@ -79,7 +79,7 @@ Data teams may choose to use third-party tools with data cataloging capabilities ## Conclusion -Data catalogs are a valuable asset to any data team and business as a whole. They allow people within an organization to find the data that they need when they need it and understand its quality or sensitivity. This makes communication across teams more seamless, preventing problems that impact the business in the long run. Weigh your options in terms of whether to go with open source and enterprise, trusting that the decision you land on will be best for your organization. +Data catalogs are a valuable asset to any data team and business as a whole. They allow people within an organization to find the data that they need when they need it and understand its quality or sensitivity. This makes communication across teams more seamless, preventing problems that impact the business in the long run. Weigh your options in terms of whether to go with open source or enterprise, trusting that the decision you land on will be best for your organization. ## Additional reading From 9e2954c9aba392f41add6da9726e093bdb603797 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Thu, 16 Nov 2023 10:15:41 +0000 Subject: [PATCH 299/305] Update redshift-qs.md --- website/docs/guides/redshift-qs.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/website/docs/guides/redshift-qs.md b/website/docs/guides/redshift-qs.md index 9296e6c6568..890be27e50a 100644 --- a/website/docs/guides/redshift-qs.md +++ b/website/docs/guides/redshift-qs.md @@ -57,7 +57,7 @@ You can check out [dbt Fundamentals](https://courses.getdbt.com/courses/fundamen -7. You might be asked to Configure account. For the purpose of this sandbox environment, we recommend selecting “Configure account”. +7. You might be asked to Configure account. For this sandbox environment, we recommend selecting “Configure account”. 8. Select your cluster from the list. In the **Connect to** popup, fill out the credentials from the output of the stack: - **Authentication** — Use the default which is **Database user name and password** (NOTE: IAM authentication is not supported in dbt Cloud). @@ -82,8 +82,7 @@ Now we are going to load our sample data into the S3 bucket that our Cloudformat 2. Now we are going to use the S3 bucket that you created with CloudFormation and upload the files. Go to the search bar at the top and type in `S3` and click on S3. There will be sample data in the bucket already, feel free to ignore it or use it for other modeling exploration. The bucket will be prefixed with `dbt-data-lake`. - - + 3. Click on the `name of the bucket` S3 bucket. If you have multiple S3 buckets, this will be the bucket that was listed under “Workshopbucket” on the Outputs page. From 9f19ef83e196bfa264e703a7b51d4ee30b2ff9f7 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Thu, 16 Nov 2023 10:21:25 +0000 Subject: [PATCH 300/305] Update redshift-setup.md --- website/docs/docs/core/connect-data-platform/redshift-setup.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/website/docs/docs/core/connect-data-platform/redshift-setup.md b/website/docs/docs/core/connect-data-platform/redshift-setup.md index 175d5f6a715..006f026ea94 100644 --- a/website/docs/docs/core/connect-data-platform/redshift-setup.md +++ b/website/docs/docs/core/connect-data-platform/redshift-setup.md @@ -70,8 +70,9 @@ pip is the easiest way to install the adapter: The authentication methods that dbt Core supports are: - `database` — Password-based authentication (default, will be used if `method` is not provided) -- `IAM` — IAM +- `IAM` — IAM +For dbt Cloud users, log in using the default **Database username** and **password**. This is necessary because dbt Cloud does not support `IAM` authentication. Click on one of these authentication methods for further details on how to configure your connection profile. Each tab also includes an example `profiles.yml` configuration file for you to review. From 4b74b8aa0ac82a1cae8cacbcb7efa48818922655 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Thu, 16 Nov 2023 10:46:56 +0000 Subject: [PATCH 301/305] Update connect-redshift-postgresql-alloydb.md add iam auth info to cloud setup --- .../connect-redshift-postgresql-alloydb.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/website/docs/docs/cloud/connect-data-platform/connect-redshift-postgresql-alloydb.md b/website/docs/docs/cloud/connect-data-platform/connect-redshift-postgresql-alloydb.md index 486aa787936..1aca15463e9 100644 --- a/website/docs/docs/cloud/connect-data-platform/connect-redshift-postgresql-alloydb.md +++ b/website/docs/docs/cloud/connect-data-platform/connect-redshift-postgresql-alloydb.md @@ -13,10 +13,12 @@ The following fields are required when creating a Postgres, Redshift, or AlloyDB | Port | Usually 5432 (Postgres) or 5439 (Redshift) | `5439` | | Database | The logical database to connect to and run queries against. | `analytics` | -**Note**: When you set up a Redshift or Postgres connection in dbt Cloud, SSL-related parameters aren't available as inputs. +**Note**: When you set up a Redshift or Postgres connection in dbt Cloud, SSL-related parameters aren't available as inputs. +For dbt Cloud users, please log in using the default Database username and password. Note this is because IAM authentication is not compatible with dbt Cloud. + ### Connecting via an SSH Tunnel To connect to a Postgres, Redshift, or AlloyDB instance via an SSH tunnel, select the **Use SSH Tunnel** option when creating your connection. When configuring the tunnel, you must supply the hostname, username, and port for the [bastion server](#about-the-bastion-server-in-aws). From ba611cd9231d417924280efdcb068ffe1e8c7d77 Mon Sep 17 00:00:00 2001 From: mirnawong1 <89008547+mirnawong1@users.noreply.github.com> Date: Thu, 16 Nov 2023 10:49:12 +0000 Subject: [PATCH 302/305] Update website/docs/docs/cloud/connect-data-platform/connect-redshift-postgresql-alloydb.md --- .../connect-redshift-postgresql-alloydb.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/cloud/connect-data-platform/connect-redshift-postgresql-alloydb.md b/website/docs/docs/cloud/connect-data-platform/connect-redshift-postgresql-alloydb.md index 1aca15463e9..06b9dd62f1a 100644 --- a/website/docs/docs/cloud/connect-data-platform/connect-redshift-postgresql-alloydb.md +++ b/website/docs/docs/cloud/connect-data-platform/connect-redshift-postgresql-alloydb.md @@ -17,7 +17,7 @@ The following fields are required when creating a Postgres, Redshift, or AlloyDB -For dbt Cloud users, please log in using the default Database username and password. Note this is because IAM authentication is not compatible with dbt Cloud. +For dbt Cloud users, please log in using the default Database username and password. Note this is because [`IAM` authentication](https://docs.aws.amazon.com/redshift/latest/mgmt/generating-user-credentials.html) is not compatible with dbt Cloud. ### Connecting via an SSH Tunnel From 3a11ff6eed84d59d9fcf9cbf8be1ed34aa399c1a Mon Sep 17 00:00:00 2001 From: Doug Beatty <44704949+dbeatty10@users.noreply.github.com> Date: Thu, 16 Nov 2023 05:34:23 -0700 Subject: [PATCH 303/305] Standardize links in "Related documentation" (#4464) [Preview](https://docs-getdbt-com-git-dbeatty10-patch-1-dbt-labs.vercel.app/reference/configs-and-properties#related-documentation) ## What are you changing in this pull request and why? Not all the links [here](https://docs.getdbt.com/reference/configs-and-properties#related-documentation) have a consistent look and capitalization. ### Before image ### After image ## Checklist - [x] Review the [Content style guide](https://github.com/dbt-labs/docs.getdbt.com/blob/current/contributing/content-style-guide.md) and [About versioning](https://github.com/dbt-labs/docs.getdbt.com/blob/current/contributing/single-sourcing-content.md#adding-a-new-version) so my content adheres to these guidelines. - [x] I verified the preview renders correctly --- website/docs/reference/configs-and-properties.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docs/reference/configs-and-properties.md b/website/docs/reference/configs-and-properties.md index 8a557c762ed..c6458babeaa 100644 --- a/website/docs/reference/configs-and-properties.md +++ b/website/docs/reference/configs-and-properties.md @@ -157,9 +157,9 @@ You can find an exhaustive list of each supported property and config, broken do * Model [properties](/reference/model-properties) and [configs](/reference/model-configs) * Source [properties](/reference/source-properties) and [configs](source-configs) * Seed [properties](/reference/seed-properties) and [configs](/reference/seed-configs) -* [Snapshot Properties](snapshot-properties) +* Snapshot [properties](snapshot-properties) * Analysis [properties](analysis-properties) -* [Macro Properties](/reference/macro-properties) +* Macro [properties](/reference/macro-properties) * Exposure [properties](/reference/exposure-properties) ## FAQs From 5f3a63b8becd4fc2c0cb09b71540f5aa58f8dfdb Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Thu, 16 Nov 2023 13:12:42 +0000 Subject: [PATCH 304/305] update logo --- website/docusaurus.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index ee593e568f4..760dbc2cbd1 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -193,7 +193,7 @@ var siteSettings = {

    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 <{G-I0 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 GU;o*NVBjSH literal 0 HcmV?d00001 diff --git a/website/static/img/community/spotlight/sam.jpg b/website/static/img/community/spotlight/sam.jpg new file mode 100644 index 0000000000000000000000000000000000000000..26d859efbe8a191756edeae97a5290e88b16c9a3 GIT binary patch literal 179099 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� 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%0D$yZ5(M4c}cE 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