From 0173ce32c3b126f4443ac72c20b9341cca359bac Mon Sep 17 00:00:00 2001 From: Amruth Pillai Date: Wed, 7 Jun 2023 19:50:48 +0200 Subject: [PATCH] Implement Turborepo to include Build Caching in CI/CD --- .dockerignore | 1 + .github/workflows/docker-build-push.yml | 2 + .gitignore | 4 + client/Dockerfile | 6 +- client/components/build/Center/Header.tsx | 2 +- client/components/build/Center/Page.tsx | 2 +- .../build/LeftSidebar/LeftSidebar.tsx | 2 +- .../LeftSidebar/sections/PhotoFilters.tsx | 2 +- .../LeftSidebar/sections/PhotoUpload.tsx | 2 +- .../build/LeftSidebar/sections/Profiles.tsx | 2 +- .../build/LeftSidebar/sections/Section.tsx | 2 +- .../build/RightSidebar/sections/CustomCSS.tsx | 2 +- .../build/RightSidebar/sections/Settings.tsx | 2 +- .../build/RightSidebar/sections/Theme.tsx | 2 +- .../RightSidebar/sections/Typography.tsx | 2 +- client/components/dashboard/ResumePreview.tsx | 2 +- client/components/shared/List.tsx | 2 +- client/components/shared/ListItem.tsx | 2 +- client/config/sections.tsx | 2 +- client/modals/builder/sections/AwardModal.tsx | 2 +- .../builder/sections/CertificateModal.tsx | 2 +- .../modals/builder/sections/CustomModal.tsx | 2 +- .../builder/sections/EducationModal.tsx | 2 +- .../modals/builder/sections/InterestModal.tsx | 2 +- .../modals/builder/sections/LanguageModal.tsx | 2 +- .../modals/builder/sections/ProfileModal.tsx | 2 +- .../modals/builder/sections/ProjectModal.tsx | 2 +- .../builder/sections/PublicationModal.tsx | 2 +- .../builder/sections/ReferenceModal.tsx | 2 +- client/modals/builder/sections/SkillModal.tsx | 2 +- .../builder/sections/VolunteerModal.tsx | 2 +- client/modals/builder/sections/WorkModal.tsx | 2 +- client/modals/dashboard/CreateResumeModal.tsx | 2 +- .../modals/dashboard/ImportExternalModal.tsx | 2 +- client/modals/dashboard/RenameResumeModal.tsx | 2 +- client/next-sitemap.config.js | 2 +- client/next.config.js | 1 - client/package.json | 4 +- client/pages/[username]/[slug]/build.tsx | 2 +- client/pages/[username]/[slug]/index.tsx | 2 +- client/pages/[username]/[slug]/printer.tsx | 2 +- client/pages/r/[shortId].tsx | 2 +- client/services/auth.ts | 2 +- client/services/fonts.ts | 2 +- client/services/integrations.ts | 2 +- client/services/resume.ts | 2 +- client/store/auth/authSlice.ts | 2 +- client/store/resume/resumeSlice.ts | 2 +- client/store/sagas/sync.ts | 2 +- client/templates/Castform/Castform.tsx | 2 +- client/templates/Castform/widgets/Heading.tsx | 2 +- .../templates/Castform/widgets/Masthead.tsx | 2 +- client/templates/Castform/widgets/Section.tsx | 2 +- client/templates/Gengar/Gengar.tsx | 2 +- client/templates/Gengar/widgets/Heading.tsx | 2 +- client/templates/Gengar/widgets/Masthead.tsx | 2 +- client/templates/Gengar/widgets/Section.tsx | 2 +- .../templates/Glalie/widgets/BadgeDisplay.tsx | 2 +- client/templates/Glalie/widgets/Heading.tsx | 2 +- client/templates/Glalie/widgets/Section.tsx | 2 +- .../templates/Kakuna/widgets/BadgeDisplay.tsx | 2 +- client/templates/Kakuna/widgets/Section.tsx | 2 +- client/templates/Leafish/widgets/Heading.tsx | 2 +- client/templates/Leafish/widgets/Masthead.tsx | 2 +- client/templates/Leafish/widgets/Section.tsx | 2 +- client/templates/Onyx/widgets/Heading.tsx | 2 +- client/templates/Onyx/widgets/Section.tsx | 2 +- client/templates/Pikachu/widgets/Heading.tsx | 2 +- client/templates/Pikachu/widgets/Masthead.tsx | 2 +- client/templates/Pikachu/widgets/Section.tsx | 2 +- client/utils/date.ts | 2 +- client/utils/getResumeUrl.ts | 2 +- client/utils/styles.ts | 2 +- client/utils/template.ts | 2 +- docker-compose.yml | 4 + package.json | 15 ++-- pnpm-lock.yaml | 76 +++++++++++++++++-- schema/package.json | 2 +- server/Dockerfile | 6 +- server/package.json | 5 +- server/src/fonts/fonts.service.ts | 2 +- .../src/integrations/integrations.service.ts | 18 ++--- server/src/printer/printer.controller.ts | 2 +- server/src/printer/printer.service.ts | 2 +- server/src/resume/data/defaultState.ts | 2 +- server/src/resume/entities/resume.entity.ts | 2 +- server/src/resume/resume.service.ts | 2 +- turbo.json | 17 +++++ 88 files changed, 202 insertions(+), 107 deletions(-) create mode 100644 turbo.json diff --git a/.dockerignore b/.dockerignore index 1f3d8c31..39261c41 100644 --- a/.dockerignore +++ b/.dockerignore @@ -2,6 +2,7 @@ /app # Build Artifacts +/schema/dist /server/dist /client/.next diff --git a/.github/workflows/docker-build-push.yml b/.github/workflows/docker-build-push.yml index a2f58495..e463f58f 100644 --- a/.github/workflows/docker-build-push.yml +++ b/.github/workflows/docker-build-push.yml @@ -51,6 +51,8 @@ jobs: push: true platforms: linux/amd64,linux/arm64 file: ${{ matrix.image }}/Dockerfile + build-args: | + TURBO_TOKEN=${{ secrets.TURBO_TOKEN }} tags: | amruthpillai/reactive-resume:${{ matrix.image }}-latest amruthpillai/reactive-resume:${{ matrix.image }}-${{ steps.version.outputs.current-version }} diff --git a/.gitignore b/.gitignore index 67c9c63f..4e5621cf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ # Environment Variables .env .env.* +*.env !.env.gitpod !.env.example @@ -12,3 +13,6 @@ node_modules # Intellij .idea + +# Turborepo +.turbo \ No newline at end of file diff --git a/client/Dockerfile b/client/Dockerfile index 10ca12c8..890c2501 100644 --- a/client/Dockerfile +++ b/client/Dockerfile @@ -21,8 +21,10 @@ COPY --from=dependencies /app/node_modules ./node_modules COPY --from=dependencies /app/schema/node_modules ./schema/node_modules COPY --from=dependencies /app/client/node_modules ./client/node_modules -RUN pnpm run --filter schema build \ - && pnpm run --filter client build +ARG TURBO_TOKEN +ENV TURBO_TOKEN=$TURBO_TOKEN + +RUN pnpm exec turbo --filter client build FROM base as production diff --git a/client/components/build/Center/Header.tsx b/client/components/build/Center/Header.tsx index 20724944..604d1c3e 100644 --- a/client/components/build/Center/Header.tsx +++ b/client/components/build/Center/Header.tsx @@ -20,7 +20,6 @@ import { useMediaQuery, useTheme, } from '@mui/material'; -import { Resume } from '@reactive-resume/schema'; import clsx from 'clsx'; import get from 'lodash/get'; import { useRouter } from 'next/router'; @@ -28,6 +27,7 @@ import { useTranslation } from 'next-i18next'; import { useEffect, useMemo, useState } from 'react'; import toast from 'react-hot-toast'; import { useMutation } from 'react-query'; +import { Resume } from 'schema'; import { RESUMES_QUERY } from '@/constants/index'; import { ServerError } from '@/services/axios'; diff --git a/client/components/build/Center/Page.tsx b/client/components/build/Center/Page.tsx index f94d5ba5..32542ccc 100644 --- a/client/components/build/Center/Page.tsx +++ b/client/components/build/Center/Page.tsx @@ -1,10 +1,10 @@ import { css } from '@emotion/css'; -import { CustomCSS, PageConfig, ThemeConfig, Typography } from '@reactive-resume/schema'; import clsx from 'clsx'; import get from 'lodash/get'; import isEmpty from 'lodash/isEmpty'; import { useTranslation } from 'next-i18next'; import { useMemo } from 'react'; +import { CustomCSS, PageConfig, ThemeConfig, Typography } from 'schema'; import { useAppSelector } from '@/store/hooks'; import templateMap from '@/templates/templateMap'; diff --git a/client/components/build/LeftSidebar/LeftSidebar.tsx b/client/components/build/LeftSidebar/LeftSidebar.tsx index c146cddd..bdc9f41d 100644 --- a/client/components/build/LeftSidebar/LeftSidebar.tsx +++ b/client/components/build/LeftSidebar/LeftSidebar.tsx @@ -1,11 +1,11 @@ import { Add, Star } from '@mui/icons-material'; import { Button, Divider, IconButton, SwipeableDrawer, Tooltip, useMediaQuery, useTheme } from '@mui/material'; -import { Section as SectionRecord } from '@reactive-resume/schema'; import cloneDeep from 'lodash/cloneDeep'; import get from 'lodash/get'; import Link from 'next/link'; import { useTranslation } from 'next-i18next'; import React, { ReactComponentElement, useMemo } from 'react'; +import { Section as SectionRecord } from 'schema'; import { validate } from 'uuid'; import Logo from '@/components/shared/Logo'; diff --git a/client/components/build/LeftSidebar/sections/PhotoFilters.tsx b/client/components/build/LeftSidebar/sections/PhotoFilters.tsx index d8718b8a..73adf951 100644 --- a/client/components/build/LeftSidebar/sections/PhotoFilters.tsx +++ b/client/components/build/LeftSidebar/sections/PhotoFilters.tsx @@ -1,8 +1,8 @@ import { Circle, Square, SquareRounded } from '@mui/icons-material'; import { Checkbox, Divider, FormControlLabel, Slider, ToggleButton, ToggleButtonGroup } from '@mui/material'; -import { Photo, PhotoShape } from '@reactive-resume/schema'; import get from 'lodash/get'; import { useTranslation } from 'next-i18next'; +import { Photo, PhotoShape } from 'schema'; import { useAppDispatch, useAppSelector } from '@/store/hooks'; import { setResumeState } from '@/store/resume/resumeSlice'; diff --git a/client/components/build/LeftSidebar/sections/PhotoUpload.tsx b/client/components/build/LeftSidebar/sections/PhotoUpload.tsx index 422a8b3b..a2d1f688 100644 --- a/client/components/build/LeftSidebar/sections/PhotoUpload.tsx +++ b/client/components/build/LeftSidebar/sections/PhotoUpload.tsx @@ -1,11 +1,11 @@ import { Avatar, IconButton, Skeleton, Tooltip } from '@mui/material'; -import { Photo, Resume } from '@reactive-resume/schema'; import get from 'lodash/get'; import isEmpty from 'lodash/isEmpty'; import { useTranslation } from 'next-i18next'; import React, { useRef } from 'react'; import toast from 'react-hot-toast'; import { useMutation } from 'react-query'; +import { Photo, Resume } from 'schema'; import { ServerError } from '@/services/axios'; import { deletePhoto, DeletePhotoParams, uploadPhoto, UploadPhotoParams } from '@/services/resume'; diff --git a/client/components/build/LeftSidebar/sections/Profiles.tsx b/client/components/build/LeftSidebar/sections/Profiles.tsx index 796535a7..e09429c1 100644 --- a/client/components/build/LeftSidebar/sections/Profiles.tsx +++ b/client/components/build/LeftSidebar/sections/Profiles.tsx @@ -1,7 +1,7 @@ import { Add } from '@mui/icons-material'; import { Button } from '@mui/material'; -import { ListItem } from '@reactive-resume/schema'; import { useTranslation } from 'next-i18next'; +import { ListItem } from 'schema'; import Heading from '@/components/shared/Heading'; import List from '@/components/shared/List'; diff --git a/client/components/build/LeftSidebar/sections/Section.tsx b/client/components/build/LeftSidebar/sections/Section.tsx index c42d77e0..2cab357a 100644 --- a/client/components/build/LeftSidebar/sections/Section.tsx +++ b/client/components/build/LeftSidebar/sections/Section.tsx @@ -1,9 +1,9 @@ import { Add } from '@mui/icons-material'; import { Button } from '@mui/material'; -import { ListItem, Section as SectionRecord, SectionType } from '@reactive-resume/schema'; import clsx from 'clsx'; import get from 'lodash/get'; import { useTranslation } from 'next-i18next'; +import { ListItem, Section as SectionRecord, SectionType } from 'schema'; import { validate } from 'uuid'; import Heading from '@/components/shared/Heading'; diff --git a/client/components/build/RightSidebar/sections/CustomCSS.tsx b/client/components/build/RightSidebar/sections/CustomCSS.tsx index e817ad35..c9387f68 100644 --- a/client/components/build/RightSidebar/sections/CustomCSS.tsx +++ b/client/components/build/RightSidebar/sections/CustomCSS.tsx @@ -1,10 +1,10 @@ import Editor from '@monaco-editor/react'; import { useTheme } from '@mui/material'; -import { CustomCSS as CustomCSSType } from '@reactive-resume/schema'; import clsx from 'clsx'; import get from 'lodash/get'; import { useTranslation } from 'next-i18next'; import React from 'react'; +import { CustomCSS as CustomCSSType } from 'schema'; import Heading from '@/components/shared/Heading'; import { useAppDispatch, useAppSelector } from '@/store/hooks'; diff --git a/client/components/build/RightSidebar/sections/Settings.tsx b/client/components/build/RightSidebar/sections/Settings.tsx index b9d7aeff..46b9d56f 100644 --- a/client/components/build/RightSidebar/sections/Settings.tsx +++ b/client/components/build/RightSidebar/sections/Settings.tsx @@ -10,13 +10,13 @@ import { Switch, TextField, } from '@mui/material'; -import { DateConfig, PageConfig, Resume } from '@reactive-resume/schema'; import dayjs from 'dayjs'; import get from 'lodash/get'; import { useRouter } from 'next/router'; import { useTranslation } from 'next-i18next'; import { useMemo, useState } from 'react'; import { useMutation } from 'react-query'; +import { DateConfig, PageConfig, Resume } from 'schema'; import Heading from '@/components/shared/Heading'; import ThemeSwitch from '@/components/shared/ThemeSwitch'; diff --git a/client/components/build/RightSidebar/sections/Theme.tsx b/client/components/build/RightSidebar/sections/Theme.tsx index c2a786b0..01aa2946 100644 --- a/client/components/build/RightSidebar/sections/Theme.tsx +++ b/client/components/build/RightSidebar/sections/Theme.tsx @@ -1,6 +1,6 @@ -import { ThemeConfig } from '@reactive-resume/schema'; import get from 'lodash/get'; import { useTranslation } from 'next-i18next'; +import { ThemeConfig } from 'schema'; import ColorAvatar from '@/components/shared/ColorAvatar'; import ColorPicker from '@/components/shared/ColorPicker'; diff --git a/client/components/build/RightSidebar/sections/Typography.tsx b/client/components/build/RightSidebar/sections/Typography.tsx index 63e2c3af..33297462 100644 --- a/client/components/build/RightSidebar/sections/Typography.tsx +++ b/client/components/build/RightSidebar/sections/Typography.tsx @@ -1,9 +1,9 @@ import { Autocomplete, Skeleton, Slider, TextField } from '@mui/material'; -import { Font, TypeCategory, TypeProperty, Typography as TypographyType } from '@reactive-resume/schema'; import get from 'lodash/get'; import isEmpty from 'lodash/isEmpty'; import { useTranslation } from 'next-i18next'; import { useQuery } from 'react-query'; +import { Font, TypeCategory, TypeProperty, Typography as TypographyType } from 'schema'; import Heading from '@/components/shared/Heading'; import { FONTS_QUERY } from '@/constants/index'; diff --git a/client/components/dashboard/ResumePreview.tsx b/client/components/dashboard/ResumePreview.tsx index 0d36898f..7aae1b91 100644 --- a/client/components/dashboard/ResumePreview.tsx +++ b/client/components/dashboard/ResumePreview.tsx @@ -7,7 +7,6 @@ import { OpenInNew, } from '@mui/icons-material'; import { ButtonBase, ListItemIcon, ListItemText, Menu, MenuItem, Tooltip } from '@mui/material'; -import { Resume } from '@reactive-resume/schema'; import Image from 'next/image'; import Link from 'next/link'; import { useRouter } from 'next/router'; @@ -15,6 +14,7 @@ import { useTranslation } from 'next-i18next'; import { useState } from 'react'; import toast from 'react-hot-toast'; import { useMutation } from 'react-query'; +import { Resume } from 'schema'; import { RESUMES_QUERY } from '@/constants/index'; import { ServerError } from '@/services/axios'; diff --git a/client/components/shared/List.tsx b/client/components/shared/List.tsx index 59794a55..d2eb8fa5 100644 --- a/client/components/shared/List.tsx +++ b/client/components/shared/List.tsx @@ -1,4 +1,3 @@ -import { ListItem as ListItemType } from '@reactive-resume/schema'; import clsx from 'clsx'; import get from 'lodash/get'; import isArray from 'lodash/isArray'; @@ -8,6 +7,7 @@ import { useTranslation } from 'next-i18next'; import { useCallback } from 'react'; import { DndProvider } from 'react-dnd'; import { HTML5Backend } from 'react-dnd-html5-backend'; +import { ListItem as ListItemType } from 'schema'; import { useAppDispatch, useAppSelector } from '@/store/hooks'; import { deleteItem, setResumeState } from '@/store/resume/resumeSlice'; diff --git a/client/components/shared/ListItem.tsx b/client/components/shared/ListItem.tsx index e8e407a1..c12d9e59 100644 --- a/client/components/shared/ListItem.tsx +++ b/client/components/shared/ListItem.tsx @@ -1,11 +1,11 @@ import { DeleteOutline, DriveFileRenameOutline, FileCopy, MoreVert } from '@mui/icons-material'; import { Divider, IconButton, ListItemIcon, ListItemText, Menu, MenuItem, Tooltip } from '@mui/material'; -import { ListItem as ListItemType } from '@reactive-resume/schema'; import clsx from 'clsx'; import isFunction from 'lodash/isFunction'; import { useTranslation } from 'next-i18next'; import React, { useRef, useState } from 'react'; import { DropTargetMonitor, useDrag, useDrop, XYCoord } from 'react-dnd'; +import { ListItem as ListItemType } from 'schema'; import styles from './ListItem.module.scss'; diff --git a/client/config/sections.tsx b/client/config/sections.tsx index 2e7e6edd..b0d6f356 100644 --- a/client/config/sections.tsx +++ b/client/config/sections.tsx @@ -23,8 +23,8 @@ import { VolunteerActivism, Work, } from '@mui/icons-material'; -import { Section as SectionRecord, SectionType } from '@reactive-resume/schema'; import isEmpty from 'lodash/isEmpty'; +import { Section as SectionRecord, SectionType } from 'schema'; import Basics from '@/components/build/LeftSidebar/sections/Basics'; import Location from '@/components/build/LeftSidebar/sections/Location'; diff --git a/client/modals/builder/sections/AwardModal.tsx b/client/modals/builder/sections/AwardModal.tsx index 346bd3b2..a682273c 100644 --- a/client/modals/builder/sections/AwardModal.tsx +++ b/client/modals/builder/sections/AwardModal.tsx @@ -2,7 +2,7 @@ import { joiResolver } from '@hookform/resolvers/joi'; import { Add, DriveFileRenameOutline } from '@mui/icons-material'; import { Button, TextField } from '@mui/material'; import { DatePicker } from '@mui/x-date-pickers/DatePicker'; -import { Award, SectionPath } from '@reactive-resume/schema'; +import { Award, SectionPath } from 'schema'; import dayjs from 'dayjs'; import Joi from 'joi'; import get from 'lodash/get'; diff --git a/client/modals/builder/sections/CertificateModal.tsx b/client/modals/builder/sections/CertificateModal.tsx index eb876b74..8058cdd8 100644 --- a/client/modals/builder/sections/CertificateModal.tsx +++ b/client/modals/builder/sections/CertificateModal.tsx @@ -2,7 +2,7 @@ import { joiResolver } from '@hookform/resolvers/joi'; import { Add, DriveFileRenameOutline } from '@mui/icons-material'; import { Button, TextField } from '@mui/material'; import { DatePicker } from '@mui/x-date-pickers/DatePicker'; -import { Certificate, SectionPath } from '@reactive-resume/schema'; +import { Certificate, SectionPath } from 'schema'; import dayjs from 'dayjs'; import Joi from 'joi'; import get from 'lodash/get'; diff --git a/client/modals/builder/sections/CustomModal.tsx b/client/modals/builder/sections/CustomModal.tsx index dbbc45c3..716f1f38 100644 --- a/client/modals/builder/sections/CustomModal.tsx +++ b/client/modals/builder/sections/CustomModal.tsx @@ -2,7 +2,7 @@ import { joiResolver } from '@hookform/resolvers/joi'; import { Add, DriveFileRenameOutline } from '@mui/icons-material'; import { Button, Slider, TextField } from '@mui/material'; import { DatePicker } from '@mui/x-date-pickers/DatePicker'; -import { Custom } from '@reactive-resume/schema'; +import { Custom } from 'schema'; import dayjs from 'dayjs'; import Joi from 'joi'; import get from 'lodash/get'; diff --git a/client/modals/builder/sections/EducationModal.tsx b/client/modals/builder/sections/EducationModal.tsx index e2c020ce..c9a1906a 100644 --- a/client/modals/builder/sections/EducationModal.tsx +++ b/client/modals/builder/sections/EducationModal.tsx @@ -2,7 +2,7 @@ import { joiResolver } from '@hookform/resolvers/joi'; import { Add, DriveFileRenameOutline } from '@mui/icons-material'; import { Button, TextField } from '@mui/material'; import { DatePicker } from '@mui/x-date-pickers/DatePicker'; -import { Education, SectionPath } from '@reactive-resume/schema'; +import { Education, SectionPath } from 'schema'; import dayjs from 'dayjs'; import Joi from 'joi'; import get from 'lodash/get'; diff --git a/client/modals/builder/sections/InterestModal.tsx b/client/modals/builder/sections/InterestModal.tsx index 7b4263bc..b6a9eeed 100644 --- a/client/modals/builder/sections/InterestModal.tsx +++ b/client/modals/builder/sections/InterestModal.tsx @@ -1,7 +1,7 @@ import { joiResolver } from '@hookform/resolvers/joi'; import { Add, DriveFileRenameOutline } from '@mui/icons-material'; import { Button, TextField } from '@mui/material'; -import { Interest, SectionPath } from '@reactive-resume/schema'; +import { Interest, SectionPath } from 'schema'; import Joi from 'joi'; import get from 'lodash/get'; import isEmpty from 'lodash/isEmpty'; diff --git a/client/modals/builder/sections/LanguageModal.tsx b/client/modals/builder/sections/LanguageModal.tsx index e6221065..9c485e1e 100644 --- a/client/modals/builder/sections/LanguageModal.tsx +++ b/client/modals/builder/sections/LanguageModal.tsx @@ -1,7 +1,7 @@ import { joiResolver } from '@hookform/resolvers/joi'; import { Add, DriveFileRenameOutline } from '@mui/icons-material'; import { Button, Slider, TextField } from '@mui/material'; -import { Language, SectionPath } from '@reactive-resume/schema'; +import { Language, SectionPath } from 'schema'; import Joi from 'joi'; import get from 'lodash/get'; import isEmpty from 'lodash/isEmpty'; diff --git a/client/modals/builder/sections/ProfileModal.tsx b/client/modals/builder/sections/ProfileModal.tsx index 8c602b49..94da1566 100644 --- a/client/modals/builder/sections/ProfileModal.tsx +++ b/client/modals/builder/sections/ProfileModal.tsx @@ -1,7 +1,7 @@ import { joiResolver } from '@hookform/resolvers/joi'; import { Add, AlternateEmail, DriveFileRenameOutline } from '@mui/icons-material'; import { Button, TextField } from '@mui/material'; -import { Profile } from '@reactive-resume/schema'; +import { Profile } from 'schema'; import Joi from 'joi'; import get from 'lodash/get'; import isEmpty from 'lodash/isEmpty'; diff --git a/client/modals/builder/sections/ProjectModal.tsx b/client/modals/builder/sections/ProjectModal.tsx index 93b82a4e..52b91418 100644 --- a/client/modals/builder/sections/ProjectModal.tsx +++ b/client/modals/builder/sections/ProjectModal.tsx @@ -2,7 +2,7 @@ import { joiResolver } from '@hookform/resolvers/joi'; import { Add, DriveFileRenameOutline } from '@mui/icons-material'; import { Button, TextField } from '@mui/material'; import { DatePicker } from '@mui/x-date-pickers/DatePicker'; -import { Project, SectionPath } from '@reactive-resume/schema'; +import { Project, SectionPath } from 'schema'; import dayjs from 'dayjs'; import Joi from 'joi'; import get from 'lodash/get'; diff --git a/client/modals/builder/sections/PublicationModal.tsx b/client/modals/builder/sections/PublicationModal.tsx index 2d0a1522..3ae544e7 100644 --- a/client/modals/builder/sections/PublicationModal.tsx +++ b/client/modals/builder/sections/PublicationModal.tsx @@ -2,7 +2,7 @@ import { joiResolver } from '@hookform/resolvers/joi'; import { Add, DriveFileRenameOutline } from '@mui/icons-material'; import { Button, TextField } from '@mui/material'; import { DatePicker } from '@mui/x-date-pickers/DatePicker'; -import { Publication, SectionPath } from '@reactive-resume/schema'; +import { Publication, SectionPath } from 'schema'; import dayjs from 'dayjs'; import Joi from 'joi'; import get from 'lodash/get'; diff --git a/client/modals/builder/sections/ReferenceModal.tsx b/client/modals/builder/sections/ReferenceModal.tsx index 3a8c99a7..e983338c 100644 --- a/client/modals/builder/sections/ReferenceModal.tsx +++ b/client/modals/builder/sections/ReferenceModal.tsx @@ -1,7 +1,7 @@ import { joiResolver } from '@hookform/resolvers/joi'; import { Add, DriveFileRenameOutline } from '@mui/icons-material'; import { Button, TextField } from '@mui/material'; -import { Reference, SectionPath } from '@reactive-resume/schema'; +import { Reference, SectionPath } from 'schema'; import Joi from 'joi'; import get from 'lodash/get'; import isEmpty from 'lodash/isEmpty'; diff --git a/client/modals/builder/sections/SkillModal.tsx b/client/modals/builder/sections/SkillModal.tsx index fd5f888e..1fae6c19 100644 --- a/client/modals/builder/sections/SkillModal.tsx +++ b/client/modals/builder/sections/SkillModal.tsx @@ -1,7 +1,7 @@ import { joiResolver } from '@hookform/resolvers/joi'; import { Add, DriveFileRenameOutline } from '@mui/icons-material'; import { Button, Slider, TextField } from '@mui/material'; -import { SectionPath, Skill } from '@reactive-resume/schema'; +import { SectionPath, Skill } from 'schema'; import Joi from 'joi'; import get from 'lodash/get'; import isEmpty from 'lodash/isEmpty'; diff --git a/client/modals/builder/sections/VolunteerModal.tsx b/client/modals/builder/sections/VolunteerModal.tsx index 12d021ff..bd17090e 100644 --- a/client/modals/builder/sections/VolunteerModal.tsx +++ b/client/modals/builder/sections/VolunteerModal.tsx @@ -2,7 +2,7 @@ import { joiResolver } from '@hookform/resolvers/joi'; import { Add, DriveFileRenameOutline } from '@mui/icons-material'; import { Button, TextField } from '@mui/material'; import { DatePicker } from '@mui/x-date-pickers/DatePicker'; -import { SectionPath, Volunteer } from '@reactive-resume/schema'; +import { SectionPath, Volunteer } from 'schema'; import dayjs from 'dayjs'; import Joi from 'joi'; import get from 'lodash/get'; diff --git a/client/modals/builder/sections/WorkModal.tsx b/client/modals/builder/sections/WorkModal.tsx index fc894137..c621b48a 100644 --- a/client/modals/builder/sections/WorkModal.tsx +++ b/client/modals/builder/sections/WorkModal.tsx @@ -2,7 +2,7 @@ import { joiResolver } from '@hookform/resolvers/joi'; import { Add, DriveFileRenameOutline } from '@mui/icons-material'; import { Button, TextField } from '@mui/material'; import { DatePicker } from '@mui/x-date-pickers/DatePicker'; -import { WorkExperience } from '@reactive-resume/schema'; +import { WorkExperience } from 'schema'; import dayjs from 'dayjs'; import Joi from 'joi'; import get from 'lodash/get'; diff --git a/client/modals/dashboard/CreateResumeModal.tsx b/client/modals/dashboard/CreateResumeModal.tsx index 4d76d356..0709493c 100644 --- a/client/modals/dashboard/CreateResumeModal.tsx +++ b/client/modals/dashboard/CreateResumeModal.tsx @@ -1,7 +1,7 @@ import { joiResolver } from '@hookform/resolvers/joi'; import { Add } from '@mui/icons-material'; import { Button, FormControlLabel, FormGroup, Switch, TextField } from '@mui/material'; -import { Resume } from '@reactive-resume/schema'; +import { Resume } from 'schema'; import Joi from 'joi'; import { useTranslation } from 'next-i18next'; import { useEffect } from 'react'; diff --git a/client/modals/dashboard/ImportExternalModal.tsx b/client/modals/dashboard/ImportExternalModal.tsx index 94766d1b..7f451f61 100644 --- a/client/modals/dashboard/ImportExternalModal.tsx +++ b/client/modals/dashboard/ImportExternalModal.tsx @@ -1,6 +1,6 @@ import { Code, ImportExport, LinkedIn, TrackChanges, UploadFile } from '@mui/icons-material'; import { Button, Divider } from '@mui/material'; -import { Integration, Resume } from '@reactive-resume/schema'; +import { Integration, Resume } from 'schema'; import { Trans, useTranslation } from 'next-i18next'; import { useRef } from 'react'; import toast from 'react-hot-toast'; diff --git a/client/modals/dashboard/RenameResumeModal.tsx b/client/modals/dashboard/RenameResumeModal.tsx index 6df9e3cf..290f1077 100644 --- a/client/modals/dashboard/RenameResumeModal.tsx +++ b/client/modals/dashboard/RenameResumeModal.tsx @@ -1,7 +1,7 @@ import { joiResolver } from '@hookform/resolvers/joi'; import { DriveFileRenameOutline } from '@mui/icons-material'; import { Button, TextField } from '@mui/material'; -import { Resume } from '@reactive-resume/schema'; +import { Resume } from 'schema'; import Joi from 'joi'; import get from 'lodash/get'; import noop from 'lodash/noop'; diff --git a/client/next-sitemap.config.js b/client/next-sitemap.config.js index 6322b34e..b82e133c 100644 --- a/client/next-sitemap.config.js +++ b/client/next-sitemap.config.js @@ -2,5 +2,5 @@ module.exports = { siteUrl: 'https://rxresu.me', changefreq: 'monthly', - generateRobotsTxt: true, + generateIndexSitemap: false, }; diff --git a/client/next.config.js b/client/next.config.js index 67c36bf5..33494d51 100644 --- a/client/next.config.js +++ b/client/next.config.js @@ -3,7 +3,6 @@ const { i18n } = require('./next-i18next.config'); /** @type {import('next').NextConfig} */ const nextConfig = { - output: 'standalone', reactStrictMode: true, i18n, diff --git a/client/package.json b/client/package.json index 807e05be..8fdadabf 100644 --- a/client/package.json +++ b/client/package.json @@ -1,5 +1,5 @@ { - "name": "@reactive-resume/client", + "name": "client", "scripts": { "dev": "react-env --prefix PUBLIC -- next dev", "lint": "next lint --fix", @@ -58,7 +58,7 @@ }, "devDependencies": { "@babel/core": "^7.22.1", - "@reactive-resume/schema": "workspace:*", + "schema": "workspace:*", "@tailwindcss/typography": "^0.5.9", "@types/downloadjs": "^1.4.3", "@types/lodash": "^4.14.195", diff --git a/client/pages/[username]/[slug]/build.tsx b/client/pages/[username]/[slug]/build.tsx index eea0ae1a..c5c71f19 100644 --- a/client/pages/[username]/[slug]/build.tsx +++ b/client/pages/[username]/[slug]/build.tsx @@ -1,4 +1,3 @@ -import { Resume } from '@reactive-resume/schema'; import isEmpty from 'lodash/isEmpty'; import { GetServerSideProps, NextPage } from 'next'; import Head from 'next/head'; @@ -6,6 +5,7 @@ import { useTranslation } from 'next-i18next'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { useEffect } from 'react'; import { useQuery } from 'react-query'; +import { Resume } from 'schema'; import Center from '@/components/build/Center/Center'; import LeftSidebar from '@/components/build/LeftSidebar/LeftSidebar'; diff --git a/client/pages/[username]/[slug]/index.tsx b/client/pages/[username]/[slug]/index.tsx index cc22ac79..eb4429f6 100644 --- a/client/pages/[username]/[slug]/index.tsx +++ b/client/pages/[username]/[slug]/index.tsx @@ -1,6 +1,5 @@ import { Download, Downloading } from '@mui/icons-material'; import { ButtonBase } from '@mui/material'; -import { Resume } from '@reactive-resume/schema'; import clsx from 'clsx'; import dayjs from 'dayjs'; import download from 'downloadjs'; @@ -13,6 +12,7 @@ import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { useEffect } from 'react'; import toast from 'react-hot-toast'; import { useMutation, useQuery } from 'react-query'; +import { Resume } from 'schema'; import Page from '@/components/build/Center/Page'; import { DEFAULT_ERROR_MESSAGE } from '@/constants/index'; diff --git a/client/pages/[username]/[slug]/printer.tsx b/client/pages/[username]/[slug]/printer.tsx index f49cc586..20329ee2 100644 --- a/client/pages/[username]/[slug]/printer.tsx +++ b/client/pages/[username]/[slug]/printer.tsx @@ -1,4 +1,3 @@ -import { Resume } from '@reactive-resume/schema'; import clsx from 'clsx'; import get from 'lodash/get'; import isEmpty from 'lodash/isEmpty'; @@ -6,6 +5,7 @@ import { GetServerSideProps, NextPage } from 'next'; import { useRouter } from 'next/router'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { useEffect } from 'react'; +import { Resume } from 'schema'; import Page from '@/components/build/Center/Page'; import { fetchResumeByIdentifier } from '@/services/resume'; diff --git a/client/pages/r/[shortId].tsx b/client/pages/r/[shortId].tsx index c96af14d..48bc5023 100644 --- a/client/pages/r/[shortId].tsx +++ b/client/pages/r/[shortId].tsx @@ -1,6 +1,5 @@ import { Download, Downloading } from '@mui/icons-material'; import { ButtonBase } from '@mui/material'; -import { Resume } from '@reactive-resume/schema'; import clsx from 'clsx'; import dayjs from 'dayjs'; import download from 'downloadjs'; @@ -12,6 +11,7 @@ import { useRouter } from 'next/router'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { useEffect } from 'react'; import { useMutation, useQuery } from 'react-query'; +import { Resume } from 'schema'; import Page from '@/components/build/Center/Page'; import { ServerError } from '@/services/axios'; diff --git a/client/services/auth.ts b/client/services/auth.ts index 2efafe53..c08f2a0e 100644 --- a/client/services/auth.ts +++ b/client/services/auth.ts @@ -1,6 +1,6 @@ -import { User } from '@reactive-resume/schema'; import { AxiosResponse } from 'axios'; import toast from 'react-hot-toast'; +import { User } from 'schema'; import { logout, setAccessToken, setUser } from '@/store/auth/authSlice'; diff --git a/client/services/fonts.ts b/client/services/fonts.ts index 01f042f0..746e5086 100644 --- a/client/services/fonts.ts +++ b/client/services/fonts.ts @@ -1,4 +1,4 @@ -import { Font } from '@reactive-resume/schema'; +import { Font } from 'schema'; import axios from './axios'; diff --git a/client/services/integrations.ts b/client/services/integrations.ts index 6e314161..1ab98c12 100644 --- a/client/services/integrations.ts +++ b/client/services/integrations.ts @@ -1,5 +1,5 @@ -import { Integration, Resume } from '@reactive-resume/schema'; import { AxiosResponse } from 'axios'; +import { Integration, Resume } from 'schema'; import axios from './axios'; diff --git a/client/services/resume.ts b/client/services/resume.ts index d39ba977..cc15b1a3 100644 --- a/client/services/resume.ts +++ b/client/services/resume.ts @@ -1,6 +1,6 @@ import env from '@beam-australia/react-env'; -import { Resume } from '@reactive-resume/schema'; import { AxiosResponse } from 'axios'; +import { Resume } from 'schema'; import isBrowser from '@/utils/isBrowser'; diff --git a/client/store/auth/authSlice.ts b/client/store/auth/authSlice.ts index 89bb304b..47353085 100644 --- a/client/store/auth/authSlice.ts +++ b/client/store/auth/authSlice.ts @@ -1,5 +1,5 @@ -import { User } from '@reactive-resume/schema'; import { createSlice, PayloadAction } from '@reduxjs/toolkit'; +import { User } from 'schema'; type AuthState = { user: User | null; diff --git a/client/store/resume/resumeSlice.ts b/client/store/resume/resumeSlice.ts index 6280f3b6..cf490c1f 100644 --- a/client/store/resume/resumeSlice.ts +++ b/client/store/resume/resumeSlice.ts @@ -1,10 +1,10 @@ -import { ListItem, Profile, Resume, Section, SectionType } from '@reactive-resume/schema'; import { createSlice, PayloadAction } from '@reduxjs/toolkit'; import cloneDeep from 'lodash/cloneDeep'; import get from 'lodash/get'; import merge from 'lodash/merge'; import pick from 'lodash/pick'; import set from 'lodash/set'; +import { ListItem, Profile, Resume, Section, SectionType } from 'schema'; import { v4 as uuidv4 } from 'uuid'; import { getSectionsByType } from '@/config/sections'; diff --git a/client/store/sagas/sync.ts b/client/store/sagas/sync.ts index c20d7d7e..65131c05 100644 --- a/client/store/sagas/sync.ts +++ b/client/store/sagas/sync.ts @@ -1,6 +1,6 @@ -import { Resume } from '@reactive-resume/schema'; import debounce from 'lodash/debounce'; import { select, takeLatest } from 'redux-saga/effects'; +import { Resume } from 'schema'; import { updateResume } from '@/services/resume'; import { AppDispatch, RootState } from '@/store/index'; diff --git a/client/templates/Castform/Castform.tsx b/client/templates/Castform/Castform.tsx index 2a87239a..248b0553 100644 --- a/client/templates/Castform/Castform.tsx +++ b/client/templates/Castform/Castform.tsx @@ -1,5 +1,5 @@ import { css } from '@emotion/css'; -import { ThemeConfig } from '@reactive-resume/schema'; +import { ThemeConfig } from 'schema'; import clsx from 'clsx'; import get from 'lodash/get'; import { useMemo } from 'react'; diff --git a/client/templates/Castform/widgets/Heading.tsx b/client/templates/Castform/widgets/Heading.tsx index 3e616e1b..93053813 100644 --- a/client/templates/Castform/widgets/Heading.tsx +++ b/client/templates/Castform/widgets/Heading.tsx @@ -1,5 +1,5 @@ import { darken } from '@mui/material'; -import { ThemeConfig } from '@reactive-resume/schema'; +import { ThemeConfig } from 'schema'; import get from 'lodash/get'; import { useMemo } from 'react'; diff --git a/client/templates/Castform/widgets/Masthead.tsx b/client/templates/Castform/widgets/Masthead.tsx index cb1be89a..77f1db6e 100644 --- a/client/templates/Castform/widgets/Masthead.tsx +++ b/client/templates/Castform/widgets/Masthead.tsx @@ -1,6 +1,6 @@ import { css } from '@emotion/css'; import { Cake, Email, Phone, Public, Room } from '@mui/icons-material'; -import { ThemeConfig } from '@reactive-resume/schema'; +import { ThemeConfig } from 'schema'; import clsx from 'clsx'; import get from 'lodash/get'; import isEmpty from 'lodash/isEmpty'; diff --git a/client/templates/Castform/widgets/Section.tsx b/client/templates/Castform/widgets/Section.tsx index 347394f6..77e52472 100644 --- a/client/templates/Castform/widgets/Section.tsx +++ b/client/templates/Castform/widgets/Section.tsx @@ -1,5 +1,5 @@ import { Email, Link, Phone } from '@mui/icons-material'; -import { ListItem, Section as SectionType } from '@reactive-resume/schema'; +import { ListItem, Section as SectionType } from 'schema'; import clsx from 'clsx'; import get from 'lodash/get'; import isArray from 'lodash/isArray'; diff --git a/client/templates/Gengar/Gengar.tsx b/client/templates/Gengar/Gengar.tsx index 740b140c..bd694654 100644 --- a/client/templates/Gengar/Gengar.tsx +++ b/client/templates/Gengar/Gengar.tsx @@ -1,6 +1,6 @@ import { css } from '@emotion/css'; import { alpha } from '@mui/material'; -import { ThemeConfig } from '@reactive-resume/schema'; +import { ThemeConfig } from 'schema'; import clsx from 'clsx'; import get from 'lodash/get'; import { useMemo } from 'react'; diff --git a/client/templates/Gengar/widgets/Heading.tsx b/client/templates/Gengar/widgets/Heading.tsx index 5d92b12b..c641e3a2 100644 --- a/client/templates/Gengar/widgets/Heading.tsx +++ b/client/templates/Gengar/widgets/Heading.tsx @@ -1,4 +1,4 @@ -import { ThemeConfig } from '@reactive-resume/schema'; +import { ThemeConfig } from 'schema'; import get from 'lodash/get'; import { useAppSelector } from '@/store/hooks'; diff --git a/client/templates/Gengar/widgets/Masthead.tsx b/client/templates/Gengar/widgets/Masthead.tsx index 90af0dc9..ca5cacf3 100644 --- a/client/templates/Gengar/widgets/Masthead.tsx +++ b/client/templates/Gengar/widgets/Masthead.tsx @@ -1,7 +1,7 @@ import { css } from '@emotion/css'; import { Cake, Email, Phone, Public, Room } from '@mui/icons-material'; import { alpha } from '@mui/material'; -import { ThemeConfig } from '@reactive-resume/schema'; +import { ThemeConfig } from 'schema'; import clsx from 'clsx'; import get from 'lodash/get'; import isEmpty from 'lodash/isEmpty'; diff --git a/client/templates/Gengar/widgets/Section.tsx b/client/templates/Gengar/widgets/Section.tsx index bd338fea..baccdaf7 100644 --- a/client/templates/Gengar/widgets/Section.tsx +++ b/client/templates/Gengar/widgets/Section.tsx @@ -1,5 +1,5 @@ import { Email, Link, Phone } from '@mui/icons-material'; -import { ListItem, Section as SectionType } from '@reactive-resume/schema'; +import { ListItem, Section as SectionType } from 'schema'; import get from 'lodash/get'; import isArray from 'lodash/isArray'; import isEmpty from 'lodash/isEmpty'; diff --git a/client/templates/Glalie/widgets/BadgeDisplay.tsx b/client/templates/Glalie/widgets/BadgeDisplay.tsx index d62bce89..fd3c8e08 100644 --- a/client/templates/Glalie/widgets/BadgeDisplay.tsx +++ b/client/templates/Glalie/widgets/BadgeDisplay.tsx @@ -1,5 +1,5 @@ import { alpha } from '@mui/material'; -import { ThemeConfig } from '@reactive-resume/schema'; +import { ThemeConfig } from 'schema'; import get from 'lodash/get'; import isArray from 'lodash/isArray'; import isEmpty from 'lodash/isEmpty'; diff --git a/client/templates/Glalie/widgets/Heading.tsx b/client/templates/Glalie/widgets/Heading.tsx index c65d2f13..b4a20bd1 100644 --- a/client/templates/Glalie/widgets/Heading.tsx +++ b/client/templates/Glalie/widgets/Heading.tsx @@ -1,4 +1,4 @@ -import { ThemeConfig } from '@reactive-resume/schema'; +import { ThemeConfig } from 'schema'; import get from 'lodash/get'; import { useAppSelector } from '@/store/hooks'; diff --git a/client/templates/Glalie/widgets/Section.tsx b/client/templates/Glalie/widgets/Section.tsx index 3f3eee43..352d3039 100644 --- a/client/templates/Glalie/widgets/Section.tsx +++ b/client/templates/Glalie/widgets/Section.tsx @@ -1,5 +1,5 @@ import { Email, Link, Phone } from '@mui/icons-material'; -import { ListItem, Section as SectionType } from '@reactive-resume/schema'; +import { ListItem, Section as SectionType } from 'schema'; import get from 'lodash/get'; import isArray from 'lodash/isArray'; import isEmpty from 'lodash/isEmpty'; diff --git a/client/templates/Kakuna/widgets/BadgeDisplay.tsx b/client/templates/Kakuna/widgets/BadgeDisplay.tsx index 4af70775..3cd3ecb7 100644 --- a/client/templates/Kakuna/widgets/BadgeDisplay.tsx +++ b/client/templates/Kakuna/widgets/BadgeDisplay.tsx @@ -1,4 +1,4 @@ -import { ThemeConfig } from '@reactive-resume/schema'; +import { ThemeConfig } from 'schema'; import get from 'lodash/get'; import isArray from 'lodash/isArray'; import isEmpty from 'lodash/isEmpty'; diff --git a/client/templates/Kakuna/widgets/Section.tsx b/client/templates/Kakuna/widgets/Section.tsx index e94bfc34..2cfac5e0 100644 --- a/client/templates/Kakuna/widgets/Section.tsx +++ b/client/templates/Kakuna/widgets/Section.tsx @@ -1,5 +1,5 @@ import { Email, Link, Phone } from '@mui/icons-material'; -import { ListItem, Section as SectionType } from '@reactive-resume/schema'; +import { ListItem, Section as SectionType } from 'schema'; import get from 'lodash/get'; import isArray from 'lodash/isArray'; import isEmpty from 'lodash/isEmpty'; diff --git a/client/templates/Leafish/widgets/Heading.tsx b/client/templates/Leafish/widgets/Heading.tsx index 6a7c91ef..c72d2bc4 100644 --- a/client/templates/Leafish/widgets/Heading.tsx +++ b/client/templates/Leafish/widgets/Heading.tsx @@ -1,4 +1,4 @@ -import { ThemeConfig } from '@reactive-resume/schema'; +import { ThemeConfig } from 'schema'; import get from 'lodash/get'; import { useAppSelector } from '@/store/hooks'; diff --git a/client/templates/Leafish/widgets/Masthead.tsx b/client/templates/Leafish/widgets/Masthead.tsx index 82208305..098c4530 100644 --- a/client/templates/Leafish/widgets/Masthead.tsx +++ b/client/templates/Leafish/widgets/Masthead.tsx @@ -1,6 +1,6 @@ import { Cake, Email, Phone, Public, Room } from '@mui/icons-material'; import { alpha } from '@mui/material'; -import { ThemeConfig } from '@reactive-resume/schema'; +import { ThemeConfig } from 'schema'; import get from 'lodash/get'; import isEmpty from 'lodash/isEmpty'; diff --git a/client/templates/Leafish/widgets/Section.tsx b/client/templates/Leafish/widgets/Section.tsx index d817df9e..afa94ccf 100644 --- a/client/templates/Leafish/widgets/Section.tsx +++ b/client/templates/Leafish/widgets/Section.tsx @@ -1,5 +1,5 @@ import { Email, Link, Phone } from '@mui/icons-material'; -import { ListItem, Section as SectionType } from '@reactive-resume/schema'; +import { ListItem, Section as SectionType } from 'schema'; import get from 'lodash/get'; import isArray from 'lodash/isArray'; import isEmpty from 'lodash/isEmpty'; diff --git a/client/templates/Onyx/widgets/Heading.tsx b/client/templates/Onyx/widgets/Heading.tsx index 954bec47..e09a8d01 100644 --- a/client/templates/Onyx/widgets/Heading.tsx +++ b/client/templates/Onyx/widgets/Heading.tsx @@ -1,5 +1,5 @@ -import { ThemeConfig } from '@reactive-resume/schema'; import get from 'lodash/get'; +import { ThemeConfig } from 'schema'; import { useAppSelector } from '@/store/hooks'; diff --git a/client/templates/Onyx/widgets/Section.tsx b/client/templates/Onyx/widgets/Section.tsx index 45ff3c66..f72435c3 100644 --- a/client/templates/Onyx/widgets/Section.tsx +++ b/client/templates/Onyx/widgets/Section.tsx @@ -1,5 +1,5 @@ import { Email, Link, Phone } from '@mui/icons-material'; -import { ListItem, Section as SectionType } from '@reactive-resume/schema'; +import { ListItem, Section as SectionType } from 'schema'; import get from 'lodash/get'; import isArray from 'lodash/isArray'; import isEmpty from 'lodash/isEmpty'; diff --git a/client/templates/Pikachu/widgets/Heading.tsx b/client/templates/Pikachu/widgets/Heading.tsx index 5d92b12b..c641e3a2 100644 --- a/client/templates/Pikachu/widgets/Heading.tsx +++ b/client/templates/Pikachu/widgets/Heading.tsx @@ -1,4 +1,4 @@ -import { ThemeConfig } from '@reactive-resume/schema'; +import { ThemeConfig } from 'schema'; import get from 'lodash/get'; import { useAppSelector } from '@/store/hooks'; diff --git a/client/templates/Pikachu/widgets/Masthead.tsx b/client/templates/Pikachu/widgets/Masthead.tsx index eb4ad6dd..c6fbdc74 100644 --- a/client/templates/Pikachu/widgets/Masthead.tsx +++ b/client/templates/Pikachu/widgets/Masthead.tsx @@ -1,5 +1,5 @@ import { Cake, Email, Phone, Public, Room } from '@mui/icons-material'; -import { ThemeConfig } from '@reactive-resume/schema'; +import { ThemeConfig } from 'schema'; import clsx from 'clsx'; import get from 'lodash/get'; import isEmpty from 'lodash/isEmpty'; diff --git a/client/templates/Pikachu/widgets/Section.tsx b/client/templates/Pikachu/widgets/Section.tsx index a85c3527..68dc54b7 100644 --- a/client/templates/Pikachu/widgets/Section.tsx +++ b/client/templates/Pikachu/widgets/Section.tsx @@ -1,5 +1,5 @@ import { Email, Link, Phone } from '@mui/icons-material'; -import { ListItem, Section as SectionType } from '@reactive-resume/schema'; +import { ListItem, Section as SectionType } from 'schema'; import get from 'lodash/get'; import isArray from 'lodash/isArray'; import isEmpty from 'lodash/isEmpty'; diff --git a/client/utils/date.ts b/client/utils/date.ts index 9ea0ba30..d4b65e14 100644 --- a/client/utils/date.ts +++ b/client/utils/date.ts @@ -1,4 +1,4 @@ -import { DateRange } from '@reactive-resume/schema'; +import { DateRange } from 'schema'; import dayjs from 'dayjs'; import isEmpty from 'lodash/isEmpty'; import isString from 'lodash/isString'; diff --git a/client/utils/getResumeUrl.ts b/client/utils/getResumeUrl.ts index a133d20a..a6028f8c 100644 --- a/client/utils/getResumeUrl.ts +++ b/client/utils/getResumeUrl.ts @@ -1,5 +1,5 @@ import env from '@beam-australia/react-env'; -import { Resume } from '@reactive-resume/schema'; +import { Resume } from 'schema'; import get from 'lodash/get'; type Options = { diff --git a/client/utils/styles.ts b/client/utils/styles.ts index 67bd6ef7..68d8f59a 100644 --- a/client/utils/styles.ts +++ b/client/utils/styles.ts @@ -1,4 +1,4 @@ -import { ThemeConfig, Typography } from '@reactive-resume/schema'; +import { ThemeConfig, Typography } from 'schema'; import { RgbColor } from 'react-colorful'; import { hexColorPattern } from '@/config/colors'; diff --git a/client/utils/template.ts b/client/utils/template.ts index 9e9fc83c..c7230b9f 100644 --- a/client/utils/template.ts +++ b/client/utils/template.ts @@ -1,4 +1,4 @@ -import { ListItem, Location, PhotoFilters } from '@reactive-resume/schema'; +import { ListItem, Location, PhotoFilters } from 'schema'; import clsx from 'clsx'; import get from 'lodash/get'; import isArray from 'lodash/isArray'; diff --git a/docker-compose.yml b/docker-compose.yml index 867ffe5d..1d21ec3c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -18,6 +18,8 @@ services: build: context: . dockerfile: ./server/Dockerfile + args: + - TURBO_TOKEN= restart: always ports: - 3100:3100 @@ -57,6 +59,8 @@ services: build: context: . dockerfile: ./client/Dockerfile + args: + - TURBO_TOKEN= restart: always ports: - 3000:3000 diff --git a/package.json b/package.json index 4330119f..f77a4534 100644 --- a/package.json +++ b/package.json @@ -3,13 +3,13 @@ "version": "3.7.4", "private": true, "scripts": { - "dev": "env-cmd --silent cross-var cross-env VERSION=$npm_package_version pnpm run --recursive --parallel --stream dev", - "build": "env-cmd --silent cross-var cross-env VERSION=$npm_package_version pnpm run --recursive --parallel build", - "start": "env-cmd --silent cross-var cross-env VERSION=$npm_package_version pnpm run --recursive --parallel --stream start", - "update": "ncu -x nanoid --deep -u && pnpm install", - "generate-env": "ts-node ./scripts/generate-env.ts", - "format": "prettier --write .", - "lint": "pnpm run --recursive --parallel lint" + "dev": "env-cmd --silent cross-var cross-env VERSION=$npm_package_version turbo run dev", + "build": "env-cmd --silent cross-var cross-env VERSION=$npm_package_version turbo run build", + "start": "env-cmd --silent cross-var cross-env VERSION=$npm_package_version turbo run start", + "format": "prettier --write --loglevel silent --cache .", + "lint": "turbo run lint", + "update-dependencies": "ncu -x nanoid --deep -u && pnpm install", + "generate-env": "ts-node ./scripts/generate-env.ts" }, "workspaces": [ "schema", @@ -33,6 +33,7 @@ "npm-check-updates": "^16.10.12", "prettier": "^2.8.8", "ts-node": "^10.9.1", + "turbo": "^1.10.2", "typescript": "^5.1.3" }, "resolutions": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c7c99952..89815185 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -55,6 +55,9 @@ importers: ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@20.2.5)(typescript@5.1.3) + turbo: + specifier: ^1.10.2 + version: 1.10.2 typescript: specifier: ^5.1.3 version: 5.1.3 @@ -206,9 +209,6 @@ importers: '@babel/core': specifier: ^7.22.1 version: 7.22.1 - '@reactive-resume/schema': - specifier: workspace:* - version: link:../schema '@tailwindcss/typography': specifier: ^0.5.9 version: 0.5.9(tailwindcss@3.3.2) @@ -260,6 +260,9 @@ importers: sass: specifier: ^1.62.1 version: 1.62.1 + schema: + specifier: workspace:* + version: link:../schema tailwindcss: specifier: ^3.3.2 version: 3.3.2(ts-node@10.9.1) @@ -402,9 +405,6 @@ importers: '@nestjs/schematics': specifier: ^9.2.0 version: 9.2.0(typescript@5.1.3) - '@reactive-resume/schema': - specifier: workspace:* - version: link:../schema '@types/bcryptjs': specifier: ^2.4.2 version: 2.4.2 @@ -444,6 +444,9 @@ importers: rimraf: specifier: ^5.0.1 version: 5.0.1 + schema: + specifier: workspace:* + version: link:../schema source-map-support: specifier: ^0.5.21 version: 0.5.21 @@ -10920,6 +10923,67 @@ packages: safe-buffer: 5.2.1 dev: false + /turbo-darwin-64@1.10.2: + resolution: {integrity: sha512-sVLpVVANByfMgqf7OYPcZM4KiDnjGu7ITvAzBSa9Iwe14yoWLn8utrNsWCRaQEB6kEqBGLPmvL7AKwkl8M2Gqg==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /turbo-darwin-arm64@1.10.2: + resolution: {integrity: sha512-TKG91DSoYQjsCft4XBx4lYycVT5n3UQB/nOKgv/WJCSfwshLWulya3yhP8JT5erv9rPF8gwgnx87lrCmT4EAVA==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /turbo-linux-64@1.10.2: + resolution: {integrity: sha512-ZIzAkfrzjJFkSM/uEfxU6JjseCsT5PHRu0s0lmYce37ApQbv/HC7tI0cFhuosI30+O8109/mkyZykKE7AQfgqA==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /turbo-linux-arm64@1.10.2: + resolution: {integrity: sha512-G4uZA+RBQ5S1X/oUxO5KoLL2NDMkrrBZF52+00jQv6UEb9lWDgwzqSwoAGjdXxeDCrqMW5rBVwb/IBIF2/yhwA==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /turbo-windows-64@1.10.2: + resolution: {integrity: sha512-ObfQO37kGu1jBzFs/L+hybrCXBwdnimotJwzg7pCoSyGijKITlugrpJoPDKlg0eMr3/1Y6KUeHy26vZaDXrbuQ==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /turbo-windows-arm64@1.10.2: + resolution: {integrity: sha512-7S6dx4738R/FIT2cxbsunqgHN5LelXzuzkcaZgdkU33oswRf/6KOfOABzQLdTX7Uos59cBSdwayf6KQJxuOXUg==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /turbo@1.10.2: + resolution: {integrity: sha512-m9sR5XHhuzxUQACf0vI2qCG5OqDYAZiPTaAsTwECnwUF4/cXwEmcYddbLJnO+K9orNvcnjjent5oBNBVQ/o0ow==} + hasBin: true + requiresBuild: true + optionalDependencies: + turbo-darwin-64: 1.10.2 + turbo-darwin-arm64: 1.10.2 + turbo-linux-64: 1.10.2 + turbo-linux-arm64: 1.10.2 + turbo-windows-64: 1.10.2 + turbo-windows-arm64: 1.10.2 + dev: true + /type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} diff --git a/schema/package.json b/schema/package.json index eda33089..7abb6436 100644 --- a/schema/package.json +++ b/schema/package.json @@ -1,5 +1,5 @@ { - "name": "@reactive-resume/schema", + "name": "schema", "type": "commonjs", "main": "./dist/index.js", "typings": "./dist/index.d.ts", diff --git a/server/Dockerfile b/server/Dockerfile index c95e3e3c..2dccfc79 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -21,8 +21,10 @@ COPY --from=dependencies /app/node_modules ./node_modules COPY --from=dependencies /app/schema/node_modules ./schema/node_modules COPY --from=dependencies /app/server/node_modules ./server/node_modules -RUN pnpm run --filter schema build \ - && pnpm run --filter server build +ARG TURBO_TOKEN +ENV TURBO_TOKEN=$TURBO_TOKEN + +RUN pnpm exec turbo --filter server build FROM mcr.microsoft.com/playwright:v1.34.3-focal as production diff --git a/server/package.json b/server/package.json index 8c09bb6f..ddda78af 100644 --- a/server/package.json +++ b/server/package.json @@ -1,10 +1,9 @@ { - "name": "@reactive-resume/server", + "name": "server", "scripts": { "lint": "eslint --fix src", "dev": "nest start --watch", "build": "rimraf dist && nest build", - "debug": "nest start --debug --watch", "start": "node dist/main" }, "dependencies": { @@ -51,7 +50,7 @@ "devDependencies": { "@nestjs/cli": "^9.5.0", "@nestjs/schematics": "^9.2.0", - "@reactive-resume/schema": "workspace:*", + "schema": "workspace:*", "@types/bcryptjs": "^2.4.2", "@types/cookie-parser": "^1.4.3", "@types/express": "^4.17.17", diff --git a/server/src/fonts/fonts.service.ts b/server/src/fonts/fonts.service.ts index 0e40b8e4..021e81ff 100644 --- a/server/src/fonts/fonts.service.ts +++ b/server/src/fonts/fonts.service.ts @@ -1,9 +1,9 @@ import { HttpService } from '@nestjs/axios'; import { Injectable } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; -import { Font } from '@reactive-resume/schema'; import get from 'lodash/get'; import { firstValueFrom } from 'rxjs'; +import { Font } from 'schema'; import cachedResponse from './assets/cachedResponse.json'; diff --git a/server/src/integrations/integrations.service.ts b/server/src/integrations/integrations.service.ts index 1e6a232a..82c1e7df 100644 --- a/server/src/integrations/integrations.service.ts +++ b/server/src/integrations/integrations.service.ts @@ -1,4 +1,12 @@ import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; +import csv from 'csvtojson'; +import dayjs from 'dayjs'; +import { readFile, unlink } from 'fs/promises'; +import cloneDeep from 'lodash/cloneDeep'; +import get from 'lodash/get'; +import isEmpty from 'lodash/isEmpty'; +import merge from 'lodash/merge'; +import StreamZip from 'node-stream-zip'; import { Award, Certificate, @@ -12,15 +20,7 @@ import { Skill, Volunteer, WorkExperience, -} from '@reactive-resume/schema'; -import csv from 'csvtojson'; -import dayjs from 'dayjs'; -import { readFile, unlink } from 'fs/promises'; -import cloneDeep from 'lodash/cloneDeep'; -import get from 'lodash/get'; -import isEmpty from 'lodash/isEmpty'; -import merge from 'lodash/merge'; -import StreamZip from 'node-stream-zip'; +} from 'schema'; import { DeepPartial } from 'typeorm'; import { v4 as uuidv4 } from 'uuid'; diff --git a/server/src/printer/printer.controller.ts b/server/src/printer/printer.controller.ts index e6f00646..b0328751 100644 --- a/server/src/printer/printer.controller.ts +++ b/server/src/printer/printer.controller.ts @@ -1,4 +1,4 @@ -import { Controller, GatewayTimeoutException,Get, Param, Query } from '@nestjs/common'; +import { Controller, GatewayTimeoutException, Get, Param, Query } from '@nestjs/common'; import { PrinterService } from './printer.service'; diff --git a/server/src/printer/printer.service.ts b/server/src/printer/printer.service.ts index 89a51e69..fa8b2463 100644 --- a/server/src/printer/printer.service.ts +++ b/server/src/printer/printer.service.ts @@ -1,11 +1,11 @@ import { Injectable, OnModuleDestroy, OnModuleInit } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { SchedulerRegistry } from '@nestjs/schedule'; -import { PageConfig } from '@reactive-resume/schema'; import { access, mkdir, readdir, unlink, writeFile } from 'fs/promises'; import { join } from 'path'; import { PDFDocument } from 'pdf-lib'; import { BrowserContext, chromium } from 'playwright-chromium'; +import { PageConfig } from 'schema'; const minimal_chromium_args = [ '--autoplay-policy=user-gesture-required', diff --git a/server/src/resume/data/defaultState.ts b/server/src/resume/data/defaultState.ts index e6b0dc3f..66bfe7d2 100644 --- a/server/src/resume/data/defaultState.ts +++ b/server/src/resume/data/defaultState.ts @@ -1,4 +1,4 @@ -import { Resume } from '@reactive-resume/schema'; +import { Resume } from 'schema'; const defaultCSS = `/* Enter custom CSS here */ diff --git a/server/src/resume/entities/resume.entity.ts b/server/src/resume/entities/resume.entity.ts index 901d85bf..fe5001ba 100644 --- a/server/src/resume/entities/resume.entity.ts +++ b/server/src/resume/entities/resume.entity.ts @@ -1,4 +1,4 @@ -import { Basics, Metadata, Section } from '@reactive-resume/schema'; +import { Basics, Metadata, Section } from 'schema'; import { Column, CreateDateColumn, Entity, ManyToOne, PrimaryGeneratedColumn, Unique, UpdateDateColumn } from 'typeorm'; import { User } from '@/users/entities/user.entity'; diff --git a/server/src/resume/resume.service.ts b/server/src/resume/resume.service.ts index b14e0b19..749a2302 100644 --- a/server/src/resume/resume.service.ts +++ b/server/src/resume/resume.service.ts @@ -2,7 +2,6 @@ import { DeleteObjectCommand, PutObjectCommand, S3, S3Client } from '@aws-sdk/cl import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { InjectRepository } from '@nestjs/typeorm'; -import { Resume as ResumeSchema } from '@reactive-resume/schema'; import fs from 'fs/promises'; import isEmpty from 'lodash/isEmpty'; import pick from 'lodash/pick'; @@ -10,6 +9,7 @@ import sample from 'lodash/sample'; import set from 'lodash/set'; import { nanoid } from 'nanoid'; import { extname } from 'path'; +import { Resume as ResumeSchema } from 'schema'; import { Repository } from 'typeorm'; import { PostgresErrorCode } from '@/database/errorCodes.enum'; diff --git a/turbo.json b/turbo.json new file mode 100644 index 00000000..3e124f93 --- /dev/null +++ b/turbo.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://turbo.build/schema.json", + "pipeline": { + "build": { + "dependsOn": ["^build"], + "outputs": [".next/**", "!.next/cache/**", "dist/**"] + }, + "lint": {}, + "format": { + "dependsOn": ["^lint"] + }, + "dev": { + "cache": false, + "persistent": true + } + } +}