From 662673e7c0bdab67f00aacc48fa9ea417012be86 Mon Sep 17 00:00:00 2001 From: Jay Varner Date: Tue, 30 Apr 2024 10:25:29 -0400 Subject: [PATCH] Use Vite and deploy to AWS --- .dockerignore | 1 + .github/workflows/deploy.sh | 18 + .github/workflows/deploy.yml | 36 + Dockerfile | 8 + app/components/dubois/DoubleSlideShow.tsx | 113 ++- app/components/dubois/HoverImages1.tsx | 42 +- app/components/dubois/HoverImages2.tsx | 39 +- app/components/layout/SlideShow.tsx | 92 ++- ...rMap.tsx => PromotionalTourMap.client.tsx} | 0 ...lonialMaps.tsx => ColonialMaps.client.tsx} | 22 +- app/index.css | 560 +++++++++++++ app/root.tsx | 11 +- app/routes/chapters.peabody.tsx | 5 +- app/routes/chapters.shanawdithit.tsx | 9 +- app/styles/fonts.css | 273 ------- app/styles/tailwind.css | 296 ------- package-lock.json | 762 ++++-------------- package.json | 18 +- postcss.config.js | 6 + remix.config.js | 57 -- server.js | 78 +- tailwind.config.js | 2 +- tsconfig.json | 1 + vite.config.ts | 59 ++ 24 files changed, 1110 insertions(+), 1398 deletions(-) create mode 120000 .dockerignore create mode 100644 .github/workflows/deploy.sh create mode 100644 .github/workflows/deploy.yml create mode 100644 Dockerfile rename app/components/peabody/{PromotionalTourMap.tsx => PromotionalTourMap.client.tsx} (100%) rename app/components/shanawdithit/{ColonialMaps.tsx => ColonialMaps.client.tsx} (73%) create mode 100644 app/index.css delete mode 100644 app/styles/fonts.css delete mode 100644 app/styles/tailwind.css create mode 100644 postcss.config.js delete mode 100644 remix.config.js create mode 100644 vite.config.ts diff --git a/.dockerignore b/.dockerignore new file mode 120000 index 00000000..3e4e48b0 --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +.gitignore \ No newline at end of file diff --git a/.github/workflows/deploy.sh b/.github/workflows/deploy.sh new file mode 100644 index 00000000..9b3a9017 --- /dev/null +++ b/.github/workflows/deploy.sh @@ -0,0 +1,18 @@ +#!/bin/bash +echo "Running deploy script" + +TAG=$([ "$BRANCH" = "main" ] && echo "latest" || echo "dev") + +echo "Logging in to AWS" +aws ecr get-login-password --region us-east-1 | \ +docker login --username AWS --password-stdin "${AWS_ECR}" +echo "Logged in successfully" + +echo "Building and tagging Docker image" +docker build -t readux-dev --no-cache . +docker tag readux-dev "${AWS_ECR}:${TAG}" + +echo "Pushing image" +docker push "${AWS_ECR}:${TAG}" + +echo "Pushed succesfully" \ No newline at end of file diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 00000000..ce9793a2 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,36 @@ +name: Deploy + +on: + push: + branches: + - main + - dev + +permissions: + id-token: write # This is required for requesting the JWT + contents: read # This is required for actions/checkout + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Checkout Docker configs + run: | + mv ./.github/workflows/deploy.sh . + chmod +x deploy.sh + + - name: Configure AWS credentials from AWS account + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ secrets.AWS_ROLE }} + aws-region: us-east-1 + role-session-name: GitHub-OIDC-frontend + + - name: Run Deploy + env: + BRANCH: ${GITHUB_REF##*/} + AWS_ECR: ${{ secrets.AWS_ECR }} + run: ./deploy.sh diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..8d05d276 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,8 @@ +FROM node:20.12.1-slim +WORKDIR /dxd +COPY . . +RUN rm package-lock.json +RUN npm install +RUN npm run build +EXPOSE 3000 +CMD ["npm", "start"] \ No newline at end of file diff --git a/app/components/dubois/DoubleSlideShow.tsx b/app/components/dubois/DoubleSlideShow.tsx index c1f28079..3a6f16fe 100644 --- a/app/components/dubois/DoubleSlideShow.tsx +++ b/app/components/dubois/DoubleSlideShow.tsx @@ -3,67 +3,94 @@ import { useDeviceContext } from "~/hooks"; import { leftControls, rightControls, noControl } from "../layout/SlideShow"; import figures from "~/data/figures/dubois.json"; import FigureModal from "../layout/FigureModal"; +import { ClientOnly } from "remix-utils/client-only"; const figureGroups = [ { figures: [figures["service-pnp-cph-3"], figures["925"]], - caption: "Side-by-side of photograph of African American men, women and children outside of church and chart of Statistics of Negro Church Organizations." + caption: + "Side-by-side of photograph of African American men, women and children outside of church and chart of Statistics of Negro Church Organizations.", }, { figures: [figures["service-pnp-cph-4"], figures["ch5-05d-newspapers"]], - caption: "Side-by-side of photograph of Press room of the Planet newspaper, Richmond, Virginia and chart of American Negro newspapers and periodicals." + caption: + "Side-by-side of photograph of Press room of the Planet newspaper, Richmond, Virginia and chart of American Negro newspapers and periodicals.", }, { figures: [figures["service-pnp-cph-1"], figures["888"]], - caption: "Side-by-side of photograph Portrait of African American Carpenters union, Jacksonville, Florida and chart of Occupations of Georgia Negroes." + caption: + "Side-by-side of photograph Portrait of African American Carpenters union, Jacksonville, Florida and chart of Occupations of Georgia Negroes.", }, { figures: [figures["service-pnp-cph-2"], figures["879"]], - caption: "Side-by-side of photograph Extempo club of Fisk University, Nashville, Tenn. and chart of Number of Negro students taking the various courses of study offered in Georgia schools." - } -] + caption: + "Side-by-side of photograph Extempo club of Fisk University, Nashville, Tenn. and chart of Number of Negro students taking the various courses of study offered in Georgia schools.", + }, +]; function DoubleSlideShow() { const { isMobile, isDesktop } = useDeviceContext(); return ( - - {figureGroups?.map((group) => { - return ( -
- {group.figures.map((figure) => { - return ( - - - - - {figure.altText?.replace(/(<i|<\/i>)/gi, '"') ?? figure.title?.replace(/(|<\/i>)/gi, '"') ?? ""} - title={figure.title?.replace(/(|<\/i>)/gi, '"') ?? ""} - /> - - - ) - })} -
-
- ) - })} -
+ + {() => ( + + {figureGroups?.map((group) => { + return ( +
+ {group.figures.map((figure) => { + return ( + + + + + {|<\/i>)/gi, '"') ?? + figure.title?.replace(/(|<\/i>)/gi, '"') ?? + "" + } + title={ + figure.title?.replace(/(|<\/i>)/gi, '"') ?? "" + } + /> + + + ); + })} +
+
+ ); + })} +
+ )} +
); } -export default DoubleSlideShow; \ No newline at end of file +export default DoubleSlideShow; diff --git a/app/components/dubois/HoverImages1.tsx b/app/components/dubois/HoverImages1.tsx index 1ac9bd7b..c1e17aed 100644 --- a/app/components/dubois/HoverImages1.tsx +++ b/app/components/dubois/HoverImages1.tsx @@ -3,6 +3,7 @@ import FigureObj from "../layout/FigureObj"; import { useContext, useEffect, useState } from "react"; import { ChapterContext } from "~/chapterContext"; import figures from "~/data/figures/dubois.json"; +import { ClientOnly } from "remix-utils/client-only"; const FIGURES = [ figures["ch5-03-georgia"], @@ -10,7 +11,7 @@ const FIGURES = [ figures["ch5-04b-illiteracy"], figures["ch5-04c-owners"], figures["ch5-06a-letter"], -] +]; export default function HoverImages1() { const { hoverState } = useContext(ChapterContext); @@ -27,26 +28,35 @@ export default function HoverImages1() { case "Owners": setCurrentHover(3); break; - case "Value": - setCurrentHover(4); - break; + case "Value": + setCurrentHover(4); + break; } }, [hoverState, setCurrentHover]); return (
- - {FIGURES.map((figure, index) => { - return ( - - ) - })} - + + {() => ( + + {FIGURES.map((figure, index) => { + return ( + + ); + })} + + )} +
); } diff --git a/app/components/dubois/HoverImages2.tsx b/app/components/dubois/HoverImages2.tsx index 2edc815c..7a0311dd 100644 --- a/app/components/dubois/HoverImages2.tsx +++ b/app/components/dubois/HoverImages2.tsx @@ -3,6 +3,7 @@ import { ChapterContext } from "~/chapterContext"; import Carousel from "nuka-carousel"; import FigureObj from "../layout/FigureObj"; import figures from "~/data/figures/dubois.json"; +import { ClientOnly } from "remix-utils/client-only"; const FIGURES = [ figures["ch5-05a-countries"], @@ -75,23 +76,27 @@ export default function HoverImages2() { return (
- - {FIGURES.map((figure, index) => { - return ( - - ); - })} - + + {() => ( + + {FIGURES.map((figure, index) => { + return ( + + ); + })} + + )} +
); } diff --git a/app/components/layout/SlideShow.tsx b/app/components/layout/SlideShow.tsx index 48cca716..a3431d0f 100644 --- a/app/components/layout/SlideShow.tsx +++ b/app/components/layout/SlideShow.tsx @@ -3,6 +3,7 @@ import { useDeviceContext } from "~/hooks"; import type { ControlProps } from "nuka-carousel"; import type { ReactElement } from "react"; import type { TFigure } from "~/types/figureType"; +import { ClientOnly } from "remix-utils/client-only"; interface Props { figures?: Array; @@ -29,10 +30,7 @@ export const leftControls = ({ ); }; -export const rightControls = ({ - nextDisabled, - nextSlide, -}: ControlProps) => { +export const rightControls = ({ nextDisabled, nextSlide }: ControlProps) => { return (
- ) -} + ); +}; export const noControl = () => { - return ( - <> - ) -} - + return <>; +}; const SlideShow = ({ figures, className, children }: Props) => { const { isMobile, isDesktop } = useDeviceContext(); return (
- - {figures?.map((figure) => { - return ( -
- - - - {figure.altText - -
-
- ) - })} - {children} -
+ + {() => ( + + {figures?.map((figure) => { + return ( +
+ + + + {figure.altText + +
+
+ ); + })} + {children} +
+ )} +
- ) -} + ); +}; export default SlideShow; diff --git a/app/components/peabody/PromotionalTourMap.tsx b/app/components/peabody/PromotionalTourMap.client.tsx similarity index 100% rename from app/components/peabody/PromotionalTourMap.tsx rename to app/components/peabody/PromotionalTourMap.client.tsx diff --git a/app/components/shanawdithit/ColonialMaps.tsx b/app/components/shanawdithit/ColonialMaps.client.tsx similarity index 73% rename from app/components/shanawdithit/ColonialMaps.tsx rename to app/components/shanawdithit/ColonialMaps.client.tsx index eb4e473b..7607a5fd 100644 --- a/app/components/shanawdithit/ColonialMaps.tsx +++ b/app/components/shanawdithit/ColonialMaps.client.tsx @@ -4,13 +4,9 @@ import { ChapterContext } from "~/chapterContext"; import FigureObj from "../layout/FigureObj"; import figures from "~/data/figures/shanawdithit.json"; -const FIGURES = [ - figures["Willard1"], - figures["Willard2"], - figures["Willard9"], -]; +const FIGURES = [figures["Willard1"], figures["Willard2"], figures["Willard9"]]; -export default function ColonialMaps() { +const ColonialMaps = () => { const { hoverState } = useContext(ChapterContext); const [currentHover, setCurrentHover] = useState(0); @@ -28,7 +24,6 @@ export default function ColonialMaps() { } }, [hoverState, setCurrentHover]); - return (
{FIGURES.map((figure, index) => { return ( - - ) + + ); })}
); -} +}; + +export default ColonialMaps; diff --git a/app/index.css b/app/index.css new file mode 100644 index 00000000..458e8f0a --- /dev/null +++ b/app/index.css @@ -0,0 +1,560 @@ +@import url("https://use.typekit.net/lnq8wua.css"); +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer utilities { + .small-caps { + font-variant-caps: all-small-caps; + } + + .bg-gradient { + background-image: url("/images/8-dark@tinypng.7abc66a1.png"); + } +} + +.first-paragraph::first-letter { + float: left; + font-family: VTC Du Bois, serif !important; + font-feature-settings: "ss06" !important; + font-size: 6rem; + line-height: 3.5rem; + font-weight: bold; + padding: 1rem 0.75rem 0rem 0rem; +} + +.cardPlayfair:hover, +.cardPlayfair:focus { + background-size: cover; + background: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), + url("/images/playfair/1-northamerica.jpg") center; +} + +.cardBrooks:hover, +.cardBrooks:focus { + background-size: cover; + background: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), + url("/images/description/1-sof_slaveship.jpg") center; +} + +.cardPeabody:hover, +.cardPeabody:focus { + background-size: cover; + background: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), + url("/images/peabody/1500s.jpg") center; +} + +.cardShanawdithit:hover, +.cardShanawdithit:focus { + background-size: cover; + background: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), + url("/images/peabody/ch4-13-willard.jpg") center; +} + +.cardDubois:hover, +.cardDubois:focus { + background-size: cover; + background: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), + url("/images/dubois/ch5-01-phila.jpg") center; +} + +.cardLabour:hover, +.cardLabour:focus { + background-size: cover; + background: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), + url("/images/peabody/railroadscaled.jpg") center; +} + +.grid-wrapper { + display: grid; + grid-template-columns: 1fr min(111ch, 100%) 1fr; +} + +.grid-wrapper>* { + grid-column: 2; +} + +.column-grid-wrapper { + display: grid; + grid-template-columns: 1fr min(45ch, 100%) 1fr; +} + +.column-grid-wrapper>* { + grid-column: 2; +} + +.scrollytell .column-grid-wrapper { + display: block; + grid-template-columns: unset; +} + +.left-bleed { + width: 100%; + grid-column: 1 / 2; +} + +.right-bleed { + width: 100%; + grid-column: 2 / 4; +} + +.full-bleed { + width: 100%; + grid-column: 1 / 4; +} + +.footnote { + cursor: pointer; + display: inline-block; + font-family: "VTC Du Bois"; + vertical-align: middle; + font-size: 0.75rem; + line-height: 1.25rem; + border-radius: 50%; + min-width: 1.25rem; + height: 1.25rem; + margin-left: 0.25rem; + margin-bottom: 0.2rem; + text-align: center; +} + +.cut-corners { + clip-path: polygon(0 10px, + 10px 0, + calc(100% - 10px) 0, + 100% 10px, + 100% calc(100% - 10px), + calc(100% - 10px) 100%, + 10px 100%, + 0 calc(100% - 10px)); +} + +.scrollytell-shape-focus { + transition: cx 0.7s, cy 0.7s, rx 0.7s, ry 0.7s, x 0.7s, y 0.7s, height 0.7s, + width 0.7s; +} + +main p { + margin: 0.75rem auto; + line-height: 1.75rem; + letter-spacing: 0.025em; +} + +.se { + stroke-dasharray: 0 30 30; +} + +.nw { + stroke-dasharray: 30 30 0; +} + +.sw { + stroke-dasharray: 0 60 30; +} + +.ne { + stroke-dasharray: 30 0 30; +} + +.w { + stroke-dasharray: 0 90 0; +} + +.n { + stroke-dasharray: 30 90; +} + +.s { + stroke-dasharray: 0 60 30 30; +} + +.e { + stroke-dasharray: 0 30 30 60; +} + +.c { + stroke-dasharray: 0 120; +} + +.top { + stroke-dasharray: 30 0 30 30; +} + +.middle { + stroke-dasharray: 0 30 0; +} + +html { + scroll-padding-top: 3em; +} + +tspan:focus { + outline: none; + text-decoration: underline; +} + +svg.actor-button:focus { + outline: none; +} + +input[type="range"] { + box-sizing: border-box; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + width: 4000px; + margin: 0; + padding: 0 2px; + /* Add some L/R padding to ensure box shadow of handle is shown */ + overflow: hidden; + border: 0; + border-radius: 0.5px; + outline: none; + background: linear-gradient(white, white) no-repeat center; + /* Use a linear gradient to generate only the 2px height background */ + background-size: 100% 2px; + pointer-events: none; +} + +input[type="range"]:active, +input[type="range"]:focus { + outline: none; +} + +input[type="range"]::-webkit-slider-thumb { + height: 28px; + width: 28px; + border-radius: 28px; + background-color: white; + position: relative; + margin: 5px 0; + /* Add some margin to ensure box shadow is shown */ + cursor: pointer; + -webkit-appearance: none; + appearance: none; + pointer-events: all; + box-shadow: 0 1px 4px 0.5px rgba(0, 0, 0, 0.25); +} + +input[type="range"]::-webkit-slider-thumb::before { + content: " "; + display: block; + position: absolute; + top: 13px; + left: 100%; + width: 2000px; + height: 2px; +} + +.multi-range { + position: relative; + height: 50px; +} + +.multi-range input[type="range"] { + position: absolute; +} + +.multi-range input[type="range"]:nth-child(1)::-webkit-slider-thumb::before { + background-color: red; +} + +.multi-range input[type="range"]:nth-child(2) { + /* background: none; */ +} + +.multi-range input[type="range"]:nth-child(2)::-webkit-slider-thumb::before { + background-color: grey; +} + +:target { + scroll-margin-top: 100px; +} + +/* + The following might be added to Tailwind soon: + https://github.com/tailwindlabs/tailwindcss/discussions/12127 +*/ +@supports (overflow-wrap: anywhere) { + .break-anywhere { + overflow-wrap: anywhere; + } +} + +@supports not (overflow-wrap: anywhere) { + .break-anywhere { + word-break: break-word; + } +} + +@font-face { + font-family: "Maranallo"; + src: url("/fonts/Maranallo/Maranallo.ttf") format("truetype"); +} + +@font-face { + font-family: "Chancery Cursive"; + src: url("/fonts/Chancery/Chancery_Cursive_Italic.ttf") format("truetype"); +} + +@font-face { + font-family: "DxD Icons"; + src: url("/fonts/DxDIcons/DxDIcons-Regular.ttf") format("truetype"); +} + +/* ############### dubois ##############*/ +/* normal */ + +@font-face { + font-family: "VTC Du Bois"; + src: url("/fonts/VTCDubois/VTCDuBois-Bold.woff") format("woff"), + url("/fonts/VTCDubois/VTCDuBois-Bold.woff2") format("woff2"); + font-weight: bold; + font-style: normal; + font-feature-settings: 'ss06' on; +} + +@font-face { + font-family: "VTC Du Bois"; + src: url("/fonts/VTCDubois/VTCDuBois-Regular.woff") format("woff"), + url("/fonts/VTCDubois/VTCDuBois-Regular.woff2") format("woff2"); + font-weight: normal; + font-style: normal; + font-feature-settings: 'ss06' on; +} + +@font-face { + font-family: "VTC Du Bois"; + src: url("/fonts/VTCDubois/VTCDuBois-Italic.woff") format("woff"), + url("/fonts/VTCDubois/VTCDuBois-Italic.woff") format("woff2"); + font-weight: normal; + font-style: italic; + font-feature-settings: 'ss06' on; +} + +@font-face { + font-family: "VTC Du Bois RItalic"; + src: url("/fonts/VTCDubois/VTCDuBois-RItalic.woff") format("woff"), + url("/fonts/VTCDubois/VTCDuBois-RItalic.woff") format("woff2"); + font-weight: normal; + font-style: oblique; + font-feature-settings: 'ss06' on; +} + +@font-face { + font-family: "VTC Du Bois Bold RItalic"; + src: url("/fonts/VTCDubois/VTCDuBois-BoldRitalic.woff") format("woff"), + url("/fonts/VTCDubois/VTCDuBois-BoldRitalic.woff2") format("woff2"); + font-weight: bold; + font-style: oblique; + font-feature-settings: 'ss06' on; +} + + +@font-face { + font-family: "VTC Du Bois Bold Italic"; + src: url("/fonts/VTCDubois/VTCDuBois-BoldItalic.woff") format("woff"), + url("/fonts/VTCDubois/VTCDuBois-BoldItalic.woff2") format("woff2"); + font-weight: bold; + font-style: italic; +} + +@font-face { + font-family: "VTC Du Bois"; + src: url("/fonts/VTCDubois/VTCDuBois-Light.woff") format("woff"), + url("/fonts/VTCDubois/VTCDuBois-Light.woff2") format("woff2"); + font-weight: 200; + font-style: normal; + +} + + + +@font-face { + font-family: "VTC Du Bois Light Italic"; + src: url("/fonts/VTCDubois/VTCDuBois-LightItalic.woff") format("woff"), + url("/fonts/VTCDubois/VTCDuBois-LightItalic.woff2") format("woff2"); + font-weight: light; + font-style: italic; +} + + + + +/* ======== wide ======== */ +@font-face { + font-family: "VTC Du Bois Bold Wide"; + src: url("/fonts/VTCDubois/VTCDuBois-BoldWide.woff") format("woff"), + url("/fonts/VTCDubois/VTCDuBois-BoldWide.woff2") format("woff2"); + font-weight: bold; + +} + +@font-face { + font-family: "VTC Du Bois Italic Wide"; + src: url("/fonts/VTCDubois/VTCDuBois-ItalicWide.woff") format("woff"), + url("/fonts/VTCDubois/VTCDuBois-ItalicWide.woff2") format("woff2"); + font-style: italic; + +} + + +@font-face { + font-family: "VTC Du Bois Bold Italic Wide"; + src: url("/fonts/VTCDubois/VTCDuBois-BoldItalicWide.woff") format("woff"), + url("/fonts/VTCDubois/VTCDuBois-BoldItalicWide.woff2") format("woff2"); + font-weight: bold; + font-style: italic; + +} + +@font-face { + font-family: "VTC Du Bois Bold RItalic Wider"; + src: url("/fonts/VTCDubois/VTCDuBois-BoldRitalicWide.woff") format("woff"), + url("/fonts/VTCDubois/VTCDuBois-BoldRitalicWide.woff2") format("woff2"); + font-weight: bold; + font-style: oblique; + +} + +@font-face { + font-family: "VTC Du Bois Wide"; + src: url("/fonts/VTCDubois/VTCDuBois-RegularWide.woff") format("woff"), + url("/fonts/VTCDubois/VTCDuBois-RegularWide.woff2") format("woff2"); + font-weight: 400; + +} + +@font-face { + font-family: "VTC Du Bois Light Wide"; + src: url("/fonts/VTCDubois/VTCDuBois-LightWide.woff") format("woff"), + url("/fonts/VTCDubois/VTCDuBois-LightWide.woff2") format("woff2"); + font-weight: lighter; + +} + + +/* ------ narrow ------ */ + +@font-face { + font-family: "VTC Du Bois Narrow"; + src: url("/fonts/VTCDubois/VTCDuBois-RegularNarrow.woff") format("woff"), + url("/fonts/VTCDubois/VTCDuBois-RegularNarrow.woff2") format("woff2"); + font-weight: normal; + +} + + +@font-face { + font-family: "VTC Du Bois Bold Narrow"; + src: url("/fonts/VTCDubois/VTCDuBois-BoldNarrow.woff") format("woff"), + url("/fonts/VTCDubois/VTCDuBois-BoldNarrow.woff2") format("woff2"); + font-weight: bold; + +} + +@font-face { + font-family: "VTC Du Bois Light Narrow"; + src: url("/fonts/VTCDubois/VTCDuBois-LightNarrow.woff") format("woff"), + url("/fonts/VTCDubois/VTCDuBois-LightNarrow.woff2") format("woff2"); + font-weight: lighter; + +} + +@font-face { + font-family: "VTC Du Bois Light Italic Narrow"; + src: url("/fonts/VTCDubois/VTCDuBois-LightItalicNarrow.woff") format("woff"), + url("/fonts/VTCDubois/VTCDuBois-LightItalicNarrow.woff2") format("woff2"); + font-style: italic; + font-weight: lighter; + +} + + +@font-face { + font-family: "VTC Du Bois Italic Narrow"; + src: url("/fonts/VTCDubois/VTCDuBois-ItalicNarrow.woff") format("woff"), + url("/fonts/VTCDubois/VTCDuBois-ItalicNarrow.woff2") format("woff2"); + font-style: italic; + +} + +@font-face { + font-family: "VTC Du Bois Bold Italic Narrow"; + src: url("/fonts/VTCDubois/VTCDuBois-BoldItalicNarrow.woff") format("woff"), + url("/fonts/VTCDubois/VTCDuBois-BoldItalicNarrow.woff2") format("woff2"); + font-weight: bold; + font-style: italic; + +} + +@font-face { + font-family: "VTC Du Bois Bold RItalic Narrow"; + src: url("/fonts/VTCDubois/VTCDuBois-BoldRitalicNarrow.woff") format("woff"), + url("/fonts/VTCDubois/VTCDuBois-BoldRitalicNarrow.woff2") format("woff2"); + font-weight: bold; + font-style: oblique; +} + +@font-face { + font-family: "PPNeueMontreal"; + src: url("/fonts/NeueMontreal/PPNeueMontreal-Regular.woff") format("woff"), + url("/fonts/NeueMontreal/PPNeueMontreal-Regular.woff2") format("woff2"); + font-weight: normal +} + +@font-face { + font-family: "PPNeueMontreal Light"; + src: url("/fonts/NeueMontreal/PPNeueMontreal-Light.woff") format("woff"), + url("/fonts/NeueMontreal/PPNeueMontreal-Light.woff2") format("woff2"); + font-weight: lighter; +} + +@font-face { + font-family: "PPNeueMontreal Bold"; + src: url("/fonts/NeueMontreal/PPNeueMontreal-Bold.woff") format("woff"), + url("/fonts/NeueMontreal/PPNeueMontreal-Bold.woff2") format("woff2"); + font-weight: bold; +} + +/* Neue Haas Unica from Typekit */ + + + +@font-face { + font-family: neue-haas-unica, sans-serif; + font-weight: 600; + font-style: italic; +} + +@font-face { + font-family: neue-haas-unica, sans-serif; + font-weight: 600; + font-style: normal; +} + +@font-face { + font-family: neue-haas-unica, sans-serif; + font-weight: 500; + font-style: italic; +} + +@font-face { + font-family: neue-haas-unica, sans-serif; + font-weight: 500; + font-style: normal; +} + +@font-face { + font-family: neue-haas-unica, sans-serif; + font-weight: 400; + font-style: italic; +} + +@font-face { + font-family: neue-haas-unica, sans-serif; + font-weight: 400; + font-style: normal; +} + +/* ------ end ------ */ \ No newline at end of file diff --git a/app/root.tsx b/app/root.tsx index d28f4cec..75771b97 100644 --- a/app/root.tsx +++ b/app/root.tsx @@ -3,15 +3,14 @@ import type { LinksFunction, MetaFunction } from "@remix-run/node"; import { Links, - LiveReload, Meta, Outlet, Scripts, ScrollRestoration, } from "@remix-run/react"; import Navbar from "./components/Navbar.client"; -import styles from "~/styles/tailwind.css"; -import fontStyles from "../styles/fonts.css"; +// @ts-ignore +import styles from "./index.css?url"; import ScrollToHashElement from "./components/ScrollToHashElement"; import LinkToMain from "./components/layout/LinkToMain"; import { ClientOnly } from "remix-utils/client-only"; @@ -25,10 +24,7 @@ export const meta: MetaFunction = () => { }; export const links: LinksFunction = () => { - return [ - { rel: "stylesheet", href: styles }, - { rel: "stylesheet", href: fontStyles }, - ]; + return [{ rel: "stylesheet", href: styles }]; }; export default function App() { @@ -58,7 +54,6 @@ export default function App() { - ); diff --git a/app/routes/chapters.peabody.tsx b/app/routes/chapters.peabody.tsx index 69254467..ae2dd3f7 100644 --- a/app/routes/chapters.peabody.tsx +++ b/app/routes/chapters.peabody.tsx @@ -8,7 +8,7 @@ import TwoColumnLayout from "~/components/layout/TwoColumnLayout"; import Column from "~/components/layout/Column"; import CenteredLayout from "~/components/layout/CenteredLayout"; import Footer from "~/components/Footer"; -import PromotionalTourMap from "~/components/peabody/PromotionalTourMap"; +import PromotionalTourMap from "~/components/peabody/PromotionalTourMap.client"; import HoverText from "~/components/HoverText"; import HoverZoomPeabodySquare from "~/components/peabody/HoverZoomPeabodySquare"; import InlineFootnote from "~/components/InlineFootnote"; @@ -31,6 +31,7 @@ import TutorialKey from "~/components/peabody/tutorial/TutorialKey"; import type { MetaFunction } from "@remix-run/node"; import type { HoverState, TVizAnchors } from "~/chapterContext"; import Takeaways from "~/components/layout/Takeaways"; +import { ClientOnly } from "remix-utils/client-only"; export const meta: MetaFunction = () => { return chapterMeta("peabody"); @@ -171,7 +172,7 @@ export default function PeabodyPage() {

- + {() => } diff --git a/app/routes/chapters.shanawdithit.tsx b/app/routes/chapters.shanawdithit.tsx index 2eb7c1fc..ac03bf8e 100644 --- a/app/routes/chapters.shanawdithit.tsx +++ b/app/routes/chapters.shanawdithit.tsx @@ -12,7 +12,7 @@ import { chapterMeta } from "~/utils"; import figures from "~/data/figures/shanawdithit.json"; import FigureObj from "~/components/layout/FigureObj"; import HoverText from "~/components/HoverText"; -import ColonialMaps from "~/components/shanawdithit/ColonialMaps"; +import ColonialMaps from "~/components/shanawdithit/ColonialMaps.client"; import DocumentViewer from "~/components/shanawdithit/DocumentViewer"; import SketchScrollytell from "~/components/shanawdithit/DrawingScrollytell"; import InlineFootnote from "~/components/InlineFootnote"; @@ -22,6 +22,7 @@ import FootnotesList from "~/components/FootnotesList"; import type { MetaFunction } from "@remix-run/node"; import type { HoverState, TVizAnchors } from "~/chapterContext"; import Takeaways from "~/components/layout/Takeaways"; +import { ClientOnly } from "remix-utils/client-only"; export const meta: MetaFunction = () => { return chapterMeta("shanawdithit"); @@ -775,7 +776,7 @@ export default function ShanawdithitPage() {

- + {() => } @@ -783,7 +784,9 @@ export default function ShanawdithitPage() {

- In this context, it is notable that the only map in the textbook that references Indigenous peoples or nations is the "Introductory Map.” + In this context, it is notable that the only map in the textbook + that references Indigenous peoples or nations is the "Introductory + Map.”

diff --git a/app/styles/fonts.css b/app/styles/fonts.css deleted file mode 100644 index d0a977c4..00000000 --- a/app/styles/fonts.css +++ /dev/null @@ -1,273 +0,0 @@ -@import url("https://use.typekit.net/lnq8wua.css"); - -@font-face { - font-family: "Maranallo"; - src: url("/fonts/Maranallo/Maranallo.ttf") format("truetype"); -} - -@font-face { - font-family: "Chancery Cursive"; - src: url("/fonts/Chancery/Chancery_Cursive_Italic.ttf") format("truetype"); -} - -@font-face { - font-family: "DxD Icons"; - src: url("/fonts/DxDIcons/DxDIcons-Regular.ttf") format("truetype"); -} - -/* ############### dubois ##############*/ -/* normal */ - -@font-face { - font-family: "VTC Du Bois"; - src: url("/fonts/VTCDubois/VTCDuBois-Bold.woff") format("woff"), - url("/fonts/VTCDubois/VTCDuBois-Bold.woff2") format("woff2"); - font-weight: bold; - font-style: normal; - font-feature-settings: 'ss06' on; -} - -@font-face { - font-family: "VTC Du Bois"; - src: url("/fonts/VTCDubois/VTCDuBois-Regular.woff") format("woff"), - url("/fonts/VTCDubois/VTCDuBois-Regular.woff2") format("woff2"); - font-weight: normal; - font-style: normal; - font-feature-settings: 'ss06' on; -} - -@font-face { - font-family: "VTC Du Bois"; - src: url("/fonts/VTCDubois/VTCDuBois-Italic.woff") format("woff"), - url("/fonts/VTCDubois/VTCDuBois-Italic.woff") format("woff2"); - font-weight: normal; - font-style: italic; - font-feature-settings: 'ss06' on; -} - -@font-face { - font-family: "VTC Du Bois RItalic"; - src: url("/fonts/VTCDubois/VTCDuBois-RItalic.woff") format("woff"), - url("/fonts/VTCDubois/VTCDuBois-RItalic.woff") format("woff2"); - font-weight: normal; - font-style: oblique; - font-feature-settings: 'ss06' on; -} - -@font-face { - font-family: "VTC Du Bois Bold RItalic"; - src: url("/fonts/VTCDubois/VTCDuBois-BoldRitalic.woff") format("woff"), - url("/fonts/VTCDubois/VTCDuBois-BoldRitalic.woff2") format("woff2"); - font-weight: bold; - font-style: oblique; - font-feature-settings: 'ss06' on; -} - - -@font-face { - font-family: "VTC Du Bois Bold Italic"; - src: url("/fonts/VTCDubois/VTCDuBois-BoldItalic.woff") format("woff"), - url("/fonts/VTCDubois/VTCDuBois-BoldItalic.woff2") format("woff2"); - font-weight: bold; - font-style: italic; -} - -@font-face { - font-family: "VTC Du Bois"; - src: url("/fonts/VTCDubois/VTCDuBois-Light.woff") format("woff"), - url("/fonts/VTCDubois/VTCDuBois-Light.woff2") format("woff2"); - font-weight: 200; - font-style: normal; - -} - - - -@font-face { - font-family: "VTC Du Bois Light Italic"; - src: url("/fonts/VTCDubois/VTCDuBois-LightItalic.woff") format("woff"), - url("/fonts/VTCDubois/VTCDuBois-LightItalic.woff2") format("woff2"); - font-weight: light; - font-style: italic; -} - - - - -/* ======== wide ======== */ -@font-face { - font-family: "VTC Du Bois Bold Wide"; - src: url("/fonts/VTCDubois/VTCDuBois-BoldWide.woff") format("woff"), - url("/fonts/VTCDubois/VTCDuBois-BoldWide.woff2") format("woff2"); - font-weight: bold; - -} - -@font-face { - font-family: "VTC Du Bois Italic Wide"; - src: url("/fonts/VTCDubois/VTCDuBois-ItalicWide.woff") format("woff"), - url("/fonts/VTCDubois/VTCDuBois-ItalicWide.woff2") format("woff2"); - font-style: italic; - -} - - -@font-face { - font-family: "VTC Du Bois Bold Italic Wide"; - src: url("/fonts/VTCDubois/VTCDuBois-BoldItalicWide.woff") format("woff"), - url("/fonts/VTCDubois/VTCDuBois-BoldItalicWide.woff2") format("woff2"); - font-weight: bold; - font-style: italic; - -} - -@font-face { - font-family: "VTC Du Bois Bold RItalic Wider"; - src: url("/fonts/VTCDubois/VTCDuBois-BoldRitalicWide.woff") format("woff"), - url("/fonts/VTCDubois/VTCDuBois-BoldRitalicWide.woff2") format("woff2"); - font-weight: bold; - font-style: oblique; - -} - -@font-face { - font-family: "VTC Du Bois Wide"; - src: url("/fonts/VTCDubois/VTCDuBois-RegularWide.woff") format("woff"), - url("/fonts/VTCDubois/VTCDuBois-RegularWide.woff2") format("woff2"); - font-weight: 400; - -} - -@font-face { - font-family: "VTC Du Bois Light Wide"; - src: url("/fonts/VTCDubois/VTCDuBois-LightWide.woff") format("woff"), - url("/fonts/VTCDubois/VTCDuBois-LightWide.woff2") format("woff2"); - font-weight: lighter; - -} - - -/* ------ narrow ------ */ - -@font-face { - font-family: "VTC Du Bois Narrow"; - src: url("/fonts/VTCDubois/VTCDuBois-RegularNarrow.woff") format("woff"), - url("/fonts/VTCDubois/VTCDuBois-RegularNarrow.woff2") format("woff2"); - font-weight: normal; - -} - - -@font-face { - font-family: "VTC Du Bois Bold Narrow"; - src: url("/fonts/VTCDubois/VTCDuBois-BoldNarrow.woff") format("woff"), - url("/fonts/VTCDubois/VTCDuBois-BoldNarrow.woff2") format("woff2"); - font-weight: bold; - -} - -@font-face { - font-family: "VTC Du Bois Light Narrow"; - src: url("/fonts/VTCDubois/VTCDuBois-LightNarrow.woff") format("woff"), - url("/fonts/VTCDubois/VTCDuBois-LightNarrow.woff2") format("woff2"); - font-weight: lighter; - -} - -@font-face { - font-family: "VTC Du Bois Light Italic Narrow"; - src: url("/fonts/VTCDubois/VTCDuBois-LightItalicNarrow.woff") format("woff"), - url("/fonts/VTCDubois/VTCDuBois-LightItalicNarrow.woff2") format("woff2"); - font-style: italic; - font-weight: lighter; - -} - - -@font-face { - font-family: "VTC Du Bois Italic Narrow"; - src: url("/fonts/VTCDubois/VTCDuBois-ItalicNarrow.woff") format("woff"), - url("/fonts/VTCDubois/VTCDuBois-ItalicNarrow.woff2") format("woff2"); - font-style: italic; - -} - -@font-face { - font-family: "VTC Du Bois Bold Italic Narrow"; - src: url("/fonts/VTCDubois/VTCDuBois-BoldItalicNarrow.woff") format("woff"), - url("/fonts/VTCDubois/VTCDuBois-BoldItalicNarrow.woff2") format("woff2"); - font-weight: bold; - font-style: italic; - -} - -@font-face { - font-family: "VTC Du Bois Bold RItalic Narrow"; - src: url("/fonts/VTCDubois/VTCDuBois-BoldRitalicNarrow.woff") format("woff"), - url("/fonts/VTCDubois/VTCDuBois-BoldRitalicNarrow.woff2") format("woff2"); - font-weight: bold; - font-style: oblique; -} - -@font-face { - font-family: "PPNeueMontreal"; - src: url("/fonts/NeueMontreal/PPNeueMontreal-Regular.woff") format("woff"), - url("/fonts/NeueMontreal/PPNeueMontreal-Regular.woff2") format("woff2"); - font-weight: normal -} - -@font-face { - font-family: "PPNeueMontreal Light"; - src: url("/fonts/NeueMontreal/PPNeueMontreal-Light.woff") format("woff"), - url("/fonts/NeueMontreal/PPNeueMontreal-Light.woff2") format("woff2"); - font-weight: lighter; -} - -@font-face { - font-family: "PPNeueMontreal Bold"; - src: url("/fonts/NeueMontreal/PPNeueMontreal-Bold.woff") format("woff"), - url("/fonts/NeueMontreal/PPNeueMontreal-Bold.woff2") format("woff2"); - font-weight: bold; -} - -/* Neue Haas Unica from Typekit */ - - - -@font-face { - font-family: neue-haas-unica, sans-serif; - font-weight: 600; - font-style: italic; -} - -@font-face { - font-family: neue-haas-unica, sans-serif; - font-weight: 600; - font-style: normal; -} - -@font-face { - font-family: neue-haas-unica, sans-serif; - font-weight: 500; - font-style: italic; -} - -@font-face { - font-family: neue-haas-unica, sans-serif; - font-weight: 500; - font-style: normal; -} - -@font-face { - font-family: neue-haas-unica, sans-serif; - font-weight: 400; - font-style: italic; -} - -@font-face { - font-family: neue-haas-unica, sans-serif; - font-weight: 400; - font-style: normal; -} - -/* ------ end ------ */ \ No newline at end of file diff --git a/app/styles/tailwind.css b/app/styles/tailwind.css deleted file mode 100644 index a29f5471..00000000 --- a/app/styles/tailwind.css +++ /dev/null @@ -1,296 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -@layer utilities { - .small-caps { - font-variant-caps: all-small-caps; - } - - .bg-gradient { - background-image: url("/images/8-dark@tinypng.7abc66a1.png"); - } -} - -.first-paragraph::first-letter { - float: left; - font-family: VTC Du Bois, serif !important; - font-feature-settings: "ss06" !important; - font-size: 6rem; - line-height: 3.5rem; - font-weight: bold; - padding: 1rem 0.75rem 0rem 0rem; -} - -.cardPlayfair:hover, -.cardPlayfair:focus { - background-size: cover; - background: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), - url("/images/playfair/1-northamerica.jpg") center; -} - -.cardBrooks:hover, -.cardBrooks:focus { - background-size: cover; - background: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), - url("/images/description/1-sof_slaveship.jpg") center; -} - -.cardPeabody:hover, -.cardPeabody:focus { - background-size: cover; - background: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), - url("/images/peabody/1500s.jpg") center; -} - -.cardShanawdithit:hover, -.cardShanawdithit:focus { - background-size: cover; - background: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), - url("/images/peabody/ch4-13-willard.jpg") center; -} - -.cardDubois:hover, -.cardDubois:focus { - background-size: cover; - background: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), - url("/images/dubois/ch5-01-phila.jpg") center; -} - -.cardLabour:hover, -.cardLabour:focus { - background-size: cover; - background: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), - url("/images/peabody/railroadscaled.jpg") center; -} - -.grid-wrapper { - display: grid; - grid-template-columns: 1fr min(111ch, 100%) 1fr; -} - -.grid-wrapper>* { - grid-column: 2; -} - -.column-grid-wrapper { - display: grid; - grid-template-columns: 1fr min(45ch, 100%) 1fr; -} - -.column-grid-wrapper>* { - grid-column: 2; -} - -.scrollytell .column-grid-wrapper { - display: block; - grid-template-columns: unset; -} - -.left-bleed { - width: 100%; - grid-column: 1 / 2; -} - -.right-bleed { - width: 100%; - grid-column: 2 / 4; -} - -.full-bleed { - width: 100%; - grid-column: 1 / 4; -} - -.footnote { - cursor: pointer; - display: inline-block; - font-family: "VTC Du Bois"; - vertical-align: middle; - font-size: 0.75rem; - line-height: 1.25rem; - border-radius: 50%; - min-width: 1.25rem; - height: 1.25rem; - margin-left: 0.25rem; - margin-bottom: 0.2rem; - text-align: center; -} - -.cut-corners { - clip-path: polygon(0 10px, - 10px 0, - calc(100% - 10px) 0, - 100% 10px, - 100% calc(100% - 10px), - calc(100% - 10px) 100%, - 10px 100%, - 0 calc(100% - 10px)); -} - -.scrollytell-shape-focus { - transition: cx 0.7s, cy 0.7s, rx 0.7s, ry 0.7s, x 0.7s, y 0.7s, height 0.7s, - width 0.7s; -} - -main p { - margin: 0.75rem auto; - line-height: 1.75rem; - letter-spacing: 0.025em; -} - -.se { - stroke-dasharray: 0 30 30; -} - -.nw { - stroke-dasharray: 30 30 0; -} - -.sw { - stroke-dasharray: 0 60 30; -} - -.ne { - stroke-dasharray: 30 0 30; -} - -.w { - stroke-dasharray: 0 90 0; -} - -.n { - stroke-dasharray: 30 90; -} - -.s { - stroke-dasharray: 0 60 30 30; -} - -.e { - stroke-dasharray: 0 30 30 60; -} - -.c { - stroke-dasharray: 0 120; -} - -.top { - stroke-dasharray: 30 0 30 30; -} - -.middle { - stroke-dasharray: 0 30 0; -} - -html { - scroll-padding-top: 3em; -} - -tspan:focus { - outline: none; - text-decoration: underline; -} - -svg.actor-button:focus { - outline: none; -} - -input[type="range"] { - box-sizing: border-box; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - width: 4000px; - margin: 0; - padding: 0 2px; - /* Add some L/R padding to ensure box shadow of handle is shown */ - overflow: hidden; - border: 0; - border-radius: 0.5px; - outline: none; - background: linear-gradient(white, white) no-repeat center; - /* Use a linear gradient to generate only the 2px height background */ - background-size: 100% 2px; - pointer-events: none; -} - -input[type="range"]:active, -input[type="range"]:focus { - outline: none; -} - -input[type="range"]::-webkit-slider-thumb { - height: 28px; - width: 28px; - border-radius: 28px; - background-color: white; - position: relative; - margin: 5px 0; - /* Add some margin to ensure box shadow is shown */ - cursor: pointer; - -webkit-appearance: none; - appearance: none; - pointer-events: all; - box-shadow: 0 1px 4px 0.5px rgba(0, 0, 0, 0.25); -} - -input[type="range"]::-webkit-slider-thumb::before { - content: " "; - display: block; - position: absolute; - top: 13px; - left: 100%; - width: 2000px; - height: 2px; -} - -.multi-range { - position: relative; - height: 50px; -} - -.multi-range input[type="range"] { - position: absolute; -} - -.multi-range input[type="range"]:nth-child(1)::-webkit-slider-thumb::before { - background-color: red; -} - -.multi-range input[type="range"]:nth-child(2) { - /* background: none; */ -} - -.multi-range input[type="range"]:nth-child(2)::-webkit-slider-thumb::before { - background-color: grey; -} - -:target { - scroll-margin-top: 100px; -} - -/* - The following might be added to Tailwind soon: - https://github.com/tailwindlabs/tailwindcss/discussions/12127 -*/ -@supports (overflow-wrap: anywhere) { - .break-anywhere { - overflow-wrap: anywhere; - } -} - -@supports not (overflow-wrap: anywhere) { - .break-anywhere { - word-break: break-word; - } -} - -/* .slider-list { - transition: transform 0s normal 1s !important; - width: 5.55556% !important; -} */ - -/* .slider-list { - transform: none !important; -} */ \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index a9759411..708e89d0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,13 +7,16 @@ "dependencies": { "@headlessui/react": "^1.7.18", "@heroicons/react": "^2.0.13", + "@remix-run/express": "^2.9.1", "@remix-run/node": "^2.9.1", "@remix-run/react": "^2.9.1", - "@remix-run/vercel": "^1.19.3", "@uidotdev/usehooks": "^2.4.1", + "compression": "^1.7.4", "cross-env": "^7.0.3", "d3": "^7.6.1", "intersection-observer": "^0.12.2", + "isbot": "^5.1.6", + "morgan": "^1.10.0", "p5": "^1.5.0", "react": "^18.2.0", "react-dnd": "^16.0.1", @@ -41,7 +44,9 @@ "postcss": "^8.4.31", "prettier": "2.7.1", "tailwindcss": "^3.2.4", - "typescript": "^5.0.2" + "typescript": "^5.0.2", + "vite": "^5.2.10", + "vite-tsconfig-paths": "^4.3.2" }, "engines": { "node": ">=20" @@ -803,6 +808,8 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "optional": true, "peer": true, "dependencies": { "@jridgewell/trace-mapping": "0.3.9" @@ -815,60 +822,14 @@ "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "optional": true, "peer": true, "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@edge-runtime/format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@edge-runtime/format/-/format-2.1.0.tgz", - "integrity": "sha512-gc2qbYEIIJRczBApBPznVI1c5vZgzrZQOsFZnAxxFiYah9qldHiu1YEitzSvXI8X8ZgvAguuIiyIbpWz17nlXA==", - "peer": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@edge-runtime/node-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@edge-runtime/node-utils/-/node-utils-2.0.3.tgz", - "integrity": "sha512-JUSbi5xu/A8+D2t9B9wfirCI1J8n8q0660FfmqZgA+n3RqxD3y7SnamL1sKRE5/AbHsKs9zcqCbK2YDklbc9Bg==", - "peer": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@edge-runtime/primitives": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@edge-runtime/primitives/-/primitives-2.1.2.tgz", - "integrity": "sha512-SR04SMDybALlhIYIi0hiuEUwIl0b7Sn+RKwQkX6hydg4+AKMzBNDFhj2nqHDD1+xkHArV9EhmJIb6iGjShwSzg==", - "peer": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@edge-runtime/vm": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@edge-runtime/vm/-/vm-3.0.1.tgz", - "integrity": "sha512-69twXLIcqVx0iNlc1vFqnXgka2CZi2c/QBAmMzXBk0M6mPG+ICCBh2dd+cv1K+HW2pfLuSW+EskkFXWGeCf1Vw==", - "peer": true, - "dependencies": { - "@edge-runtime/primitives": "3.0.1" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@edge-runtime/vm/node_modules/@edge-runtime/primitives": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@edge-runtime/primitives/-/primitives-3.0.1.tgz", - "integrity": "sha512-l5NNDcPkKW4N6qRmB8zzpCF6uRW1S808V/zm72z7b/aWwZUYbmEPPkzyhGAW0aQxLU1pGdZ8u2gNjamdaU6RXw==", - "peer": true, - "engines": { - "node": ">=14" - } - }, "node_modules/@emotion/hash": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", @@ -1193,6 +1154,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, "engines": { "node": ">=6.0.0" } @@ -1209,7 +1171,8 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", @@ -1269,6 +1232,7 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -1281,6 +1245,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, "engines": { "node": ">= 8" } @@ -1289,6 +1254,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -1745,7 +1711,6 @@ "version": "2.9.1", "resolved": "https://registry.npmjs.org/@remix-run/express/-/express-2.9.1.tgz", "integrity": "sha512-Q0U0oxINSk1t3HdvGnnHOa4M0iT9KlhBEN3JeCpc6BxIXovjceMUOOw0TTcgw8GmpXWaWO/p6vM/w4YZqb0KLg==", - "dev": true, "dependencies": { "@remix-run/node": "2.9.1" }, @@ -1867,76 +1832,6 @@ } } }, - "node_modules/@remix-run/vercel": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/@remix-run/vercel/-/vercel-1.19.3.tgz", - "integrity": "sha512-LoWffUns8u9oqOHSvZtH0LMXWm4NuZ2hUldLx7TAw19lfif1liwa8WrqxRyMItuUp1xEo6shTDCNEUNdQtsEGg==", - "dependencies": { - "@remix-run/node": "1.19.3" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@vercel/node": "^1.8.3 || ^2.4.0" - } - }, - "node_modules/@remix-run/vercel/node_modules/@remix-run/node": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/@remix-run/node/-/node-1.19.3.tgz", - "integrity": "sha512-z5qrVL65xLXIUpU4mkR4MKlMeKARLepgHAk4W5YY3IBXOreRqOGUC70POViYmY7x38c2Ia1NwqL80H+0h7jbMw==", - "dependencies": { - "@remix-run/server-runtime": "1.19.3", - "@remix-run/web-fetch": "^4.3.6", - "@remix-run/web-file": "^3.0.3", - "@remix-run/web-stream": "^1.0.4", - "@web3-storage/multipart-parser": "^1.0.0", - "abort-controller": "^3.0.0", - "cookie-signature": "^1.1.0", - "source-map-support": "^0.5.21", - "stream-slice": "^0.1.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@remix-run/vercel/node_modules/@remix-run/router": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.7.2.tgz", - "integrity": "sha512-7Lcn7IqGMV+vizMPoEl5F0XDshcdDYtMI6uJLQdQz5CfZAwy3vvGKYSUk789qndt5dEC4HfSjviSYlSoHGL2+A==", - "engines": { - "node": ">=14" - } - }, - "node_modules/@remix-run/vercel/node_modules/@remix-run/server-runtime": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/@remix-run/server-runtime/-/server-runtime-1.19.3.tgz", - "integrity": "sha512-KzQ+htUsKqpBgKE2tWo7kIIGy3MyHP58Io/itUPvV+weDjApwr9tQr9PZDPA3yAY6rAzLax7BU0NMSYCXWFY5A==", - "dependencies": { - "@remix-run/router": "1.7.2", - "@types/cookie": "^0.4.1", - "@web3-storage/multipart-parser": "^1.0.0", - "cookie": "^0.4.1", - "set-cookie-parser": "^2.4.8", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@remix-run/vercel/node_modules/@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" - }, - "node_modules/@remix-run/vercel/node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/@remix-run/web-blob": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@remix-run/web-blob/-/web-blob-3.1.0.tgz", @@ -2051,62 +1946,36 @@ "node": ">=12" } }, - "node_modules/@ts-morph/common": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.11.1.tgz", - "integrity": "sha512-7hWZS0NRpEsNV8vWJzg7FEz6V8MaLNeJOmwmghqUXTpzk16V1LLZhdo+4QvE/+zv4cVci0OviuJFnqhEfoV3+g==", - "peer": true, - "dependencies": { - "fast-glob": "^3.2.7", - "minimatch": "^3.0.4", - "mkdirp": "^1.0.4", - "path-browserify": "^1.0.1" - } - }, - "node_modules/@ts-morph/common/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@ts-morph/common/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "peer": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/@tsconfig/node10": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true, + "optional": true, "peer": true }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "optional": true, "peer": true }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "optional": true, "peer": true }, "node_modules/@tsconfig/node16": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "optional": true, "peer": true }, "node_modules/@types/acorn": { @@ -2424,7 +2293,8 @@ "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true }, "node_modules/@types/json5": { "version": "0.0.29", @@ -2457,20 +2327,11 @@ "version": "20.12.7", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "devOptional": true, "dependencies": { "undici-types": "~5.26.4" } }, - "node_modules/@types/node-fetch": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.3.tgz", - "integrity": "sha512-ETTL1mOEdq/sxUtgtOhKjyB2Irra4cjxksvcMUR5Zr4n+PxVhsCD9WS46oPbHL3et9Zde7CNRr+WUNlcHvsX+w==", - "peer": true, - "dependencies": { - "@types/node": "*", - "form-data": "^3.0.0" - } - }, "node_modules/@types/p5": { "version": "1.7.6", "resolved": "https://registry.npmjs.org/@types/p5/-/p5-1.7.6.tgz", @@ -2804,109 +2665,6 @@ "integrity": "sha512-8FGD6AejeC/nXcblgNCM5rnZb9KXa4WNkR03HCWtdJBpANjTgjHEglNLFnhuvdQ78tC6afaxBPI+g7F2NX3tgg==", "dev": true }, - "node_modules/@vercel/build-utils": { - "version": "6.8.3", - "resolved": "https://registry.npmjs.org/@vercel/build-utils/-/build-utils-6.8.3.tgz", - "integrity": "sha512-C86OPuPAvG/pSr27DPKecmptkYYsgyhOKdHTLv9jI3Pv1yvru78k+JjrAyn7N+0ev75KNV0Prv4P3p76168ePw==", - "peer": true - }, - "node_modules/@vercel/error-utils": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@vercel/error-utils/-/error-utils-1.0.10.tgz", - "integrity": "sha512-nsKy2sy+pjUWyKI1V/XXKspVzHMYgSalmj5+EsKWFXZbnNZicqxNtMR94J8Hs7SB4TQxh0s4KhczJtL59AVGMg==", - "peer": true - }, - "node_modules/@vercel/node": { - "version": "2.15.10", - "resolved": "https://registry.npmjs.org/@vercel/node/-/node-2.15.10.tgz", - "integrity": "sha512-IfnqnKAJlL1+0FSDJgxoe9J3kfYAgPGDjz4aO/H5FSjvqP7cKJnns1F9GsQq4pM499+TY8T8mKAdos7/m+WOEw==", - "peer": true, - "dependencies": { - "@edge-runtime/node-utils": "2.0.3", - "@edge-runtime/primitives": "2.1.2", - "@edge-runtime/vm": "3.0.1", - "@types/node": "14.18.33", - "@types/node-fetch": "2.6.3", - "@vercel/build-utils": "6.8.3", - "@vercel/error-utils": "1.0.10", - "@vercel/static-config": "2.0.17", - "async-listen": "3.0.0", - "content-type": "1.0.5", - "edge-runtime": "2.4.4", - "esbuild": "0.14.47", - "exit-hook": "2.2.1", - "node-fetch": "2.6.9", - "path-to-regexp": "6.2.1", - "ts-morph": "12.0.0", - "ts-node": "10.9.1", - "typescript": "4.9.5" - } - }, - "node_modules/@vercel/node/node_modules/@types/node": { - "version": "14.18.33", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.33.tgz", - "integrity": "sha512-qelS/Ra6sacc4loe/3MSjXNL1dNQ/GjxNHVzuChwMfmk7HuycRLVQN2qNY3XahK+fZc5E2szqQSKUyAF0E+2bg==", - "peer": true - }, - "node_modules/@vercel/node/node_modules/esbuild": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.47.tgz", - "integrity": "sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA==", - "hasInstallScript": true, - "peer": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "esbuild-android-64": "0.14.47", - "esbuild-android-arm64": "0.14.47", - "esbuild-darwin-64": "0.14.47", - "esbuild-darwin-arm64": "0.14.47", - "esbuild-freebsd-64": "0.14.47", - "esbuild-freebsd-arm64": "0.14.47", - "esbuild-linux-32": "0.14.47", - "esbuild-linux-64": "0.14.47", - "esbuild-linux-arm": "0.14.47", - "esbuild-linux-arm64": "0.14.47", - "esbuild-linux-mips64le": "0.14.47", - "esbuild-linux-ppc64le": "0.14.47", - "esbuild-linux-riscv64": "0.14.47", - "esbuild-linux-s390x": "0.14.47", - "esbuild-netbsd-64": "0.14.47", - "esbuild-openbsd-64": "0.14.47", - "esbuild-sunos-64": "0.14.47", - "esbuild-windows-32": "0.14.47", - "esbuild-windows-64": "0.14.47", - "esbuild-windows-arm64": "0.14.47" - } - }, - "node_modules/@vercel/node/node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/@vercel/static-config": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/@vercel/static-config/-/static-config-2.0.17.tgz", - "integrity": "sha512-2f50OTVrN07x7pH+XNW0e7cj7T+Ufg+19+a2N3/XZBjQmV+FaMlmSLiaQ4tBxp2H8lWWHzENua7ZSSQPtRZ3/A==", - "peer": true, - "dependencies": { - "ajv": "8.6.3", - "json-schema-to-ts": "1.6.4", - "ts-morph": "12.0.0" - } - }, "node_modules/@web3-storage/multipart-parser": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@web3-storage/multipart-parser/-/multipart-parser-1.0.0.tgz", @@ -2933,7 +2691,6 @@ "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==", - "dev": true, "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -2946,6 +2703,7 @@ "version": "8.11.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -2966,6 +2724,8 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "dev": true, + "optional": true, "peer": true, "engines": { "node": ">=0.4.0" @@ -2984,22 +2744,6 @@ "node": ">=8" } }, - "node_modules/ajv": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", - "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -3083,8 +2827,7 @@ "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, "node_modules/array-includes": { "version": "3.1.8", @@ -3253,21 +2996,6 @@ "astring": "bin/astring" } }, - "node_modules/async-listen": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/async-listen/-/async-listen-3.0.0.tgz", - "integrity": "sha512-V+SsTpDqkrWTimiotsyl33ePSjA5/KrithwupuvJ6ztsqPvGv6ge4OredFhPffVXiLN/QUWvE0XcqJaYgt6fOg==", - "peer": true, - "engines": { - "node": ">= 14" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "peer": true - }, "node_modules/autoprefixer": { "version": "10.4.19", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", @@ -3350,7 +3078,8 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/base64-js": { "version": "1.5.1", @@ -3376,7 +3105,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "dev": true, "dependencies": { "safe-buffer": "5.1.2" }, @@ -3411,7 +3139,6 @@ "version": "1.20.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "dev": true, "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -3435,7 +3162,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, "engines": { "node": ">= 0.8" } @@ -3444,7 +3170,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "dependencies": { "ms": "2.0.0" } @@ -3453,7 +3178,6 @@ "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" }, @@ -3464,8 +3188,7 @@ "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/brace-expansion": { "version": "2.0.1", @@ -3480,6 +3203,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, "dependencies": { "fill-range": "^7.0.1" }, @@ -3570,7 +3294,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true, "engines": { "node": ">= 0.8" } @@ -3874,12 +3597,6 @@ "node": ">=0.8" } }, - "node_modules/code-block-writer": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-10.1.1.tgz", - "integrity": "sha512-67ueh2IRGst/51p0n6FvPrnRjAGHY5F8xdjkgrYE7DDzpJe6qA07RYQ9VcoUeo5ATOjSOiWpSL3SWBRRbempMw==", - "peer": true - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -3898,18 +3615,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "peer": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/comma-separated-tokens": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", @@ -3932,7 +3637,6 @@ "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, "dependencies": { "mime-db": ">= 1.43.0 < 2" }, @@ -3944,7 +3648,6 @@ "version": "1.7.4", "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, "dependencies": { "accepts": "~1.3.5", "bytes": "3.0.0", @@ -3962,7 +3665,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "dependencies": { "ms": "2.0.0" } @@ -3970,13 +3672,13 @@ "node_modules/compression/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/concurrently": { "version": "7.6.0", @@ -4030,7 +3732,6 @@ "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, "dependencies": { "safe-buffer": "5.2.1" }, @@ -4042,7 +3743,6 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, "funding": [ { "type": "github", @@ -4066,15 +3766,6 @@ "node": ">= 0.6" } }, - "node_modules/convert-hrtime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/convert-hrtime/-/convert-hrtime-3.0.0.tgz", - "integrity": "sha512-7V+KqSvMiHp8yWDuwfww06XleMWVVB9b9tURBx+G7UTADuo5hYPuowKloz4OzOqbPezxgo+fdQ1522WzPG4OeA==", - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", @@ -4107,6 +3798,8 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "optional": true, "peer": true }, "node_modules/cross-env": { @@ -4770,20 +4463,10 @@ "robust-predicates": "^3.0.2" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "peer": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, "engines": { "node": ">= 0.8" } @@ -4801,7 +4484,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -4817,6 +4499,8 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "optional": true, "peer": true, "engines": { "node": ">=0.3.1" @@ -4928,55 +4612,10 @@ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, - "node_modules/edge-runtime": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/edge-runtime/-/edge-runtime-2.4.4.tgz", - "integrity": "sha512-uq1YdIxkMDsBYLdSSp/w62PciCL46ic4m1Z/2G6N8RcAPI8p35O8u6hJQT83j28Dnt4U5iyvmwFMYouHMK51uA==", - "peer": true, - "dependencies": { - "@edge-runtime/format": "2.1.0", - "@edge-runtime/vm": "3.0.3", - "async-listen": "3.0.0", - "mri": "1.2.0", - "picocolors": "1.0.0", - "pretty-bytes": "5.6.0", - "pretty-ms": "7.0.1", - "signal-exit": "4.0.2", - "time-span": "4.0.0" - }, - "bin": { - "edge-runtime": "dist/cli/index.js" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/edge-runtime/node_modules/@edge-runtime/primitives": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@edge-runtime/primitives/-/primitives-3.0.3.tgz", - "integrity": "sha512-YnfMWMRQABAH8IsnFMJWMW+SyB4ZeYBPnR7V0aqdnew7Pq60cbH5DyFjS/FhiLwvHQk9wBREmXD7PP0HooEQ1A==", - "peer": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/edge-runtime/node_modules/@edge-runtime/vm": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@edge-runtime/vm/-/vm-3.0.3.tgz", - "integrity": "sha512-SPfI1JeIRNs/4EEE2Oc0X6gG3RqjD1TnKu2lwmwFXq0435xgZGKhc3UiKkYAdoMn2dNFD73nlabMKHBRoMRpxg==", - "peer": true, - "dependencies": { - "@edge-runtime/primitives": "3.0.3" - }, - "engines": { - "node": ">=14" - } - }, "node_modules/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==", - "dev": true + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { "version": "1.4.750", @@ -4994,7 +4633,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, "engines": { "node": ">= 0.8" } @@ -5246,22 +4884,6 @@ "@esbuild/win32-x64": "0.17.6" } }, - "node_modules/esbuild-darwin-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.47.tgz", - "integrity": "sha512-R6oaW0y5/u6Eccti/TS6c/2c1xYTb1izwK3gajJwi4vIfNs1s8B1dQzI1UiC9T61YovOQVuePDcfqHLT3mUZJA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, "node_modules/esbuild-plugins-node-modules-polyfill": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/esbuild-plugins-node-modules-polyfill/-/esbuild-plugins-node-modules-polyfill-1.6.3.tgz", @@ -5291,8 +4913,7 @@ "node_modules/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==", - "dev": true + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "node_modules/escape-string-regexp": { "version": "4.0.0", @@ -6261,7 +5882,6 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -6320,6 +5940,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz", "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==", + "dev": true, "engines": { "node": ">=6" }, @@ -6331,7 +5952,6 @@ "version": "4.19.2", "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", - "dev": true, "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -6372,14 +5992,12 @@ "node_modules/express/node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "node_modules/express/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "dependencies": { "ms": "2.0.0" } @@ -6387,20 +6005,17 @@ "node_modules/express/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/express/node_modules/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==", - "dev": true + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, "node_modules/express/node_modules/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==", - "dev": true, "funding": [ { "type": "github", @@ -6431,6 +6046,7 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -6458,6 +6074,7 @@ "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, "dependencies": { "reusify": "^1.0.4" } @@ -6491,6 +6108,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -6502,7 +6120,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -6520,7 +6137,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "dependencies": { "ms": "2.0.0" } @@ -6528,8 +6144,7 @@ "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/find-up": { "version": "5.0.0", @@ -6591,20 +6206,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "peer": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/format": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", @@ -6618,7 +6219,6 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -6640,7 +6240,6 @@ "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -6856,6 +6455,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -6907,6 +6507,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -7098,7 +6704,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -7257,7 +6862,6 @@ "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==", - "dev": true, "engines": { "node": ">= 0.10" } @@ -7468,6 +7072,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -7511,6 +7116,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -7574,6 +7180,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, "engines": { "node": ">=0.12.0" } @@ -7780,6 +7387,14 @@ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true }, + "node_modules/isbot": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/isbot/-/isbot-5.1.6.tgz", + "integrity": "sha512-Phksj1A0dBP/M/5xeOx0zWemKlZRQvrbNzI19/HWso0uodiOcR8YYCXN60IdzwbKsGj5LnxPkMy6FuBtgckMNw==", + "engines": { + "node": ">=18" + } + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -7875,22 +7490,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/json-schema-to-ts": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/json-schema-to-ts/-/json-schema-to-ts-1.6.4.tgz", - "integrity": "sha512-pR4yQ9DHz6itqswtHCm26mw45FSNfQ9rEQjosaZErhn5J3J2sIViQiz8rDaezjKAhFGpmsoczYVBgGHzFw/stA==", - "peer": true, - "dependencies": { - "@types/json-schema": "^7.0.6", - "ts-toolbelt": "^6.15.5" - } - }, - "node_modules/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==", - "peer": true - }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", @@ -8126,6 +7725,8 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "optional": true, "peer": true }, "node_modules/markdown-extensions": { @@ -8346,7 +7947,6 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -8354,8 +7954,7 @@ "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, "node_modules/merge-stream": { "version": "2.0.0", @@ -8367,6 +7966,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, "engines": { "node": ">= 8" } @@ -8375,7 +7975,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -8996,6 +8595,7 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -9008,7 +8608,6 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, "bin": { "mime": "cli.js" }, @@ -9202,6 +8801,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, "bin": { "mkdirp": "bin/cmd.js" }, @@ -9237,7 +8837,6 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", - "dev": true, "dependencies": { "basic-auth": "~2.0.1", "debug": "2.6.9", @@ -9253,7 +8852,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "dependencies": { "ms": "2.0.0" } @@ -9261,14 +8859,12 @@ "node_modules/morgan/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/morgan/node_modules/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dev": true, "dependencies": { "ee-first": "1.1.1" }, @@ -9280,6 +8876,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, "engines": { "node": ">=4" } @@ -9343,31 +8940,10 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, "engines": { "node": ">= 0.6" } }, - "node_modules/node-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", - "peer": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, "node_modules/node-releases": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", @@ -9505,7 +9081,6 @@ "version": "1.13.1", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -9637,7 +9212,6 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, "dependencies": { "ee-first": "1.1.1" }, @@ -9649,7 +9223,6 @@ "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==", - "dev": true, "engines": { "node": ">= 0.8" } @@ -9816,6 +9389,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", + "dev": true, "engines": { "node": ">=6" } @@ -9824,17 +9398,10 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, "engines": { "node": ">= 0.8" } }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "peer": true - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -9892,12 +9459,6 @@ "node": "14 || >=16.14" } }, - "node_modules/path-to-regexp": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", - "peer": true - }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -9938,12 +9499,14 @@ "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, "engines": { "node": ">=8.6" }, @@ -10251,18 +9814,6 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/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==", - "peer": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/pretty-format": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", @@ -10293,6 +9844,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", + "dev": true, "dependencies": { "parse-ms": "^2.1.0" }, @@ -10368,7 +9920,6 @@ "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==", - "dev": true, "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -10402,6 +9953,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, "engines": { "node": ">=6" } @@ -10410,7 +9962,6 @@ "version": "6.11.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, "dependencies": { "side-channel": "^1.0.4" }, @@ -10425,6 +9976,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, "funding": [ { "type": "github", @@ -10444,7 +9996,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -10453,7 +10004,6 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dev": true, "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -10468,7 +10018,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, "engines": { "node": ">= 0.8" } @@ -10477,7 +10026,6 @@ "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" }, @@ -10852,15 +10400,6 @@ "node": ">=0.10.0" } }, - "node_modules/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==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/require-like": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", @@ -10955,6 +10494,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -11061,6 +10601,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, "funding": [ { "type": "github", @@ -11126,8 +10667,7 @@ "node_modules/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==", - "dev": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/safe-regex-test": { "version": "1.0.3", @@ -11201,7 +10741,6 @@ "version": "0.18.0", "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -11225,7 +10764,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "dependencies": { "ms": "2.0.0" } @@ -11233,20 +10771,17 @@ "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/send/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/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==", - "dev": true, "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -11296,8 +10831,7 @@ "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "node_modules/shebang-command": { "version": "2.0.0", @@ -11331,7 +10865,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dev": true, "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -11349,6 +10882,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", + "dev": true, "engines": { "node": ">=14" }, @@ -11463,7 +10997,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, "engines": { "node": ">= 0.8" } @@ -12033,21 +11566,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/time-span": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/time-span/-/time-span-4.0.0.tgz", - "integrity": "sha512-MyqZCTGLDZ77u4k+jqg4UlrzPTPZ49NDlaekU6uuFaJLzPIN1woaRXCbGeqOfxwc3Y37ZROGAJ614Rdv7Olt+g==", - "peer": true, - "dependencies": { - "convert-hrtime": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -12061,6 +11579,7 @@ "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==", + "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -12072,7 +11591,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, "engines": { "node": ">=0.6" } @@ -12083,12 +11601,6 @@ "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==", "dev": true }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "peer": true - }, "node_modules/tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", @@ -12136,20 +11648,12 @@ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", "dev": true }, - "node_modules/ts-morph": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-12.0.0.tgz", - "integrity": "sha512-VHC8XgU2fFW7yO1f/b3mxKDje1vmyzFXHWzOYmKEkCEwcLjDtbdLgBQviqj4ZwP4MJkQtRo6Ha2I29lq/B+VxA==", - "peer": true, - "dependencies": { - "@ts-morph/common": "~0.11.0", - "code-block-writer": "^10.1.1" - } - }, "node_modules/ts-node": { "version": "10.9.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "optional": true, "peer": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", @@ -12193,13 +11697,29 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "optional": true, "peer": true }, - "node_modules/ts-toolbelt": { - "version": "6.15.5", - "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.15.5.tgz", - "integrity": "sha512-FZIXf1ksVyLcfr7M317jbB67XFJhOO1YqdTcuGaq9q5jLUoTikukZ+98TPjKiP2jC5CgmYdWWYs0s2nLSU0/1A==", - "peer": true + "node_modules/tsconfck": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.0.3.tgz", + "integrity": "sha512-4t0noZX9t6GcPTfBAbIbbIU4pfpCwh0ueq3S4O/5qXI1VwK1outmxhe9dOiEWqMz3MW2LKgDTpqWV+37IWuVbA==", + "dev": true, + "bin": { + "tsconfck": "bin/tsconfck.js" + }, + "engines": { + "node": "^18 || >=20" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } }, "node_modules/tsconfig-paths": { "version": "4.2.0", @@ -12274,7 +11794,6 @@ "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -12360,6 +11879,7 @@ "version": "5.4.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "devOptional": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -12400,7 +11920,8 @@ "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==" + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "devOptional": true }, "node_modules/unified": { "version": "10.1.2", @@ -12575,7 +12096,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, "engines": { "node": ">= 0.8" } @@ -12614,6 +12134,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, "dependencies": { "punycode": "^2.1.0" } @@ -12640,7 +12161,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, "engines": { "node": ">= 0.4.0" } @@ -12676,6 +12196,8 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "optional": true, "peer": true }, "node_modules/validate-npm-package-license": { @@ -12704,7 +12226,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, "engines": { "node": ">= 0.8" } @@ -12816,6 +12337,25 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/vite-tsconfig-paths": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-4.3.2.tgz", + "integrity": "sha512-0Vd/a6po6Q+86rPlntHye7F31zA2URZMbH8M3saAZ/xR9QoGN/L21bxEGfXdWmFdNkqPpRdxFT7nmNe12e9/uA==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "globrex": "^0.1.2", + "tsconfck": "^3.0.3" + }, + "peerDependencies": { + "vite": "*" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, "node_modules/vite/node_modules/@esbuild/darwin-x64": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", @@ -12898,22 +12438,6 @@ "node": ">= 8" } }, - "node_modules/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==", - "peer": true - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "peer": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/which": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", @@ -13215,6 +12739,8 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "optional": true, "peer": true, "engines": { "node": ">=6" diff --git a/package.json b/package.json index 4c9945f1..06f114e3 100644 --- a/package.json +++ b/package.json @@ -1,25 +1,27 @@ { "private": true, "sideEffects": false, + "type": "module", "scripts": { - "build": "remix build", - "build:css": "tailwindcss -m -i ./app/styles/app.css -o styles/generated-app.css", - "dev:css": "tailwindcss -w -i ./app/styles/app.css -o styles/generated-app.css", - "dev": "remix dev", - "start": "cross-env NODE_ENV=production netlify dev", + "build": "remix vite:build", + "dev": "node ./server.js", + "start": "cross-env NODE_ENV=production node ./server.js", "typecheck": "tsc", "lint": "eslint --cache --cache-location ./node_modules/.cache/eslint --fix ." }, "dependencies": { "@headlessui/react": "^1.7.18", "@heroicons/react": "^2.0.13", + "@remix-run/express": "^2.9.1", "@remix-run/node": "^2.9.1", "@remix-run/react": "^2.9.1", - "@remix-run/vercel": "^1.19.3", "@uidotdev/usehooks": "^2.4.1", + "compression": "^1.7.4", "cross-env": "^7.0.3", "d3": "^7.6.1", "intersection-observer": "^0.12.2", + "isbot": "^5.1.6", + "morgan": "^1.10.0", "p5": "^1.5.0", "react": "^18.2.0", "react-dnd": "^16.0.1", @@ -47,7 +49,9 @@ "postcss": "^8.4.31", "prettier": "2.7.1", "tailwindcss": "^3.2.4", - "typescript": "^5.0.2" + "typescript": "^5.0.2", + "vite": "^5.2.10", + "vite-tsconfig-paths": "^4.3.2" }, "engines": { "node": ">=20" diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 00000000..2aa7205d --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/remix.config.js b/remix.config.js deleted file mode 100644 index c977e7fd..00000000 --- a/remix.config.js +++ /dev/null @@ -1,57 +0,0 @@ -/** @type {import('@remix-run/dev').AppConfig} */ -module.exports = { - tailwind: true, - postcss: true, - serverBuildTarget: "vercel", - server: process.env.NODE_ENV === "development" ? undefined : "./server.js", - serverModuleFormat: "cjs", - serverDependenciesToBundle: [ - "react-dnd", - "react-dnd-html5-backend", - "dnd-core", - "@react-dnd/invariant", - "@react-dnd/asap", - "@react-dnd/shallowequal", - "d3", - "d3-array", - "internmap", - "d3-axis", - "d3-brush", - "d3-chord", - "d3-color", - "d3-contour", - "d3-delaunay", - "d3-dispatch", - "d3-drag", - "d3-dsv", - "d3-ease", - "d3-fetch", - "d3-force", - "d3-format", - "d3-geo", - "d3-hierarchy", - "d3-interpolate", - "d3-path", - "d3-polygon", - "d3-quadtree", - "d3-random", - "d3-scale", - "d3-scale-chromatic", - "d3-selection", - "d3-shape", - "d3-time", - "d3-time-format", - "d3-timer", - "d3-transition", - "d3-zoom", - "delaunator", - "robust-predicates", - "@uidotdev/usehooks", - /^remix-utils.*/, - ], - ignoredRouteFiles: ["**/.*"], - // appDirectory: "app", - // assetsBuildDirectory: "public/build", - // serverBuildPath: ".netlify/functions-internal/server.js", - // publicPath: "/build/", -}; diff --git a/server.js b/server.js index 4e2a0e00..eb258901 100644 --- a/server.js +++ b/server.js @@ -1,4 +1,76 @@ -import { createRequestHandler } from "@remix-run/vercel"; -import * as build from "@remix-run/dev/server-build"; +import { createRequestHandler } from "@remix-run/express"; +import { installGlobals } from "@remix-run/node"; +import compression from "compression"; +import express from "express"; +import morgan from "morgan"; -export default createRequestHandler({ build, mode: process.env.NODE_ENV }); +const minSubdomainCount = () => { + if (process.env.NODE_ENV === "staging") { + return 1; + } + return 0; +}; + +installGlobals(); + +const viteDevServer = + process.env.NODE_ENV === "production" + ? undefined + : await import("vite").then((vite) => + vite.createServer({ + server: { middlewareMode: true }, + }) + ); + +const remixHandler = createRequestHandler({ + build: viteDevServer + ? () => viteDevServer.ssrLoadModule("virtual:remix/server-build") + : await import("./build/server/index.js"), + getLoadContext: (req, res) => { + const host = req.get("Host"); + const tenant = + req.subdomains.length > minSubdomainCount() + ? req.subdomains.pop() + : undefined; + const port = host.split(":").pop(); + const request = { + protocol: req.protocol, + host, + subdomains: req.subdomains, + port, + }; + return { tenant, res, request, req }; + }, +}); + +const app = express(); + +app.use(compression()); + +// http://expressjs.com/en/advanced/best-practice-security.html#at-a-minimum-disable-x-powered-by-header +app.disable("x-powered-by"); + +// handle asset requests +if (viteDevServer) { + app.use(viteDevServer.middlewares); +} else { + // Vite fingerprints its assets so we can cache forever. + app.use( + "/assets", + express.static("build/client/assets", { immutable: true, maxAge: "1y" }) + ); +} + +// Everything else (like favicon.ico) is cached for an hour. You may want to be +// more aggressive with this caching. +app.use(express.static("build/client", { maxAge: "1h" })); + +app.use(morgan("tiny")); + +// handle SSR requests +app.all("*", remixHandler); + +const port = process.env.PORT || 3000; +app.listen(port, () => + console.log(`Express server listening at http://localhost:${port}`) +); diff --git a/tailwind.config.js b/tailwind.config.js index 36e840cd..1f479b0c 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,5 +1,5 @@ /** @type {import('tailwindcss').Config} */ -module.exports = { +export default { content: ["./app/**/*.{js,ts,jsx,tsx}"], important: true, media: false, // or 'media' or 'class' diff --git a/tsconfig.json b/tsconfig.json index ee0b2b08..2d0cfe1f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,6 +2,7 @@ "include": ["remix.env.d.ts", "**/*.ts", "**/*.tsx", "tailwind.config.js"], "exclude": ["node_modules*", "scripts"], "compilerOptions": { + "files": ["./node_modules/wmr/types.d.ts"], "lib": ["DOM", "DOM.Iterable", "ES2023"], "isolatedModules": true, "esModuleInterop": true, diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 00000000..279b0d7b --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,59 @@ +// import { remixPlugin as remix } from "@remix-run/dev"; +import { remixVitePlugin as remix } from "@remix-run/dev/dist/vite/plugin"; +import { defineConfig } from "vite"; +import tsconfigPaths from "vite-tsconfig-paths"; + +export default defineConfig({ + plugins: [ + remix({ + ignoredRouteFiles: ["**/*.css"], + }), + tsconfigPaths(), + ], + ssr: { + noExternal: [ + "react-dnd", + "react-dnd-html5-backend", + "dnd-core", + "@react-dnd/invariant", + "@react-dnd/asap", + "@react-dnd/shallowequal", + "d3", + "d3-array", + "internmap", + "d3-axis", + "d3-brush", + "d3-chord", + "d3-color", + "d3-contour", + "d3-delaunay", + "d3-dispatch", + "d3-drag", + "d3-dsv", + "d3-ease", + "d3-fetch", + "d3-force", + "d3-format", + "d3-geo", + "d3-hierarchy", + "d3-interpolate", + "d3-path", + "d3-polygon", + "d3-quadtree", + "d3-random", + "d3-scale", + "d3-scale-chromatic", + "d3-selection", + "d3-shape", + "d3-time", + "d3-time-format", + "d3-timer", + "d3-transition", + "d3-zoom", + "delaunator", + "robust-predicates", + "@uidotdev/usehooks", + "remix-utils", + ], + }, +});