Embrace nx monorepo structure with root package.json (#3255)

* Upgrade to node 18.17.1 and regroup dependencies in root package.json

* Sort package.json

* Fix lint

* Migrate zapier
This commit is contained in:
Charles Bochet
2024-01-05 14:59:58 +01:00
committed by GitHub
parent f35b40c428
commit f7034d6e7d
16 changed files with 488 additions and 739 deletions

View File

@ -1,4 +1,4 @@
FROM node:18.16-bullseye as twenty-dev
FROM node:18.17.1-bullseye as twenty-dev
WORKDIR /app

View File

@ -1,4 +1,4 @@
FROM node:18.16.0-alpine as twenty-docs-build
FROM node:18.17.1-alpine as twenty-docs-build
WORKDIR /app
@ -16,7 +16,7 @@ RUN yarn nx build twenty-docs
CMD ["tail", "-f", "/dev/null"]
FROM node:18.16.0-alpine as twenty-docs
FROM node:18.17.1-alpine as twenty-docs
WORKDIR /app/packages/twenty-docs

View File

@ -1,4 +1,4 @@
FROM node:18.16.0-alpine as twenty-front-build
FROM node:18.17.1-alpine as twenty-front-build
ARG REACT_APP_SERVER_BASE_URL
ARG REACT_APP_SERVER_AUTH_URL
@ -16,7 +16,7 @@ COPY ./packages/twenty-front /app/packages/twenty-front
RUN yarn
RUN yarn nx build twenty-front
FROM node:18.16.0-alpine as twenty-front
FROM node:18.17.1-alpine as twenty-front
WORKDIR /app/packages/twenty-front

View File

@ -15,29 +15,6 @@
"write-heading-ids": "docusaurus write-heading-ids",
"typecheck": "tsc"
},
"dependencies": {
"@codesandbox/sandpack-react": "^2.9.0",
"@docusaurus/core": "^3.0.0",
"@docusaurus/preset-classic": "^3.0.0",
"@graphiql/plugin-explorer": "^1.0.2",
"@mdx-js/react": "^3.0.0",
"@stoplight/elements": "^7.15.4",
"clsx": "^1.2.1",
"docusaurus-node-polyfills": "^1.0.0",
"graphiql": "^3.0.10",
"graphql": "^16.6.0",
"iframe-resizer-react": "^1.1.0",
"prism-react-renderer": "^2.1.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-icons": "^4.9.0"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "^3.0.0",
"@docusaurus/tsconfig": "3.0.0",
"raw-loader": "^4.0.2",
"typescript": "~5.2.2"
},
"overrides": {
"trim": "^0.0.3",
"got": "^11.8.5"

View File

@ -80,7 +80,7 @@ module.exports = {
rules: {
'storybook/no-uninstalled-addons': [
'error',
{ packageJsonLocation: path.resolve('package.json') },
{ packageJsonLocation: path.resolve('../../package.json') },
],
},
},

View File

@ -36,140 +36,8 @@
"graphql:metadata:generate": "dotenv cross-var graphql-codegen -- --config codegen-metadata.cjs",
"chromatic": "dotenv cross-var npx chromatic --project-token=$CHROMATIC_PROJECT_TOKEN"
},
"dependencies": {
"@air/react-drag-to-select": "^5.0.8",
"@apollo/client": "^3.7.17",
"@blocknote/core": "^0.10.1",
"@blocknote/react": "^0.10.1",
"@chakra-ui/accordion": "^2.3.0",
"@chakra-ui/system": "^2.6.0",
"@emotion/react": "^11.10.6",
"@emotion/styled": "^11.10.5",
"@floating-ui/react": "^0.24.3",
"@hello-pangea/dnd": "^16.2.0",
"@hookform/resolvers": "^3.1.1",
"@sentry/react": "^7.88.0",
"@sniptt/guards": "^0.2.0",
"@swc/jest": "^0.2.29",
"@tabler/icons-react": "^2.30.0",
"afterframe": "^1.0.2",
"apollo-upload-client": "^17.0.0",
"date-fns": "^2.30.0",
"deep-equal": "^2.2.2",
"esbuild-plugin-svgr": "^2.1.0",
"framer-motion": "^10.12.17",
"graphql": "^16.6.0",
"hex-rgb": "^5.0.0",
"immer": "^10.0.2",
"js-cookie": "^3.0.5",
"js-levenshtein": "^1.1.6",
"libphonenumber-js": "^1.10.26",
"lodash.camelcase": "^4.3.0",
"lodash.debounce": "^4.0.8",
"lodash.kebabcase": "^4.1.1",
"lodash.snakecase": "^4.1.1",
"luxon": "^3.3.0",
"react": "^18.2.0",
"react-data-grid": "7.0.0-beta.13",
"react-datepicker": "^4.11.0",
"react-dom": "^18.2.0",
"react-dropzone": "^14.2.3",
"react-error-boundary": "^4.0.11",
"react-helmet-async": "^1.3.0",
"react-hook-form": "^7.45.1",
"react-hotkeys-hook": "^4.4.0",
"react-intersection-observer": "^9.5.2",
"react-loading-skeleton": "^3.3.1",
"react-phone-number-input": "^3.3.4",
"react-responsive": "^9.0.2",
"react-router-dom": "^6.4.4",
"react-textarea-autosize": "^8.4.1",
"react-tooltip": "^5.13.1",
"recoil": "^0.7.7",
"scroll-into-view": "^1.16.2",
"ts-key-enum": "^2.0.12",
"tsup": "^8.0.1",
"type-fest": "^4.1.0",
"uuid": "^9.0.0",
"vite-tsconfig-paths": "^4.2.1",
"xlsx-ugnis": "^0.19.3",
"zod": "^3.22.2"
},
"devDependencies": {
"@graphql-codegen/cli": "^3.3.1",
"@graphql-codegen/client-preset": "^4.1.0",
"@graphql-codegen/typescript": "^3.0.4",
"@graphql-codegen/typescript-operations": "^3.0.4",
"@graphql-codegen/typescript-react-apollo": "^3.3.7",
"@storybook/addon-actions": "^7.6.3",
"@storybook/addon-coverage": "^1.0.0",
"@storybook/addon-essentials": "^7.6.7",
"@storybook/addon-interactions": "^7.6.7",
"@storybook/addon-links": "^7.6.7",
"@storybook/addon-onboarding": "^1.0.10",
"@storybook/addon-themes": "^7.6.7",
"@storybook/blocks": "^7.6.3",
"@storybook/react": "^7.6.3",
"@storybook/react-vite": "^7.6.3",
"@storybook/test": "^7.6.3",
"@storybook/test-runner": "^0.16.0",
"@stylistic/eslint-plugin": "^1.5.0",
"@swc-node/register": "~1.6.7",
"@swc/core": "~1.3.100",
"@testing-library/jest-dom": "^6.1.5",
"@testing-library/react": "^13.4.0",
"@types/apollo-upload-client": "^17.0.2",
"@types/deep-equal": "^1.0.1",
"@types/jest": "^29.5.11",
"@types/js-cookie": "^3.0.3",
"@types/lodash.camelcase": "^4.3.7",
"@types/lodash.debounce": "^4.0.7",
"@types/lodash.kebabcase": "^4.1.7",
"@types/lodash.snakecase": "^4.1.9",
"@types/luxon": "^3.3.0",
"@types/node": "^20.10.6",
"@types/react": "^18.2.39",
"@types/react-datepicker": "^4.11.2",
"@types/react-dom": "^18.2.15",
"@types/scroll-into-view": "^1.16.0",
"@types/uuid": "^9.0.1",
"@typescript-eslint/eslint-plugin": "^6.10.0",
"@typescript-eslint/parser": "^6.10.0",
"@typescript-eslint/utils": "^6.9.1",
"@vitejs/plugin-react-swc": "^3.5.0",
"chromatic": "^6.18.0",
"concurrently": "^8.0.1",
"cross-var": "^1.1.0",
"dotenv-cli": "^7.2.1",
"eslint": "^8.53.0",
"eslint-config-prettier": "^9.0.0",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-jsx-a11y": "^6.8.0",
"eslint-plugin-prefer-arrow": "^1.2.3",
"eslint-plugin-prettier": "^5.0.1",
"eslint-plugin-react": "^7.33.2",
"eslint-plugin-react-hooks": "^4.6.0",
"eslint-plugin-react-refresh": "^0.4.4",
"eslint-plugin-simple-import-sort": "^10.0.0",
"eslint-plugin-storybook": "^0.6.15",
"eslint-plugin-unused-imports": "^3.0.0",
"http-server": "^14.1.1",
"jest": "29.7.0",
"jest-environment-jsdom": "29.7.0",
"msw": "^2.0.11",
"msw-storybook-addon": "2.0.0--canary.122.b3ed3b1.0",
"prettier": "3.1.0",
"storybook": "^7.6.3",
"storybook-addon-cookie": "^3.2.0",
"storybook-addon-pseudo-states": "^2.1.2",
"ts-jest": "^29.1.1",
"ts-node": "10.9.1",
"typescript": "^5.3.3",
"vite": "^5.0.0",
"vite-plugin-svgr": "^4.2.0"
},
"engines": {
"node": "^18.16.0",
"node": "^18.17.1",
"npm": "please-use-yarn",
"yarn": "^4.0.2"
},

View File

@ -39,7 +39,7 @@ export const RecordTableBodyFetchMoreLoader = () => {
return (
<tbody ref={tbodyRef}>
{!isFetchingMoreObjects && (
{isFetchingMoreObjects && (
<StyledRow selected={false}>
<td colSpan={7}>
<StyledText>Loading more...</StyledText>

View File

@ -4,7 +4,7 @@
"description": "",
"author": "",
"private": true,
"license": "UNLICENSED",
"license": "AGPL-3.0",
"scripts": {
"nx": "NX_DEFAULT_PROJECT=twenty-server node ../../node_modules/nx/bin/nx.js",
"prebuild": "rimraf dist",
@ -34,111 +34,13 @@
"queue:work": "node dist/src/queue-worker"
},
"dependencies": {
"@apollo/server": "^4.7.3",
"@aws-sdk/client-s3": "^3.363.0",
"@aws-sdk/credential-providers": "^3.363.0",
"@google-cloud/local-auth": "2.1.0",
"@graphql-tools/schema": "^10.0.0",
"@graphql-yoga/nestjs": "patch:@graphql-yoga/nestjs@2.1.0#./patches/@graphql-yoga+nestjs+2.1.0.patch",
"@nestjs/apollo": "^11.0.5",
"@nestjs/axios": "^3.0.1",
"@nestjs/common": "^9.0.0",
"@nestjs/config": "^2.3.2",
"@nestjs/core": "^9.0.0",
"@nestjs/graphql": "patch:@nestjs/graphql@12.0.8#./patches/@nestjs+graphql+12.0.8.patch",
"@nestjs/jwt": "^10.0.3",
"@nestjs/passport": "^9.0.3",
"@nestjs/platform-express": "^9.0.0",
"@nestjs/serve-static": "^3.0.0",
"@nestjs/terminus": "^9.2.2",
"@nestjs/typeorm": "^10.0.0",
"@ptc-org/nestjs-query-core": "^4.2.0",
"@ptc-org/nestjs-query-graphql": "patch:@ptc-org/nestjs-query-graphql@4.2.0#./patches/@ptc-org+nestjs-query-graphql+4.2.0.patch",
"@ptc-org/nestjs-query-typeorm": "4.2.1-alpha.2",
"@sentry/node": "^7.66.0",
"@sentry/profiling-node": "^1.2.6",
"@sentry/tracing": "^7.66.0",
"@types/lodash.camelcase": "^4.3.7",
"@types/lodash.merge": "^4.6.7",
"@types/mailparser": "^3.4.4",
"add": "^2.0.6",
"apollo-server-express": "^3.12.0",
"axios": "^1.6.2",
"bcrypt": "^5.1.1",
"body-parser": "^1.20.2",
"bullmq": "^4.14.0",
"bytes": "^3.1.2",
"class-transformer": "^0.5.1",
"class-validator": "patch:class-validator@^0.14.0#./patches/class-validator+0.14.0.patch",
"dataloader": "^2.2.2",
"date-fns": "^2.30.0",
"file-type": "16.5.4",
"googleapis": "105",
"graphql": "16.8.0",
"graphql-fields": "^2.0.3",
"graphql-subscriptions": "2.0.0",
"graphql-tag": "^2.12.6",
"graphql-type-json": "^0.3.2",
"graphql-upload": "^13.0.0",
"graphql-yoga": "^4.0.4",
"jest-mock-extended": "^3.0.4",
"jsonwebtoken": "^9.0.0",
"lodash.camelcase": "^4.3.0",
"lodash.isempty": "^4.4.0",
"lodash.isequal": "^4.5.0",
"lodash.isobject": "^3.0.2",
"lodash.kebabcase": "^4.1.1",
"lodash.merge": "^4.6.2",
"lodash.snakecase": "^4.1.1",
"lodash.upperfirst": "^4.3.1",
"mailparser": "^3.6.5",
"microdiff": "^1.3.2",
"nest-commander": "^3.12.0",
"openapi-types": "^12.1.3",
"passport": "^0.6.0",
"passport-google-oauth20": "^2.0.0",
"passport-jwt": "^4.0.1",
"passport-local": "^1.0.0",
"pg": "^8.11.3",
"pg-boss": "^9.0.3",
"rimraf": "^3.0.2",
"rxjs": "^7.2.0",
"sharp": "^0.32.1",
"type-fest": "^3.12.0",
"typeorm": "^0.3.17",
"uuid": "^9.0.0"
},
"devDependencies": {
"@nestjs/cli": "^9.0.0",
"@nestjs/schematics": "^9.0.0",
"@nestjs/testing": "^9.0.0",
"@types/bcrypt": "^5.0.0",
"@types/bytes": "^3.1.1",
"@types/express": "^4.17.13",
"@types/graphql-fields": "^1.3.6",
"@types/graphql-upload": "^8.0.12",
"@types/jest": "^29.5.11",
"@types/lodash.isempty": "^4.4.7",
"@types/lodash.isequal": "^4.5.7",
"@types/lodash.isobject": "^3.0.7",
"@types/lodash.kebabcase": "^4.1.7",
"@types/lodash.snakecase": "^4.1.7",
"@types/lodash.upperfirst": "^4.3.7",
"@types/ms": "^0.7.31",
"@types/node": "^20.10.6",
"@types/passport-google-oauth20": "^2.0.11",
"@types/passport-jwt": "^3.0.8",
"@types/supertest": "^2.0.11",
"@types/uuid": "^9.0.2",
"source-map-support": "^0.5.20",
"supertest": "^6.1.3",
"ts-loader": "^9.2.3"
},
"resolutions": {
"graphql": "16.8.0"
"class-validator": "patch:class-validator@^0.14.0#./patches/class-validator+0.14.0.patch"
},
"engines": {
"node": "^18.16.0",
"node": "^18.17.1",
"npm": "please-use-yarn",
"yarn": "^4.0.2"
}

View File

@ -24,7 +24,6 @@ export class FieldsStringFactory {
info: GraphQLResolveInfo,
fieldMetadataCollection: FieldMetadataInterface[],
): Promise<string> {
// @ts-expect-error Todo: Fix typing error
const selectedFields: Record<string, any> = graphqlFields(info);
return this.createFieldsStringRecursive(

View File

@ -1,44 +1,55 @@
import { danger, warn, markdown, schedule } from "danger";
import todos from "danger-plugin-todos";
import { danger, markdown, schedule, warn } from 'danger';
import todos from 'danger-plugin-todos';
function getMdSection(category: string, message: string) {
return `# ${category} <br>${message}`;
}
// Check if package.json was changed, but not yarn.lock
const packageChanged = danger.git.modified_files.find(x=>x.includes("package.json"));
const lockfileChanged = danger.git.modified_files.find(x=>x.includes("yarn.lock"));
const packageChanged = danger.git.modified_files.find((x) =>
x.includes('package.json'),
);
const lockfileChanged = danger.git.modified_files.find((x) =>
x.includes('yarn.lock'),
);
if (packageChanged && !lockfileChanged) {
const message = "Changes were made to package.json, but not to yarn.lock";
const idea = "Perhaps you need to run `yarn install`?";
const message = 'Changes were made to package.json, but not to yarn.lock';
const idea = 'Perhaps you need to run `yarn install`?';
warn(`${message} - <i>${idea}</i>`);
}
// Check if .env.example was changed, but not enviroment variable documentation
const envChanged =
danger.git.modified_files.find(x=>x.includes(".env.example")) ||
danger.git.modified_files.find(x=>x.includes("environment.service.ts"));
danger.git.modified_files.find((x) => x.includes('.env.example')) ||
danger.git.modified_files.find((x) => x.includes('environment.service.ts'));
const envDocsChanged = danger.git.modified_files.includes(
"enviroment-variables.mdx"
'enviroment-variables.mdx',
);
if (envChanged && !envDocsChanged) {
const message =
"Changes were made to the enviroment variables, but not to the documentation";
'Changes were made to the enviroment variables, but not to the documentation';
const idea =
"Please review your changes and check if a change needs to be documented!";
'Please review your changes and check if a change needs to be documented!';
warn(`${message} - <i>${idea}</i>`);
}
// CLA alert if first time contributor
if (danger.github && danger.github.pr &&
(danger.github.pr.author_association === "FIRST_TIME_CONTRIBUTOR" ||
danger.github.pr.author_association === "NONE")
if (
danger.github &&
danger.github.pr &&
(danger.github.pr.author_association === 'FIRST_TIME_CONTRIBUTOR' ||
danger.github.pr.author_association === 'NONE')
) {
markdown(getMdSection('CLA', `
markdown(
getMdSection(
'CLA',
`
Hello there and welcome to our project!
By submitting your Pull Request, you acknowledge that you agree with the terms of our [Contributor License Agreement](https://github.com/twentyhq/twenty/blob/main/.github/CLA.md).
Although we don't have a dedicated legal counsel, having this kind of agreement can protect us from potential legal issues or patent trolls.
Thank you for your understanding.`))
Thank you for your understanding.`,
),
);
}
// TODOS / Fixme

View File

@ -3,13 +3,5 @@
"private": true,
"scripts": {
"release": "node release.js"
},
"dependencies": {
"danger-plugin-todos": "^1.3.1",
"semver": "^7.5.4",
"typescript": "^5.3.2"
},
"devDependencies": {
"danger": "^11.3.0"
}
}

View File

@ -8,41 +8,5 @@
"build": "next build",
"start": "next start",
"lint": "next lint"
},
"dependencies": {
"@emotion/react": "^11.11.1",
"@emotion/styled": "^11.11.0",
"@jsdevtools/rehype-toc": "^3.0.2",
"@nivo/calendar": "^0.84.0",
"@nivo/core": "^0.84.0",
"@nx/eslint-plugin": "^17.2.8",
"@octokit/graphql": "^7.0.2",
"@stoplight/elements": "^7.16.2",
"@tabler/icons-react": "^2.44.0",
"better-sqlite3": "^9.2.2",
"graphiql": "^3.0.10",
"graphql": "^16.8.1",
"next": "14.0.4",
"next-mdx-remote": "^4.4.1",
"react": "^18",
"react-dom": "^18",
"react-icons": "^4.12.0",
"rehype-slug": "^6.0.0",
"remark-behead": "^3.1.0",
"remark-gfm": "^3.0.1"
},
"devDependencies": {
"@types/better-sqlite3": "^7.6.8",
"@types/node": "^20",
"@types/react": "^18",
"@types/react-dom": "^18",
"@typescript-eslint/eslint-plugin": "^6.16.0",
"eslint": "^8",
"eslint-config-next": "14.0.4",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-prettier": "^5.1.2",
"eslint-plugin-react": "^7.33.2",
"prettier": "^3.1.1",
"typescript": "^5"
}
}

View File

@ -4,6 +4,7 @@
"description": "Effortlessly sync Twenty with 3000+ apps. Automate tasks, boost productivity, and supercharge your customer relationships!",
"main": "src/index.ts",
"scripts": {
"nx": "NX_DEFAULT_PROJECT=twenty-zapier node ../../node_modules/nx/bin/nx.js",
"format": "prettier . --write \"!build\"",
"test": "yarn build && jest --testTimeout 10000 --rootDir ./lib/test",
"build": "yarn clean && tsc",
@ -14,21 +15,9 @@
"_zapier-build": "yarn build"
},
"engines": {
"node": ">=v18",
"npm": ">=5.6.0"
},
"dependencies": {
"dotenv-cli": "^7.2.1",
"prettier": "^3.0.3",
"zapier-platform-core": "15.5.1"
},
"devDependencies": {
"@types/jest": "^29.5.5",
"@types/node": "^20.8.6",
"jest": "^29.6.0",
"rimraf": "^5.0.5",
"typescript": "^5.2.2",
"zapier-platform-cli": "^15.4.1"
"node": "^18.17.1",
"npm": "please-use-yarn",
"yarn": "^4.0.2"
},
"private": true,
"zapier": {