diff --git a/web/app/components/nivo/ResponsiveBar.tsx b/web/app/components/nivo/ResponsiveBar.tsx new file mode 100644 index 0000000..6c9b60c --- /dev/null +++ b/web/app/components/nivo/ResponsiveBar.tsx @@ -0,0 +1,9 @@ +import { BarDatum, ResponsiveBar, ResponsiveBarSvgProps } from '@nivo/bar'; +import { useIsClient } from '~/hooks/useIsClient'; + +const ResponsiveBarBox = (props: ResponsiveBarSvgProps) => { + const isClient = useIsClient(); + return <>{isClient && }; +}; + +export default ResponsiveBarBox; diff --git a/web/app/components/nivo/ResponsiveLine.tsx b/web/app/components/nivo/ResponsiveLine.tsx new file mode 100644 index 0000000..4e7ddea --- /dev/null +++ b/web/app/components/nivo/ResponsiveLine.tsx @@ -0,0 +1,9 @@ +import { ResponsiveLine, LineSvgProps } from '@nivo/line'; +import { useIsClient } from '~/hooks/useIsClient'; + +const ResponsiveLineBox = (props: LineSvgProps) => { + const isClient = useIsClient(); + return <>{isClient && }; +}; + +export default ResponsiveLineBox; diff --git a/web/app/components/statistics/HoursOfTheDay.tsx b/web/app/components/statistics/HoursOfTheDay.tsx index db2f2a1..6c2c791 100644 --- a/web/app/components/statistics/HoursOfTheDay.tsx +++ b/web/app/components/statistics/HoursOfTheDay.tsx @@ -1,9 +1,10 @@ import { Box, Card, Typography, useTheme } from '@mui/joy'; -import { ResponsiveBar } from '@nivo/bar'; -import { Suspense } from 'react'; +import { Suspense, lazy } from 'react'; import type { getTopHours } from './loaders'; +const ResponsiveBar = lazy(() => import('~/components/nivo/ResponsiveBar')); + export type Hour = Awaited>[number]; export type HoursOfTheDayProps = { @@ -13,8 +14,8 @@ export type HoursOfTheDayProps = { export const HoursOfTheDay = ({ topHours }: HoursOfTheDayProps) => { const theme = useTheme(); return ( - - + + { margin={{ top: 0, right: 20, bottom: 20, left: 35 }} padding={0.05} theme={{ - textColor: theme.palette.text.primary, axis: { domain: { line: { stroke: theme.palette.background.level1 } }, }, grid: { line: { stroke: theme.palette.background.level1 }, }, + text: { + fill: theme.palette.text.primary, + }, }} tooltip={({ value }) => ( @@ -42,7 +45,7 @@ export const HoursOfTheDay = ({ topHours }: HoursOfTheDayProps) => { )} valueScale={{ type: 'linear' }} /> - - + + ); }; diff --git a/web/app/components/statistics/PageviewsTrend.tsx b/web/app/components/statistics/PageviewsTrend.tsx index 3308ce3..61bbdbb 100644 --- a/web/app/components/statistics/PageviewsTrend.tsx +++ b/web/app/components/statistics/PageviewsTrend.tsx @@ -1,9 +1,10 @@ import { Box, Card, Typography, useTheme } from '@mui/joy'; -import { ResponsiveLine } from '@nivo/line'; -import { Suspense } from 'react'; +import { Suspense, lazy } from 'react'; import type { getPageViewsTrend } from './loaders'; +const ResponsiveLine = lazy(() => import('~/components/nivo/ResponsiveLine')); + export type PageviewsTrendProps = { pageViews: Awaited>; dateGte: string; @@ -13,8 +14,8 @@ export type PageviewsTrendProps = { export const PageviewsTrend = ({ pageViews, dateGte, dateLte }: PageviewsTrendProps) => { const theme = useTheme(); return ( - - + + )} theme={{ - textColor: theme.palette.text.primary, axis: { domain: { line: { stroke: theme.palette.background.level1 } }, }, @@ -82,6 +82,9 @@ export const PageviewsTrend = ({ pageViews, dateGte, dateLte }: PageviewsTrendPr legends: { text: { fill: theme.palette.text.primary }, }, + text: { + fill: theme.palette.text.primary, + }, }} xFormat='time:%Y-%m-%d' xScale={{ @@ -94,7 +97,7 @@ export const PageviewsTrend = ({ pageViews, dateGte, dateLte }: PageviewsTrendPr }} yScale={{ type: 'linear' }} /> - - + + ); }; diff --git a/web/app/components/statistics/VisitorsTrend.tsx b/web/app/components/statistics/VisitorsTrend.tsx index f83c7fd..2fcd70a 100644 --- a/web/app/components/statistics/VisitorsTrend.tsx +++ b/web/app/components/statistics/VisitorsTrend.tsx @@ -1,9 +1,10 @@ import { Box, Card, Typography, useTheme } from '@mui/joy'; -import { ResponsiveLine } from '@nivo/line'; -import { Suspense } from 'react'; +import { Suspense, lazy } from 'react'; import type { getPageVisitorsTrend } from './loaders'; +const ResponsiveLine = lazy(() => import('~/components/nivo/ResponsiveLine')); + export type VisitorsTrendProps = { pageVisitorsTrend: Awaited>; dateGte: string; @@ -13,8 +14,8 @@ export type VisitorsTrendProps = { export const VisitorsTrend = ({ pageVisitorsTrend, dateGte, dateLte }: VisitorsTrendProps) => { const theme = useTheme(); return ( - - + + )} theme={{ - textColor: theme.palette.text.primary, axis: { domain: { line: { stroke: theme.palette.background.level1 } }, }, @@ -82,6 +82,9 @@ export const VisitorsTrend = ({ pageVisitorsTrend, dateGte, dateLte }: VisitorsT legends: { text: { fill: theme.palette.text.primary }, }, + text: { + fill: theme.palette.text.primary, + }, }} xFormat='time:%Y-%m-%d' xScale={{ @@ -94,7 +97,7 @@ export const VisitorsTrend = ({ pageVisitorsTrend, dateGte, dateLte }: VisitorsT }} yScale={{ type: 'linear' }} /> - - + + ); }; diff --git a/web/package.json b/web/package.json index b529f7a..3008b47 100644 --- a/web/package.json +++ b/web/package.json @@ -23,9 +23,9 @@ "@fontsource/public-sans": "^5.0.15", "@mui/joy": "^5.0.0-beta.15", "@neondatabase/serverless": "^0.6.0", - "@nivo/bar": "^0.83.0", - "@nivo/core": "^0.83.0", - "@nivo/line": "^0.83.0", + "@nivo/bar": "^0.83.1", + "@nivo/core": "^0.83.1", + "@nivo/line": "^0.83.1", "@olros/stats": "^2.2.1", "@prisma/adapter-neon": "^5.5.2", "@prisma/client": "^5.6.0", diff --git a/web/yarn.lock b/web/yarn.lock index e1a5f61..47c7103 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -1096,24 +1096,24 @@ dependencies: eslint-scope "5.1.1" -"@nivo/annotations@0.83.0": - version "0.83.0" - resolved "https://registry.npmjs.org/@nivo/annotations/-/annotations-0.83.0.tgz" - integrity sha512-FkfCprk1a3WCCNcQOfI2+Ww7vqTP/nJjQDVhFYf1YAaEGwXi4+OO4uJAtKtNcGE5cJWdOp+f0Gt4aNPGx7RtEw== +"@nivo/annotations@0.83.1": + version "0.83.1" + resolved "https://registry.yarnpkg.com/@nivo/annotations/-/annotations-0.83.1.tgz#e5f1c7adf48041bd4a3fc9f42c563ad228319710" + integrity sha512-GaHw3AGs9hukXD6pCHFj6y01EhGf5ja/m8Pk9qLllqlOogsOhKKDuwMToHsVLywwdjtau1gQ3+PRdqa9BhghEA== dependencies: - "@nivo/colors" "0.83.0" - "@nivo/core" "0.83.0" + "@nivo/colors" "0.83.1" + "@nivo/core" "0.83.1" "@react-spring/web" "9.4.5 || ^9.7.2" "@types/prop-types" "^15.7.2" lodash "^4.17.21" prop-types "^15.7.2" -"@nivo/axes@0.83.0": - version "0.83.0" - resolved "https://registry.npmjs.org/@nivo/axes/-/axes-0.83.0.tgz" - integrity sha512-rHMl+DdXQlY2wl7VCSQNcJi4QNISUWOkcWzJeJeVaYR73Z13SVGgiC7kW0czJuogDTSnDAJ/EcFCGmyGVuznGQ== +"@nivo/axes@0.83.1": + version "0.83.1" + resolved "https://registry.yarnpkg.com/@nivo/axes/-/axes-0.83.1.tgz#1558ca10a89beb452bb20df58bbb4678ae8f0d4d" + integrity sha512-A1wzSIJbeefFjAUluvr1pAQqEJWEFu2dIurJLNXety1pWtAIvdR44pyYZ6ovOTtmM7TFOSBHsOHvxDHnJQhQKg== dependencies: - "@nivo/core" "0.83.0" + "@nivo/core" "0.83.1" "@nivo/scales" "0.83.0" "@react-spring/web" "9.4.5 || ^9.7.2" "@types/d3-format" "^1.4.1" @@ -1123,18 +1123,18 @@ d3-time-format "^3.0.0" prop-types "^15.7.2" -"@nivo/bar@^0.83.0": - version "0.83.0" - resolved "https://registry.npmjs.org/@nivo/bar/-/bar-0.83.0.tgz" - integrity sha512-QXN6BcT1PiT/YViyoDU4G5mytbOUP1jYbuQmJhDDxKPMLNcZ/pHfThedRGVfDoD1poHBRJtV6mbgeCpAVmlTtw== - dependencies: - "@nivo/annotations" "0.83.0" - "@nivo/axes" "0.83.0" - "@nivo/colors" "0.83.0" - "@nivo/core" "0.83.0" - "@nivo/legends" "0.83.0" +"@nivo/bar@^0.83.1": + version "0.83.1" + resolved "https://registry.yarnpkg.com/@nivo/bar/-/bar-0.83.1.tgz#40ecea6b8c15d69f352047ce80d1c0b36cda9f5b" + integrity sha512-ALHmfcZrTn8NqumUWiEv3Kqh8i4zkKWy1KJ9GUxGyFBxESZFCtBHy8pktEQHQ/JJGEJLZLx64S1rKj0TZcuB3A== + dependencies: + "@nivo/annotations" "0.83.1" + "@nivo/axes" "0.83.1" + "@nivo/colors" "0.83.1" + "@nivo/core" "0.83.1" + "@nivo/legends" "0.83.1" "@nivo/scales" "0.83.0" - "@nivo/tooltip" "0.83.0" + "@nivo/tooltip" "0.83.1" "@react-spring/web" "9.4.5 || ^9.7.2" "@types/d3-scale" "^3.2.3" "@types/d3-shape" "^2.0.0" @@ -1142,12 +1142,12 @@ d3-shape "^1.3.5" lodash "^4.17.21" -"@nivo/colors@0.83.0": - version "0.83.0" - resolved "https://registry.npmjs.org/@nivo/colors/-/colors-0.83.0.tgz" - integrity sha512-n34LWYtE2hbd1fdCDP7TCHNZdbiO1PwcvXLo0VsKK5lNPY/FA5SXA7Z9Ubl/ChSwBwbzAsaAhjTy8KzKzSjDcA== +"@nivo/colors@0.83.1": + version "0.83.1" + resolved "https://registry.yarnpkg.com/@nivo/colors/-/colors-0.83.1.tgz#3f0249eb29c1ba7dd4b1facd66864fe5ca651b2f" + integrity sha512-l9Snze6xN29RKOufM3k3Po9KmBkkF5B7lnbFE9LDrcJO8fcNAd6JLSPLAz3ax51ACOlbIzJUvEd7I1nGBH8XEQ== dependencies: - "@nivo/core" "0.83.0" + "@nivo/core" "0.83.1" "@types/d3-color" "^2.0.0" "@types/d3-scale" "^3.2.3" "@types/d3-scale-chromatic" "^2.0.0" @@ -1158,49 +1158,49 @@ lodash "^4.17.21" prop-types "^15.7.2" -"@nivo/core@0.83.0", "@nivo/core@^0.83.0": - version "0.83.0" - resolved "https://registry.npmjs.org/@nivo/core/-/core-0.83.0.tgz" - integrity sha512-I9fjZAbIPz41JA2WP8Avsud/xk0iiM1nWUzcvZBDebBGFDB5Y1lrldUt9l5kvOeMth3Qj/1lVFTiJxQuojxH4Q== +"@nivo/core@0.83.1", "@nivo/core@^0.83.1": + version "0.83.1" + resolved "https://registry.yarnpkg.com/@nivo/core/-/core-0.83.1.tgz#f1ab4382a2ea8c60018422192851941a533160b2" + integrity sha512-1PunY9sH+ieCVVqB3pMjkYEMCsuiDU45CEvkfaNIYbbeeQfgVFuqGquHZXlWeBUqaDHMLRUQqpazh/95tK7Q/g== dependencies: "@nivo/recompose" "0.83.0" - "@nivo/tooltip" "0.83.0" + "@nivo/tooltip" "0.83.1" "@react-spring/web" "9.4.5 || ^9.7.2" "@types/d3-shape" "^2.0.0" d3-color "^3.1.0" d3-format "^1.4.4" - d3-interpolate "^2.0.1" + d3-interpolate "^3.0.1" d3-scale "^3.2.3" - d3-scale-chromatic "^2.0.0" + d3-scale-chromatic "^3.0.0" d3-shape "^1.3.5" d3-time-format "^3.0.0" lodash "^4.17.21" -"@nivo/legends@0.83.0": - version "0.83.0" - resolved "https://registry.npmjs.org/@nivo/legends/-/legends-0.83.0.tgz" - integrity sha512-WWl3/hTpFJ7/2L0RG53Gbr9KQk+ZjD71a/RIPMJ5ArEvAvKKfWuWQCtEm3FpqAazX8eYMnsQ3Pi17c8ohEIXRg== +"@nivo/legends@0.83.1": + version "0.83.1" + resolved "https://registry.yarnpkg.com/@nivo/legends/-/legends-0.83.1.tgz#58548f2c4e83bd1d37a89836d651f8dad8d4bfa4" + integrity sha512-cvGv72yCr8I+LLiNe+xgWN5V1fkKoP7cL+MGYoVc4JP5X4b6DN8xS6ZnoMS5ngChyWMup7CvhHt6mDdyxpHMbg== dependencies: - "@nivo/colors" "0.83.0" - "@nivo/core" "0.83.0" + "@nivo/colors" "0.83.1" + "@nivo/core" "0.83.1" "@types/d3-scale" "^3.2.3" "@types/prop-types" "^15.7.2" d3-scale "^3.2.3" prop-types "^15.7.2" -"@nivo/line@^0.83.0": - version "0.83.0" - resolved "https://registry.npmjs.org/@nivo/line/-/line-0.83.0.tgz" - integrity sha512-tF/HcUM7dRf+0uk4E0Ywg7nMYD7NsmF03tp5nIbBSB35PRFoVnczxlzHWw2qoRYwUhCFy2gL6Dyf/6kTHXnIdA== - dependencies: - "@nivo/annotations" "0.83.0" - "@nivo/axes" "0.83.0" - "@nivo/colors" "0.83.0" - "@nivo/core" "0.83.0" - "@nivo/legends" "0.83.0" +"@nivo/line@^0.83.1": + version "0.83.1" + resolved "https://registry.yarnpkg.com/@nivo/line/-/line-0.83.1.tgz#134decfc5536d40093fa96c4c70b9ca26cdbf483" + integrity sha512-D8O3SfgrDs8npdVRnL0gUCH7jsQaqsysvGBco4cMxaEKynPAphKUt9D3rBBGotqw57+Ex14MNw3ythrzWlW/OA== + dependencies: + "@nivo/annotations" "0.83.1" + "@nivo/axes" "0.83.1" + "@nivo/colors" "0.83.1" + "@nivo/core" "0.83.1" + "@nivo/legends" "0.83.1" "@nivo/scales" "0.83.0" - "@nivo/tooltip" "0.83.0" - "@nivo/voronoi" "0.83.0" + "@nivo/tooltip" "0.83.1" + "@nivo/voronoi" "0.83.1" "@react-spring/web" "9.4.5 || ^9.7.2" d3-shape "^1.3.5" prop-types "^15.7.2" @@ -1228,20 +1228,20 @@ d3-time-format "^3.0.0" lodash "^4.17.21" -"@nivo/tooltip@0.83.0": - version "0.83.0" - resolved "https://registry.npmjs.org/@nivo/tooltip/-/tooltip-0.83.0.tgz" - integrity sha512-HewujRqZNmcVnAv/LPLVyYwViad+rYTsFMdzLRzuTPq2hju1R+cfxokTomunG8e1SDtUPtULEVXtPg2ATIzNYg== +"@nivo/tooltip@0.83.1": + version "0.83.1" + resolved "https://registry.yarnpkg.com/@nivo/tooltip/-/tooltip-0.83.1.tgz#84f330856b296f46c9150614b960fe0292a5d740" + integrity sha512-r266BQhWWtb8FOWyYD0HrlF+xdiKo1XR4uhCYXqARtWSuCUmovBKFUmDGdfMDvLTFnUQYJ6hUbFO7VYp+5AQ9g== dependencies: - "@nivo/core" "0.83.0" + "@nivo/core" "0.83.1" "@react-spring/web" "9.4.5 || ^9.7.2" -"@nivo/voronoi@0.83.0": - version "0.83.0" - resolved "https://registry.npmjs.org/@nivo/voronoi/-/voronoi-0.83.0.tgz" - integrity sha512-wVpskesX2IEJHG82v0rbIUZ2y3MpvzTYM+DQl2gx8K1/Hucxwzk5ltg/aF9e/gfKU8gt24uct3M9TQTEfyhzgg== +"@nivo/voronoi@0.83.1": + version "0.83.1" + resolved "https://registry.yarnpkg.com/@nivo/voronoi/-/voronoi-0.83.1.tgz#31d7413bedac2708609fea56d5827b485220a38a" + integrity sha512-PHzOdECRN0Yyly62xjL8FUxI3GvqF33d50OK2NQILLa9/LADTUHwY70VIUhZ+/lPxcZ2H/kA4DBGzsgEMyBuVQ== dependencies: - "@nivo/core" "0.83.0" + "@nivo/core" "0.83.1" "@types/d3-delaunay" "^5.3.0" "@types/d3-scale" "^3.2.3" d3-delaunay "^5.3.0" @@ -2669,12 +2669,12 @@ d3-array@2, d3-array@^2.3.0: "d3-color@1 - 2": version "2.0.0" - resolved "https://registry.npmjs.org/d3-color/-/d3-color-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-2.0.0.tgz#8d625cab42ed9b8f601a1760a389f7ea9189d62e" integrity sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ== -d3-color@^3.1.0: +"d3-color@1 - 3", d3-color@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-3.1.0.tgz#395b2833dfac71507f12ac2f7af23bf819de24e2" integrity sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA== d3-delaunay@^5.3.0: @@ -2686,21 +2686,28 @@ d3-delaunay@^5.3.0: "d3-format@1 - 2": version "2.0.0" - resolved "https://registry.npmjs.org/d3-format/-/d3-format-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-2.0.0.tgz#a10bcc0f986c372b729ba447382413aabf5b0767" integrity sha512-Ab3S6XuE/Q+flY96HXT0jOXcM4EAClYFnRGY5zsjRGNy6qCYrQsMffs7cV5Q9xejb35zxW5hf/guKw34kvIKsA== d3-format@^1.4.4: version "1.4.5" - resolved "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz" + resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.4.5.tgz#374f2ba1320e3717eb74a9356c67daee17a7edb4" integrity sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ== -"d3-interpolate@1 - 2", "d3-interpolate@1.2.0 - 2", d3-interpolate@^2.0.1: +"d3-interpolate@1 - 2", "d3-interpolate@1.2.0 - 2": version "2.0.1" - resolved "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-2.0.1.tgz#98be499cfb8a3b94d4ff616900501a64abc91163" integrity sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ== dependencies: d3-color "1 - 2" +"d3-interpolate@1 - 3", d3-interpolate@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz#3c47aa5b32c5b3dfb56ef3fd4342078a632b400d" + integrity sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g== + dependencies: + d3-color "1 - 3" + d3-path@1: version "1.0.9" resolved "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz" @@ -2708,12 +2715,20 @@ d3-path@1: d3-scale-chromatic@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/d3-scale-chromatic/-/d3-scale-chromatic-2.0.0.tgz#c13f3af86685ff91323dc2f0ebd2dabbd72d8bab" integrity sha512-LLqy7dJSL8yDy7NRmf6xSlsFZ6zYvJ4BcWFE4zBrOPnQERv9zj24ohnXKRbyi9YHnYV+HN1oEO3iFK971/gkzA== dependencies: d3-color "1 - 2" d3-interpolate "1 - 2" +d3-scale-chromatic@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz#15b4ceb8ca2bb0dcb6d1a641ee03d59c3b62376a" + integrity sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g== + dependencies: + d3-color "1 - 3" + d3-interpolate "1 - 3" + d3-scale@^3.2.3: version "3.3.0" resolved "https://registry.npmjs.org/d3-scale/-/d3-scale-3.3.0.tgz" @@ -2741,14 +2756,14 @@ d3-shape@^1.3.5: "d3-time@1 - 2", d3-time@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/d3-time/-/d3-time-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-2.1.1.tgz#e9d8a8a88691f4548e68ca085e5ff956724a6682" integrity sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ== dependencies: d3-array "2" d3-time@^1.0.11: version "1.1.0" - resolved "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.1.0.tgz#b1e19d307dae9c900b7e5b25ffc5dcc249a8a0f1" integrity sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA== damerau-levenshtein@^1.0.8: