Update scripts and documentation to use nx and new monorepo architecture (#2912)

* Update scripts and documentation to use nx and new monorepo architecture

* Start fixing docker

* Migrate eslint plugin and postgres setup

* Fix docker

* Fix patches

* Fix

* fix: wip try to fix the patches

* Apply patches

---------

Co-authored-by: Jérémy Magrin <jeremy.magrin@gmail.com>
This commit is contained in:
Charles Bochet 2023-12-11 10:54:57 +01:00 committed by GitHub
parent f91bb35573
commit 44baaee28e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
67 changed files with 411 additions and 14097 deletions

View File

@ -25,12 +25,12 @@ jobs:
path: front/node_modules
key: front-node_modules-${{hashFiles('front/yarn.lock')}}
restore-keys: front-node_modules-
- name: Cache eslint-plugin-twenty node modules
- name: Cache twenty-eslint-plugin node modules
uses: actions/cache@v3
with:
path: packages/eslint-plugin-twenty/node_modules
key: eslint-plugin-twenty-node_modules-${{hashFiles('packages/eslint-plugin-twenty/yarn.lock')}}
restore-keys: eslint-plugin-twenty-node_modules-
path: packages/twenty-eslint-plugin/node_modules
key: twenty-eslint-plugin-node_modules-${{hashFiles('packages/twenty-eslint-plugin/yarn.lock')}}
restore-keys: twenty-eslint-plugin-node_modules-
- name: Front / Install Dependencies
run: cd front && yarn
front-pages-sb-test:
@ -58,12 +58,12 @@ jobs:
path: front/node_modules
key: front-node_modules-${{hashFiles('front/yarn.lock')}}
restore-keys: front-node_modules-
- name: Cache eslint-plugin-twenty node modules
- name: Cache twenty-eslint-plugin node modules
uses: actions/cache@v3
with:
path: packages/eslint-plugin-twenty/node_modules
key: eslint-plugin-twenty-node_modules-${{hashFiles('packages/eslint-plugin-twenty/yarn.lock')}}
restore-keys: eslint-plugin-twenty-node_modules-
path: packages/twenty-eslint-plugin/node_modules
key: twenty-eslint-plugin-node_modules-${{hashFiles('packages/twenty-eslint-plugin/yarn.lock')}}
restore-keys: twenty-eslint-plugin-node_modules-
- name: Install dependencies
run: yarn
- name: Install Playwright
@ -100,12 +100,12 @@ jobs:
path: front/node_modules
key: front-node_modules-${{hashFiles('front/yarn.lock')}}
restore-keys: front-node_modules-
- name: Cache eslint-plugin-twenty node modules
- name: Cache twenty-eslint-plugin node modules
uses: actions/cache@v3
with:
path: packages/eslint-plugin-twenty/node_modules
key: eslint-plugin-twenty-node_modules-${{hashFiles('packages/eslint-plugin-twenty/yarn.lock')}}
restore-keys: eslint-plugin-twenty-node_modules-
path: packages/twenty-eslint-plugin/node_modules
key: twenty-eslint-plugin-node_modules-${{hashFiles('packages/twenty-eslint-plugin/yarn.lock')}}
restore-keys: twenty-eslint-plugin-node_modules-
- name: Install Playwright
run: cd front && npx playwright install
- name: Build Storybook
@ -136,12 +136,12 @@ jobs:
path: front/node_modules
key: front-node_modules-${{hashFiles('front/yarn.lock')}}
restore-keys: front-node_modules-
- name: Cache eslint-plugin-twenty node modules
- name: Cache twenty-eslint-plugin node modules
uses: actions/cache@v3
with:
path: packages/eslint-plugin-twenty/node_modules
key: eslint-plugin-twenty-node_modules-${{hashFiles('packages/eslint-plugin-twenty/yarn.lock')}}
restore-keys: eslint-plugin-twenty-node_modules-
path: packages/twenty-eslint-plugin/node_modules
key: twenty-eslint-plugin-node_modules-${{hashFiles('packages/twenty-eslint-plugin/yarn.lock')}}
restore-keys: twenty-eslint-plugin-node_modules-
- name: Front / Install Dependencies
run: cd front && yarn
- name: Front / Run linter
@ -167,11 +167,11 @@ jobs:
path: front/node_modules
key: front-node_modules-${{hashFiles('front/yarn.lock')}}
restore-keys: front-node_modules-
- name: Cache eslint-plugin-twenty node modules
- name: Cache twenty-eslint-plugin node modules
uses: actions/cache@v3
with:
path: packages/eslint-plugin-twenty/node_modules
key: eslint-plugin-twenty-node_modules-${{hashFiles('packages/eslint-plugin-twenty/yarn.lock')}}
restore-keys: eslint-plugin-twenty-node_modules-
path: packages/twenty-eslint-plugin/node_modules
key: twenty-eslint-plugin-node_modules-${{hashFiles('packages/twenty-eslint-plugin/yarn.lock')}}
restore-keys: twenty-eslint-plugin-node_modules-
- name: Front / Run jest
run: cd front && yarn test

15
.gitignore vendored
View File

@ -1,9 +1,18 @@
**/**/.env
.DS_Store
.idea/workspace.xml
node_modules/
**/**/node_modules/
# yarn is the recommended package manager across the project
.package-lock.json
**/**/.package-lock.json
.nx/installation
.nx/cache
.nx/cache
.pnp.*
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions

View File

@ -47,6 +47,5 @@
},
"search.exclude": {
"**/.yarn": true,
"**/.pnp.*": true
}
}

Binary file not shown.

View File

@ -1,5 +0,0 @@
# This file is automatically generated by @yarnpkg/sdks.
# Manual changes might be lost!
integrations:
- vscode

View File

@ -1,20 +0,0 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire} = require(`module`);
const {resolve} = require(`path`);
const relPnpApiPath = "../../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absRequire = createRequire(absPnpApiPath);
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require typescript/bin/tsc
require(absPnpApiPath).setup();
}
}
// Defer to the real typescript/bin/tsc your application uses
module.exports = absRequire(`typescript/bin/tsc`);

View File

@ -1,20 +0,0 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire} = require(`module`);
const {resolve} = require(`path`);
const relPnpApiPath = "../../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absRequire = createRequire(absPnpApiPath);
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require typescript/bin/tsserver
require(absPnpApiPath).setup();
}
}
// Defer to the real typescript/bin/tsserver your application uses
module.exports = absRequire(`typescript/bin/tsserver`);

View File

@ -1,20 +0,0 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire} = require(`module`);
const {resolve} = require(`path`);
const relPnpApiPath = "../../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absRequire = createRequire(absPnpApiPath);
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require typescript/lib/tsc.js
require(absPnpApiPath).setup();
}
}
// Defer to the real typescript/lib/tsc.js your application uses
module.exports = absRequire(`typescript/lib/tsc.js`);

View File

@ -1,225 +0,0 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire} = require(`module`);
const {resolve} = require(`path`);
const relPnpApiPath = "../../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absRequire = createRequire(absPnpApiPath);
const moduleWrapper = tsserver => {
if (!process.versions.pnp) {
return tsserver;
}
const {isAbsolute} = require(`path`);
const pnpApi = require(`pnpapi`);
const isVirtual = str => str.match(/\/(\$\$virtual|__virtual__)\//);
const isPortal = str => str.startsWith("portal:/");
const normalize = str => str.replace(/\\/g, `/`).replace(/^\/?/, `/`);
const dependencyTreeRoots = new Set(pnpApi.getDependencyTreeRoots().map(locator => {
return `${locator.name}@${locator.reference}`;
}));
// VSCode sends the zip paths to TS using the "zip://" prefix, that TS
// doesn't understand. This layer makes sure to remove the protocol
// before forwarding it to TS, and to add it back on all returned paths.
function toEditorPath(str) {
// We add the `zip:` prefix to both `.zip/` paths and virtual paths
if (isAbsolute(str) && !str.match(/^\^?(zip:|\/zip\/)/) && (str.match(/\.zip\//) || isVirtual(str))) {
// We also take the opportunity to turn virtual paths into physical ones;
// this makes it much easier to work with workspaces that list peer
// dependencies, since otherwise Ctrl+Click would bring us to the virtual
// file instances instead of the real ones.
//
// We only do this to modules owned by the the dependency tree roots.
// This avoids breaking the resolution when jumping inside a vendor
// with peer dep (otherwise jumping into react-dom would show resolution
// errors on react).
//
const resolved = isVirtual(str) ? pnpApi.resolveVirtual(str) : str;
if (resolved) {
const locator = pnpApi.findPackageLocator(resolved);
if (locator && (dependencyTreeRoots.has(`${locator.name}@${locator.reference}`) || isPortal(locator.reference))) {
str = resolved;
}
}
str = normalize(str);
if (str.match(/\.zip\//)) {
switch (hostInfo) {
// Absolute VSCode `Uri.fsPath`s need to start with a slash.
// VSCode only adds it automatically for supported schemes,
// so we have to do it manually for the `zip` scheme.
// The path needs to start with a caret otherwise VSCode doesn't handle the protocol
//
// Ref: https://github.com/microsoft/vscode/issues/105014#issuecomment-686760910
//
// 2021-10-08: VSCode changed the format in 1.61.
// Before | ^zip:/c:/foo/bar.zip/package.json
// After | ^/zip//c:/foo/bar.zip/package.json
//
// 2022-04-06: VSCode changed the format in 1.66.
// Before | ^/zip//c:/foo/bar.zip/package.json
// After | ^/zip/c:/foo/bar.zip/package.json
//
// 2022-05-06: VSCode changed the format in 1.68
// Before | ^/zip/c:/foo/bar.zip/package.json
// After | ^/zip//c:/foo/bar.zip/package.json
//
case `vscode <1.61`: {
str = `^zip:${str}`;
} break;
case `vscode <1.66`: {
str = `^/zip/${str}`;
} break;
case `vscode <1.68`: {
str = `^/zip${str}`;
} break;
case `vscode`: {
str = `^/zip/${str}`;
} break;
// To make "go to definition" work,
// We have to resolve the actual file system path from virtual path
// and convert scheme to supported by [vim-rzip](https://github.com/lbrayner/vim-rzip)
case `coc-nvim`: {
str = normalize(resolved).replace(/\.zip\//, `.zip::`);
str = resolve(`zipfile:${str}`);
} break;
// Support neovim native LSP and [typescript-language-server](https://github.com/theia-ide/typescript-language-server)
// We have to resolve the actual file system path from virtual path,
// everything else is up to neovim
case `neovim`: {
str = normalize(resolved).replace(/\.zip\//, `.zip::`);
str = `zipfile://${str}`;
} break;
default: {
str = `zip:${str}`;
} break;
}
} else {
str = str.replace(/^\/?/, process.platform === `win32` ? `` : `/`);
}
}
return str;
}
function fromEditorPath(str) {
switch (hostInfo) {
case `coc-nvim`: {
str = str.replace(/\.zip::/, `.zip/`);
// The path for coc-nvim is in format of /<pwd>/zipfile:/<pwd>/.yarn/...
// So in order to convert it back, we use .* to match all the thing
// before `zipfile:`
return process.platform === `win32`
? str.replace(/^.*zipfile:\//, ``)
: str.replace(/^.*zipfile:/, ``);
} break;
case `neovim`: {
str = str.replace(/\.zip::/, `.zip/`);
// The path for neovim is in format of zipfile:///<pwd>/.yarn/...
return str.replace(/^zipfile:\/\//, ``);
} break;
case `vscode`:
default: {
return str.replace(/^\^?(zip:|\/zip(\/ts-nul-authority)?)\/+/, process.platform === `win32` ? `` : `/`)
} break;
}
}
// Force enable 'allowLocalPluginLoads'
// TypeScript tries to resolve plugins using a path relative to itself
// which doesn't work when using the global cache
// https://github.com/microsoft/TypeScript/blob/1b57a0395e0bff191581c9606aab92832001de62/src/server/project.ts#L2238
// VSCode doesn't want to enable 'allowLocalPluginLoads' due to security concerns but
// TypeScript already does local loads and if this code is running the user trusts the workspace
// https://github.com/microsoft/vscode/issues/45856
const ConfiguredProject = tsserver.server.ConfiguredProject;
const {enablePluginsWithOptions: originalEnablePluginsWithOptions} = ConfiguredProject.prototype;
ConfiguredProject.prototype.enablePluginsWithOptions = function() {
this.projectService.allowLocalPluginLoads = true;
return originalEnablePluginsWithOptions.apply(this, arguments);
};
// And here is the point where we hijack the VSCode <-> TS communications
// by adding ourselves in the middle. We locate everything that looks
// like an absolute path of ours and normalize it.
const Session = tsserver.server.Session;
const {onMessage: originalOnMessage, send: originalSend} = Session.prototype;
let hostInfo = `unknown`;
Object.assign(Session.prototype, {
onMessage(/** @type {string | object} */ message) {
const isStringMessage = typeof message === 'string';
const parsedMessage = isStringMessage ? JSON.parse(message) : message;
if (
parsedMessage != null &&
typeof parsedMessage === `object` &&
parsedMessage.arguments &&
typeof parsedMessage.arguments.hostInfo === `string`
) {
hostInfo = parsedMessage.arguments.hostInfo;
if (hostInfo === `vscode` && process.env.VSCODE_IPC_HOOK) {
const [, major, minor] = (process.env.VSCODE_IPC_HOOK.match(
// The RegExp from https://semver.org/ but without the caret at the start
/(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/
) ?? []).map(Number)
if (major === 1) {
if (minor < 61) {
hostInfo += ` <1.61`;
} else if (minor < 66) {
hostInfo += ` <1.66`;
} else if (minor < 68) {
hostInfo += ` <1.68`;
}
}
}
}
const processedMessageJSON = JSON.stringify(parsedMessage, (key, value) => {
return typeof value === 'string' ? fromEditorPath(value) : value;
});
return originalOnMessage.call(
this,
isStringMessage ? processedMessageJSON : JSON.parse(processedMessageJSON)
);
},
send(/** @type {any} */ msg) {
return originalSend.call(this, JSON.parse(JSON.stringify(msg, (key, value) => {
return typeof value === `string` ? toEditorPath(value) : value;
})));
}
});
return tsserver;
};
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require typescript/lib/tsserver.js
require(absPnpApiPath).setup();
}
}
// Defer to the real typescript/lib/tsserver.js your application uses
module.exports = moduleWrapper(absRequire(`typescript/lib/tsserver.js`));

View File

@ -1,225 +0,0 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire} = require(`module`);
const {resolve} = require(`path`);
const relPnpApiPath = "../../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absRequire = createRequire(absPnpApiPath);
const moduleWrapper = tsserver => {
if (!process.versions.pnp) {
return tsserver;
}
const {isAbsolute} = require(`path`);
const pnpApi = require(`pnpapi`);
const isVirtual = str => str.match(/\/(\$\$virtual|__virtual__)\//);
const isPortal = str => str.startsWith("portal:/");
const normalize = str => str.replace(/\\/g, `/`).replace(/^\/?/, `/`);
const dependencyTreeRoots = new Set(pnpApi.getDependencyTreeRoots().map(locator => {
return `${locator.name}@${locator.reference}`;
}));
// VSCode sends the zip paths to TS using the "zip://" prefix, that TS
// doesn't understand. This layer makes sure to remove the protocol
// before forwarding it to TS, and to add it back on all returned paths.
function toEditorPath(str) {
// We add the `zip:` prefix to both `.zip/` paths and virtual paths
if (isAbsolute(str) && !str.match(/^\^?(zip:|\/zip\/)/) && (str.match(/\.zip\//) || isVirtual(str))) {
// We also take the opportunity to turn virtual paths into physical ones;
// this makes it much easier to work with workspaces that list peer
// dependencies, since otherwise Ctrl+Click would bring us to the virtual
// file instances instead of the real ones.
//
// We only do this to modules owned by the the dependency tree roots.
// This avoids breaking the resolution when jumping inside a vendor
// with peer dep (otherwise jumping into react-dom would show resolution
// errors on react).
//
const resolved = isVirtual(str) ? pnpApi.resolveVirtual(str) : str;
if (resolved) {
const locator = pnpApi.findPackageLocator(resolved);
if (locator && (dependencyTreeRoots.has(`${locator.name}@${locator.reference}`) || isPortal(locator.reference))) {
str = resolved;
}
}
str = normalize(str);
if (str.match(/\.zip\//)) {
switch (hostInfo) {
// Absolute VSCode `Uri.fsPath`s need to start with a slash.
// VSCode only adds it automatically for supported schemes,
// so we have to do it manually for the `zip` scheme.
// The path needs to start with a caret otherwise VSCode doesn't handle the protocol
//
// Ref: https://github.com/microsoft/vscode/issues/105014#issuecomment-686760910
//
// 2021-10-08: VSCode changed the format in 1.61.
// Before | ^zip:/c:/foo/bar.zip/package.json
// After | ^/zip//c:/foo/bar.zip/package.json
//
// 2022-04-06: VSCode changed the format in 1.66.
// Before | ^/zip//c:/foo/bar.zip/package.json
// After | ^/zip/c:/foo/bar.zip/package.json
//
// 2022-05-06: VSCode changed the format in 1.68
// Before | ^/zip/c:/foo/bar.zip/package.json
// After | ^/zip//c:/foo/bar.zip/package.json
//
case `vscode <1.61`: {
str = `^zip:${str}`;
} break;
case `vscode <1.66`: {
str = `^/zip/${str}`;
} break;
case `vscode <1.68`: {
str = `^/zip${str}`;
} break;
case `vscode`: {
str = `^/zip/${str}`;
} break;
// To make "go to definition" work,
// We have to resolve the actual file system path from virtual path
// and convert scheme to supported by [vim-rzip](https://github.com/lbrayner/vim-rzip)
case `coc-nvim`: {
str = normalize(resolved).replace(/\.zip\//, `.zip::`);
str = resolve(`zipfile:${str}`);
} break;
// Support neovim native LSP and [typescript-language-server](https://github.com/theia-ide/typescript-language-server)
// We have to resolve the actual file system path from virtual path,
// everything else is up to neovim
case `neovim`: {
str = normalize(resolved).replace(/\.zip\//, `.zip::`);
str = `zipfile://${str}`;
} break;
default: {
str = `zip:${str}`;
} break;
}
} else {
str = str.replace(/^\/?/, process.platform === `win32` ? `` : `/`);
}
}
return str;
}
function fromEditorPath(str) {
switch (hostInfo) {
case `coc-nvim`: {
str = str.replace(/\.zip::/, `.zip/`);
// The path for coc-nvim is in format of /<pwd>/zipfile:/<pwd>/.yarn/...
// So in order to convert it back, we use .* to match all the thing
// before `zipfile:`
return process.platform === `win32`
? str.replace(/^.*zipfile:\//, ``)
: str.replace(/^.*zipfile:/, ``);
} break;
case `neovim`: {
str = str.replace(/\.zip::/, `.zip/`);
// The path for neovim is in format of zipfile:///<pwd>/.yarn/...
return str.replace(/^zipfile:\/\//, ``);
} break;
case `vscode`:
default: {
return str.replace(/^\^?(zip:|\/zip(\/ts-nul-authority)?)\/+/, process.platform === `win32` ? `` : `/`)
} break;
}
}
// Force enable 'allowLocalPluginLoads'
// TypeScript tries to resolve plugins using a path relative to itself
// which doesn't work when using the global cache
// https://github.com/microsoft/TypeScript/blob/1b57a0395e0bff191581c9606aab92832001de62/src/server/project.ts#L2238
// VSCode doesn't want to enable 'allowLocalPluginLoads' due to security concerns but
// TypeScript already does local loads and if this code is running the user trusts the workspace
// https://github.com/microsoft/vscode/issues/45856
const ConfiguredProject = tsserver.server.ConfiguredProject;
const {enablePluginsWithOptions: originalEnablePluginsWithOptions} = ConfiguredProject.prototype;
ConfiguredProject.prototype.enablePluginsWithOptions = function() {
this.projectService.allowLocalPluginLoads = true;
return originalEnablePluginsWithOptions.apply(this, arguments);
};
// And here is the point where we hijack the VSCode <-> TS communications
// by adding ourselves in the middle. We locate everything that looks
// like an absolute path of ours and normalize it.
const Session = tsserver.server.Session;
const {onMessage: originalOnMessage, send: originalSend} = Session.prototype;
let hostInfo = `unknown`;
Object.assign(Session.prototype, {
onMessage(/** @type {string | object} */ message) {
const isStringMessage = typeof message === 'string';
const parsedMessage = isStringMessage ? JSON.parse(message) : message;
if (
parsedMessage != null &&
typeof parsedMessage === `object` &&
parsedMessage.arguments &&
typeof parsedMessage.arguments.hostInfo === `string`
) {
hostInfo = parsedMessage.arguments.hostInfo;
if (hostInfo === `vscode` && process.env.VSCODE_IPC_HOOK) {
const [, major, minor] = (process.env.VSCODE_IPC_HOOK.match(
// The RegExp from https://semver.org/ but without the caret at the start
/(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/
) ?? []).map(Number)
if (major === 1) {
if (minor < 61) {
hostInfo += ` <1.61`;
} else if (minor < 66) {
hostInfo += ` <1.66`;
} else if (minor < 68) {
hostInfo += ` <1.68`;
}
}
}
}
const processedMessageJSON = JSON.stringify(parsedMessage, (key, value) => {
return typeof value === 'string' ? fromEditorPath(value) : value;
});
return originalOnMessage.call(
this,
isStringMessage ? processedMessageJSON : JSON.parse(processedMessageJSON)
);
},
send(/** @type {any} */ msg) {
return originalSend.call(this, JSON.parse(JSON.stringify(msg, (key, value) => {
return typeof value === `string` ? toEditorPath(value) : value;
})));
}
});
return tsserver;
};
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require typescript/lib/tsserverlibrary.js
require(absPnpApiPath).setup();
}
}
// Defer to the real typescript/lib/tsserverlibrary.js your application uses
module.exports = moduleWrapper(absRequire(`typescript/lib/tsserverlibrary.js`));

View File

@ -1,20 +0,0 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire} = require(`module`);
const {resolve} = require(`path`);
const relPnpApiPath = "../../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absRequire = createRequire(absPnpApiPath);
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require typescript
require(absPnpApiPath).setup();
}
}
// Defer to the real typescript your application uses
module.exports = absRequire(`typescript`);

View File

@ -1,10 +0,0 @@
{
"name": "typescript",
"version": "5.3.3-sdk",
"main": "./lib/typescript.js",
"type": "commonjs",
"bin": {
"tsc": "./bin/tsc",
"tsserver": "./bin/tsserver"
}
}

View File

@ -1 +1,2 @@
nodeLinker: node-modules
nodeLinker: node-modules
enableInlineHunks: true

View File

@ -1,2 +0,0 @@
%:
$(MAKE) -C infra/dev $*

View File

@ -2,10 +2,15 @@
"name": "twenty",
"version": "0.2.1",
"packageManager": "yarn@4.0.2",
"engines": {
"node": "^18.16.0",
"npm": "please-use-yarn",
"yarn": ">=4.0.2"
},
"license": "AGPL-3.0",
"workspaces": {
"packages": [
"packages/eslint-plugin-twenty",
"packages/twenty-eslint-plugin",
"packages/twenty-front",
"packages/twenty-docs",
"packages/twenty-server"
@ -14,5 +19,8 @@
"devDependencies": {
"nx": "17.2.0",
"typescript": "^5.3.3"
},
"dependencies": {
"patch-package": "^8.0.0"
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,33 @@
dev-build:
@docker compose -f dev/docker-compose.yml down
rm -rf ../twenty-front/node_modules
rm -rf ../twenty-server/node_modules
rm -rf ../twenty-docs/node_modules
@docker volume rm twenty_node_modules_front > /dev/null 2>&1 || true
@docker volume rm twenty_node_modules_server > /dev/null 2>&1 || true
@docker volume rm twenty_node_modules_docs > /dev/null 2>&1 || true
@docker compose -f dev/docker-compose.yml build
dev-up:
@docker compose -f dev/docker-compose.yml up -d
dev-down:
@docker compose -f dev/docker-compose.yml down -v
dev-sh:
@docker compose -f dev/docker-compose.yml exec twenty-dev sh
dev-front-start:
@docker compose -f dev/docker-compose.yml exec twenty-dev sh -c "cd /app/packages/twenty-front && yarn run start"
dev-server-start:
@docker compose -f dev/docker-compose.yml exec twenty-dev sh -c "yarn nx run twenty-server:start:dev"
dev-server-database-init:
@docker compose -f dev/docker-compose.yml exec twenty-dev sh -c "yarn nx run twenty-server:database:init"
dev-build-postgres:
@docker stop twenty_postgres || true
@docker rm twenty_postgres || true
@docker volume rm twenty_db_data || true
@docker compose up --build postgres -d

View File

@ -1,69 +0,0 @@
build:
@docker compose down
rm -rf ../../front/node_modules
rm -rf ../../server/node_modules
rm -rf ../../docs/node_modules
@docker volume rm twenty_node_modules_front > /dev/null 2>&1 || true
@docker volume rm twenty_node_modules_server > /dev/null 2>&1 || true
@docker volume rm twenty_node_modules_docs > /dev/null 2>&1 || true
@docker compose build
provision-postgres-docker:
@docker stop twenty_postgres || true
@docker rm twenty_postgres || true
@docker volume rm twenty_db_data || true
@docker compose up --build postgres -d
provision-postgres-macos-arm:
sh ./scripts/setup-postgres-macos-arm.sh
provision-postgres-macos-intel:
sh ./scripts/setup-postgres-macos-intel.sh
provision-postgres-linux:
sh ./scripts/setup-postgres-linux.sh
up:
@docker compose up -d
down:
@docker compose down -v
sh:
@docker compose exec twenty-dev sh
front-start:
@docker compose exec twenty-dev sh -c "cd ./front && yarn start"
front-lint:
@docker compose exec twenty-dev sh -c "cd ./front && yarn lint"
front-test:
@docker compose exec twenty-dev sh -c "cd ./front && yarn test"
front-coverage:
@docker compose exec twenty-dev sh -c "cd ./front && yarn coverage"
front-graphql-generate:
@docker compose exec twenty-dev sh -c "cd ./front && yarn graphql:generate"
front-storybook:
@docker compose exec twenty-dev sh -c "cd ./front && yarn storybook:dev"
server-start:
@docker compose exec twenty-dev sh -c "cd /app/server && yarn start:dev"
server-database-init:
@docker compose exec twenty-dev sh -c "cd /app/server && yarn database:init"
server-database-setup:
@docker compose exec twenty-dev sh -c "cd /app/server && yarn database:setup"
server-database-migrate:
@docker compose exec twenty-dev sh -c "cd /app/server && yarn database:migrate"
server-database-seed:
@docker compose exec twenty-dev sh -c "cd /app/server && yarn database:seed"
server-database-reset:
@docker compose exec twenty-dev sh -c "cd /app/server && yarn database:reset"

View File

@ -2,27 +2,33 @@ version: "3.9"
services:
twenty-dev:
build:
context: ../..
dockerfile: ./infra/dev/twenty-dev/Dockerfile
context: ../../..
dockerfile: ./packages/twenty-docker/dev/twenty-dev/Dockerfile
ports:
- "3000:3000"
- "3001:3001"
- "6006:6006"
volumes:
- ../..:/app
- /app/front/node_modules
- /app/server/node_modules
- ../../../packages/twenty-front:/app/packages/twenty-front
- ../../../packages/twenty-server:/app/packages/twenty-server
- ../../../packages/twenty-eslint-plugin:/app/packages/twenty-eslint-plugin
- twenty_dev_node_modules_root:/app/node_modules
- twenty_dev_node_modules_yarn:/app/.yarn
- twenty_dev_node_modules_front:/app/packages/twenty-front/node_modules
- twenty_dev_node_modules_server:/app/packages/twenty-server/node_modules
depends_on:
- postgres
twenty-docs:
build:
context: ../..
dockerfile: ./infra/dev/twenty-docs/Dockerfile
context: ../../..
dockerfile: ./packages/twenty-docker/dev/twenty-docs/Dockerfile
ports:
- "5001:5001"
volumes:
- ../../docs:/app/docs
- twenty_node_modules_docs:/app/docs/node_modules
- ../../../packages/twenty-docs:/app/packages/twenty-docs
- twenty_docs_node_modules_root:/app/node_modules
- twenty_docs_node_modules_yarn:/app/.yarn
- twenty_docs_node_modules_docs:/app/packages/twenty-docs/node_modules
postgres:
container_name: twenty_postgres
build: ./postgres
@ -37,6 +43,10 @@ services:
volumes:
twenty_db_data:
name: twenty_db_data
twenty_node_modules_front:
twenty_node_modules_server:
twenty_node_modules_docs:
twenty_dev_node_modules_root:
twenty_dev_node_modules_yarn:
twenty_dev_node_modules_front:
twenty_dev_node_modules_server:
twenty_docs_node_modules_root:
twenty_docs_node_modules_yarn:
twenty_docs_node_modules_docs:

View File

@ -1,21 +1,17 @@
FROM node:18.16-bullseye as twenty-dev
COPY /../../packages /app/packages
WORKDIR /app
COPY ../../../../package.json .
COPY ../../../../yarn.lock .
COPY ../../../../.yarnrc.yml .
COPY ../../../packages/twenty-front/package.json /app/packages/twenty-front/package.json
COPY ../../../packages/twenty-server/package.json /app/packages/twenty-server/package.json
COPY ../../../packages/twenty-eslint-plugin/package.json /app/packages/twenty-eslint-plugin/package.json
WORKDIR /app/front
RUN corepack enable
RUN yarn set version 4.0.2
RUN yarn
COPY ../../front/package.json .
COPY ../../front/yarn.lock .
RUN yarn install
RUN npx playwright install-deps
WORKDIR /app/server
COPY ../../server/package.json .
COPY ../../server/yarn.lock .
COPY ../../server/patches ./patches
RUN yarn install
WORKDIR /app
CMD ["tail", "-f", "/dev/null"]

View File

@ -1,11 +1,15 @@
FROM node:18.16-bullseye as docs
FROM node:18.16-bullseye as twenty-docs
WORKDIR /app/docs
WORKDIR /app
COPY ../../docs/package.json .
COPY ../../docs/yarn.lock .
COPY ../../../../package.json .
COPY ../../../../yarn.lock .
COPY ../../../../.yarnrc.yml .
COPY ../../../packages/twenty-docs/package.json /app/packages/twenty-docs/package.json
RUN yarn set version 4.0.2
RUN yarn
COPY ../../docs .
WORKDIR /app/packages/twenty-docs
CMD ["yarn", "start"]
CMD ["tail", "-f", "/dev/null"]

View File

@ -57,13 +57,13 @@ You need to set some environment variables before you can work on the project. L
```bash
cd twenty
cp ./front/.env.example ./front/.env
cp ./server/.env.example ./server/.env
cp ./packages/twenty-front/.env.example ./packages/twenty-front/.env
cp ./packages/twenty-server/.env.example ./packages/twenty-server/.env
```
The default values should work out of the box, except for the postgres URL, which requires a small modification.
Open `./server/.env` and change to the following:
Open `./packages/twenty-server/.env` and change to the following:
```bash
PG_DATABASE_URL=postgres://twenty:twenty@postgres:5432/default?connection_limit=1
@ -75,14 +75,9 @@ PG_DATABASE_URL=postgres://twenty:twenty@postgres:5432/default?connection_limit=
The project includes an environment containerized with Docker and orchestrated with `docker-compose`.
This installation method will also provision a PostgreSQL container.
:::info
The configuration for the build is in the `infra/dev` folder, but you can run `make` commands directly from the root folder.
:::
```bash
make build
make -C packages/twenty-docker dev-build
```
## Step 4: Migrate & seed
@ -91,12 +86,12 @@ Before running the project, you need to initialize the database by running the m
Start the containers:
```bash
make up
make -C packages/twenty-docker dev-up
```
Setup database, run migrations, and seed:
```bash
make server-database-init
make -C packages/twenty-docker dev-server-database-init
```
## Step 5: Start Twenty
@ -104,11 +99,11 @@ make server-database-init
Run the project with the following commands from the `root` folder:
```bash
make server-start
make -C packages/twenty-docker dev-server-start
```
```bash
make front-start
make -C packages/twenty-docker dev-front-start
```
You should now have:
@ -123,12 +118,11 @@ Sign in using a seeded demo account `tim@apple.dev` (password: `Applecar2025`) t
If you don't want to use the `make` command and work directly from the container, you can also ssh directly into the container:
```bash
make sh
make -C packages/twenty-docker dev-sh
```
Then run commands through yarn:
Then run commands through yarn and nx:
```bash
cd server
yarn database:init
yarn nx run twenty-server:database:init
```

View File

@ -33,10 +33,11 @@ Windows users can install the project through WSL2. [This guide](/contributor/lo
The repository has the following structure:
```
twenty
└───docs // contains this documentation
└───front // contains the frontend code for the application
└───server // contains the backend code for the application
└───infra // contains docker configurations for development and production deployments
└───packages // contains this documentation
└───twenty-front // contains the frontend code for the application
└───twenty-server // contains the backend code for the application
└───twenty-docker // contains docker configurations for development and production build
└───many other packages your are invited to discover such as twenty-docs, twenty-ui, twenty-eslint-plugin, twenty-zapier...
```
## IDE Setup

View File

@ -23,9 +23,14 @@ In this document, you'll learn how to install the project using yarn. You should
Before you can install and use Twenty, make sure you install the following on your computer:
- [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
- [Node v18](https://nodejs.org/en/download)
- [yarn v1](https://classic.yarnpkg.com/lang/en/docs/install/)
- [yarn v4](https://yarnpkg.com/getting-started/install).
- [nvm](https://github.com/nvm-sh/nvm/blob/master/README.md)
:::info Note
Yarn is now shipped with Node.js nowadays, so you don't need to install it separately.
You should only have to run `corepack enable` to enable Yarn if you haven't done it yet.
:::
</TabItem>
<TabItem value="wsl" label="Windows (WSL)" >
@ -53,7 +58,7 @@ git config --global user.email "youremail@domain.com"
```bash
sudo apt-get install curl
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
curl -o- -L https://yarnpkg.com/install.sh | bash
corepack enable
```
Close and reopen your terminal to start using nvm.
@ -94,8 +99,16 @@ git clone https://github.com/twentyhq/twenty.git
</TabItem>
</Tabs>
## Step 2: Place yourself at the root of the project
## Step 2: Set up PostgreSQL Database
```bash
cd twenty
```
All commands in the following steps should be run from the root of the project.
## Step 3: Set up PostgreSQL Database
You need to have a PostgreSQL instance available to be able to use Twenty.
You need to provision this database with a `twenty` user (password: `twenty`), a `default` database and a `test` database.
@ -105,7 +118,6 @@ You need to provision this database with a `twenty` user (password: `twenty`), a
<br /><br />
```bash
cd twenty
make provision-postgres-linux
```
@ -113,7 +125,6 @@ make provision-postgres-linux
<br /><br />
```bash
cd twenty
make provision-postgres-docker
```
This will create a Docker container, exposing a PostgresSQL instance at [http://localhost:5432](http://localhost:5432).
@ -125,7 +136,6 @@ You can access this using `twenty` postgres user (password: `twenty`)
<br /><br />
```bash
cd twenty
make provision-postgres-macos-intel #for intel architecture
make provision-postgres-macos-arm #for M1/M2/M3 architecture
```
@ -134,7 +144,6 @@ make provision-postgres-macos-arm #for M1/M2/M3 architecture
<br /><br />
```bash
cd twenty
make provision-postgres-docker
```
This will create a Docker container, exposing a PostgresSQL instance at [http://localhost:5432](http://localhost:5432).
@ -145,7 +154,6 @@ You can access this using `twenty` postgres user (password: `twenty`)
It's better to provision your database locally:
```bash
cd twenty
make provision-postgres-linux
```
This will create a Docker container, exposing a PostgresSQL instance at [http://localhost:5432](http://localhost:5432).
@ -160,57 +168,42 @@ Twenty requires you to set some environment variables. Locally, you should set t
To do so, make copies of the `.env.example` files in `/front` and `/server`:
```bash
cp ./front/.env.example ./front/.env
cp ./server/.env.example ./server/.env
cp ./packages/twenty-front/.env.example ./packages/twenty-front/.env
cp ./packages/twenty-server/.env.example ./packages/twenty-server/.env
```
## Step 4: Server setup
## Step 4: Installing dependencies
:::info
Use `nvm` to install the correct `node` version. The `server/.nvmrc` ensures all contributors use the same version.
Use `nvm` to install the correct `node` version. The `.nvmrc` ensures all contributors use the same version.
:::
To build Twenty server and seed some data into your database, run the following commands:
```bash
cd server
nvm install #recommended
nvm use #recommended
corepack enable #to enable yarn if you haven't done it yet
yarn set version stable #to set the yarn version to yarn version 4
yarn
yarn database:init
yarn start:dev
```
## Step 5: Running the project
Setup your database with the following command:
```bash
yarn nx run twenty-server:database:init
```
Start the server and the frontend:
```bash
yarn nx run twenty-server:database:init
yarn nx run twenty-server:start:dev
yarn nx run twenty-front:dev
```
Twenty's server will be up and running at [http://localhost:3000/graphql](http://localhost:3000/graphql).
## Step 5: Frontend setup
:::info
For the frontend setup, too, it's better to use `nvm` to install the right node version.
:::
To set up the frontend, run the following commands in another terminal:
```bash
cd front
nvm install #recommended
nvm use #recommended
yarn
yarn start
```
Twenty's frontend will be running at [http://localhost:3001](http://localhost:3001). Just login using the seeded demo account: `tim@apple.dev` to start using Twenty.
# Troubleshouting
## Error: Failed to execute init.sql script.
```bash
cp: ./infra/dev/postgres/init.sql: No such file or directory
psql: error: /tmp/init.sql: No such file or directory
```
If you get this error it means you are not launching the local database init script from the repo's root folder. Make sure you're in `twenty/` and not in `twenty/infra/dev/scripts`.

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
{
"name": "eslint-plugin-twenty",
"name": "twenty-eslint-plugin",
"version": "1.0.3",
"description": "",
"main": "dist/index.js",

View File

@ -4,12 +4,12 @@
"private": true,
"type": "module",
"scripts": {
"dev": "vite",
"dev:clean": "yarn dev --force",
"start": "vite --host",
"start:clean": "yarn start --force",
"build": "tsc && vite build && yarn build:inject-runtime-env",
"build:inject-runtime-env": "./scripts/inject-runtime-env.sh",
"preview": "vite preview",
"eslint-plugin:setup": "cd ../packages/eslint-plugin-twenty/ && yarn && yarn build && cd ../../front/ && yarn upgrade eslint-plugin-twenty",
"eslint-plugin:setup": "cd ../packages/twenty-eslint-plugin/ && yarn && yarn build && cd ../../front/ && yarn upgrade twenty-eslint-plugin",
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
"fmt:fix": "prettier --cache --write \"src/**/*.ts\" \"src/**/*.tsx\"",
"fmt": "prettier --check \"src/**/*.ts\" \"src/**/*.tsx\"",
@ -140,7 +140,6 @@
"eslint-plugin-react-refresh": "^0.4.4",
"eslint-plugin-simple-import-sort": "^10.0.0",
"eslint-plugin-storybook": "^0.6.15",
"eslint-plugin-twenty": "file:../eslint-plugin-twenty",
"eslint-plugin-unused-imports": "^3.0.0",
"http-server": "^14.1.1",
"jest": "29.7.0",
@ -151,13 +150,15 @@
"storybook": "^7.6.3",
"storybook-addon-cookie": "^3.1.0",
"storybook-addon-pseudo-states": "^2.1.2",
"twenty-eslint-plugin": "file:../twenty-eslint-plugin",
"typescript": "^5.2.2",
"vite": "^5.0.0",
"vite-plugin-svgr": "^4.2.0"
},
"engines": {
"node": "^18.16.0",
"npm": "please-use-yarn"
"npm": "please-use-yarn",
"yarn": "^4.0.2"
},
"browserslist": {
"production": [

View File

@ -0,0 +1,8 @@
provision-postgres-macos-arm:
sh ./scripts/setup-postgres-macos-arm.sh
provision-postgres-macos-intel:
sh ./scripts/setup-postgres-macos-intel.sh
provision-postgres-linux:
sh ./scripts/setup-postgres-linux.sh

1
packages/twenty-server/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
dist/*

View File

@ -1 +0,0 @@
18.16.0

View File

@ -6,7 +6,6 @@
"private": true,
"license": "UNLICENSED",
"scripts": {
"postinstall": "patch-package",
"prebuild": "rimraf dist",
"build": "nest build",
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
@ -37,12 +36,12 @@
"@aws-sdk/credential-providers": "^3.363.0",
"@google-cloud/local-auth": "2.1.0",
"@graphql-tools/schema": "^10.0.0",
"@graphql-yoga/nestjs": "2.1.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/common": "^9.0.0",
"@nestjs/config": "^2.3.2",
"@nestjs/core": "^9.0.0",
"@nestjs/graphql": "12.0.8",
"@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",
@ -50,7 +49,7 @@
"@nestjs/terminus": "^9.2.2",
"@nestjs/typeorm": "^10.0.0",
"@ptc-org/nestjs-query-core": "^4.2.0",
"@ptc-org/nestjs-query-graphql": "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",
@ -65,7 +64,7 @@
"bullmq": "^4.14.0",
"bytes": "^3.1.2",
"class-transformer": "^0.5.1",
"class-validator": "^0.14.0",
"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",
@ -93,10 +92,8 @@
"passport-google-oauth20": "^2.0.0",
"passport-jwt": "^4.0.1",
"passport-local": "^1.0.0",
"patch-package": "^8.0.0",
"pg": "^8.11.3",
"pg-boss": "^9.0.3",
"postinstall-postinstall": "^2.1.0",
"rimraf": "^3.0.2",
"rxjs": "^7.2.0",
"sharp": "^0.32.1",
@ -147,5 +144,10 @@
},
"resolutions": {
"graphql": "16.8.0"
},
"engines": {
"node": "^18.16.0",
"npm": "please-use-yarn",
"yarn": "^4.0.2"
}
}

View File

@ -1,7 +1,7 @@
diff --git a/node_modules/@graphql-yoga/nestjs/dist/cjs/index.js b/node_modules/@graphql-yoga/nestjs/dist/cjs/index.js
diff --git a/dist/cjs/index.js b/dist/cjs/index.js
index 1684394..8a92c3c 100644
--- a/node_modules/@graphql-yoga/nestjs/dist/cjs/index.js
+++ b/node_modules/@graphql-yoga/nestjs/dist/cjs/index.js
--- a/dist/cjs/index.js
+++ b/dist/cjs/index.js
@@ -5,6 +5,7 @@ const tslib_1 = require("tslib");
const graphql_1 = require("graphql");
const graphql_yoga_1 = require("graphql-yoga");
@ -69,10 +69,10 @@ index 1684394..8a92c3c 100644
graphqlEndpoint: options.path,
// disable logging by default
// however, if `true` use fastify logger
diff --git a/node_modules/@graphql-yoga/nestjs/dist/esm/index.js b/node_modules/@graphql-yoga/nestjs/dist/esm/index.js
diff --git a/dist/esm/index.js b/dist/esm/index.js
index 7068c51..8ba5d2a 100644
--- a/node_modules/@graphql-yoga/nestjs/dist/esm/index.js
+++ b/node_modules/@graphql-yoga/nestjs/dist/esm/index.js
--- a/dist/esm/index.js
+++ b/dist/esm/index.js
@@ -2,6 +2,7 @@ import { __decorate } from "tslib";
import { printSchema } from 'graphql';
import { createYoga, filter, pipe } from 'graphql-yoga';
@ -140,10 +140,10 @@ index 7068c51..8ba5d2a 100644
graphqlEndpoint: options.path,
// disable logging by default
// however, if `true` use fastify logger
diff --git a/node_modules/@graphql-yoga/nestjs/dist/typings/index.d.cts b/node_modules/@graphql-yoga/nestjs/dist/typings/index.d.cts
diff --git a/dist/typings/index.d.cts b/dist/typings/index.d.cts
index 2c6a965..fd86dac 100644
--- a/node_modules/@graphql-yoga/nestjs/dist/typings/index.d.cts
+++ b/node_modules/@graphql-yoga/nestjs/dist/typings/index.d.cts
--- a/dist/typings/index.d.cts
+++ b/dist/typings/index.d.cts
@@ -1,7 +1,8 @@
import type { Express, Request as ExpressRequest, Response as ExpressResponse } from 'express';
import type { FastifyInstance, FastifyReply, FastifyRequest } from 'fastify';
@ -178,10 +178,10 @@ index 2c6a965..fd86dac 100644
preStartHook?: (app: FastifyInstance) => void;
}): void;
subscriptionWithFilter<TPayload, TVariables, TContext>(instanceRef: unknown, filterFn: (payload: TPayload, variables: TVariables, context: TContext) => boolean | Promise<boolean>, createSubscribeContext: Function): (args_0: TPayload, args_1: TVariables, args_2: TContext) => Promise<import("graphql-yoga").Repeater<TPayload, void, unknown>>;
diff --git a/node_modules/@graphql-yoga/nestjs/dist/typings/index.d.ts b/node_modules/@graphql-yoga/nestjs/dist/typings/index.d.ts
diff --git a/dist/typings/index.d.ts b/dist/typings/index.d.ts
index 2c6a965..fd86dac 100644
--- a/node_modules/@graphql-yoga/nestjs/dist/typings/index.d.ts
+++ b/node_modules/@graphql-yoga/nestjs/dist/typings/index.d.ts
--- a/dist/typings/index.d.ts
+++ b/dist/typings/index.d.ts
@@ -1,7 +1,8 @@
import type { Express, Request as ExpressRequest, Response as ExpressResponse } from 'express';
import type { FastifyInstance, FastifyReply, FastifyRequest } from 'fastify';
@ -216,10 +216,10 @@ index 2c6a965..fd86dac 100644
preStartHook?: (app: FastifyInstance) => void;
}): void;
subscriptionWithFilter<TPayload, TVariables, TContext>(instanceRef: unknown, filterFn: (payload: TPayload, variables: TVariables, context: TContext) => boolean | Promise<boolean>, createSubscribeContext: Function): (args_0: TPayload, args_1: TVariables, args_2: TContext) => Promise<import("graphql-yoga").Repeater<TPayload, void, unknown>>;
diff --git a/node_modules/@graphql-yoga/nestjs/src/index.ts b/node_modules/@graphql-yoga/nestjs/src/index.ts
diff --git a/src/index.ts b/src/index.ts
index ce142f6..cda4117 100644
--- a/node_modules/@graphql-yoga/nestjs/src/index.ts
+++ b/node_modules/@graphql-yoga/nestjs/src/index.ts
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,9 +1,10 @@
import type { Express, Request as ExpressRequest, Response as ExpressResponse } from 'express';
import type { FastifyInstance, FastifyReply, FastifyRequest } from 'fastify';

View File

@ -1,7 +1,7 @@
diff --git a/node_modules/@nestjs/graphql/dist/schema-builder/graphql-schema.factory.js b/node_modules/@nestjs/graphql/dist/schema-builder/graphql-schema.factory.js
diff --git a/dist/schema-builder/graphql-schema.factory.js b/dist/schema-builder/graphql-schema.factory.js
index 787bcbc..1c825bd 100644
--- a/node_modules/@nestjs/graphql/dist/schema-builder/graphql-schema.factory.js
+++ b/node_modules/@nestjs/graphql/dist/schema-builder/graphql-schema.factory.js
--- a/dist/schema-builder/graphql-schema.factory.js
+++ b/dist/schema-builder/graphql-schema.factory.js
@@ -32,6 +32,7 @@ let GraphQLSchemaFactory = exports.GraphQLSchemaFactory = GraphQLSchemaFactory_1
else {
options = scalarsOrOptions;
@ -10,10 +10,10 @@ index 787bcbc..1c825bd 100644
lazy_metadata_storage_1.LazyMetadataStorage.load(resolvers);
type_metadata_storage_1.TypeMetadataStorage.compile(options.orphanedTypes);
this.typeDefinitionsGenerator.generate(options);
diff --git a/node_modules/@nestjs/graphql/dist/schema-builder/storages/type-definitions.storage.js b/node_modules/@nestjs/graphql/dist/schema-builder/storages/type-definitions.storage.js
diff --git a/dist/schema-builder/storages/type-definitions.storage.js b/dist/schema-builder/storages/type-definitions.storage.js
index d100444..158c592 100644
--- a/node_modules/@nestjs/graphql/dist/schema-builder/storages/type-definitions.storage.js
+++ b/node_modules/@nestjs/graphql/dist/schema-builder/storages/type-definitions.storage.js
--- a/dist/schema-builder/storages/type-definitions.storage.js
+++ b/dist/schema-builder/storages/type-definitions.storage.js
@@ -81,6 +81,10 @@ let TypeDefinitionsStorage = exports.TypeDefinitionsStorage = class TypeDefiniti
}
return;
@ -25,10 +25,10 @@ index d100444..158c592 100644
};
exports.TypeDefinitionsStorage = TypeDefinitionsStorage = tslib_1.__decorate([
(0, common_1.Injectable)()
diff --git a/node_modules/@nestjs/graphql/dist/schema-builder/type-definitions.generator.js b/node_modules/@nestjs/graphql/dist/schema-builder/type-definitions.generator.js
diff --git a/dist/schema-builder/type-definitions.generator.js b/dist/schema-builder/type-definitions.generator.js
index eb6bcfd..4fbc1ae 100644
--- a/node_modules/@nestjs/graphql/dist/schema-builder/type-definitions.generator.js
+++ b/node_modules/@nestjs/graphql/dist/schema-builder/type-definitions.generator.js
--- a/dist/schema-builder/type-definitions.generator.js
+++ b/dist/schema-builder/type-definitions.generator.js
@@ -26,6 +26,9 @@ let TypeDefinitionsGenerator = exports.TypeDefinitionsGenerator = class TypeDefi
this.generateObjectTypeDefs(options);
this.generateInputTypeDefs(options);

View File

@ -1,7 +1,7 @@
diff --git a/node_modules/@ptc-org/nestjs-query-graphql/src/types/connection/cursor/page-info.type.js b/node_modules/@ptc-org/nestjs-query-graphql/src/types/connection/cursor/page-info.type.js
diff --git a/src/types/connection/cursor/page-info.type.js b/src/types/connection/cursor/page-info.type.js
index 00d836d..8eef442 100644
--- a/node_modules/@ptc-org/nestjs-query-graphql/src/types/connection/cursor/page-info.type.js
+++ b/node_modules/@ptc-org/nestjs-query-graphql/src/types/connection/cursor/page-info.type.js
--- a/src/types/connection/cursor/page-info.type.js
+++ b/src/types/connection/cursor/page-info.type.js
@@ -39,7 +39,6 @@ const getOrCreatePageInfoType = () => {
tslib_1.__metadata("design:type", String)
], PageInfoTypeImpl.prototype, "endCursor", void 0);
@ -10,10 +10,10 @@ index 00d836d..8eef442 100644
(0, graphql_1.ObjectType)('PageInfo'),
tslib_1.__metadata("design:paramtypes", [Boolean, Boolean, String, String])
], PageInfoTypeImpl);
diff --git a/node_modules/@ptc-org/nestjs-query-graphql/src/types/connection/offset/offset-connection.type.js b/node_modules/@ptc-org/nestjs-query-graphql/src/types/connection/offset/offset-connection.type.js
diff --git a/src/types/connection/offset/offset-connection.type.js b/src/types/connection/offset/offset-connection.type.js
index b47564f..d33f391 100644
--- a/node_modules/@ptc-org/nestjs-query-graphql/src/types/connection/offset/offset-connection.type.js
+++ b/node_modules/@ptc-org/nestjs-query-graphql/src/types/connection/offset/offset-connection.type.js
--- a/src/types/connection/offset/offset-connection.type.js
+++ b/src/types/connection/offset/offset-connection.type.js
@@ -64,7 +64,6 @@ function getOrCreateOffsetConnectionType(TItemClass, opts) {
tslib_1.__metadata("design:paramtypes", [])
], AbstractConnection.prototype, "totalCount", null);
@ -22,10 +22,10 @@ index b47564f..d33f391 100644
(0, graphql_1.ObjectType)(connectionName),
tslib_1.__metadata("design:paramtypes", [Object, Array, Function])
], AbstractConnection);
diff --git a/node_modules/@ptc-org/nestjs-query-graphql/src/types/connection/offset/offset-page-info.type.js b/node_modules/@ptc-org/nestjs-query-graphql/src/types/connection/offset/offset-page-info.type.js
diff --git a/src/types/connection/offset/offset-page-info.type.js b/src/types/connection/offset/offset-page-info.type.js
index 4803306..d459b16 100644
--- a/node_modules/@ptc-org/nestjs-query-graphql/src/types/connection/offset/offset-page-info.type.js
+++ b/node_modules/@ptc-org/nestjs-query-graphql/src/types/connection/offset/offset-page-info.type.js
--- a/src/types/connection/offset/offset-page-info.type.js
+++ b/src/types/connection/offset/offset-page-info.type.js
@@ -25,7 +25,6 @@ const getOrCreateOffsetPageInfoType = () => {
tslib_1.__metadata("design:type", Boolean)
], PageInfoTypeImpl.prototype, "hasPreviousPage", void 0);
@ -34,10 +34,10 @@ index 4803306..d459b16 100644
(0, graphql_1.ObjectType)('OffsetPageInfo'),
tslib_1.__metadata("design:paramtypes", [Boolean, Boolean])
], PageInfoTypeImpl);
diff --git a/node_modules/@ptc-org/nestjs-query-graphql/src/types/delete-many-reponse.type.js b/node_modules/@ptc-org/nestjs-query-graphql/src/types/delete-many-reponse.type.js
diff --git a/src/types/delete-many-reponse.type.js b/src/types/delete-many-reponse.type.js
index 4de72de..b42f05f 100644
--- a/node_modules/@ptc-org/nestjs-query-graphql/src/types/delete-many-reponse.type.js
+++ b/node_modules/@ptc-org/nestjs-query-graphql/src/types/delete-many-reponse.type.js
--- a/src/types/delete-many-reponse.type.js
+++ b/src/types/delete-many-reponse.type.js
@@ -16,7 +16,6 @@ const DeleteManyResponseType = () => {
tslib_1.__metadata("design:type", Number)
], DeleteManyResponseTypeImpl.prototype, "deletedCount", void 0);
@ -46,10 +46,10 @@ index 4de72de..b42f05f 100644
(0, graphql_1.ObjectType)('DeleteManyResponse')
], DeleteManyResponseTypeImpl);
deleteManyResponseType = DeleteManyResponseTypeImpl;
diff --git a/node_modules/@ptc-org/nestjs-query-graphql/src/types/update-many-response.type.js b/node_modules/@ptc-org/nestjs-query-graphql/src/types/update-many-response.type.js
diff --git a/src/types/update-many-response.type.js b/src/types/update-many-response.type.js
index c525d14..74be84f 100644
--- a/node_modules/@ptc-org/nestjs-query-graphql/src/types/update-many-response.type.js
+++ b/node_modules/@ptc-org/nestjs-query-graphql/src/types/update-many-response.type.js
--- a/src/types/update-many-response.type.js
+++ b/src/types/update-many-response.type.js
@@ -16,7 +16,6 @@ const UpdateManyResponseType = () => {
tslib_1.__metadata("design:type", Number)
], UpdateManyResponseTypeImpl.prototype, "updatedCount", void 0);

File diff suppressed because one or more lines are too long

View File

@ -31,7 +31,6 @@ export class IsFieldMetadataDefaultValue
if (!type) {
// Extract id value from the instance, should happen only when updating
// @ts-expect-error Todo: Fix typing error
const id: string | undefined = args.instance?.['id'];
if (!id) {

View File

@ -25,7 +25,6 @@ export class IsFieldMetadataOptions {
if (!type) {
// Extract id value from the instance, should happen only when updating
// @ts-expect-error Todo: Fix typing error
const id: string | undefined = args.instance?.['id'];
if (!id) {

178
yarn.lock
View File

@ -5718,6 +5718,19 @@ __metadata:
languageName: node
linkType: hard
"@graphql-yoga/nestjs@patch:@graphql-yoga/nestjs@2.1.0#./patches/@graphql-yoga+nestjs+2.1.0.patch::locator=twenty-server%40workspace%3Apackages%2Ftwenty-server":
version: 2.1.0
resolution: "@graphql-yoga/nestjs@patch:@graphql-yoga/nestjs@npm%3A2.1.0#./patches/@graphql-yoga+nestjs+2.1.0.patch::version=2.1.0&hash=25fc63&locator=twenty-server%40workspace%3Apackages%2Ftwenty-server"
peerDependencies:
"@nestjs/common": ^10.0.0
"@nestjs/core": ^10.0.0
"@nestjs/graphql": ^12.0.0
graphql: ^15.0.0 || ^16.0.0
graphql-yoga: ^4.0.4
checksum: 333501a04f79ef158cd92e240abecf1056ea12e8f63345758d6f79bbd88d923846fac44940765ae48a1b05d108107e3ba1539eea1092802c5bdf74bf166ea16a
languageName: node
linkType: hard
"@graphql-yoga/subscription@npm:^4.0.0":
version: 4.0.0
resolution: "@graphql-yoga/subscription@npm:4.0.0"
@ -6902,6 +6915,46 @@ __metadata:
languageName: node
linkType: hard
"@nestjs/graphql@patch:@nestjs/graphql@12.0.8#./patches/@nestjs+graphql+12.0.8.patch::locator=twenty-server%40workspace%3Apackages%2Ftwenty-server":
version: 12.0.8
resolution: "@nestjs/graphql@patch:@nestjs/graphql@npm%3A12.0.8#./patches/@nestjs+graphql+12.0.8.patch::version=12.0.8&hash=daa690&locator=twenty-server%40workspace%3Apackages%2Ftwenty-server"
dependencies:
"@graphql-tools/merge": "npm:9.0.0"
"@graphql-tools/schema": "npm:10.0.0"
"@graphql-tools/utils": "npm:10.0.1"
"@nestjs/mapped-types": "npm:2.0.2"
chokidar: "npm:3.5.3"
fast-glob: "npm:3.2.12"
graphql-tag: "npm:2.12.6"
graphql-ws: "npm:5.14.0"
lodash: "npm:4.17.21"
normalize-path: "npm:3.0.0"
subscriptions-transport-ws: "npm:0.11.0"
tslib: "npm:2.6.0"
uuid: "npm:9.0.0"
ws: "npm:8.13.0"
peerDependencies:
"@apollo/subgraph": ^2.0.0
"@nestjs/common": ^9.3.8 || ^10.0.0
"@nestjs/core": ^9.3.8 || ^10.0.0
class-transformer: "*"
class-validator: "*"
graphql: ^16.6.0
reflect-metadata: ^0.1.13
ts-morph: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
peerDependenciesMeta:
"@apollo/subgraph":
optional: true
class-transformer:
optional: true
class-validator:
optional: true
ts-morph:
optional: true
checksum: e53b804e87e65c78e0e231a7033e135a8346d44ee110a8e2f270b026bd47fda41525b598a301b5ca84537b3c8e37fa92462be353e611751a5b433aadb1f6f290
languageName: node
linkType: hard
"@nestjs/jwt@npm:^10.0.3":
version: 10.2.0
resolution: "@nestjs/jwt@npm:10.2.0"
@ -7615,6 +7668,34 @@ __metadata:
languageName: node
linkType: hard
"@ptc-org/nestjs-query-graphql@patch:@ptc-org/nestjs-query-graphql@4.2.0#./patches/@ptc-org+nestjs-query-graphql+4.2.0.patch::locator=twenty-server%40workspace%3Apackages%2Ftwenty-server":
version: 4.2.0
resolution: "@ptc-org/nestjs-query-graphql@patch:@ptc-org/nestjs-query-graphql@npm%3A4.2.0#./patches/@ptc-org+nestjs-query-graphql+4.2.0.patch::version=4.2.0&hash=2d5c00&locator=twenty-server%40workspace%3Apackages%2Ftwenty-server"
dependencies:
"@ptc-org/nestjs-query-core": "npm:4.2.0"
dataloader: "npm:^2.2.2"
graphql-fields: "npm:^2.0.3"
lodash.merge: "npm:4.6.2"
lodash.omit: "npm:^4.5.0"
lower-case-first: "npm:^2.0.2"
pluralize: "npm:^8.0.0"
reflect-metadata: "npm:0.1.13"
tslib: "npm:^2.6.2"
upper-case-first: "npm:^2.0.2"
peerDependencies:
"@apollo/gateway": ^0.44.1 || ^0.46.0 || ^0.48.0 || ^0.49.0 || ^0.50.0 || ^2.0.0
"@nestjs/common": ^9.0.0 || ^10.0.0
"@nestjs/core": ^9.0.0 || ^10.0.0
"@nestjs/graphql": ^11.0.0 || ^12.0.0
class-transformer: ^0.5
class-validator: ^0.14.0
graphql: ^16.0.0
graphql-subscriptions: ^2.0.0
ts-morph: ^19.0.0
checksum: e22941524df13a20a67176aac42d27f6ac7860c72a4189eca91846d493f3da63b7d3ea71f2979bfb38de5e159fc6ac70d898fce20ef443e235f3b9202073441a
languageName: node
linkType: hard
"@ptc-org/nestjs-query-typeorm@npm:4.2.1-alpha.2":
version: 4.2.1-alpha.2
resolution: "@ptc-org/nestjs-query-typeorm@npm:4.2.1-alpha.2"
@ -16106,6 +16187,17 @@ __metadata:
languageName: node
linkType: hard
"class-validator@patch:class-validator@^0.14.0#./patches/class-validator+0.14.0.patch::locator=twenty-server%40workspace%3Apackages%2Ftwenty-server":
version: 0.14.0
resolution: "class-validator@patch:class-validator@npm%3A0.14.0#./patches/class-validator+0.14.0.patch::version=0.14.0&hash=053904&locator=twenty-server%40workspace%3Apackages%2Ftwenty-server"
dependencies:
"@types/validator": "npm:^13.7.10"
libphonenumber-js: "npm:^1.10.14"
validator: "npm:^13.7.0"
checksum: d996aa04abefb737f07ec3f389f74c7ee6f3ec7f0ab13a8244f1bdc777cef827f3b2297789b4814b24440cf8fa936f5af0beee21f84b9ae413c7568b4c8e7407
languageName: node
linkType: hard
"classnames@npm:^2.2.6, classnames@npm:^2.3.0, classnames@npm:^2.3.1":
version: 2.3.2
resolution: "classnames@npm:2.3.2"
@ -18863,39 +18955,6 @@ __metadata:
languageName: node
linkType: hard
"eslint-plugin-twenty@file:../eslint-plugin-twenty::locator=twenty-front%40workspace%3Apackages%2Ftwenty-front":
version: 1.0.3
resolution: "eslint-plugin-twenty@file:../eslint-plugin-twenty#../eslint-plugin-twenty::hash=105f90&locator=twenty-front%40workspace%3Apackages%2Ftwenty-front"
checksum: 63f3201afa92b79c2d5db2a3aed1a1c5897793ef9e845f4a2f4ae9126007fece2fd6795d840b3f776e8da70fface644215d3640bf2ca22d3e145e36119ccf7bd
languageName: node
linkType: hard
"eslint-plugin-twenty@workspace:packages/eslint-plugin-twenty":
version: 0.0.0-use.local
resolution: "eslint-plugin-twenty@workspace:packages/eslint-plugin-twenty"
dependencies:
"@types/jest": "npm:^29.5.4"
"@typescript-eslint/eslint-plugin": "npm:^6.7.0"
"@typescript-eslint/parser": "npm:^6.7.0"
"@typescript-eslint/rule-tester": "npm:^6.7.0"
"@typescript-eslint/utils": "npm:^6.7.0"
eslint: "npm:^8.49.0"
eslint-config-prettier: "npm:^9.0.0"
eslint-config-standard-with-typescript: "npm:^39.0.0"
eslint-plugin-import: "npm:^2.28.1"
eslint-plugin-prefer-arrow: "npm:^1.2.3"
eslint-plugin-prettier: "npm:^5.0.0"
eslint-plugin-simple-import-sort: "npm:^10.0.0"
eslint-plugin-unused-imports: "npm:^3.0.0"
jest: "npm:^28.1.3"
postcss: "npm:^8.4.29"
prettier: "npm:^3.0.3"
ts-jest: "npm:^29.1.1"
ts-node: "npm:^10.9.1"
typescript: "npm:^5.2.2"
languageName: unknown
linkType: soft
"eslint-plugin-unused-imports@npm:^3.0.0":
version: 3.0.0
resolution: "eslint-plugin-unused-imports@npm:3.0.0"
@ -29159,13 +29218,6 @@ __metadata:
languageName: node
linkType: hard
"postinstall-postinstall@npm:^2.1.0":
version: 2.1.0
resolution: "postinstall-postinstall@npm:2.1.0"
checksum: 70488447292c712afa7806126824d6fe93362392cbe261ae60166d9119a350713e0dbf4deb2ca91637c1037bc030ed1de78d61d9041bf2504513070f1caacdfd
languageName: node
linkType: hard
"prebuild-install@npm:^7.1.1":
version: 7.1.1
resolution: "prebuild-install@npm:7.1.1"
@ -33863,6 +33915,39 @@ __metadata:
languageName: unknown
linkType: soft
"twenty-eslint-plugin@file:../twenty-eslint-plugin::locator=twenty-front%40workspace%3Apackages%2Ftwenty-front":
version: 1.0.3
resolution: "twenty-eslint-plugin@file:../twenty-eslint-plugin#../twenty-eslint-plugin::hash=e1455f&locator=twenty-front%40workspace%3Apackages%2Ftwenty-front"
checksum: 95746bedcf1aa2e5937c75501e4a6d9bcecbfd208e60c6688727fde46ce2ce74824ff5d688b4be5061163487f96d6f4d4c37381e9f36fbc4929273eb04852b54
languageName: node
linkType: hard
"twenty-eslint-plugin@workspace:packages/twenty-eslint-plugin":
version: 0.0.0-use.local
resolution: "twenty-eslint-plugin@workspace:packages/twenty-eslint-plugin"
dependencies:
"@types/jest": "npm:^29.5.4"
"@typescript-eslint/eslint-plugin": "npm:^6.7.0"
"@typescript-eslint/parser": "npm:^6.7.0"
"@typescript-eslint/rule-tester": "npm:^6.7.0"
"@typescript-eslint/utils": "npm:^6.7.0"
eslint: "npm:^8.49.0"
eslint-config-prettier: "npm:^9.0.0"
eslint-config-standard-with-typescript: "npm:^39.0.0"
eslint-plugin-import: "npm:^2.28.1"
eslint-plugin-prefer-arrow: "npm:^1.2.3"
eslint-plugin-prettier: "npm:^5.0.0"
eslint-plugin-simple-import-sort: "npm:^10.0.0"
eslint-plugin-unused-imports: "npm:^3.0.0"
jest: "npm:^28.1.3"
postcss: "npm:^8.4.29"
prettier: "npm:^3.0.3"
ts-jest: "npm:^29.1.1"
ts-node: "npm:^10.9.1"
typescript: "npm:^5.2.2"
languageName: unknown
linkType: soft
"twenty-front@workspace:packages/twenty-front":
version: 0.0.0-use.local
resolution: "twenty-front@workspace:packages/twenty-front"
@ -33936,7 +34021,6 @@ __metadata:
eslint-plugin-react-refresh: "npm:^0.4.4"
eslint-plugin-simple-import-sort: "npm:^10.0.0"
eslint-plugin-storybook: "npm:^0.6.15"
eslint-plugin-twenty: "file:../eslint-plugin-twenty"
eslint-plugin-unused-imports: "npm:^3.0.0"
framer-motion: "npm:^10.12.17"
graphql: "npm:^16.6.0"
@ -33978,6 +34062,7 @@ __metadata:
storybook-addon-cookie: "npm:^3.1.0"
storybook-addon-pseudo-states: "npm:^2.1.2"
ts-key-enum: "npm:^2.0.12"
twenty-eslint-plugin: "file:../twenty-eslint-plugin"
type-fest: "npm:^4.1.0"
typescript: "npm:^5.2.2"
uuid: "npm:^9.0.0"
@ -33998,13 +34083,13 @@ __metadata:
"@aws-sdk/credential-providers": "npm:^3.363.0"
"@google-cloud/local-auth": "npm:2.1.0"
"@graphql-tools/schema": "npm:^10.0.0"
"@graphql-yoga/nestjs": "npm:2.1.0"
"@graphql-yoga/nestjs": "patch:@graphql-yoga/nestjs@2.1.0#./patches/@graphql-yoga+nestjs+2.1.0.patch"
"@nestjs/apollo": "npm:^11.0.5"
"@nestjs/cli": "npm:^9.0.0"
"@nestjs/common": "npm:^9.0.0"
"@nestjs/config": "npm:^2.3.2"
"@nestjs/core": "npm:^9.0.0"
"@nestjs/graphql": "npm:12.0.8"
"@nestjs/graphql": "patch:@nestjs/graphql@12.0.8#./patches/@nestjs+graphql+12.0.8.patch"
"@nestjs/jwt": "npm:^10.0.3"
"@nestjs/passport": "npm:^9.0.3"
"@nestjs/platform-express": "npm:^9.0.0"
@ -34014,7 +34099,7 @@ __metadata:
"@nestjs/testing": "npm:^9.0.0"
"@nestjs/typeorm": "npm:^10.0.0"
"@ptc-org/nestjs-query-core": "npm:^4.2.0"
"@ptc-org/nestjs-query-graphql": "npm: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": "npm:4.2.1-alpha.2"
"@sentry/node": "npm:^7.66.0"
"@sentry/profiling-node": "npm:^1.2.6"
@ -34050,7 +34135,7 @@ __metadata:
bullmq: "npm:^4.14.0"
bytes: "npm:^3.1.2"
class-transformer: "npm:^0.5.1"
class-validator: "npm:^0.14.0"
class-validator: "patch:class-validator@^0.14.0#./patches/class-validator+0.14.0.patch"
dataloader: "npm:^2.2.2"
date-fns: "npm:^2.30.0"
eslint: "npm:^8.0.1"
@ -34084,10 +34169,8 @@ __metadata:
passport-google-oauth20: "npm:^2.0.0"
passport-jwt: "npm:^4.0.1"
passport-local: "npm:^1.0.0"
patch-package: "npm:^8.0.0"
pg: "npm:^8.11.3"
pg-boss: "npm:^9.0.3"
postinstall-postinstall: "npm:^2.1.0"
prettier: "npm:^2.3.2"
rimraf: "npm:^3.0.2"
rxjs: "npm:^7.2.0"
@ -34111,6 +34194,7 @@ __metadata:
resolution: "twenty@workspace:."
dependencies:
nx: "npm:17.2.0"
patch-package: "npm:^8.0.0"
typescript: "npm:^5.3.3"
languageName: unknown
linkType: soft