Skip to content

Instantly share code, notes, and snippets.

@gajus
Created May 14, 2023 19:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gajus/ff6099064fc094c65e82fbe8ebe71e9f to your computer and use it in GitHub Desktop.
Save gajus/ff6099064fc094c65e82fbe8ebe71e9f to your computer and use it in GitHub Desktop.
/* eslint-disable import/no-extraneous-dependencies */
import { default as react } from '@vitejs/plugin-react';
import path from 'path';
// @ts-expect-error missing typings
import istanbul from 'rollup-plugin-istanbul';
import { visualizer } from 'rollup-plugin-visualizer';
import { defineConfig } from 'vite';
import { default as viteCompression } from 'vite-plugin-compression';
import dynamicImport from 'vite-plugin-dynamic-import';
import { default as ssr } from 'vite-plugin-ssr/plugin';
import { configDefaults, type UserConfig } from 'vitest/config';
/**
* This is a temporary workaround until we figure out why experimentalMinChunkSize is not merging small chunks.
* Generated by inspecting Rollup bundle and trying to determine which chunks are safe to merge.
*
* The process is:
* 1. set DEBUG_ROLLUP_BUILD=true
* 3. serve the production build (pnpm run build && pnpm run start)
* 4. run playwright script (https://gist.github.com/gajus/f7e22934fa9340e4a5a3de3079cbd580)
*/
const smallModuleIds = [
'/apps/contra-web-app/src/__generated__/AvatarImageFragment.graphql.ts',
'/apps/contra-web-app/src/__generated__/components/Icons/ChevronDown.tsx',
'/apps/contra-web-app/src/__generated__/components/Icons/ChevronUp.tsx',
'/apps/contra-web-app/src/__generated__/components/Icons/ContraLogoSuspenseLoader.tsx',
'/apps/contra-web-app/src/__generated__/components/Icons/ContraLogoTitleBlackOnWhite.tsx',
'/apps/contra-web-app/src/__generated__/components/Icons/Move.tsx',
'/apps/contra-web-app/src/__generated__/components/Icons/NavbarLock.tsx',
'/apps/contra-web-app/src/__generated__/components/Icons/OnboardingPlaceholder.tsx',
'/apps/contra-web-app/src/__generated__/components/Icons/Plus.tsx',
'/apps/contra-web-app/src/__generated__/components/Icons/ProgressTrackerCheck.tsx',
'/apps/contra-web-app/src/__generated__/components/Icons/SolidCheck.tsx',
'/apps/contra-web-app/src/__generated__/components/Icons/VerifiedGradient.tsx',
'/apps/contra-web-app/src/__generated__/ProjectCoverWrapper_portfolioProjectCover.graphql.ts',
'/apps/contra-web-app/src/__generated__/StripeContextProviderFragment.graphql.ts',
'/apps/contra-web-app/src/__generated__/useOnboardingSuccessAddUIFlagMutation.graphql.ts',
'/apps/contra-web-app/src/__generated__/useSendAnalyticEventMutationPortfolioProjectViewEventMutation.graphql.ts',
'/apps/contra-web-app/src/__generated__/useSendAnalyticEventMutationProductizedServiceViewEventMutation.graphql.ts',
'/apps/contra-web-app/src/__generated__/useSendAnalyticEventMutationProfileViewEventMutation.graphql.ts',
'/apps/contra-web-app/src/__generated__/useUserAvailabilityModalMutation.graphql.ts',
'/apps/contra-web-app/src/__generated__/useUserAvailabilityModalQuery.graphql.ts',
'/apps/contra-web-app/src/__generated__/useUserInterfaceFlags_fragment.graphql.ts',
'/apps/contra-web-app/src/components/AddVerticalFades/AddVerticalFades.tsx',
'/apps/contra-web-app/src/components/Avatars/Avatar/Avatar.tsx',
'/apps/contra-web-app/src/components/Avatars/Avatar/AvatarImage.tsx',
'/apps/contra-web-app/src/components/Avatars/Avatar/AvatarImageFragment.ts',
'/apps/contra-web-app/src/components/Avatars/Avatar/AvatarPlaceholder.tsx',
'/apps/contra-web-app/src/components/Avatars/Avatar/constants.ts',
'/apps/contra-web-app/src/components/Avatars/Avatar/utils.ts',
'/apps/contra-web-app/src/components/Avatars/AvatarGroup/AvatarGroup.tsx',
'/apps/contra-web-app/src/components/Avatars/AvatarGroup/MoreIndicator.tsx',
'/apps/contra-web-app/src/components/Avatars/AvatarWithDetails/AvatarWithDetails.tsx',
'/apps/contra-web-app/src/components/BlogCategoriesList/BlogCategoriesList.tsx',
'/apps/contra-web-app/src/components/BlogCategoriesList/util.ts',
'/apps/contra-web-app/src/components/Card/src/Card.tsx',
'/apps/contra-web-app/src/components/CategoryTag/CategoryTag.styles.ts',
'/apps/contra-web-app/src/components/CategoryTag/CategoryTag.tsx',
'/apps/contra-web-app/src/components/CategoryTag/constants.ts',
'/apps/contra-web-app/src/components/CategoryTag/util.ts',
'/apps/contra-web-app/src/components/CharacterCounter/CharacterCounter.tsx',
'/apps/contra-web-app/src/components/ContextualBanner/ContextualBanner.styles.ts',
'/apps/contra-web-app/src/components/ContextualBanner/ContextualBanner.tsx',
'/apps/contra-web-app/src/components/Controls/src/Checkbox.tsx',
'/apps/contra-web-app/src/components/Controls/src/Radio.tsx',
'/apps/contra-web-app/src/components/CurrencyInput/CurrencyInput.tsx',
'/apps/contra-web-app/src/components/DraftResourceCallout/DraftResourceCallout.styles.ts',
'/apps/contra-web-app/src/components/DraftResourceCallout/ProjectDraftCallout.tsx',
'/apps/contra-web-app/src/components/DraftResourceTag/DraftResourceTag.styles.ts',
'/apps/contra-web-app/src/components/Drawer/Drawer.styles.tsx',
'/apps/contra-web-app/src/components/Drawer/Drawer.tsx',
'/apps/contra-web-app/src/components/Drawer/hooks/useDrawer.ts',
'/apps/contra-web-app/src/components/Drawer/NavDrawer/NavDrawer.styles.ts',
'/apps/contra-web-app/src/components/Drawer/NavDrawer/NavDrawer.tsx',
'/apps/contra-web-app/src/components/Drawer/SlideUpDrawer/SlideUpDrawer.styles.tsx',
'/apps/contra-web-app/src/components/Drawer/SlideUpDrawer/SlideUpDrawer.tsx',
'/apps/contra-web-app/src/components/Drawer/SlideUpDrawerV2/SlideUpDrawerV2.styles.tsx',
'/apps/contra-web-app/src/components/Drawer/SlideUpDrawerV2/SlideUpDrawerV2.tsx',
'/apps/contra-web-app/src/components/EditableAvatar/EditableAvatar.styles.tsx',
'/apps/contra-web-app/src/components/EditableAvatar/EditableAvatar.tsx',
'/apps/contra-web-app/src/components/EditableHeadline/EditableHeadline.tsx',
'/apps/contra-web-app/src/components/ExperimentalImage/constants.ts',
'/apps/contra-web-app/src/components/ExperimentalImage/Image.styles.ts',
'/apps/contra-web-app/src/components/ExperimentalImage/Image.tsx',
'/apps/contra-web-app/src/components/ExperimentalImage/utils.ts',
'/apps/contra-web-app/src/components/ExternalRedirect/index.tsx',
'/apps/contra-web-app/src/components/Footer/constants.tsx',
'/apps/contra-web-app/src/components/Footer/Footer.tsx',
'/apps/contra-web-app/src/components/GetStartedPage/utils/getOnboardingFlowType.ts',
'/apps/contra-web-app/src/components/HelpCard/HelpCard.tsx',
'/apps/contra-web-app/src/components/Image/Image.tsx',
'/apps/contra-web-app/src/components/IndyPortfolioIconLink/IndyPortfolioIconLink.styles.ts',
'/apps/contra-web-app/src/components/IndyPortfolioIconLink/IndyPortfolioIconLink.tsx',
'/apps/contra-web-app/src/components/InlineEditContainer/InlineEditContainer.tsx',
'/apps/contra-web-app/src/components/InlineFormElement/HoverToEdit.tsx',
'/apps/contra-web-app/src/components/InlineFormElement/InlineFormElement.styles.ts',
'/apps/contra-web-app/src/components/InlineFormElement/InlineFormElement.tsx',
'/apps/contra-web-app/src/components/Layout/components/Flex/components/Col/Col.styles.ts',
'/apps/contra-web-app/src/components/Layout/components/Flex/components/Col/Col.tsx',
'/apps/contra-web-app/src/components/Layout/components/Flex/components/Row/Row.styles.ts',
'/apps/contra-web-app/src/components/Layout/components/Flex/components/Row/Row.tsx',
'/apps/contra-web-app/src/components/Layout/components/Flex/constants.ts',
'/apps/contra-web-app/src/components/Layout/components/Flex/context.ts',
'/apps/contra-web-app/src/components/Layout/components/Flex/Flex.tsx',
'/apps/contra-web-app/src/components/Link/index.tsx',
'/apps/contra-web-app/src/components/Loader/Loader.tsx',
'/apps/contra-web-app/src/components/LocationText/LocationText.styles.ts',
'/apps/contra-web-app/src/components/LocationText/LocationText.tsx',
'/apps/contra-web-app/src/components/Menu/context.tsx',
'/apps/contra-web-app/src/components/Menu/Menu.tsx',
'/apps/contra-web-app/src/components/Menu/MenuItem.tsx',
'/apps/contra-web-app/src/components/Menu/MenuPanel.tsx',
'/apps/contra-web-app/src/components/Menu/MenuReference.tsx',
'/apps/contra-web-app/src/components/MountedPortal/MountedPortal.tsx',
'/apps/contra-web-app/src/components/Navbar/constants.ts',
'/apps/contra-web-app/src/components/Navbar/MobileMenuButton/MobileMenuButton.tsx',
'/apps/contra-web-app/src/components/NotFound/NotFound.tsx',
'/apps/contra-web-app/src/components/Onboarding/animUtil.ts',
'/apps/contra-web-app/src/components/Onboarding/src/OnboardingForm.tsx',
'/apps/contra-web-app/src/components/Onboarding/src/OnboardingFormContainer.tsx',
'/apps/contra-web-app/src/components/Onboarding/src/OnboardingFormContainerContent.tsx',
'/apps/contra-web-app/src/components/Onboarding/src/OnboardingFormContainerHeader.tsx',
'/apps/contra-web-app/src/components/OnboardingSuccess/constants.ts',
'/apps/contra-web-app/src/components/OnboardingTooltip/OnboardingTooltip.styles.ts',
'/apps/contra-web-app/src/components/OnboardingTooltip/OnboardingTooltip.tsx',
'/apps/contra-web-app/src/components/OrganizationLogoEmptyState/OrganizationLogoEmptyState.tsx',
'/apps/contra-web-app/src/components/OrganizationsList/OrganizationsList.tsx',
'/apps/contra-web-app/src/components/PortfolioRedirect/PortfolioRedirect.tsx',
'/apps/contra-web-app/src/components/ProfileExternalLink/ProfileExternalLink.tsx',
'/apps/contra-web-app/src/components/ProfileExternalLink/ProfileExternalLinkEdit.tsx',
'/apps/contra-web-app/src/components/ProfileImageCropper/context/actionTypes.ts',
'/apps/contra-web-app/src/components/ProfileImageCropper/HoverCropperButton.tsx',
'/apps/contra-web-app/src/components/ProgressTracker/ProgressTracker.styles.ts',
'/apps/contra-web-app/src/components/ProgressTracker/ProgressTrackerSection.tsx',
'/apps/contra-web-app/src/components/ProjectCover/constants.ts',
'/apps/contra-web-app/src/components/ProjectCover/ProjectCover.styles.tsx',
'/apps/contra-web-app/src/components/ProjectCover/ProjectCover.tsx',
'/apps/contra-web-app/src/components/ProjectCover/ProjectCoverWrapper.tsx',
'/apps/contra-web-app/src/components/ProjectCover/utils/getBackgroundStyles.ts',
'/apps/contra-web-app/src/components/ProjectServicePublished/hooks/useProjectServicePublished.ts',
'/apps/contra-web-app/src/components/ProjectServicePublished/hooks/utils.ts',
'/apps/contra-web-app/src/components/ProjectServicePublished/ProjectServicePublished.tsx',
'/apps/contra-web-app/src/components/ProjectSquareCard/ProjectSquareCard.tsx',
'/apps/contra-web-app/src/components/Redirect/index.tsx',
'/apps/contra-web-app/src/components/RedirectToOnboardingModal/useOnboardingRedirection.tsx',
'/apps/contra-web-app/src/components/RolesList/RolesList.tsx',
'/apps/contra-web-app/src/components/Shapes/Circle.tsx',
'/apps/contra-web-app/src/components/Shapes/Cloud.tsx',
'/apps/contra-web-app/src/components/Shapes/Rect.tsx',
'/apps/contra-web-app/src/components/Shapes/SquareRounded.tsx',
'/apps/contra-web-app/src/components/Shapes/Stairs.tsx',
'/apps/contra-web-app/src/components/ShareButton/ShareButton.tsx',
'/apps/contra-web-app/src/components/SocialMediaIconBanner/SocialMediaIconBanner.tsx',
'/apps/contra-web-app/src/components/SocialMediaLink/SocialMediaLinkWithTooltip.tsx',
'/apps/contra-web-app/src/components/SortableListView/hooks/actionTypes.ts',
'/apps/contra-web-app/src/components/SortableListView/hooks/reducer.ts',
'/apps/contra-web-app/src/components/SortableListView/hooks/useSortableListView.ts',
'/apps/contra-web-app/src/components/SortableListView/SortableListView.tsx',
'/apps/contra-web-app/src/components/SvgGradient/SvgGradient.tsx',
'/apps/contra-web-app/src/components/Table/Table.tsx',
'/apps/contra-web-app/src/components/Tabs/components/TabButton.tsx',
'/apps/contra-web-app/src/components/Tabs/components/TabItem.tsx',
'/apps/contra-web-app/src/components/Tabs/components/TabLink.tsx',
'/apps/contra-web-app/src/components/Tabs/components/TabList.tsx',
'/apps/contra-web-app/src/components/Tabs/context/TabsContext.tsx',
'/apps/contra-web-app/src/components/Tabs/hooks/useTabsContext.ts',
'/apps/contra-web-app/src/components/Tabs/Tabs.styles.ts',
'/apps/contra-web-app/src/components/Tabs/Tabs.tsx',
'/apps/contra-web-app/src/components/TextLink/TextLink.styles.tsx',
'/apps/contra-web-app/src/components/TextLink/TextLink.tsx',
'/apps/contra-web-app/src/components/ThreeColumnForm/PageBackground.tsx',
'/apps/contra-web-app/src/components/ThreeColumnForm/Section.tsx',
'/apps/contra-web-app/src/components/ThreeColumnForm/ThreeColumnFormLayout.styles.ts',
'/apps/contra-web-app/src/components/Toasts/hooks/useDismissToast.ts',
'/apps/contra-web-app/src/components/ToolsList/OverflowToolsMenu.tsx',
'/apps/contra-web-app/src/components/ToolsList/ToolsList.tsx',
'/apps/contra-web-app/src/components/Tooltip/Tooltip.styles.ts',
'/apps/contra-web-app/src/components/Tooltip/Tooltip.tsx',
'/apps/contra-web-app/src/components/UserAvailabilityModal/hooks/useUserAvailabilityModal.tsx',
'/apps/contra-web-app/src/components/YupErrorMessage/YupErrorMessage.tsx',
'/apps/contra-web-app/src/constants/company.ts',
'/apps/contra-web-app/src/constants/independentPortfolios.ts',
'/apps/contra-web-app/src/constants/profile.ts',
'/apps/contra-web-app/src/contexts/LastLocationContext/LastLocationContext.tsx',
'/apps/contra-web-app/src/contexts/PageContextContext/PageContextContext.tsx',
'/apps/contra-web-app/src/contexts/StripeContext/StripeContext.tsx',
'/apps/contra-web-app/src/contexts/WindowDimensionsContext/WindowDimensionsContext.tsx',
'/apps/contra-web-app/src/features/app/contexts/AppPreloadContext.ts',
'/apps/contra-web-app/src/features/paidProjects/components/NewProjectButton/NewProjectButton.tsx',
'/apps/contra-web-app/src/features/profile/components/BlankCardMessage/BlankCardMessage.tsx',
'/apps/contra-web-app/src/features/profile/components/CreateCard/CreateCard.styles.ts',
'/apps/contra-web-app/src/features/profile/components/CreateCard/CreateCard.tsx',
'/apps/contra-web-app/src/features/profile/components/NewProfileSidebar/index.ts',
'/apps/contra-web-app/src/features/profile/components/TooltipContainer.tsx',
'/apps/contra-web-app/src/features/project/components/AuthorBlock/AuthorBlock.tsx',
'/apps/contra-web-app/src/features/project/utils/projectCover.ts',
'/apps/contra-web-app/src/hooks/useAnalytics.ts',
'/apps/contra-web-app/src/hooks/useClickAway.ts',
'/apps/contra-web-app/src/hooks/useContraMutation.ts',
'/apps/contra-web-app/src/hooks/useCopyToClipboard.ts',
'/apps/contra-web-app/src/hooks/useCurrentUser.ts',
'/apps/contra-web-app/src/hooks/useDebounceValue.ts',
'/apps/contra-web-app/src/hooks/useExactMatch.ts',
'/apps/contra-web-app/src/hooks/useFeatureFlag.ts',
'/apps/contra-web-app/src/hooks/useHasCompletedProfile.ts',
'/apps/contra-web-app/src/hooks/useHasOnboarded.ts',
'/apps/contra-web-app/src/hooks/useHasSidebarEnabled.ts',
'/apps/contra-web-app/src/hooks/useHasUserGroups.ts',
'/apps/contra-web-app/src/hooks/useHasUserInterfaceFlags.ts',
'/apps/contra-web-app/src/hooks/useImage.ts',
'/apps/contra-web-app/src/hooks/useInteractionTimer.ts',
'/apps/contra-web-app/src/hooks/useIsElementVisible.ts',
'/apps/contra-web-app/src/hooks/useIsInternalTraffic.ts',
'/apps/contra-web-app/src/hooks/useIsMediumScreen.ts',
'/apps/contra-web-app/src/hooks/useIsMobile.ts',
'/apps/contra-web-app/src/hooks/useIsSmallScreen.ts',
'/apps/contra-web-app/src/hooks/useLastLocation.ts',
'/apps/contra-web-app/src/hooks/useLinearGradientDetails.ts',
'/apps/contra-web-app/src/hooks/useLocation.ts',
'/apps/contra-web-app/src/hooks/useMount.ts',
'/apps/contra-web-app/src/hooks/useMountedPortal.ts',
'/apps/contra-web-app/src/hooks/useOnboardingProgress.ts',
'/apps/contra-web-app/src/hooks/useOnElementViewed.ts',
'/apps/contra-web-app/src/hooks/usePageContext.ts',
'/apps/contra-web-app/src/hooks/usePortfolioLink.ts',
'/apps/contra-web-app/src/hooks/useQueryPolling.ts',
'/apps/contra-web-app/src/hooks/useRafState.ts',
'/apps/contra-web-app/src/hooks/useRegisterAnalyticEvent.ts',
'/apps/contra-web-app/src/hooks/useRouteParameter.ts',
'/apps/contra-web-app/src/hooks/useRouter.ts',
'/apps/contra-web-app/src/hooks/useRoutes.ts',
'/apps/contra-web-app/src/hooks/useSearchParameter.ts',
'/apps/contra-web-app/src/hooks/useSendAnalyticEventMutation.ts',
'/apps/contra-web-app/src/hooks/useStartProjectCopy.ts',
'/apps/contra-web-app/src/hooks/useToggle.ts',
'/apps/contra-web-app/src/hooks/useTrackInput.ts',
'/apps/contra-web-app/src/hooks/useTwistFlow.ts',
'/apps/contra-web-app/src/hooks/useUnmount.ts',
'/apps/contra-web-app/src/hooks/useUpload.ts',
'/apps/contra-web-app/src/hooks/useUserInterfaceFlags.ts',
'/apps/contra-web-app/src/hooks/useWindowSize.ts',
'/apps/contra-web-app/src/services/file.ts',
'/apps/contra-web-app/src/services/storage.ts',
'/apps/contra-web-app/src/theme/index.ts',
'/apps/contra-web-app/src/theme/theme.ts',
'/apps/contra-web-app/src/theme/themeV2.ts',
'/apps/contra-web-app/src/types/utils.ts',
'/apps/contra-web-app/src/utilities/animation.ts',
'/apps/contra-web-app/src/utilities/areArraysEqual.ts',
'/apps/contra-web-app/src/utilities/copyToClipboard.ts',
'/apps/contra-web-app/src/utilities/experimentalGetContraImageUrl/constants.ts',
'/apps/contra-web-app/src/utilities/experimentalGetContraImageUrl/getContraImageUrl.ts',
'/apps/contra-web-app/src/utilities/experimentalGetContraImageUrl/utils.ts',
'/apps/contra-web-app/src/utilities/formatName.ts',
'/apps/contra-web-app/src/utilities/formatUrl.ts',
'/apps/contra-web-app/src/utilities/getContraImageUrl.ts',
'/apps/contra-web-app/src/utilities/getDefaultFeatureFlags.ts',
'/apps/contra-web-app/src/utilities/getIndependentPortfolioUrl.ts',
'/apps/contra-web-app/src/utilities/getMutationResponsePayloadErrors.ts',
'/apps/contra-web-app/src/utilities/getNextItemsInCyclicalList.ts',
'/apps/contra-web-app/src/utilities/hasValidationError.ts',
'/apps/contra-web-app/src/utilities/isSlateContent.ts',
'/apps/contra-web-app/src/utilities/isTruthy.ts',
'/apps/contra-web-app/src/utilities/isValidEmail.ts',
'/apps/contra-web-app/src/utilities/isValidPublicUrl.ts',
'/apps/contra-web-app/src/utilities/normalizeUsername.ts',
'/apps/contra-web-app/src/utilities/removeSearchParameter.ts',
'/apps/contra-web-app/src/utilities/shouldRedirectToOnboarding.ts',
'/node_modules/.pnpm/@babel+runtime@7.20.13/node_modules/@babel/runtime/helpers/esm/extends.js',
'/node_modules/.pnpm/@babel+runtime@7.20.13/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js',
'/node_modules/.pnpm/@hookform+error-message@2.0.1_zf7ga3u4zrffjlingb6kh5ipva/node_modules/@hookform/error-message/dist/index.esm.js',
'/node_modules/.pnpm/@react-hookz+web@16.1.0_biqbaboplfbrettd7655fr4n2y/node_modules/@react-hookz/web/esm/useClickOutside/useClickOutside.js',
'/node_modules/.pnpm/@react-hookz+web@16.1.0_biqbaboplfbrettd7655fr4n2y/node_modules/@react-hookz/web/esm/useIsMounted/useIsMounted.js',
'/node_modules/.pnpm/@react-hookz+web@16.1.0_biqbaboplfbrettd7655fr4n2y/node_modules/@react-hookz/web/esm/useSafeState/useSafeState.js',
'/node_modules/.pnpm/@react-hookz+web@16.1.0_biqbaboplfbrettd7655fr4n2y/node_modules/@react-hookz/web/esm/useSyncedRef/useSyncedRef.js',
'/node_modules/.pnpm/@react-hookz+web@16.1.0_biqbaboplfbrettd7655fr4n2y/node_modules/@react-hookz/web/esm/util/misc.js',
'/node_modules/.pnpm/@stripe+react-stripe-js@1.16.4_weqjxr3p5t2q35nshpdpqrergy/node_modules/@stripe/react-stripe-js/dist/react-stripe.esm.js',
'/node_modules/.pnpm/@stripe+stripe-js@1.48.0/node_modules/@stripe/stripe-js/dist/pure.js',
'/node_modules/.pnpm/@stripe+stripe-js@1.48.0/node_modules/@stripe/stripe-js/dist/pure.js?commonjs-exports',
'/node_modules/.pnpm/@stripe+stripe-js@1.48.0/node_modules/@stripe/stripe-js/pure.js',
'/node_modules/.pnpm/@stripe+stripe-js@1.48.0/node_modules/@stripe/stripe-js/pure.js?commonjs-es-import',
'/node_modules/.pnpm/@stripe+stripe-js@1.48.0/node_modules/@stripe/stripe-js/pure.js?commonjs-module',
'/node_modules/.pnpm/classnames@2.3.2/node_modules/classnames/index.js',
'/node_modules/.pnpm/classnames@2.3.2/node_modules/classnames/index.js?commonjs-module',
'/node_modules/.pnpm/clsx@1.2.1/node_modules/clsx/dist/clsx.m.js',
'/node_modules/.pnpm/fast-safe-stringify@2.1.1/node_modules/fast-safe-stringify/index.js',
'/node_modules/.pnpm/fast-safe-stringify@2.1.1/node_modules/fast-safe-stringify/index.js?commonjs-es-import',
'/node_modules/.pnpm/invariant@2.2.4/node_modules/invariant/browser.js',
'/node_modules/.pnpm/invariant@2.2.4/node_modules/invariant/browser.js?commonjs-es-import',
'/node_modules/.pnpm/load-script@1.0.0/node_modules/load-script/index.js',
'/node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseGetTag.js',
'/node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseTrim.js',
'/node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_freeGlobal.js',
'/node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_getRawTag.js',
'/node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_objectToString.js',
'/node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_root.js',
'/node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_Symbol.js',
'/node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_trimmedEndIndex.js',
'/node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/debounce.js',
'/node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/debounce.js?commonjs-es-import',
'/node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isObject.js',
'/node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isObjectLike.js',
'/node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isSymbol.js',
'/node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/now.js',
'/node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/toNumber.js',
'/node_modules/.pnpm/react-helmet-async@1.3.0_biqbaboplfbrettd7655fr4n2y/node_modules/react-helmet-async/lib/index.module.js',
'/node_modules/.pnpm/react-textarea-autosize@8.4.0_3stiutgnnbnfnf3uowm5cip22i/node_modules/react-textarea-autosize/dist/react-textarea-autosize.browser.esm.js',
'/node_modules/.pnpm/react@18.2.0/node_modules/react/index.js?commonjs-es-import',
'/node_modules/.pnpm/relay-runtime@14.1.0/node_modules/relay-runtime/index.js?commonjs-es-import',
'/node_modules/.pnpm/serialize-error@8.1.0/node_modules/serialize-error/index.js',
'/node_modules/.pnpm/serialize-error@8.1.0/node_modules/serialize-error/index.js?commonjs-es-import',
'/node_modules/.pnpm/tslib@2.5.0/node_modules/tslib/tslib.es6.js',
'/node_modules/.pnpm/use-composed-ref@1.3.0_react@18.2.0/node_modules/use-composed-ref/dist/use-composed-ref.esm.js',
'/node_modules/.pnpm/use-isomorphic-layout-effect@1.1.2_3stiutgnnbnfnf3uowm5cip22i/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.js',
'/node_modules/.pnpm/use-latest@1.2.1_3stiutgnnbnfnf3uowm5cip22i/node_modules/use-latest/dist/use-latest.esm.js',
'/packages/ui-kit/dist/__generated__/emojis/LightbulbEmoji.js',
'/packages/ui-kit/dist/__generated__/emojis/SparklesEmoji.js',
'/packages/ui-kit/dist/__generated__/icons/AddIcon.js',
'/packages/ui-kit/dist/__generated__/icons/AlertCircleIcon.js',
'/packages/ui-kit/dist/__generated__/icons/AlertTriangleIcon.js',
'/packages/ui-kit/dist/__generated__/icons/ArrowLeftIcon.js',
'/packages/ui-kit/dist/__generated__/icons/ArrowRightIcon.js',
'/packages/ui-kit/dist/__generated__/icons/CalendarIcon.js',
'/packages/ui-kit/dist/__generated__/icons/CameraIcon.js',
'/packages/ui-kit/dist/__generated__/icons/CancelIcon.js',
'/packages/ui-kit/dist/__generated__/icons/CheckIcon.js',
'/packages/ui-kit/dist/__generated__/icons/ChevronDownIcon.js',
'/packages/ui-kit/dist/__generated__/icons/ChevronLeftIcon.js',
'/packages/ui-kit/dist/__generated__/icons/ChevronUpIcon.js',
'/packages/ui-kit/dist/__generated__/icons/ClockIcon.js',
'/packages/ui-kit/dist/__generated__/icons/CloseIcon.js',
'/packages/ui-kit/dist/__generated__/icons/CopyIcon.js',
'/packages/ui-kit/dist/__generated__/icons/EditIcon.js',
'/packages/ui-kit/dist/__generated__/icons/ExternalLinkAltIcon.js',
'/packages/ui-kit/dist/__generated__/icons/EyeOffIcon.js',
'/packages/ui-kit/dist/__generated__/icons/FilterIcon.js',
'/packages/ui-kit/dist/__generated__/icons/HeartOutlineIcon.js',
'/packages/ui-kit/dist/__generated__/icons/HeartSolidIcon.js',
'/packages/ui-kit/dist/__generated__/icons/ImageIcon.js',
'/packages/ui-kit/dist/__generated__/icons/JobOutlineIcon.js',
'/packages/ui-kit/dist/__generated__/icons/LinkIcon.js',
'/packages/ui-kit/dist/__generated__/icons/LocationIcon.js',
'/packages/ui-kit/dist/__generated__/icons/LockSolidIcon.js',
'/packages/ui-kit/dist/__generated__/icons/MoreIcon.js',
'/packages/ui-kit/dist/__generated__/icons/MoveIcon.js',
'/packages/ui-kit/dist/__generated__/icons/OpportunityOutlineIcon.js',
'/packages/ui-kit/dist/__generated__/icons/PreferenceIcon.js',
'/packages/ui-kit/dist/__generated__/icons/ProjectOutlineIcon.js',
'/packages/ui-kit/dist/__generated__/icons/SearchIcon.js',
'/packages/ui-kit/dist/__generated__/icons/ServiceOutlineIcon.js',
'/packages/ui-kit/dist/__generated__/icons/ShareAltIcon.js',
'/packages/ui-kit/dist/__generated__/icons/SocialInstagramIcon.js',
'/packages/ui-kit/dist/__generated__/icons/SocialPinterestIcon.js',
'/packages/ui-kit/dist/__generated__/icons/SocialTiktokIcon.js',
'/packages/ui-kit/dist/__generated__/icons/SocialTwitterIcon.js',
'/packages/ui-kit/dist/__generated__/icons/SocialUnidentifiedToolIcon.js',
'/packages/ui-kit/dist/__generated__/icons/SocialYoutubeIcon.js',
'/packages/ui-kit/dist/__generated__/icons/SparklesIcon.js',
'/packages/ui-kit/dist/__generated__/icons/TrashIcon.js',
'/packages/ui-kit/dist/__generated__/icons/UploadIcon.js',
'/packages/ui-kit/dist/__generated__/primitives/colorPrimitives.js',
'/packages/ui-kit/dist/__generated__/primitives/textStyles.js',
'/packages/ui-kit/dist/theme/breakpoints.js',
'/packages/ui-kit/dist/theme/colors.js',
'/packages/ui-kit/dist/theme/fonts.js',
'/packages/ui-kit/dist/theme/mediaQueries.js',
'/packages/ui-kit/dist/theme/theme.js',
'/packages/ui-kit/dist/theme/utils.js',
];
const {
COVERAGE_INSTRUMENT,
CWA_BASE_ASSETS_URL,
CWA_BASE_SERVER_URL,
GENERATE_SOURCEMAP,
NODE_ENV,
VITEST,
} = process.env;
if (!NODE_ENV) {
throw new Error('Have to set explicit NODE_ENV');
}
const DEBUG_ROLLUP_BUILD = process.env.DEBUG_ROLLUP_BUILD === 'true';
if (
NODE_ENV !== 'production' &&
NODE_ENV !== 'development' &&
NODE_ENV !== 'test'
) {
throw new Error(
'NODE_ENV value has to be either "production", "development" or "test"',
);
}
export default defineConfig(({ ssrBuild }) => {
const plugins = [
dynamicImport({
loose: false,
onFiles: (files) => {
return files.filter((file) => {
return !file.includes('.test.');
});
},
}),
react({
babel: {
plugins: ['relay'],
},
fastRefresh: NODE_ENV === 'development',
}),
];
if (VITEST !== 'true') {
// eslint-disable-next-line no-console
console.log('overriding VPS configuration', {
baseAssets: CWA_BASE_ASSETS_URL,
baseServer: CWA_BASE_SERVER_URL,
});
plugins.push(
viteCompression({
// This is used mostly to speed up the integration tests.
algorithm: 'brotliCompress',
}),
ssr({
baseAssets: CWA_BASE_ASSETS_URL,
baseServer: CWA_BASE_SERVER_URL,
}),
);
}
const test: UserConfig['test'] = {
clearMocks: true,
coverage: {
all: true,
exclude: [
...configDefaults.exclude,
'src/**/__tests__/**',
'src/**/__generated__/**',
'src/**/types/**',
'src/**/constants/**',
'src/**/mutations/**',
'src/utilities/**.test.ts',
'src/config/**',
'src/utilities/animation.ts',
'src/utilities/testRenderer.tsx',
'**/__mocks__/**',
'src/createRelayEnvironment.ts',
'src/serverRouter.ts',
'.eslintrc.js',
],
include: ['src/**'],
provider: 'istanbul',
reporter: ['text-summary', 'lcov'],
reportsDirectory: './__generated__/coverage',
},
// TODO we want to disable this, but currently there are some unhandled errors causing flakiness
dangerouslyIgnoreUnhandledErrors: true,
environment: 'jsdom',
include: [
'./src/**/__tests__/**/*.{js,jsx,ts,tsx}',
'./src/**/*.test.{js,jsx,ts,tsx}',
],
outputFile: './src/__generated__/vitest/results.xml',
reporters: ['verbose', 'junit'],
setupFiles: './src/setupTests.ts',
};
return {
build: {
commonjsOptions: {
include: [/packages/, /node_modules/],
strictRequires: true,
},
emptyOutDir: true,
manifest: true,
minify: !DEBUG_ROLLUP_BUILD,
modulePreload: {
polyfill: false,
resolveDependencies: () => {
return [];
},
},
rollupOptions: {
onwarn: (warning) => {
if (warning.code === 'CYCLIC_CROSS_CHUNK_REEXPORT') {
process.exitCode = 1;
}
// eslint-disable-next-line no-console
console.error('Rollup Warning: ' + warning.message);
},
output: {
banner: DEBUG_ROLLUP_BUILD
? (chunk) => {
// This banner helps to identify what gets bundled into each chunk.
// https://github.com/rollup/rollup/issues/4850#issuecomment-1429657718
return (
`// @preserve name ${chunk.name}\n` +
`// @preserve facadeModuleId ${chunk.facadeModuleId}\n` +
chunk.moduleIds
.map((moduleId) => {
return (
'// @preserve module ' +
moduleId
.replaceAll(
// eslint-disable-next-line no-control-regex
/[\u0000-\u001F\u007F-\u009F]/g,
'',
)
.trim()
.replace(path.resolve(__dirname, '../..'), '@')
);
})
.join('\n')
);
}
: undefined,
chunkFileNames: (chunk) => {
if (chunk.name === 'index' && chunk.moduleIds.length) {
const lastModuleId = chunk.moduleIds[chunk.moduleIds.length - 1];
const parentDirectoryName =
lastModuleId.match(/\/([^/]+)\/index\./u)?.[1];
// Adding parent directory name to the chunk to make it easier to understand where the chunk originates from.
if (parentDirectoryName) {
return 'chunk-' + parentDirectoryName + '-[name].[hash].js';
}
}
return 'chunk-[name].[hash].js';
},
entryFileNames: ssrBuild ? '[name].js' : 'entry-[name].[hash].js',
hoistTransitiveImports: !DEBUG_ROLLUP_BUILD,
manualChunks: (id) => {
for (const smallModuleId of smallModuleIds) {
if (id.includes(smallModuleId)) {
return 'main';
}
}
return undefined;
},
sourcemap: GENERATE_SOURCEMAP === 'true',
},
plugins: [
visualizer({
filename: '__generated__/graph.json',
template: 'raw-data',
}),
...(COVERAGE_INSTRUMENT === 'true'
? [
istanbul({
exclude: [
'**/constants/**',
'**/types/**',
'**/mutations/**',
],
include: ['src/features/**/**', 'src/pages/**/**'],
}),
]
: []),
],
treeshake: {
preset: 'recommended',
},
},
sourcemap: GENERATE_SOURCEMAP === 'true',
},
mode: NODE_ENV === 'production' ? 'production' : 'development',
optimizeDeps: {
include: ['@contra/utilities/hasOwnPropertyAlt', '@contra/money'],
},
plugins,
resolve: {
alias: {
'@': path.resolve(__dirname, './src/'),
},
},
test,
};
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment