mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2025-11-10 04:22:27 +10:00
Implement Turbo Workspaces, among other things
This commit is contained in:
@ -1,13 +1,19 @@
|
|||||||
# Build Artifacts
|
# Build Artifacts
|
||||||
dist
|
dist
|
||||||
.next
|
.next
|
||||||
|
.turbo
|
||||||
|
|
||||||
# IDEs
|
# IDEs
|
||||||
.vscode
|
.vscode
|
||||||
|
|
||||||
# Project Metadata
|
# Project Metadata
|
||||||
|
.crowdin.yml
|
||||||
|
|
||||||
|
# Documentation
|
||||||
README.md
|
README.md
|
||||||
|
SECURITY.md
|
||||||
CHANGELOG.md
|
CHANGELOG.md
|
||||||
|
CODE_OF_CONDUCT.md
|
||||||
|
|
||||||
# Project Dependencies
|
# Project Dependencies
|
||||||
node_modules
|
node_modules
|
||||||
@ -18,4 +24,4 @@ Dockerfile
|
|||||||
docker-compose.yml
|
docker-compose.yml
|
||||||
|
|
||||||
# Android App
|
# Android App
|
||||||
/app
|
/app
|
||||||
|
|||||||
@ -5,27 +5,27 @@
|
|||||||
"extends": ["plugin:@typescript-eslint/recommended", "plugin:prettier/recommended"],
|
"extends": ["plugin:@typescript-eslint/recommended", "plugin:prettier/recommended"],
|
||||||
"plugins": ["@typescript-eslint/eslint-plugin", "simple-import-sort", "unused-imports"],
|
"plugins": ["@typescript-eslint/eslint-plugin", "simple-import-sort", "unused-imports"],
|
||||||
"rules": {
|
"rules": {
|
||||||
|
// Unused Imports
|
||||||
|
"no-unused-vars": "off",
|
||||||
|
// Simple Import Sort
|
||||||
|
"simple-import-sort/imports": "error",
|
||||||
|
"simple-import-sort/exports": "error",
|
||||||
|
"unused-imports/no-unused-vars": [
|
||||||
|
"warn",
|
||||||
|
{
|
||||||
|
"vars": "all",
|
||||||
|
"args": "none",
|
||||||
|
"varsIgnorePattern": "^_",
|
||||||
|
"argsIgnorePattern": "^_"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"unused-imports/no-unused-imports": "error",
|
||||||
// TypeScript ESLint
|
// TypeScript ESLint
|
||||||
"@typescript-eslint/no-unused-vars": "off",
|
"@typescript-eslint/no-unused-vars": "off",
|
||||||
"@typescript-eslint/no-explicit-any": "off",
|
"@typescript-eslint/no-explicit-any": "off",
|
||||||
"@typescript-eslint/interface-name-prefix": "off",
|
"@typescript-eslint/interface-name-prefix": "off",
|
||||||
"@typescript-eslint/explicit-function-return-type": "off",
|
"@typescript-eslint/explicit-function-return-type": "off",
|
||||||
"@typescript-eslint/explicit-module-boundary-types": "off",
|
"@typescript-eslint/explicit-module-boundary-types": "off"
|
||||||
// Simple Import Sort
|
|
||||||
"simple-import-sort/imports": "error",
|
|
||||||
"simple-import-sort/exports": "error",
|
|
||||||
// Unused Imports
|
|
||||||
"no-unused-vars": "off",
|
|
||||||
"unused-imports/no-unused-imports": "error",
|
|
||||||
"unused-imports/no-unused-vars": [
|
|
||||||
"warn",
|
|
||||||
{
|
|
||||||
"vars": "all",
|
|
||||||
"varsIgnorePattern": "^_",
|
|
||||||
"args": "none",
|
|
||||||
"argsIgnorePattern": "^_"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"overrides": [
|
"overrides": [
|
||||||
{
|
{
|
||||||
|
|||||||
17
.github/ISSUE_TEMPLATE/bug-report.md
vendored
17
.github/ISSUE_TEMPLATE/bug-report.md
vendored
@ -1,36 +1,43 @@
|
|||||||
---
|
---
|
||||||
name: Bug Report
|
name: Bug Report
|
||||||
about: Create a report to help improve
|
about: Create a report to help improve
|
||||||
title: "[BUG] "
|
title: '[BUG] '
|
||||||
labels: bug
|
labels: bug
|
||||||
assignees: ''
|
assignees: ''
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**Describe the bug**
|
**Describe the bug**
|
||||||
|
|
||||||
<!-- A clear and concise description of what the bug is. -->
|
<!-- A clear and concise description of what the bug is. -->
|
||||||
|
|
||||||
**Product Flavor**
|
**Product Flavor**
|
||||||
|
|
||||||
- [ ] Managed (https://rxresu.me)
|
- [ ] Managed (https://rxresu.me)
|
||||||
- [ ] Self Hosted
|
- [ ] Self Hosted
|
||||||
|
|
||||||
**To Reproduce**
|
**To Reproduce**
|
||||||
|
|
||||||
<!-- Steps to reproduce the behavior: -->
|
<!-- Steps to reproduce the behavior: -->
|
||||||
|
|
||||||
1. Go to '...'
|
1. Go to '...'
|
||||||
2. Click on '....'
|
2. Click on '....'
|
||||||
3. Scroll down to '....'
|
3. Scroll down to '....'
|
||||||
4. See error
|
4. See error
|
||||||
|
|
||||||
**Expected behavior**
|
**Expected behavior**
|
||||||
|
|
||||||
<!-- A clear and concise description of what you expected to happen. -->
|
<!-- A clear and concise description of what you expected to happen. -->
|
||||||
|
|
||||||
**Screenshots**
|
**Screenshots**
|
||||||
|
|
||||||
<!-- If applicable, add screenshots to help explain your problem. -->
|
<!-- If applicable, add screenshots to help explain your problem. -->
|
||||||
|
|
||||||
**Desktop (please complete the following information):**
|
**Desktop (please complete the following information):**
|
||||||
- OS: <!--[e.g. iOS]-->
|
|
||||||
- Browser <!--[e.g. chrome, safari]-->
|
- OS: <!--[e.g. iOS]-->
|
||||||
- Version <!--[e.g. 22]-->
|
- Browser <!--[e.g. chrome, safari]-->
|
||||||
|
- Version <!--[e.g. 22]-->
|
||||||
|
|
||||||
**Additional context**
|
**Additional context**
|
||||||
|
|
||||||
<!-- Add any other context about the problem here. -->
|
<!-- Add any other context about the problem here. -->
|
||||||
|
|||||||
7
.github/ISSUE_TEMPLATE/feature-request.md
vendored
7
.github/ISSUE_TEMPLATE/feature-request.md
vendored
@ -1,20 +1,23 @@
|
|||||||
---
|
---
|
||||||
name: Feature Request
|
name: Feature Request
|
||||||
about: Suggest an idea for this project
|
about: Suggest an idea for this project
|
||||||
title: "[FEATURE] "
|
title: '[FEATURE] '
|
||||||
labels: enhancement
|
labels: enhancement
|
||||||
assignees: ''
|
assignees: ''
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**Is your feature request related to a problem? Please describe.**
|
**Is your feature request related to a problem? Please describe.**
|
||||||
|
|
||||||
<!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
|
<!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
|
||||||
|
|
||||||
**Describe the solution you'd like**
|
**Describe the solution you'd like**
|
||||||
|
|
||||||
<!-- A clear and concise description of what you want to happen. -->
|
<!-- A clear and concise description of what you want to happen. -->
|
||||||
|
|
||||||
**Describe alternatives you've considered**
|
**Describe alternatives you've considered**
|
||||||
|
|
||||||
<!-- A clear and concise description of any alternative solutions or features you've considered. -->
|
<!-- A clear and concise description of any alternative solutions or features you've considered. -->
|
||||||
|
|
||||||
**Additional context**
|
**Additional context**
|
||||||
|
|
||||||
<!-- Add any other context or screenshots about the feature request here. -->
|
<!-- Add any other context or screenshots about the feature request here. -->
|
||||||
|
|||||||
14
.github/workflows/docker-build-push.yml
vendored
14
.github/workflows/docker-build-push.yml
vendored
@ -7,11 +7,18 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
client:
|
client:
|
||||||
name: Client
|
name: Client
|
||||||
|
timeout-minutes: 15
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
env:
|
||||||
|
TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
|
||||||
|
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout the repository
|
- name: Checkout the repository
|
||||||
uses: actions/checkout@v3.0.2
|
uses: actions/checkout@v3.0.2
|
||||||
|
with:
|
||||||
|
fetch-depth: 2
|
||||||
|
|
||||||
- id: version
|
- id: version
|
||||||
name: Get Version
|
name: Get Version
|
||||||
@ -44,11 +51,18 @@ jobs:
|
|||||||
|
|
||||||
server:
|
server:
|
||||||
name: Server
|
name: Server
|
||||||
|
timeout-minutes: 15
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
env:
|
||||||
|
TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
|
||||||
|
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout the repository
|
- name: Checkout the repository
|
||||||
uses: actions/checkout@v3.0.2
|
uses: actions/checkout@v3.0.2
|
||||||
|
with:
|
||||||
|
fetch-depth: 2
|
||||||
|
|
||||||
- id: version
|
- id: version
|
||||||
name: Get Version
|
name: Get Version
|
||||||
|
|||||||
86
.github/workflows/docker-build.yml
vendored
Normal file
86
.github/workflows/docker-build.yml
vendored
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
name: Build and Push Docker Image
|
||||||
|
|
||||||
|
on: pull_request
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
client:
|
||||||
|
name: Client
|
||||||
|
timeout-minutes: 15
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
env:
|
||||||
|
TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
|
||||||
|
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout the repository
|
||||||
|
uses: actions/checkout@v3.0.2
|
||||||
|
with:
|
||||||
|
fetch-depth: 2
|
||||||
|
|
||||||
|
- name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@v2.0.0
|
||||||
|
|
||||||
|
- id: buildx
|
||||||
|
name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v2.0.0
|
||||||
|
with:
|
||||||
|
install: true
|
||||||
|
|
||||||
|
- id: version
|
||||||
|
name: Get Version
|
||||||
|
run: echo ::set-output name=tag::${GITHUB_REF#refs/*/}
|
||||||
|
|
||||||
|
- name: Build Client Image
|
||||||
|
uses: docker/build-push-action@v3.1.1
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
push: false
|
||||||
|
file: client/Dockerfile
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
tags: |
|
||||||
|
amruthpillai/reactive-resume:client-latest
|
||||||
|
amruthpillai/reactive-resume:client-${{ steps.version.outputs.tag }}
|
||||||
|
ghcr.io/amruthpillai/reactive-resume:client-latest
|
||||||
|
ghcr.io/amruthpillai/reactive-resume:client-${{ steps.version.outputs.tag }}
|
||||||
|
|
||||||
|
server:
|
||||||
|
name: Server
|
||||||
|
timeout-minutes: 15
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
env:
|
||||||
|
TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
|
||||||
|
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout the repository
|
||||||
|
uses: actions/checkout@v3.0.2
|
||||||
|
with:
|
||||||
|
fetch-depth: 2
|
||||||
|
|
||||||
|
- name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@v2.0.0
|
||||||
|
|
||||||
|
- id: buildx
|
||||||
|
name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v2.0.0
|
||||||
|
with:
|
||||||
|
install: true
|
||||||
|
|
||||||
|
- id: version
|
||||||
|
name: Get Version
|
||||||
|
run: echo ::set-output name=tag::${GITHUB_REF#refs/*/}
|
||||||
|
|
||||||
|
- name: Build Server Image
|
||||||
|
uses: docker/build-push-action@v3.1.1
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
push: false
|
||||||
|
file: server/Dockerfile
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
tags: |
|
||||||
|
amruthpillai/reactive-resume:server-latest
|
||||||
|
amruthpillai/reactive-resume:server-${{ steps.version.outputs.tag }}
|
||||||
|
ghcr.io/amruthpillai/reactive-resume:server-latest
|
||||||
|
ghcr.io/amruthpillai/reactive-resume:server-${{ steps.version.outputs.tag }}
|
||||||
5
.gitignore
vendored
5
.gitignore
vendored
@ -7,4 +7,7 @@
|
|||||||
node_modules
|
node_modules
|
||||||
|
|
||||||
# macOS
|
# macOS
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
|
||||||
|
# Turbo
|
||||||
|
.turbo
|
||||||
@ -18,6 +18,7 @@ CHANGELOG.md
|
|||||||
|
|
||||||
# Project Dependencies
|
# Project Dependencies
|
||||||
node_modules
|
node_modules
|
||||||
|
pnpm-lock.yaml
|
||||||
|
|
||||||
# Docker
|
# Docker
|
||||||
Dockerfile
|
Dockerfile
|
||||||
|
|||||||
8
.vscode/extensions.json
vendored
8
.vscode/extensions.json
vendored
@ -1,3 +1,7 @@
|
|||||||
{
|
{
|
||||||
"recommendations": ["dbaeumer.vscode-eslint", "esbenp.prettier-vscode", "lokalise.i18n-ally"]
|
"recommendations": [
|
||||||
}
|
"dbaeumer.vscode-eslint",
|
||||||
|
"esbenp.prettier-vscode",
|
||||||
|
"lokalise.i18n-ally"
|
||||||
|
]
|
||||||
|
}
|
||||||
12
.vscode/launch.json
vendored
12
.vscode/launch.json
vendored
@ -3,12 +3,12 @@
|
|||||||
"configurations": [
|
"configurations": [
|
||||||
{
|
{
|
||||||
"type": "node",
|
"type": "node",
|
||||||
"request": "attach",
|
|
||||||
"name": "Debug: Server",
|
"name": "Debug: Server",
|
||||||
"port": 9229,
|
"port": 9229,
|
||||||
|
"request": "attach",
|
||||||
"restart": true,
|
"restart": true,
|
||||||
"stopOnEntry": false,
|
"protocol": "inspector",
|
||||||
"protocol": "inspector"
|
"stopOnEntry": false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Debug: Client",
|
"name": "Debug: Client",
|
||||||
@ -17,10 +17,10 @@
|
|||||||
"command": "pnpm run dev:client",
|
"command": "pnpm run dev:client",
|
||||||
"console": "integratedTerminal",
|
"console": "integratedTerminal",
|
||||||
"serverReadyAction": {
|
"serverReadyAction": {
|
||||||
|
"action": "debugWithChrome",
|
||||||
"pattern": "started server on .+, url: (https?://.+)",
|
"pattern": "started server on .+, url: (https?://.+)",
|
||||||
"uriFormat": "%s",
|
"uriFormat": "%s"
|
||||||
"action": "debugWithChrome"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
12
.vscode/settings.json
vendored
12
.vscode/settings.json
vendored
@ -1,22 +1,22 @@
|
|||||||
{
|
{
|
||||||
"css.validate": false,
|
"css.validate": false,
|
||||||
|
"scss.validate": false,
|
||||||
|
"editor.wordWrap": "on",
|
||||||
|
"npm.packageManager": "pnpm",
|
||||||
|
"editor.formatOnSave": true,
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||||
"editor.codeActionsOnSave": {
|
"editor.codeActionsOnSave": {
|
||||||
"source.fixAll.eslint": true
|
"source.fixAll.eslint": true
|
||||||
},
|
},
|
||||||
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
|
||||||
"editor.formatOnSave": true,
|
|
||||||
"editor.wordWrap": "on",
|
|
||||||
"eslint.workingDirectories": [
|
"eslint.workingDirectories": [
|
||||||
"schema",
|
"schema",
|
||||||
"client",
|
"client",
|
||||||
"server"
|
"server"
|
||||||
],
|
],
|
||||||
"scss.validate": false,
|
|
||||||
"conventionalCommits.scopes": [
|
"conventionalCommits.scopes": [
|
||||||
"client",
|
"client",
|
||||||
"server",
|
"server",
|
||||||
"docker",
|
"docker",
|
||||||
"dependencies"
|
"dependencies"
|
||||||
],
|
]
|
||||||
"npm.packageManager": "pnpm"
|
|
||||||
}
|
}
|
||||||
@ -17,23 +17,23 @@ diverse, inclusive, and healthy community.
|
|||||||
Examples of behavior that contributes to a positive environment for our
|
Examples of behavior that contributes to a positive environment for our
|
||||||
community include:
|
community include:
|
||||||
|
|
||||||
* Demonstrating empathy and kindness toward other people
|
- Demonstrating empathy and kindness toward other people
|
||||||
* Being respectful of differing opinions, viewpoints, and experiences
|
- Being respectful of differing opinions, viewpoints, and experiences
|
||||||
* Giving and gracefully accepting constructive feedback
|
- Giving and gracefully accepting constructive feedback
|
||||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
- Accepting responsibility and apologizing to those affected by our mistakes,
|
||||||
and learning from the experience
|
and learning from the experience
|
||||||
* Focusing on what is best not just for us as individuals, but for the
|
- Focusing on what is best not just for us as individuals, but for the
|
||||||
overall community
|
overall community
|
||||||
|
|
||||||
Examples of unacceptable behavior include:
|
Examples of unacceptable behavior include:
|
||||||
|
|
||||||
* The use of sexualized language or imagery, and sexual attention or
|
- The use of sexualized language or imagery, and sexual attention or
|
||||||
advances of any kind
|
advances of any kind
|
||||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
- Trolling, insulting or derogatory comments, and personal or political attacks
|
||||||
* Public or private harassment
|
- Public or private harassment
|
||||||
* Publishing others' private information, such as a physical or email
|
- Publishing others' private information, such as a physical or email
|
||||||
address, without their explicit permission
|
address, without their explicit permission
|
||||||
* Other conduct which could reasonably be considered inappropriate in a
|
- Other conduct which could reasonably be considered inappropriate in a
|
||||||
professional setting
|
professional setting
|
||||||
|
|
||||||
## Enforcement Responsibilities
|
## Enforcement Responsibilities
|
||||||
@ -106,7 +106,7 @@ Violating these terms may lead to a permanent ban.
|
|||||||
### 4. Permanent Ban
|
### 4. Permanent Ban
|
||||||
|
|
||||||
**Community Impact**: Demonstrating a pattern of violation of community
|
**Community Impact**: Demonstrating a pattern of violation of community
|
||||||
standards, including sustained inappropriate behavior, harassment of an
|
standards, including sustained inappropriate behavior, harassment of an
|
||||||
individual, or aggression toward or disparagement of classes of individuals.
|
individual, or aggression toward or disparagement of classes of individuals.
|
||||||
|
|
||||||
**Consequence**: A permanent ban from any sort of public interaction within
|
**Consequence**: A permanent ban from any sort of public interaction within
|
||||||
|
|||||||
@ -1,22 +1,18 @@
|
|||||||
FROM node:lts-alpine as dependencies
|
FROM node:lts-alpine AS base
|
||||||
|
|
||||||
RUN apk add --no-cache curl g++ make python3 \
|
|
||||||
&& curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm
|
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
RUN apk add --no-cache g++ git curl make python3 \
|
||||||
|
&& curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm
|
||||||
|
|
||||||
COPY package.json pnpm-*.yaml ./
|
FROM base as dependencies
|
||||||
|
|
||||||
|
COPY package.json pnpm-*.yaml turbo.json ./
|
||||||
COPY ./schema/package.json ./schema/package.json
|
COPY ./schema/package.json ./schema/package.json
|
||||||
COPY ./client/package.json ./client/package.json
|
COPY ./client/package.json ./client/package.json
|
||||||
|
|
||||||
RUN pnpm install --frozen-lockfile
|
RUN pnpm install --frozen-lockfile
|
||||||
|
|
||||||
FROM node:lts-alpine as builder
|
FROM base as builder
|
||||||
|
|
||||||
RUN apk add --no-cache curl g++ make python3 \
|
|
||||||
&& curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm
|
|
||||||
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
@ -24,21 +20,14 @@ COPY --from=dependencies /app/node_modules ./node_modules
|
|||||||
COPY --from=dependencies /app/schema/node_modules ./schema/node_modules
|
COPY --from=dependencies /app/schema/node_modules ./schema/node_modules
|
||||||
COPY --from=dependencies /app/client/node_modules ./client/node_modules
|
COPY --from=dependencies /app/client/node_modules ./client/node_modules
|
||||||
|
|
||||||
RUN pnpm run build:schema
|
RUN pnpm run build --filter client
|
||||||
RUN pnpm run build:client
|
|
||||||
|
|
||||||
FROM node:lts-alpine as production
|
FROM base as production
|
||||||
|
|
||||||
WORKDIR /app
|
COPY --from=builder /app/package.json /app/pnpm-*.yaml /app/turbo.json ./
|
||||||
|
|
||||||
RUN apk add --no-cache curl \
|
|
||||||
&& curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm
|
|
||||||
|
|
||||||
COPY --from=builder /app/pnpm-*.yaml ./
|
|
||||||
COPY --from=builder /app/package.json ./
|
|
||||||
COPY --from=builder /app/client/package.json ./client/package.json
|
COPY --from=builder /app/client/package.json ./client/package.json
|
||||||
|
|
||||||
RUN pnpm install -F client --frozen-lockfile --prod
|
RUN pnpm install --filter client --prod --frozen-lockfile --workspace-root
|
||||||
|
|
||||||
COPY --from=builder /app/client/.next ./client/.next
|
COPY --from=builder /app/client/.next ./client/.next
|
||||||
COPY --from=builder /app/client/public ./client/public
|
COPY --from=builder /app/client/public ./client/public
|
||||||
@ -52,4 +41,4 @@ ENV PORT 3000
|
|||||||
HEALTHCHECK --interval=30s --timeout=20s --retries=3 --start-period=15s \
|
HEALTHCHECK --interval=30s --timeout=20s --retries=3 --start-period=15s \
|
||||||
CMD curl -fSs 127.0.0.1:3000 || exit 1
|
CMD curl -fSs 127.0.0.1:3000 || exit 1
|
||||||
|
|
||||||
CMD [ "pnpm", "run", "start:client" ]
|
CMD [ "pnpm", "run", "start", "--filter", "client" ]
|
||||||
@ -97,7 +97,7 @@ const Settings = () => {
|
|||||||
<List sx={{ padding: 0 }}>
|
<List sx={{ padding: 0 }}>
|
||||||
{/* Global Settings */}
|
{/* Global Settings */}
|
||||||
<>
|
<>
|
||||||
<ListSubheader className="rounded">
|
<ListSubheader disableSticky className="rounded">
|
||||||
{t<string>('builder.rightSidebar.sections.settings.global.heading')}
|
{t<string>('builder.rightSidebar.sections.settings.global.heading')}
|
||||||
</ListSubheader>
|
</ListSubheader>
|
||||||
|
|
||||||
@ -155,7 +155,7 @@ const Settings = () => {
|
|||||||
|
|
||||||
{/* Page Settings */}
|
{/* Page Settings */}
|
||||||
<>
|
<>
|
||||||
<ListSubheader className="rounded">
|
<ListSubheader disableSticky className="rounded">
|
||||||
{t<string>('builder.rightSidebar.sections.settings.page.heading')}
|
{t<string>('builder.rightSidebar.sections.settings.page.heading')}
|
||||||
</ListSubheader>
|
</ListSubheader>
|
||||||
|
|
||||||
@ -187,7 +187,7 @@ const Settings = () => {
|
|||||||
|
|
||||||
{/* Resume Settings */}
|
{/* Resume Settings */}
|
||||||
<>
|
<>
|
||||||
<ListSubheader className="rounded">
|
<ListSubheader disableSticky className="rounded">
|
||||||
{t<string>('builder.rightSidebar.sections.settings.resume.heading')}
|
{t<string>('builder.rightSidebar.sections.settings.resume.heading')}
|
||||||
</ListSubheader>
|
</ListSubheader>
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import { createTheme } from '@mui/material';
|
import { createTheme, ThemeOptions } from '@mui/material/styles';
|
||||||
|
|
||||||
const theme = createTheme({
|
const theme: ThemeOptions = {
|
||||||
typography: {
|
typography: {
|
||||||
fontSize: 12,
|
fontSize: 12,
|
||||||
fontFamily: 'Inter, sans-serif',
|
fontFamily: 'Inter, sans-serif',
|
||||||
@ -49,7 +49,7 @@ const theme = createTheme({
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
};
|
||||||
|
|
||||||
export const lightTheme = createTheme({
|
export const lightTheme = createTheme({
|
||||||
...theme,
|
...theme,
|
||||||
|
|||||||
@ -2,81 +2,84 @@
|
|||||||
"name": "@reactive-resume/client",
|
"name": "@reactive-resume/client",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "react-env --prefix PUBLIC -- next dev",
|
"dev": "react-env --prefix PUBLIC -- next dev",
|
||||||
|
"lint": "next lint --fix",
|
||||||
"build": "next build && npm run sitemap",
|
"build": "next build && npm run sitemap",
|
||||||
"start": "react-env --prefix PUBLIC -- next start",
|
"start": "react-env --prefix PUBLIC -- next start",
|
||||||
"lint": "next lint --fix",
|
|
||||||
"sitemap": "next-sitemap --config next-sitemap.config.js"
|
"sitemap": "next-sitemap --config next-sitemap.config.js"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@beam-australia/react-env": "^3.1.1",
|
|
||||||
"@date-io/dayjs": "^2.15.0",
|
|
||||||
"@emotion/css": "^11.10.0",
|
|
||||||
"@emotion/react": "^11.10.0",
|
|
||||||
"@emotion/styled": "^11.10.0",
|
|
||||||
"@hookform/resolvers": "2.9.7",
|
|
||||||
"@monaco-editor/react": "^4.4.5",
|
|
||||||
"@mui/icons-material": "^5.8.4",
|
|
||||||
"@mui/lab": "^5.0.0-alpha.95",
|
|
||||||
"@mui/material": "^5.10.1",
|
|
||||||
"@mui/system": "^5.10.1",
|
|
||||||
"@mui/x-date-pickers": "5.0.0-beta.6",
|
|
||||||
"@next/env": "^12.2.5",
|
|
||||||
"@reduxjs/toolkit": "^1.8.5",
|
|
||||||
"axios": "^0.27.2",
|
|
||||||
"clsx": "^1.2.1",
|
|
||||||
"dayjs": "^1.11.5",
|
|
||||||
"downloadjs": "^1.4.7",
|
|
||||||
"joi": "^17.6.0",
|
"joi": "^17.6.0",
|
||||||
"lodash": "^4.17.21",
|
"clsx": "^1.2.1",
|
||||||
"md5-hex": "^4.0.0",
|
|
||||||
"monaco-editor": "^0.34.0",
|
|
||||||
"nanoid": "^3.3.4",
|
|
||||||
"next": "12.2.5",
|
"next": "12.2.5",
|
||||||
"next-i18next": "^11.3.0",
|
"uuid": "^8.3.2",
|
||||||
|
"axios": "^0.27.2",
|
||||||
|
"dayjs": "^1.11.5",
|
||||||
"react": "18.2.0",
|
"react": "18.2.0",
|
||||||
"react-beautiful-dnd": "^13.1.0",
|
|
||||||
"react-colorful": "^5.6.1",
|
|
||||||
"react-dnd": "16.0.1",
|
|
||||||
"react-dnd-html5-backend": "16.0.1",
|
|
||||||
"react-dom": "18.2.0",
|
|
||||||
"react-hook-form": "^7.34.2",
|
|
||||||
"react-hot-toast": "2.3.0",
|
|
||||||
"react-hotkeys-hook": "^3.4.7",
|
|
||||||
"react-icons": "^4.4.0",
|
|
||||||
"react-markdown": "^8.0.3",
|
|
||||||
"react-query": "^3.39.2",
|
|
||||||
"react-redux": "^8.0.2",
|
|
||||||
"react-zoom-pan-pinch": "^2.1.3",
|
|
||||||
"redux": "^4.2.0",
|
"redux": "^4.2.0",
|
||||||
"redux-persist": "^6.0.0",
|
"sharp": "^0.30.7",
|
||||||
|
"lodash": "^4.17.21",
|
||||||
|
"nanoid": "^3.3.4",
|
||||||
|
"md5-hex": "^4.0.0",
|
||||||
|
"@mui/lab": "^5.0.0-alpha.95",
|
||||||
|
"@next/env": "^12.2.5",
|
||||||
|
"react-dnd": "16.0.1",
|
||||||
|
"react-dom": "18.2.0",
|
||||||
|
"downloadjs": "^1.4.7",
|
||||||
"redux-saga": "^1.2.1",
|
"redux-saga": "^1.2.1",
|
||||||
"remark-gfm": "^3.0.1",
|
"remark-gfm": "^3.0.1",
|
||||||
"sharp": "^0.30.7",
|
"@mui/system": "^5.10.1",
|
||||||
"uuid": "^8.3.2",
|
"react-icons": "^4.4.0",
|
||||||
"webfontloader": "^1.6.28"
|
"react-query": "^3.39.2",
|
||||||
|
"react-redux": "^8.0.2",
|
||||||
|
"@emotion/css": "^11.10.0",
|
||||||
|
"next-i18next": "^11.3.0",
|
||||||
|
"@mui/material": "^5.10.1",
|
||||||
|
"monaco-editor": "^0.34.0",
|
||||||
|
"redux-persist": "^6.0.0",
|
||||||
|
"webfontloader": "^1.6.28",
|
||||||
|
"@date-io/dayjs": "^2.15.0",
|
||||||
|
"@emotion/react": "^11.10.0",
|
||||||
|
"react-colorful": "^5.6.1",
|
||||||
|
"react-markdown": "^8.0.3",
|
||||||
|
"@emotion/styled": "^11.10.0",
|
||||||
|
"react-hook-form": "^7.34.2",
|
||||||
|
"react-hot-toast": "2.3.0",
|
||||||
|
"@reduxjs/toolkit": "^1.8.5",
|
||||||
|
"react-hotkeys-hook": "^3.4.7",
|
||||||
|
"@hookform/resolvers": "2.9.7",
|
||||||
|
"@mui/icons-material": "^5.8.4",
|
||||||
|
"@mui/x-date-pickers": "5.0.0-beta.6",
|
||||||
|
"react-beautiful-dnd": "^13.1.0",
|
||||||
|
"@monaco-editor/react": "^4.4.5",
|
||||||
|
"react-zoom-pan-pinch": "^2.1.3",
|
||||||
|
"react-dnd-html5-backend": "16.0.1",
|
||||||
|
"@beam-australia/react-env": "^3.1.1"
|
||||||
|
},
|
||||||
|
"resolutions": {
|
||||||
|
"@types/react": "18.0.17",
|
||||||
|
"@types/react-dom": "18.0.6"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"sass": "^1.54.5",
|
||||||
|
"csstype": "^3.1.0",
|
||||||
|
"postcss": "^8.4.16",
|
||||||
|
"typescript": "^4.7.4",
|
||||||
"@babel/core": "^7.18.10",
|
"@babel/core": "^7.18.10",
|
||||||
"@reactive-resume/schema": "workspace:*",
|
|
||||||
"@tailwindcss/typography": "^0.5.4",
|
|
||||||
"@types/downloadjs": "^1.4.3",
|
|
||||||
"@types/lodash": "^4.14.184",
|
|
||||||
"@types/node": "18.7.8",
|
"@types/node": "18.7.8",
|
||||||
|
"@types/uuid": "^8.3.4",
|
||||||
|
"tailwindcss": "^3.1.8",
|
||||||
"@types/react": "18.0.17",
|
"@types/react": "18.0.17",
|
||||||
"@types/react-beautiful-dnd": "^13.1.2",
|
"autoprefixer": "^10.4.8",
|
||||||
|
"next-sitemap": "^3.1.21",
|
||||||
|
"@types/lodash": "^4.14.184",
|
||||||
|
"@types/react-dom": "18.0.6",
|
||||||
|
"@types/downloadjs": "^1.4.3",
|
||||||
"@types/react-redux": "^7.1.24",
|
"@types/react-redux": "^7.1.24",
|
||||||
"@types/tailwindcss": "^3.0.11",
|
"@types/tailwindcss": "^3.0.11",
|
||||||
"@types/uuid": "^8.3.4",
|
|
||||||
"@types/webfontloader": "^1.6.34",
|
|
||||||
"autoprefixer": "^10.4.8",
|
|
||||||
"csstype": "^3.1.0",
|
|
||||||
"eslint": "^8.22.0",
|
|
||||||
"eslint-config-next": "12.2.5",
|
"eslint-config-next": "12.2.5",
|
||||||
"next-sitemap": "^3.1.20",
|
"@types/webfontloader": "^1.6.34",
|
||||||
"postcss": "^8.4.16",
|
"@reactive-resume/schema": "workspace:*",
|
||||||
"prettier": "^2.7.1",
|
"@tailwindcss/typography": "^0.5.4",
|
||||||
"sass": "^1.54.5",
|
"@types/react-beautiful-dnd": "^13.1.2"
|
||||||
"tailwindcss": "^3.1.8",
|
|
||||||
"typescript": "^4.7.4"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,7 +3,6 @@ import clsx from 'clsx';
|
|||||||
import get from 'lodash/get';
|
import get from 'lodash/get';
|
||||||
import isEmpty from 'lodash/isEmpty';
|
import isEmpty from 'lodash/isEmpty';
|
||||||
import { GetServerSideProps, NextPage } from 'next';
|
import { GetServerSideProps, NextPage } from 'next';
|
||||||
import { useRouter } from 'next/router';
|
|
||||||
import { serverSideTranslations } from 'next-i18next/serverSideTranslations';
|
import { serverSideTranslations } from 'next-i18next/serverSideTranslations';
|
||||||
import { useEffect } from 'react';
|
import { useEffect } from 'react';
|
||||||
|
|
||||||
@ -55,8 +54,6 @@ export const getServerSideProps: GetServerSideProps<Props | Promise<Props>, Quer
|
|||||||
};
|
};
|
||||||
|
|
||||||
const Printer: NextPage<Props> = ({ resume: initialData, locale }) => {
|
const Printer: NextPage<Props> = ({ resume: initialData, locale }) => {
|
||||||
const router = useRouter();
|
|
||||||
|
|
||||||
const dispatch = useAppDispatch();
|
const dispatch = useAppDispatch();
|
||||||
|
|
||||||
const resume = useAppSelector((state) => state.resume);
|
const resume = useAppSelector((state) => state.resume);
|
||||||
@ -65,12 +62,6 @@ const Printer: NextPage<Props> = ({ resume: initialData, locale }) => {
|
|||||||
if (initialData) dispatch(setResume(initialData));
|
if (initialData) dispatch(setResume(initialData));
|
||||||
}, [dispatch, initialData]);
|
}, [dispatch, initialData]);
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
const { pathname, asPath, query } = router;
|
|
||||||
|
|
||||||
router.push({ pathname, query }, asPath, { locale });
|
|
||||||
}, [router, locale]);
|
|
||||||
|
|
||||||
if (!resume || isEmpty(resume)) return null;
|
if (!resume || isEmpty(resume)) return null;
|
||||||
|
|
||||||
const layout: string[][][] = get(resume, 'metadata.layout', []);
|
const layout: string[][][] = get(resume, 'metadata.layout', []);
|
||||||
|
|||||||
@ -1,39 +1,39 @@
|
|||||||
{
|
{
|
||||||
"extends": "../tsconfig.base.json",
|
"extends": "../tsconfig.base.json",
|
||||||
|
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
|
||||||
|
"exclude": [".next"],
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"target": "es5",
|
|
||||||
"lib": ["dom", "dom.iterable", "esnext"],
|
"lib": ["dom", "dom.iterable", "esnext"],
|
||||||
"allowJs": true,
|
"jsx": "preserve",
|
||||||
"skipLibCheck": true,
|
"target": "es5",
|
||||||
"strict": true,
|
"strict": true,
|
||||||
"forceConsistentCasingInFileNames": true,
|
|
||||||
"noEmit": true,
|
"noEmit": true,
|
||||||
"esModuleInterop": true,
|
|
||||||
"module": "esnext",
|
"module": "esnext",
|
||||||
|
"allowJs": true,
|
||||||
|
"baseUrl": "./",
|
||||||
|
"incremental": true,
|
||||||
|
"skipLibCheck": true,
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"isolatedModules": true,
|
||||||
"moduleResolution": "node",
|
"moduleResolution": "node",
|
||||||
"resolveJsonModule": true,
|
"resolveJsonModule": true,
|
||||||
"isolatedModules": true,
|
"forceConsistentCasingInFileNames": true,
|
||||||
"jsx": "preserve",
|
|
||||||
"incremental": true,
|
|
||||||
"baseUrl": "./",
|
|
||||||
"paths": {
|
"paths": {
|
||||||
"@/components/*": ["components/*"],
|
|
||||||
"@/config/*": ["config/*"],
|
|
||||||
"@/constants/*": ["constants/*"],
|
|
||||||
"@/data/*": ["data/*"],
|
"@/data/*": ["data/*"],
|
||||||
"@/i18n/*": ["i18n/*"],
|
"@/i18n/*": ["i18n/*"],
|
||||||
"@/modals/*": ["modals/*"],
|
|
||||||
"@/pages/*": ["pages/*"],
|
"@/pages/*": ["pages/*"],
|
||||||
"@/public/*": ["public/*"],
|
|
||||||
"@/services/*": ["services/*"],
|
|
||||||
"@/store/*": ["store/*"],
|
"@/store/*": ["store/*"],
|
||||||
"@/styles/*": ["styles/*"],
|
|
||||||
"@/templates/*": ["templates/*"],
|
|
||||||
"@/types/*": ["types/*"],
|
"@/types/*": ["types/*"],
|
||||||
"@/utils/*": ["utils/*"],
|
"@/utils/*": ["utils/*"],
|
||||||
"@/wrappers/*": ["wrappers/*"]
|
"@/config/*": ["config/*"],
|
||||||
|
"@/modals/*": ["modals/*"],
|
||||||
|
"@/public/*": ["public/*"],
|
||||||
|
"@/styles/*": ["styles/*"],
|
||||||
|
"@/services/*": ["services/*"],
|
||||||
|
"@/wrappers/*": ["wrappers/*"],
|
||||||
|
"@/constants/*": ["constants/*"],
|
||||||
|
"@/templates/*": ["templates/*"],
|
||||||
|
"@/components/*": ["components/*"]
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
|
|
||||||
"exclude": [".next"]
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
version: '3'
|
version: '3.8'
|
||||||
|
|
||||||
services:
|
services:
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:14.2-alpine
|
image: postgres:alpine
|
||||||
container_name: postgres
|
container_name: postgres
|
||||||
ports:
|
ports:
|
||||||
- 5432:5432
|
- 5432:5432
|
||||||
@ -21,7 +21,7 @@ services:
|
|||||||
restart: always
|
restart: always
|
||||||
|
|
||||||
traefik:
|
traefik:
|
||||||
image: traefik:rocamadour
|
image: traefik:latest
|
||||||
container_name: traefik
|
container_name: traefik
|
||||||
command:
|
command:
|
||||||
- --providers.docker=true
|
- --providers.docker=true
|
||||||
@ -33,37 +33,12 @@ services:
|
|||||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||||
|
|
||||||
server:
|
server:
|
||||||
image: amruthpillai/reactive-resume:server-latest
|
# image: amruthpillai/reactive-resume:server-latest
|
||||||
# build:
|
build:
|
||||||
# context: .
|
context: .
|
||||||
# dockerfile: ./server/Dockerfile
|
dockerfile: ./server/Dockerfile
|
||||||
container_name: server
|
container_name: server
|
||||||
environment:
|
env_file: .env
|
||||||
- TZ=UTC
|
|
||||||
- PUBLIC_URL=http://localhost:3000
|
|
||||||
- PUBLIC_SERVER_URL=http://localhost:3000/api
|
|
||||||
- PUBLIC_GOOGLE_CLIENT_ID=
|
|
||||||
- POSTGRES_DB=postgres
|
|
||||||
- POSTGRES_USER=postgres
|
|
||||||
- POSTGRES_PASSWORD=postgres
|
|
||||||
- SECRET_KEY=
|
|
||||||
- POSTGRES_HOST=postgres
|
|
||||||
- POSTGRES_PORT=5432
|
|
||||||
- POSTGRES_SSL_CERT=
|
|
||||||
- JWT_SECRET=
|
|
||||||
- JWT_EXPIRY_TIME=604800
|
|
||||||
- GOOGLE_CLIENT_SECRET=
|
|
||||||
- GOOGLE_API_KEY=
|
|
||||||
- SENDGRID_API_KEY=
|
|
||||||
- SENDGRID_FORGOT_PASSWORD_TEMPLATE_ID=
|
|
||||||
- SENDGRID_FROM_NAME=
|
|
||||||
- SENDGRID_FROM_EMAIL=
|
|
||||||
- STORAGE_BUCKET=
|
|
||||||
- STORAGE_REGION=
|
|
||||||
- STORAGE_ENDPOINT=
|
|
||||||
- STORAGE_URL_PREFIX=
|
|
||||||
- STORAGE_ACCESS_KEY=
|
|
||||||
- STORAGE_SECRET_KEY=
|
|
||||||
depends_on:
|
depends_on:
|
||||||
- traefik
|
- traefik
|
||||||
- postgres
|
- postgres
|
||||||
@ -77,17 +52,12 @@ services:
|
|||||||
restart: always
|
restart: always
|
||||||
|
|
||||||
client:
|
client:
|
||||||
image: amruthpillai/reactive-resume:client-latest
|
# image: amruthpillai/reactive-resume:client-latest
|
||||||
# build:
|
build:
|
||||||
# context: .
|
context: .
|
||||||
# dockerfile: ./client/Dockerfile
|
dockerfile: ./client/Dockerfile
|
||||||
container_name: client
|
container_name: client
|
||||||
environment:
|
env_file: .env
|
||||||
- TZ=UTC
|
|
||||||
- PUBLIC_URL=http://localhost:3000
|
|
||||||
- PUBLIC_SERVER_URL=http://localhost:3000/api
|
|
||||||
- PUBLIC_GOOGLE_CLIENT_ID=
|
|
||||||
- PUBLIC_FLAG_DISABLE_SIGNUPS=false
|
|
||||||
depends_on:
|
depends_on:
|
||||||
- traefik
|
- traefik
|
||||||
- server
|
- server
|
||||||
|
|||||||
2
docs/.gitignore
vendored
2
docs/.gitignore
vendored
@ -2,7 +2,7 @@
|
|||||||
/node_modules
|
/node_modules
|
||||||
|
|
||||||
# Production
|
# Production
|
||||||
/build
|
build
|
||||||
|
|
||||||
# Generated files
|
# Generated files
|
||||||
.docusaurus
|
.docusaurus
|
||||||
|
|||||||
@ -4,7 +4,6 @@ sidebar_position: 2
|
|||||||
|
|
||||||
# Create a new resume
|
# Create a new resume
|
||||||
|
|
||||||
|
|
||||||
To create a new resume from scratch, click on the selected part.
|
To create a new resume from scratch, click on the selected part.
|
||||||
|
|
||||||
<a href="https://rxresu.me/dashboard">
|
<a href="https://rxresu.me/dashboard">
|
||||||
@ -12,13 +11,27 @@ To create a new resume from scratch, click on the selected part.
|
|||||||
</a>
|
</a>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
After you click on it, enter name and select whether you want it publicly accessible
|
After you click on it, enter name and select whether you want it publicly accessible
|
||||||
<img align="center" src="https://res.cloudinary.com/dn2mupqo0/image/upload/v1655884469/on-button_a5kfbz.png" height='25' type="image"></img> or not
|
<img
|
||||||
<img align="center" src="https://res.cloudinary.com/dn2mupqo0/image/upload/v1655884949/off-button_rrkz3g.png" height='25' type="image"></img> . You can also change it later from the sharing <a href="https://res.cloudinary.com/dn2mupqo0/image/upload/v1655889311/toggle_jcmfix.gif">see where</a>.
|
align="center"
|
||||||
|
src="https://res.cloudinary.com/dn2mupqo0/image/upload/v1655884469/on-button_a5kfbz.png"
|
||||||
|
height="25"
|
||||||
|
type="image"
|
||||||
|
></img> or not
|
||||||
|
<img
|
||||||
|
align="center"
|
||||||
|
src="https://res.cloudinary.com/dn2mupqo0/image/upload/v1655884949/off-button_rrkz3g.png"
|
||||||
|
height="25"
|
||||||
|
type="image"
|
||||||
|
></img> . You can also change it later from the sharing{' '}
|
||||||
|
<a href="https://res.cloudinary.com/dn2mupqo0/image/upload/v1655889311/toggle_jcmfix.gif">see where</a>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h3> Now it's look like ⚡</h3>
|
<h3> Now it's look like ⚡</h3>
|
||||||
|
|
||||||
<a href="https://rxresu.me/dashboard">
|
<a href="https://rxresu.me/dashboard">
|
||||||
<img src="https://res.cloudinary.com/dn2mupqo0/image/upload/v1655882355/Screenshot_2022-06-22_at_12.48.42_PM_dx6714.png" type="image"></img>
|
<img
|
||||||
|
src="https://res.cloudinary.com/dn2mupqo0/image/upload/v1655882355/Screenshot_2022-06-22_at_12.48.42_PM_dx6714.png"
|
||||||
|
type="image"
|
||||||
|
></img>
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
@ -1,10 +1,6 @@
|
|||||||
// @ts-check
|
|
||||||
// Note: type annotations allow type checking and IDEs autocompletion
|
|
||||||
|
|
||||||
const lightCodeTheme = require('prism-react-renderer/themes/github');
|
const lightCodeTheme = require('prism-react-renderer/themes/github');
|
||||||
const darkCodeTheme = require('prism-react-renderer/themes/dracula');
|
const darkCodeTheme = require('prism-react-renderer/themes/dracula');
|
||||||
|
|
||||||
/** @type {import('@docusaurus/types').Config} */
|
|
||||||
const config = {
|
const config = {
|
||||||
title: 'Reactive Resume',
|
title: 'Reactive Resume',
|
||||||
tagline: 'A free and open source resume builder.',
|
tagline: 'A free and open source resume builder.',
|
||||||
@ -24,7 +20,6 @@ const config = {
|
|||||||
blog: false,
|
blog: false,
|
||||||
docs: {
|
docs: {
|
||||||
routeBasePath: '/',
|
routeBasePath: '/',
|
||||||
sidebarPath: require.resolve('./sidebars.js'),
|
|
||||||
editUrl: 'https://github.com/AmruthPillai/Reactive-Resume/tree/main/docs',
|
editUrl: 'https://github.com/AmruthPillai/Reactive-Resume/tree/main/docs',
|
||||||
},
|
},
|
||||||
sitemap: {
|
sitemap: {
|
||||||
|
|||||||
@ -3,25 +3,17 @@
|
|||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"docusaurus": "docusaurus",
|
"dev": "docusaurus start --no-open --port 3200",
|
||||||
"start": "docusaurus start --no-open --port 3200",
|
|
||||||
"build": "docusaurus build",
|
"build": "docusaurus build",
|
||||||
"swizzle": "docusaurus swizzle",
|
"start": "docusaurus serve --no-open --port 3200"
|
||||||
"deploy": "docusaurus deploy",
|
|
||||||
"clear": "docusaurus clear",
|
|
||||||
"serve": "docusaurus serve --port 3200",
|
|
||||||
"write-translations": "docusaurus write-translations",
|
|
||||||
"write-heading-ids": "docusaurus write-heading-ids"
|
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@algolia/client-search": "^4.14.2",
|
|
||||||
"@docusaurus/core": "2.0.1",
|
|
||||||
"@docusaurus/preset-classic": "2.0.1",
|
|
||||||
"@mdx-js/react": "^1.6.22",
|
|
||||||
"clsx": "^1.2.1",
|
|
||||||
"prism-react-renderer": "^1.3.5",
|
|
||||||
"react": "^17.0.2",
|
"react": "^17.0.2",
|
||||||
"react-dom": "^17.0.2"
|
"react-dom": "^17.0.2",
|
||||||
|
"@mdx-js/react": "^1.6.22",
|
||||||
|
"@docusaurus/core": "2.0.1",
|
||||||
|
"prism-react-renderer": "^1.3.5",
|
||||||
|
"@docusaurus/preset-classic": "2.0.1"
|
||||||
},
|
},
|
||||||
"browserslist": {
|
"browserslist": {
|
||||||
"production": [
|
"production": [
|
||||||
@ -36,7 +28,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/react": "^17.0.2",
|
"typescript": "^4.7.4",
|
||||||
"typescript": "^4.7.4"
|
"@types/react": "^17.0.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,31 +0,0 @@
|
|||||||
/**
|
|
||||||
* Creating a sidebar enables you to:
|
|
||||||
- create an ordered group of docs
|
|
||||||
- render a sidebar for each doc of that group
|
|
||||||
- provide next/previous navigation
|
|
||||||
|
|
||||||
The sidebars can be generated from the filesystem, or explicitly defined here.
|
|
||||||
|
|
||||||
Create as many sidebars as you want.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// @ts-check
|
|
||||||
|
|
||||||
/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
|
|
||||||
const sidebars = {
|
|
||||||
// By default, Docusaurus generates a sidebar from the docs folder structure
|
|
||||||
tutorialSidebar: [{ type: 'autogenerated', dirName: '.' }],
|
|
||||||
|
|
||||||
// But you can create a sidebar manually
|
|
||||||
/*
|
|
||||||
tutorialSidebar: [
|
|
||||||
{
|
|
||||||
type: 'category',
|
|
||||||
label: 'Tutorial',
|
|
||||||
items: ['hello'],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
*/
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports = sidebars;
|
|
||||||
49834
package-lock.json
generated
49834
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
53
package.json
53
package.json
@ -2,54 +2,35 @@
|
|||||||
"name": "reactive-resume",
|
"name": "reactive-resume",
|
||||||
"version": "3.5.3",
|
"version": "3.5.3",
|
||||||
"private": true,
|
"private": true,
|
||||||
|
"scripts": {
|
||||||
|
"dev": "env-cmd --silent turbo run dev",
|
||||||
|
"lint": "eslint --fix .",
|
||||||
|
"build": "env-cmd --silent turbo run build",
|
||||||
|
"start": "env-cmd --silent turbo run start",
|
||||||
|
"format": "prettier --write .",
|
||||||
|
"release": "standard-version --release-as patch"
|
||||||
|
},
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
"schema",
|
"schema",
|
||||||
"client",
|
"client",
|
||||||
"server",
|
"server",
|
||||||
"docs"
|
"docs"
|
||||||
],
|
],
|
||||||
"config": {
|
|
||||||
"commitizen": {
|
|
||||||
"path": "cz-conventional-changelog"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"prepare": "husky install",
|
|
||||||
"release": "standard-version",
|
|
||||||
"lint": "eslint --quiet --fix --ext .js,.ts,.tsx .",
|
|
||||||
"format": "prettier --loglevel error --write \"./**/*.{js,ts,tsx,json}\"",
|
|
||||||
"dev:schema": "pnpm -F schema dev",
|
|
||||||
"dev:server": "pnpm -F server start:debug",
|
|
||||||
"dev:client": "pnpm -F client dev",
|
|
||||||
"dev:docs": "pnpm -F docs start",
|
|
||||||
"dev": "env-cmd --silent concurrently --kill-others \"pnpm run dev:*\"",
|
|
||||||
"build:schema": "pnpm -F schema build",
|
|
||||||
"build:server": "pnpm -F server build",
|
|
||||||
"build:client": "pnpm -F client build",
|
|
||||||
"build:docs": "pnpm -F docs build",
|
|
||||||
"build": "env-cmd --silent concurrently \"pnpm run build:*\"",
|
|
||||||
"start:server": "pnpm -F server start:prod",
|
|
||||||
"start:client": "pnpm -F client start",
|
|
||||||
"start:docs": "pnpm -F docs serve",
|
|
||||||
"start": "env-cmd --silent concurrently --kill-others \"pnpm run start:*\""
|
|
||||||
},
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"concurrently": "^7.3.0",
|
"turbo": "^1.4.3",
|
||||||
"env-cmd": "^10.1.0"
|
"env-cmd": "^10.1.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@typescript-eslint/eslint-plugin": "^5.33.1",
|
|
||||||
"@typescript-eslint/parser": "^5.33.1",
|
|
||||||
"cz-conventional-changelog": "^3.3.0",
|
|
||||||
"eslint": "^8.22.0",
|
"eslint": "^8.22.0",
|
||||||
"eslint-config-prettier": "^8.5.0",
|
|
||||||
"eslint-plugin-import": "^2.26.0",
|
|
||||||
"eslint-plugin-prettier": "^4.2.1",
|
|
||||||
"eslint-plugin-simple-import-sort": "^7.0.0",
|
|
||||||
"eslint-plugin-unused-imports": "^2.0.0",
|
|
||||||
"husky": "^8.0.1",
|
|
||||||
"prettier": "^2.7.1",
|
"prettier": "^2.7.1",
|
||||||
|
"typescript": "^4.7.4",
|
||||||
"standard-version": "^9.5.0",
|
"standard-version": "^9.5.0",
|
||||||
"typescript": "^4.7.4"
|
"eslint-plugin-import": "^2.26.0",
|
||||||
|
"eslint-config-prettier": "^8.5.0",
|
||||||
|
"eslint-plugin-prettier": "^4.2.1",
|
||||||
|
"@typescript-eslint/parser": "^5.33.1",
|
||||||
|
"eslint-plugin-unused-imports": "^2.0.0",
|
||||||
|
"@typescript-eslint/eslint-plugin": "^5.33.1",
|
||||||
|
"eslint-plugin-simple-import-sort": "^7.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
659
pnpm-lock.yaml
generated
659
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@ -4,9 +4,8 @@
|
|||||||
"main": "./dist/index.js",
|
"main": "./dist/index.js",
|
||||||
"typings": "./dist/index.d.ts",
|
"typings": "./dist/index.d.ts",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "tsc",
|
|
||||||
"dev": "tsc -w",
|
"dev": "tsc -w",
|
||||||
"lint": "eslint --fix --ext .ts ./src"
|
"build": "tsc"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"eslint": "^8.22.0",
|
"eslint": "^8.22.0",
|
||||||
|
|||||||
@ -1,22 +1,19 @@
|
|||||||
FROM node:lts-alpine as dependencies
|
FROM node:lts-alpine AS base
|
||||||
|
|
||||||
RUN apk add --no-cache g++ curl make python3 \
|
|
||||||
&& curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm
|
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
COPY package.json pnpm-*.yaml ./
|
RUN apk add --no-cache g++ git curl make python3 \
|
||||||
|
&& curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm
|
||||||
|
|
||||||
|
FROM base AS dependencies
|
||||||
|
|
||||||
|
COPY package.json pnpm-*.yaml turbo.json ./
|
||||||
COPY ./schema/package.json ./schema/package.json
|
COPY ./schema/package.json ./schema/package.json
|
||||||
COPY ./server/package.json ./server/package.json
|
COPY ./server/package.json ./server/package.json
|
||||||
|
|
||||||
RUN pnpm install --frozen-lockfile
|
RUN pnpm install --frozen-lockfile
|
||||||
|
|
||||||
FROM node:lts-alpine as builder
|
FROM base AS builder
|
||||||
|
|
||||||
RUN apk add --no-cache g++ curl make python3 \
|
|
||||||
&& curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm
|
|
||||||
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
@ -24,25 +21,25 @@ COPY --from=dependencies /app/node_modules ./node_modules
|
|||||||
COPY --from=dependencies /app/schema/node_modules ./schema/node_modules
|
COPY --from=dependencies /app/schema/node_modules ./schema/node_modules
|
||||||
COPY --from=dependencies /app/server/node_modules ./server/node_modules
|
COPY --from=dependencies /app/server/node_modules ./server/node_modules
|
||||||
|
|
||||||
RUN pnpm run build:schema
|
RUN pnpm run build --filter server
|
||||||
RUN pnpm run build:server
|
|
||||||
|
|
||||||
FROM mcr.microsoft.com/playwright:focal as production
|
FROM mcr.microsoft.com/playwright:next-jammy as production
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
RUN apt-get update \
|
RUN apt-get update \
|
||||||
&& apt-get install -y curl \
|
&& apt-get install -y curl build-essential \
|
||||||
&& curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm
|
&& curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm
|
||||||
|
|
||||||
COPY --from=builder /app/pnpm-*.yaml ./
|
COPY --from=builder /app/package.json /app/pnpm-*.yaml /app/turbo.json ./
|
||||||
COPY --from=builder /app/package.json ./
|
|
||||||
COPY --from=builder /app/server/package.json ./server/package.json
|
COPY --from=builder /app/server/package.json ./server/package.json
|
||||||
|
|
||||||
RUN pnpm install -F server --frozen-lockfile --prod
|
RUN npx playwright install --with-deps chromium
|
||||||
|
RUN pnpm install --filter server --prod --frozen-lockfile --workspace-root
|
||||||
|
|
||||||
COPY --from=builder /app/server/dist ./server/dist
|
COPY --from=builder /app/server/dist ./server/dist
|
||||||
|
|
||||||
|
VOLUME /app/server/dist/assets/exports
|
||||||
VOLUME /app/server/dist/assets/uploads
|
VOLUME /app/server/dist/assets/uploads
|
||||||
|
|
||||||
EXPOSE 3100
|
EXPOSE 3100
|
||||||
@ -52,4 +49,4 @@ ENV PORT 3100
|
|||||||
HEALTHCHECK --interval=30s --timeout=20s --retries=3 --start-period=15s \
|
HEALTHCHECK --interval=30s --timeout=20s --retries=3 --start-period=15s \
|
||||||
CMD curl -fSs localhost:3100/health || exit 1
|
CMD curl -fSs localhost:3100/health || exit 1
|
||||||
|
|
||||||
CMD [ "pnpm", "run", "start:server" ]
|
CMD [ "pnpm", "run", "start", "--filter", "server" ]
|
||||||
@ -1,13 +1,10 @@
|
|||||||
{
|
{
|
||||||
"name": "@reactive-resume/server",
|
"name": "@reactive-resume/server",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
"dev": "nest start --watch",
|
||||||
"build": "rimraf dist && nest build",
|
"build": "rimraf dist && nest build",
|
||||||
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
|
"debug": "nest start --debug --watch",
|
||||||
"start": "nest start",
|
"start": "node dist/main"
|
||||||
"start:dev": "nest start --watch",
|
|
||||||
"start:debug": "nest start --debug --watch",
|
|
||||||
"start:prod": "node dist/main",
|
|
||||||
"lint": "eslint --fix --ext .ts ./src"
|
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@aws-sdk/client-s3": "^3.154.0",
|
"@aws-sdk/client-s3": "^3.154.0",
|
||||||
@ -25,7 +22,7 @@
|
|||||||
"@nestjs/typeorm": "^9.0.1",
|
"@nestjs/typeorm": "^9.0.1",
|
||||||
"@sendgrid/mail": "^7.7.0",
|
"@sendgrid/mail": "^7.7.0",
|
||||||
"@types/passport": "^1.0.10",
|
"@types/passport": "^1.0.10",
|
||||||
"bcrypt": "^5.0.1",
|
"bcryptjs": "^2.4.3",
|
||||||
"cache-manager": "^4.1.0",
|
"cache-manager": "^4.1.0",
|
||||||
"class-transformer": "^0.5.1",
|
"class-transformer": "^0.5.1",
|
||||||
"class-validator": "^0.13.2",
|
"class-validator": "^0.13.2",
|
||||||
@ -54,7 +51,7 @@
|
|||||||
"@nestjs/cli": "^9.0.0",
|
"@nestjs/cli": "^9.0.0",
|
||||||
"@nestjs/schematics": "^9.0.1",
|
"@nestjs/schematics": "^9.0.1",
|
||||||
"@reactive-resume/schema": "workspace:*",
|
"@reactive-resume/schema": "workspace:*",
|
||||||
"@types/bcrypt": "^5.0.0",
|
"@types/bcryptjs": "^2.4.2",
|
||||||
"@types/cookie-parser": "^1.4.3",
|
"@types/cookie-parser": "^1.4.3",
|
||||||
"@types/express": "^4.17.13",
|
"@types/express": "^4.17.13",
|
||||||
"@types/lodash": "^4.14.184",
|
"@types/lodash": "^4.14.184",
|
||||||
@ -62,7 +59,6 @@
|
|||||||
"@types/node": "^18.7.8",
|
"@types/node": "^18.7.8",
|
||||||
"@types/passport-jwt": "^3.0.6",
|
"@types/passport-jwt": "^3.0.6",
|
||||||
"@types/passport-local": "^1.0.34",
|
"@types/passport-local": "^1.0.34",
|
||||||
"eslint": "^8.22.0",
|
|
||||||
"prettier": "^2.7.1",
|
"prettier": "^2.7.1",
|
||||||
"source-map-support": "^0.5.21",
|
"source-map-support": "^0.5.21",
|
||||||
"ts-loader": "^9.3.1",
|
"ts-loader": "^9.3.1",
|
||||||
|
|||||||
@ -2,8 +2,7 @@ import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
|
|||||||
import { ConfigService } from '@nestjs/config';
|
import { ConfigService } from '@nestjs/config';
|
||||||
import { JwtService } from '@nestjs/jwt';
|
import { JwtService } from '@nestjs/jwt';
|
||||||
import { SchedulerRegistry } from '@nestjs/schedule';
|
import { SchedulerRegistry } from '@nestjs/schedule';
|
||||||
import bcrypt from 'bcrypt';
|
import { compareSync, hashSync } from 'bcryptjs';
|
||||||
import { randomInt } from 'crypto';
|
|
||||||
import { OAuth2Client } from 'google-auth-library';
|
import { OAuth2Client } from 'google-auth-library';
|
||||||
|
|
||||||
import { PostgresErrorCode } from '@/database/errorCodes.enum';
|
import { PostgresErrorCode } from '@/database/errorCodes.enum';
|
||||||
@ -24,12 +23,12 @@ export class AuthService {
|
|||||||
) {}
|
) {}
|
||||||
|
|
||||||
async register(registerDto: RegisterDto) {
|
async register(registerDto: RegisterDto) {
|
||||||
const hashedPassword = await bcrypt.hash(registerDto.password, randomInt(8, 12));
|
const password = hashSync(registerDto.password);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const createdUser = await this.usersService.create({
|
const createdUser = await this.usersService.create({
|
||||||
...registerDto,
|
...registerDto,
|
||||||
password: hashedPassword,
|
password,
|
||||||
provider: 'email',
|
provider: 'email',
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -43,6 +42,17 @@ export class AuthService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async verifyPassword(password: string, hashedPassword: string) {
|
||||||
|
const isPasswordMatching = compareSync(password, hashedPassword);
|
||||||
|
|
||||||
|
if (!isPasswordMatching) {
|
||||||
|
throw new HttpException(
|
||||||
|
'The username/email and password combination provided was incorrect.',
|
||||||
|
HttpStatus.UNAUTHORIZED
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async getUser(identifier: string, password: string) {
|
async getUser(identifier: string, password: string) {
|
||||||
try {
|
try {
|
||||||
const user = await this.usersService.findByIdentifier(identifier);
|
const user = await this.usersService.findByIdentifier(identifier);
|
||||||
@ -58,27 +68,17 @@ export class AuthService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async verifyPassword(password: string, hashedPassword: string) {
|
|
||||||
const isPasswordMatching = await bcrypt.compare(password, hashedPassword);
|
|
||||||
|
|
||||||
if (!isPasswordMatching) {
|
|
||||||
throw new HttpException(
|
|
||||||
'The username/email and password combination provided was incorrect.',
|
|
||||||
HttpStatus.UNAUTHORIZED
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
forgotPassword(email: string) {
|
forgotPassword(email: string) {
|
||||||
return this.usersService.generateResetToken(email);
|
return this.usersService.generateResetToken(email);
|
||||||
}
|
}
|
||||||
|
|
||||||
async resetPassword(resetPasswordDto: ResetPasswordDto) {
|
async resetPassword(resetPasswordDto: ResetPasswordDto) {
|
||||||
const user = await this.usersService.findByResetToken(resetPasswordDto.resetToken);
|
const user = await this.usersService.findByResetToken(resetPasswordDto.resetToken);
|
||||||
const hashedPassword = await bcrypt.hash(resetPasswordDto.password, randomInt(8, 12));
|
|
||||||
|
const password = hashSync(resetPasswordDto.password);
|
||||||
|
|
||||||
await this.usersService.update(user.id, {
|
await this.usersService.update(user.id, {
|
||||||
password: hashedPassword,
|
password,
|
||||||
resetToken: null,
|
resetToken: null,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -12,8 +12,6 @@ export class HealthController {
|
|||||||
@Get()
|
@Get()
|
||||||
@HealthCheck()
|
@HealthCheck()
|
||||||
check() {
|
check() {
|
||||||
return this.health.check([
|
return this.health.check([() => this.db.pingCheck('database')]);
|
||||||
() => this.db.pingCheck('database'),
|
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,33 +3,33 @@
|
|||||||
"exclude": ["dist"],
|
"exclude": ["dist"],
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"module": "commonjs",
|
"module": "commonjs",
|
||||||
"declaration": true,
|
|
||||||
"removeComments": true,
|
|
||||||
"emitDecoratorMetadata": true,
|
|
||||||
"experimentalDecorators": true,
|
|
||||||
"allowSyntheticDefaultImports": true,
|
|
||||||
"target": "es2017",
|
"target": "es2017",
|
||||||
"sourceMap": true,
|
|
||||||
"outDir": "dist",
|
"outDir": "dist",
|
||||||
|
"baseUrl": ".",
|
||||||
|
"sourceMap": true,
|
||||||
|
"declaration": true,
|
||||||
"incremental": true,
|
"incremental": true,
|
||||||
"skipLibCheck": true,
|
"skipLibCheck": true,
|
||||||
"strictNullChecks": false,
|
|
||||||
"noImplicitAny": false,
|
"noImplicitAny": false,
|
||||||
|
"removeComments": true,
|
||||||
|
"strictNullChecks": false,
|
||||||
"resolveJsonModule": true,
|
"resolveJsonModule": true,
|
||||||
"strictBindCallApply": false,
|
"strictBindCallApply": false,
|
||||||
"forceConsistentCasingInFileNames": false,
|
"emitDecoratorMetadata": true,
|
||||||
|
"experimentalDecorators": true,
|
||||||
"noFallthroughCasesInSwitch": false,
|
"noFallthroughCasesInSwitch": false,
|
||||||
"baseUrl": ".",
|
"allowSyntheticDefaultImports": true,
|
||||||
|
"forceConsistentCasingInFileNames": false,
|
||||||
"paths": {
|
"paths": {
|
||||||
"@/auth/*": ["src/auth/*"],
|
"@/auth/*": ["src/auth/*"],
|
||||||
"@/config/*": ["src/config/*"],
|
|
||||||
"@/constants/*": ["src/constants/*"],
|
|
||||||
"@/database/*": ["src/database/*"],
|
|
||||||
"@/decorators/*": ["src/decorators/*"],
|
|
||||||
"@/filters/*": ["src/filters/*"],
|
|
||||||
"@/mail/*": ["src/mail/*"],
|
"@/mail/*": ["src/mail/*"],
|
||||||
|
"@/users/*": ["src/users/*"],
|
||||||
|
"@/config/*": ["src/config/*"],
|
||||||
"@/resume/*": ["src/resume/*"],
|
"@/resume/*": ["src/resume/*"],
|
||||||
"@/users/*": ["src/users/*"]
|
"@/filters/*": ["src/filters/*"],
|
||||||
|
"@/database/*": ["src/database/*"],
|
||||||
|
"@/constants/*": ["src/constants/*"],
|
||||||
|
"@/decorators/*": ["src/decorators/*"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,9 +2,9 @@
|
|||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"target": "es6",
|
"target": "es6",
|
||||||
"module": "commonjs",
|
"module": "commonjs",
|
||||||
"esModuleInterop": true,
|
"strict": true,
|
||||||
"forceConsistentCasingInFileNames": true,
|
|
||||||
"skipLibCheck": true,
|
"skipLibCheck": true,
|
||||||
"strict": true
|
"esModuleInterop": true,
|
||||||
|
"forceConsistentCasingInFileNames": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
16
turbo.json
Normal file
16
turbo.json
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://turborepo.org/schema.json",
|
||||||
|
"pipeline": {
|
||||||
|
"dev": {
|
||||||
|
"cache": false
|
||||||
|
},
|
||||||
|
"start": {
|
||||||
|
"cache": false
|
||||||
|
},
|
||||||
|
"build": {
|
||||||
|
"outputs": ["dist/**", ".next/**"],
|
||||||
|
"dependsOn": ["^build"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"globalDependencies": [".env"]
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user