diff --git a/package.json b/package.json index 4c59e19fcf..169c820ddd 100644 --- a/package.json +++ b/package.json @@ -164,7 +164,7 @@ "cross-var": "^1.1.0", "danger": "^11.3.0", "dotenv-cli": "^7.2.1", - "esbuild": "^0.23.0", + "esbuild": "^0.25.10", "eslint": "^9.32.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.31.0", diff --git a/packages/twenty-cli/src/services/api.service.ts b/packages/twenty-cli/src/services/api.service.ts index 4ebd3ca6e9..bdebcac950 100644 --- a/packages/twenty-cli/src/services/api.service.ts +++ b/packages/twenty-cli/src/services/api.service.ts @@ -55,11 +55,9 @@ export class ApiService { async validateAuth(): Promise { try { const query = ` - query FindManyAgents { - findManyAgents { - id - name - } + query CurrentWorkspace { + currentWorkspace { + id } `; diff --git a/packages/twenty-server/package.json b/packages/twenty-server/package.json index 1da94dbda5..1782cd41bb 100644 --- a/packages/twenty-server/package.json +++ b/packages/twenty-server/package.json @@ -182,7 +182,6 @@ "tslib": "2.8.1", "type-fest": "4.10.1", "typeorm": "patch:typeorm@0.3.20#./patches/typeorm+0.3.20.patch", - "typescript": "5.9.2", "unzipper": "^0.12.3", "uuid": "9.0.1", "vite-tsconfig-paths": "4.3.2", @@ -232,8 +231,7 @@ "@yarnpkg/types": "^4.0.0", "rimraf": "^5.0.5", "twenty-emails": "workspace:*", - "twenty-shared": "workspace:*", - "typescript": "5.9.2" + "twenty-shared": "workspace:*" }, "engines": { "node": "^24.5.0", diff --git a/packages/twenty-server/src/engine/core-modules/serverless/drivers/constants/build-file-name.ts b/packages/twenty-server/src/engine/core-modules/serverless/drivers/constants/build-file-name.ts deleted file mode 100644 index 6f60d90543..0000000000 --- a/packages/twenty-server/src/engine/core-modules/serverless/drivers/constants/build-file-name.ts +++ /dev/null @@ -1 +0,0 @@ -export const BUILD_FILE_NAME = 'build.js'; diff --git a/packages/twenty-server/src/engine/core-modules/serverless/drivers/constants/env-file-name.ts b/packages/twenty-server/src/engine/core-modules/serverless/drivers/constants/env-file-name.ts deleted file mode 100644 index 4b409ce327..0000000000 --- a/packages/twenty-server/src/engine/core-modules/serverless/drivers/constants/env-file-name.ts +++ /dev/null @@ -1 +0,0 @@ -export const ENV_FILE_NAME = '.env'; diff --git a/packages/twenty-server/src/engine/core-modules/serverless/drivers/constants/index-file-name.ts b/packages/twenty-server/src/engine/core-modules/serverless/drivers/constants/index-file-name.ts deleted file mode 100644 index d32b30a492..0000000000 --- a/packages/twenty-server/src/engine/core-modules/serverless/drivers/constants/index-file-name.ts +++ /dev/null @@ -1 +0,0 @@ -export const INDEX_FILE_NAME = 'index.ts'; diff --git a/packages/twenty-server/src/engine/core-modules/serverless/drivers/constants/outdir-folder.ts b/packages/twenty-server/src/engine/core-modules/serverless/drivers/constants/outdir-folder.ts deleted file mode 100644 index fed2d5ea33..0000000000 --- a/packages/twenty-server/src/engine/core-modules/serverless/drivers/constants/outdir-folder.ts +++ /dev/null @@ -1 +0,0 @@ -export const OUTDIR_FOLDER = 'dist'; diff --git a/packages/twenty-server/src/engine/core-modules/serverless/drivers/interfaces/serverless-driver.interface.ts b/packages/twenty-server/src/engine/core-modules/serverless/drivers/interfaces/serverless-driver.interface.ts index b26f19372e..a961ea1741 100644 --- a/packages/twenty-server/src/engine/core-modules/serverless/drivers/interfaces/serverless-driver.interface.ts +++ b/packages/twenty-server/src/engine/core-modules/serverless/drivers/interfaces/serverless-driver.interface.ts @@ -4,7 +4,7 @@ import { type ServerlessFunctionExecutionStatus } from 'src/engine/metadata-modu export type ServerlessExecuteError = { errorType: string; errorMessage: string; - stackTrace: string; + stackTrace: string | string[]; }; export type ServerlessExecuteResult = { diff --git a/packages/twenty-server/src/engine/core-modules/serverless/drivers/lambda.driver.ts b/packages/twenty-server/src/engine/core-modules/serverless/drivers/lambda.driver.ts index f008e57ecb..c9b0aa92c8 100644 --- a/packages/twenty-server/src/engine/core-modules/serverless/drivers/lambda.driver.ts +++ b/packages/twenty-server/src/engine/core-modules/serverless/drivers/lambda.driver.ts @@ -20,7 +20,6 @@ import { } from '@aws-sdk/client-lambda'; import { AssumeRoleCommand, STSClient } from '@aws-sdk/client-sts'; import { isDefined } from 'twenty-shared/utils'; -import ts, { transpileModule } from 'typescript'; import { type ServerlessDriver, @@ -28,9 +27,7 @@ import { } from 'src/engine/core-modules/serverless/drivers/interfaces/serverless-driver.interface'; import { type FileStorageService } from 'src/engine/core-modules/file-storage/file-storage.service'; -import { readFileContent } from 'src/engine/core-modules/file-storage/utils/read-file-content'; import { COMMON_LAYER_NAME } from 'src/engine/core-modules/serverless/drivers/constants/common-layer-name'; -import { INDEX_FILE_NAME } from 'src/engine/core-modules/serverless/drivers/constants/index-file-name'; import { copyAndBuildDependencies } from 'src/engine/core-modules/serverless/drivers/utils/copy-and-build-dependencies'; import { copyExecutor } from 'src/engine/core-modules/serverless/drivers/utils/copy-executor'; import { createZipFile } from 'src/engine/core-modules/serverless/drivers/utils/create-zip-file'; @@ -48,6 +45,8 @@ import { ServerlessFunctionException, ServerlessFunctionExceptionCode, } from 'src/engine/metadata-modules/serverless-function/serverless-function.exception'; +import { buildServerlessFunctionInMemory } from 'src/engine/core-modules/serverless/drivers/utils/build-serverless-function-in-memory'; +import { formatBuildError } from 'src/engine/core-modules/serverless/drivers/utils/format-build-error'; const UPDATE_FUNCTION_DURATION_TIMEOUT_IN_SECONDS = 60; const CREDENTIALS_DURATION_IN_SECONDS = 60 * 60; // 1h @@ -318,68 +317,80 @@ export class LambdaDriver implements ServerlessDriver { version, }); - const tsCodeStream = await this.fileStorageService.read({ - folderPath: join(folderPath, 'src'), - filename: INDEX_FILE_NAME, - }); - - const tsCode = await readFileContent(tsCodeStream); - - const compiledCode = transpileModule(tsCode, { - compilerOptions: { - module: ts.ModuleKind.ESNext, - target: ts.ScriptTarget.ES2017, - }, - }).outputText; - - const executorPayload = { - params: payload, - code: compiledCode, - }; - - const params: InvokeCommandInput = { - FunctionName: serverlessFunction.id, - Payload: JSON.stringify(executorPayload), - LogType: LogType.Tail, - }; - - const command = new InvokeCommand(params); + const lambdaBuildDirectoryManager = new LambdaBuildDirectoryManager(); try { - const result = await (await this.getLambdaClient()).send(command); + const { sourceTemporaryDir } = await lambdaBuildDirectoryManager.init(); - const parsedResult = result.Payload - ? JSON.parse(result.Payload.transformToString()) - : {}; + await this.fileStorageService.download({ + from: { folderPath }, + to: { folderPath: sourceTemporaryDir }, + }); - const logs = result.LogResult ? this.extractLogs(result.LogResult) : ''; + let builtBundleFilePath = ''; - const duration = Date.now() - startTime; - - if (result.FunctionError) { - return { - data: null, - duration, - status: ServerlessFunctionExecutionStatus.ERROR, - error: parsedResult, - logs, - }; + try { + builtBundleFilePath = + await buildServerlessFunctionInMemory(sourceTemporaryDir); + } catch (error) { + return formatBuildError(error, startTime); } - return { - data: parsedResult, - logs, - duration, - status: ServerlessFunctionExecutionStatus.SUCCESS, + const compiledCode = (await fs.readFile(builtBundleFilePath)).toString( + 'utf-8', + ); + + const executorPayload = { + params: payload, + code: compiledCode, }; - } catch (error) { - if (error instanceof ResourceNotFoundException) { - throw new ServerlessFunctionException( - `Function Version '${version}' does not exist`, - ServerlessFunctionExceptionCode.SERVERLESS_FUNCTION_NOT_FOUND, - ); + + const params: InvokeCommandInput = { + FunctionName: serverlessFunction.id, + Payload: JSON.stringify(executorPayload), + LogType: LogType.Tail, + }; + + const command = new InvokeCommand(params); + + try { + const result = await (await this.getLambdaClient()).send(command); + + const parsedResult = result.Payload + ? JSON.parse(result.Payload.transformToString()) + : {}; + + const logs = result.LogResult ? this.extractLogs(result.LogResult) : ''; + + const duration = Date.now() - startTime; + + if (result.FunctionError) { + return { + data: null, + duration, + status: ServerlessFunctionExecutionStatus.ERROR, + error: parsedResult, + logs, + }; + } + + return { + data: parsedResult, + logs, + duration, + status: ServerlessFunctionExecutionStatus.SUCCESS, + }; + } catch (error) { + if (error instanceof ResourceNotFoundException) { + throw new ServerlessFunctionException( + `Function Version '${version}' does not exist`, + ServerlessFunctionExceptionCode.SERVERLESS_FUNCTION_NOT_FOUND, + ); + } + throw error; } - throw error; + } finally { + await lambdaBuildDirectoryManager.clean(); } } } diff --git a/packages/twenty-server/src/engine/core-modules/serverless/drivers/local.driver.ts b/packages/twenty-server/src/engine/core-modules/serverless/drivers/local.driver.ts index d053e1349a..c50aa8145b 100644 --- a/packages/twenty-server/src/engine/core-modules/serverless/drivers/local.driver.ts +++ b/packages/twenty-server/src/engine/core-modules/serverless/drivers/local.driver.ts @@ -1,8 +1,6 @@ import { promises as fs } from 'fs'; import { join } from 'path'; -import ts, { transpileModule } from 'typescript'; -import { v4 } from 'uuid'; import { isDefined } from 'twenty-shared/utils'; import { @@ -11,15 +9,16 @@ import { } from 'src/engine/core-modules/serverless/drivers/interfaces/serverless-driver.interface'; import { type FileStorageService } from 'src/engine/core-modules/file-storage/file-storage.service'; -import { readFileContent } from 'src/engine/core-modules/file-storage/utils/read-file-content'; import { COMMON_LAYER_NAME } from 'src/engine/core-modules/serverless/drivers/constants/common-layer-name'; -import { INDEX_FILE_NAME } from 'src/engine/core-modules/serverless/drivers/constants/index-file-name'; import { SERVERLESS_TMPDIR_FOLDER } from 'src/engine/core-modules/serverless/drivers/constants/serverless-tmpdir-folder'; import { copyAndBuildDependencies } from 'src/engine/core-modules/serverless/drivers/utils/copy-and-build-dependencies'; import { ConsoleListener } from 'src/engine/core-modules/serverless/drivers/utils/intercept-console'; import { getServerlessFolder } from 'src/engine/core-modules/serverless/utils/serverless-get-folder.utils'; import { ServerlessFunctionExecutionStatus } from 'src/engine/metadata-modules/serverless-function/dtos/serverless-function-execution-result.dto'; import { type ServerlessFunctionEntity } from 'src/engine/metadata-modules/serverless-function/serverless-function.entity'; +import { LambdaBuildDirectoryManager } from 'src/engine/core-modules/serverless/drivers/utils/lambda-build-directory-manager'; +import { buildServerlessFunctionInMemory } from 'src/engine/core-modules/serverless/drivers/utils/build-serverless-function-in-memory'; +import { formatBuildError } from 'src/engine/core-modules/serverless/drivers/utils/format-build-error'; export interface LocalDriverOptions { fileStorageService: FileStorageService; @@ -106,111 +105,106 @@ export class LocalDriver implements ServerlessDriver { version, }); - const tsCodeStream = await this.fileStorageService.read({ - folderPath: join(folderPath, 'src'), - filename: INDEX_FILE_NAME, - }); - - const tsCode = await readFileContent(tsCodeStream); - - const compiledCode = transpileModule(tsCode, { - compilerOptions: { - module: ts.ModuleKind.CommonJS, - target: ts.ScriptTarget.ES2017, - }, - }).outputText; - - const compiledCodeFolderPath = join( - SERVERLESS_TMPDIR_FOLDER, - `compiled-code-${v4()}`, - ); - - const compiledCodeFilePath = join(compiledCodeFolderPath, 'main.js'); - - await fs.mkdir(compiledCodeFolderPath, { recursive: true }); - - await fs.writeFile(compiledCodeFilePath, compiledCode, 'utf8'); + const lambdaBuildDirectoryManager = new LambdaBuildDirectoryManager(); try { - await fs.symlink( - join( - this.getInMemoryLayerFolderPath(serverlessFunction), - 'node_modules', - ), - join(compiledCodeFolderPath, 'node_modules'), - 'dir', - ); - } catch (err) { - if (err.code !== 'EEXIST') { - throw err; - } - } + const { sourceTemporaryDir } = await lambdaBuildDirectoryManager.init(); - let logs = ''; - - const consoleListener = new ConsoleListener(); - - consoleListener.intercept((type, args) => { - const formattedArgs = args.map((arg) => { - if (typeof arg === 'object' && arg !== null) { - const seen = new WeakSet(); - - return JSON.stringify( - arg, - (_key, value) => { - if (typeof value === 'object' && value !== null) { - if (seen.has(value)) { - return '[Circular]'; // Handle circular references - } - seen.add(value); - } - - return value; - }, - 2, - ); - } - - return arg; + await this.fileStorageService.download({ + from: { folderPath }, + to: { folderPath: sourceTemporaryDir }, }); - const formattedType = type === 'log' ? 'info' : type; + let builtBundleFilePath = ''; - logs += `${new Date().toISOString()} ${formattedType.toUpperCase()} ${formattedArgs.join(' ')}\n`; - }); + try { + builtBundleFilePath = + await buildServerlessFunctionInMemory(sourceTemporaryDir); + } catch (error) { + return formatBuildError(error, startTime); + } - try { - const mainFile = await import(compiledCodeFilePath); + try { + await fs.symlink( + join( + this.getInMemoryLayerFolderPath(serverlessFunction), + 'node_modules', + ), + join(sourceTemporaryDir, 'node_modules'), + 'dir', + ); + } catch (err) { + if (err.code !== 'EEXIST') { + throw err; + } + } - const result = await this.executeWithTimeout( - () => mainFile.main(payload), - serverlessFunction.timeoutSeconds * 1_000, - ); + let logs = ''; - const duration = Date.now() - startTime; + const consoleListener = new ConsoleListener(); - return { - data: result, - logs, - duration, - status: ServerlessFunctionExecutionStatus.SUCCESS, - }; - } catch (error) { - return { - data: null, - logs, - duration: Date.now() - startTime, - error: { - errorType: 'UnhandledError', - errorMessage: error.message || 'Unknown error', - stackTrace: error.stack ? error.stack.split('\n') : [], - }, - status: ServerlessFunctionExecutionStatus.ERROR, - }; + consoleListener.intercept((type, args) => { + const formattedArgs = args.map((arg) => { + if (typeof arg === 'object' && arg !== null) { + const seen = new WeakSet(); + + return JSON.stringify( + arg, + (_key, value) => { + if (typeof value === 'object' && value !== null) { + if (seen.has(value)) { + return '[Circular]'; // Handle circular references + } + seen.add(value); + } + + return value; + }, + 2, + ); + } + + return arg; + }); + + const formattedType = type === 'log' ? 'info' : type; + + logs += `${new Date().toISOString()} ${formattedType.toUpperCase()} ${formattedArgs.join(' ')}\n`; + }); + + try { + const mainFile = await import(builtBundleFilePath); + + const result = await this.executeWithTimeout( + () => mainFile.main(payload), + serverlessFunction.timeoutSeconds * 1_000, + ); + + const duration = Date.now() - startTime; + + return { + data: result, + logs, + duration, + status: ServerlessFunctionExecutionStatus.SUCCESS, + }; + } catch (error) { + return { + data: null, + logs, + duration: Date.now() - startTime, + error: { + errorType: 'UnhandledError', + errorMessage: error.message || 'Unknown error', + stackTrace: error.stack ? error.stack.split('\n') : [], + }, + status: ServerlessFunctionExecutionStatus.ERROR, + }; + } finally { + consoleListener.release(); + } } finally { - // Restoring originalConsole - consoleListener.release(); - await fs.rm(compiledCodeFolderPath, { recursive: true, force: true }); + await lambdaBuildDirectoryManager.clean(); } } } diff --git a/packages/twenty-server/src/engine/core-modules/serverless/drivers/utils/build-serverless-function-in-memory.ts b/packages/twenty-server/src/engine/core-modules/serverless/drivers/utils/build-serverless-function-in-memory.ts new file mode 100644 index 0000000000..4adb0d2037 --- /dev/null +++ b/packages/twenty-server/src/engine/core-modules/serverless/drivers/utils/build-serverless-function-in-memory.ts @@ -0,0 +1,24 @@ +import { join } from 'path'; + +import { build } from 'esbuild'; + +export const buildServerlessFunctionInMemory = async ( + sourceTemporaryDir: string, +) => { + const entryFilePath = join(sourceTemporaryDir, 'src', 'index.ts'); + + const builtBundleFilePath = join(sourceTemporaryDir, 'dist', 'main.mjs'); + + await build({ + entryPoints: [entryFilePath], + outfile: builtBundleFilePath, + platform: 'node', + format: 'esm', + target: 'es2017', + bundle: true, + sourcemap: true, + packages: 'external', + }); + + return builtBundleFilePath; +}; diff --git a/packages/twenty-server/src/engine/core-modules/serverless/drivers/utils/format-build-error.ts b/packages/twenty-server/src/engine/core-modules/serverless/drivers/utils/format-build-error.ts new file mode 100644 index 0000000000..301b7e8719 --- /dev/null +++ b/packages/twenty-server/src/engine/core-modules/serverless/drivers/utils/format-build-error.ts @@ -0,0 +1,20 @@ +import { type BuildFailure } from 'esbuild'; + +import { type ServerlessExecuteResult } from 'src/engine/core-modules/serverless/drivers/interfaces/serverless-driver.interface'; + +import { ServerlessFunctionExecutionStatus } from 'src/engine/metadata-modules/serverless-function/dtos/serverless-function-execution-result.dto'; + +export const formatBuildError = ( + error: BuildFailure, + startTime: number, +): ServerlessExecuteResult => ({ + data: null, + logs: '', + duration: Date.now() - startTime, + error: { + errorType: 'BuildError', + errorMessage: error.errors.map((e) => e.text).join('\n') || 'Unknown error', + stackTrace: error.stack ? error.stack.split('\n') : [], + }, + status: ServerlessFunctionExecutionStatus.ERROR, +}); diff --git a/packages/twenty-server/src/engine/core-modules/serverless/drivers/utils/lambda-build-directory-manager.ts b/packages/twenty-server/src/engine/core-modules/serverless/drivers/utils/lambda-build-directory-manager.ts index 4ec30f7f4f..8227fb9d5f 100644 --- a/packages/twenty-server/src/engine/core-modules/serverless/drivers/utils/lambda-build-directory-manager.ts +++ b/packages/twenty-server/src/engine/core-modules/serverless/drivers/utils/lambda-build-directory-manager.ts @@ -8,7 +8,6 @@ import { SERVERLESS_TMPDIR_FOLDER } from 'src/engine/core-modules/serverless/dri export const NODE_LAYER_SUBFOLDER = 'nodejs'; const TEMPORARY_LAMBDA_FOLDER = 'lambda-build'; -const TEMPORARY_LAMBDA_SOURCE_FOLDER = 'src'; const LAMBDA_ZIP_FILE_NAME = 'lambda.zip'; export class LambdaBuildDirectoryManager { @@ -18,10 +17,7 @@ export class LambdaBuildDirectoryManager { ); async init() { - const sourceTemporaryDir = join( - this.temporaryDir, - TEMPORARY_LAMBDA_SOURCE_FOLDER, - ); + const sourceTemporaryDir = join(this.temporaryDir); const lambdaZipPath = join(this.temporaryDir, LAMBDA_ZIP_FILE_NAME); await fs.mkdir(sourceTemporaryDir, { recursive: true }); diff --git a/yarn.lock b/yarn.lock index 918aca1d01..4a333406dc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4471,16 +4471,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/aix-ppc64@npm:0.23.0": - version: 0.23.0 - resolution: "@esbuild/aix-ppc64@npm:0.23.0" +"@esbuild/aix-ppc64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/aix-ppc64@npm:0.25.0" conditions: os=aix & cpu=ppc64 languageName: node linkType: hard -"@esbuild/aix-ppc64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/aix-ppc64@npm:0.25.0" +"@esbuild/aix-ppc64@npm:0.25.10": + version: 0.25.10 + resolution: "@esbuild/aix-ppc64@npm:0.25.10" conditions: os=aix & cpu=ppc64 languageName: node linkType: hard @@ -4520,16 +4520,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.23.0": - version: 0.23.0 - resolution: "@esbuild/android-arm64@npm:0.23.0" +"@esbuild/android-arm64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/android-arm64@npm:0.25.0" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/android-arm64@npm:0.25.0" +"@esbuild/android-arm64@npm:0.25.10": + version: 0.25.10 + resolution: "@esbuild/android-arm64@npm:0.25.10" conditions: os=android & cpu=arm64 languageName: node linkType: hard @@ -4569,16 +4569,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm@npm:0.23.0": - version: 0.23.0 - resolution: "@esbuild/android-arm@npm:0.23.0" +"@esbuild/android-arm@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/android-arm@npm:0.25.0" conditions: os=android & cpu=arm languageName: node linkType: hard -"@esbuild/android-arm@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/android-arm@npm:0.25.0" +"@esbuild/android-arm@npm:0.25.10": + version: 0.25.10 + resolution: "@esbuild/android-arm@npm:0.25.10" conditions: os=android & cpu=arm languageName: node linkType: hard @@ -4618,16 +4618,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-x64@npm:0.23.0": - version: 0.23.0 - resolution: "@esbuild/android-x64@npm:0.23.0" +"@esbuild/android-x64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/android-x64@npm:0.25.0" conditions: os=android & cpu=x64 languageName: node linkType: hard -"@esbuild/android-x64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/android-x64@npm:0.25.0" +"@esbuild/android-x64@npm:0.25.10": + version: 0.25.10 + resolution: "@esbuild/android-x64@npm:0.25.10" conditions: os=android & cpu=x64 languageName: node linkType: hard @@ -4667,16 +4667,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.23.0": - version: 0.23.0 - resolution: "@esbuild/darwin-arm64@npm:0.23.0" +"@esbuild/darwin-arm64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/darwin-arm64@npm:0.25.0" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/darwin-arm64@npm:0.25.0" +"@esbuild/darwin-arm64@npm:0.25.10": + version: 0.25.10 + resolution: "@esbuild/darwin-arm64@npm:0.25.10" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard @@ -4716,16 +4716,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.23.0": - version: 0.23.0 - resolution: "@esbuild/darwin-x64@npm:0.23.0" +"@esbuild/darwin-x64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/darwin-x64@npm:0.25.0" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/darwin-x64@npm:0.25.0" +"@esbuild/darwin-x64@npm:0.25.10": + version: 0.25.10 + resolution: "@esbuild/darwin-x64@npm:0.25.10" conditions: os=darwin & cpu=x64 languageName: node linkType: hard @@ -4765,16 +4765,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.23.0": - version: 0.23.0 - resolution: "@esbuild/freebsd-arm64@npm:0.23.0" +"@esbuild/freebsd-arm64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/freebsd-arm64@npm:0.25.0" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/freebsd-arm64@npm:0.25.0" +"@esbuild/freebsd-arm64@npm:0.25.10": + version: 0.25.10 + resolution: "@esbuild/freebsd-arm64@npm:0.25.10" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard @@ -4814,16 +4814,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.23.0": - version: 0.23.0 - resolution: "@esbuild/freebsd-x64@npm:0.23.0" +"@esbuild/freebsd-x64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/freebsd-x64@npm:0.25.0" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/freebsd-x64@npm:0.25.0" +"@esbuild/freebsd-x64@npm:0.25.10": + version: 0.25.10 + resolution: "@esbuild/freebsd-x64@npm:0.25.10" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard @@ -4863,16 +4863,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.23.0": - version: 0.23.0 - resolution: "@esbuild/linux-arm64@npm:0.23.0" +"@esbuild/linux-arm64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/linux-arm64@npm:0.25.0" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-arm64@npm:0.25.0" +"@esbuild/linux-arm64@npm:0.25.10": + version: 0.25.10 + resolution: "@esbuild/linux-arm64@npm:0.25.10" conditions: os=linux & cpu=arm64 languageName: node linkType: hard @@ -4912,16 +4912,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.23.0": - version: 0.23.0 - resolution: "@esbuild/linux-arm@npm:0.23.0" +"@esbuild/linux-arm@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/linux-arm@npm:0.25.0" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-arm@npm:0.25.0" +"@esbuild/linux-arm@npm:0.25.10": + version: 0.25.10 + resolution: "@esbuild/linux-arm@npm:0.25.10" conditions: os=linux & cpu=arm languageName: node linkType: hard @@ -4961,16 +4961,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.23.0": - version: 0.23.0 - resolution: "@esbuild/linux-ia32@npm:0.23.0" +"@esbuild/linux-ia32@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/linux-ia32@npm:0.25.0" conditions: os=linux & cpu=ia32 languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-ia32@npm:0.25.0" +"@esbuild/linux-ia32@npm:0.25.10": + version: 0.25.10 + resolution: "@esbuild/linux-ia32@npm:0.25.10" conditions: os=linux & cpu=ia32 languageName: node linkType: hard @@ -5010,16 +5010,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.23.0": - version: 0.23.0 - resolution: "@esbuild/linux-loong64@npm:0.23.0" +"@esbuild/linux-loong64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/linux-loong64@npm:0.25.0" conditions: os=linux & cpu=loong64 languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-loong64@npm:0.25.0" +"@esbuild/linux-loong64@npm:0.25.10": + version: 0.25.10 + resolution: "@esbuild/linux-loong64@npm:0.25.10" conditions: os=linux & cpu=loong64 languageName: node linkType: hard @@ -5059,16 +5059,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.23.0": - version: 0.23.0 - resolution: "@esbuild/linux-mips64el@npm:0.23.0" +"@esbuild/linux-mips64el@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/linux-mips64el@npm:0.25.0" conditions: os=linux & cpu=mips64el languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-mips64el@npm:0.25.0" +"@esbuild/linux-mips64el@npm:0.25.10": + version: 0.25.10 + resolution: "@esbuild/linux-mips64el@npm:0.25.10" conditions: os=linux & cpu=mips64el languageName: node linkType: hard @@ -5108,16 +5108,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.23.0": - version: 0.23.0 - resolution: "@esbuild/linux-ppc64@npm:0.23.0" +"@esbuild/linux-ppc64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/linux-ppc64@npm:0.25.0" conditions: os=linux & cpu=ppc64 languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-ppc64@npm:0.25.0" +"@esbuild/linux-ppc64@npm:0.25.10": + version: 0.25.10 + resolution: "@esbuild/linux-ppc64@npm:0.25.10" conditions: os=linux & cpu=ppc64 languageName: node linkType: hard @@ -5157,16 +5157,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.23.0": - version: 0.23.0 - resolution: "@esbuild/linux-riscv64@npm:0.23.0" +"@esbuild/linux-riscv64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/linux-riscv64@npm:0.25.0" conditions: os=linux & cpu=riscv64 languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-riscv64@npm:0.25.0" +"@esbuild/linux-riscv64@npm:0.25.10": + version: 0.25.10 + resolution: "@esbuild/linux-riscv64@npm:0.25.10" conditions: os=linux & cpu=riscv64 languageName: node linkType: hard @@ -5206,16 +5206,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.23.0": - version: 0.23.0 - resolution: "@esbuild/linux-s390x@npm:0.23.0" +"@esbuild/linux-s390x@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/linux-s390x@npm:0.25.0" conditions: os=linux & cpu=s390x languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-s390x@npm:0.25.0" +"@esbuild/linux-s390x@npm:0.25.10": + version: 0.25.10 + resolution: "@esbuild/linux-s390x@npm:0.25.10" conditions: os=linux & cpu=s390x languageName: node linkType: hard @@ -5255,16 +5255,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.23.0": - version: 0.23.0 - resolution: "@esbuild/linux-x64@npm:0.23.0" +"@esbuild/linux-x64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/linux-x64@npm:0.25.0" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-x64@npm:0.25.0" +"@esbuild/linux-x64@npm:0.25.10": + version: 0.25.10 + resolution: "@esbuild/linux-x64@npm:0.25.10" conditions: os=linux & cpu=x64 languageName: node linkType: hard @@ -5290,6 +5290,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/netbsd-arm64@npm:0.25.10": + version: 0.25.10 + resolution: "@esbuild/netbsd-arm64@npm:0.25.10" + conditions: os=netbsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/netbsd-arm64@npm:0.25.5": version: 0.25.5 resolution: "@esbuild/netbsd-arm64@npm:0.25.5" @@ -5325,16 +5332,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.23.0": - version: 0.23.0 - resolution: "@esbuild/netbsd-x64@npm:0.23.0" +"@esbuild/netbsd-x64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/netbsd-x64@npm:0.25.0" conditions: os=netbsd & cpu=x64 languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/netbsd-x64@npm:0.25.0" +"@esbuild/netbsd-x64@npm:0.25.10": + version: 0.25.10 + resolution: "@esbuild/netbsd-x64@npm:0.25.10" conditions: os=netbsd & cpu=x64 languageName: node linkType: hard @@ -5353,16 +5360,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/openbsd-arm64@npm:0.23.0": - version: 0.23.0 - resolution: "@esbuild/openbsd-arm64@npm:0.23.0" +"@esbuild/openbsd-arm64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/openbsd-arm64@npm:0.25.0" conditions: os=openbsd & cpu=arm64 languageName: node linkType: hard -"@esbuild/openbsd-arm64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/openbsd-arm64@npm:0.25.0" +"@esbuild/openbsd-arm64@npm:0.25.10": + version: 0.25.10 + resolution: "@esbuild/openbsd-arm64@npm:0.25.10" conditions: os=openbsd & cpu=arm64 languageName: node linkType: hard @@ -5402,16 +5409,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.23.0": - version: 0.23.0 - resolution: "@esbuild/openbsd-x64@npm:0.23.0" +"@esbuild/openbsd-x64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/openbsd-x64@npm:0.25.0" conditions: os=openbsd & cpu=x64 languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/openbsd-x64@npm:0.25.0" +"@esbuild/openbsd-x64@npm:0.25.10": + version: 0.25.10 + resolution: "@esbuild/openbsd-x64@npm:0.25.10" conditions: os=openbsd & cpu=x64 languageName: node linkType: hard @@ -5430,6 +5437,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/openharmony-arm64@npm:0.25.10": + version: 0.25.10 + resolution: "@esbuild/openharmony-arm64@npm:0.25.10" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/openharmony-arm64@npm:0.25.8": version: 0.25.8 resolution: "@esbuild/openharmony-arm64@npm:0.25.8" @@ -5458,16 +5472,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.23.0": - version: 0.23.0 - resolution: "@esbuild/sunos-x64@npm:0.23.0" +"@esbuild/sunos-x64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/sunos-x64@npm:0.25.0" conditions: os=sunos & cpu=x64 languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/sunos-x64@npm:0.25.0" +"@esbuild/sunos-x64@npm:0.25.10": + version: 0.25.10 + resolution: "@esbuild/sunos-x64@npm:0.25.10" conditions: os=sunos & cpu=x64 languageName: node linkType: hard @@ -5507,16 +5521,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.23.0": - version: 0.23.0 - resolution: "@esbuild/win32-arm64@npm:0.23.0" +"@esbuild/win32-arm64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/win32-arm64@npm:0.25.0" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/win32-arm64@npm:0.25.0" +"@esbuild/win32-arm64@npm:0.25.10": + version: 0.25.10 + resolution: "@esbuild/win32-arm64@npm:0.25.10" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard @@ -5556,16 +5570,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.23.0": - version: 0.23.0 - resolution: "@esbuild/win32-ia32@npm:0.23.0" +"@esbuild/win32-ia32@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/win32-ia32@npm:0.25.0" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/win32-ia32@npm:0.25.0" +"@esbuild/win32-ia32@npm:0.25.10": + version: 0.25.10 + resolution: "@esbuild/win32-ia32@npm:0.25.10" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard @@ -5605,16 +5619,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.23.0": - version: 0.23.0 - resolution: "@esbuild/win32-x64@npm:0.23.0" +"@esbuild/win32-x64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/win32-x64@npm:0.25.0" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/win32-x64@npm:0.25.0" +"@esbuild/win32-x64@npm:0.25.10": + version: 0.25.10 + resolution: "@esbuild/win32-x64@npm:0.25.10" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -31684,34 +31698,36 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:^0.23.0": - version: 0.23.0 - resolution: "esbuild@npm:0.23.0" +"esbuild@npm:^0.25.10": + version: 0.25.10 + resolution: "esbuild@npm:0.25.10" dependencies: - "@esbuild/aix-ppc64": "npm:0.23.0" - "@esbuild/android-arm": "npm:0.23.0" - "@esbuild/android-arm64": "npm:0.23.0" - "@esbuild/android-x64": "npm:0.23.0" - "@esbuild/darwin-arm64": "npm:0.23.0" - "@esbuild/darwin-x64": "npm:0.23.0" - "@esbuild/freebsd-arm64": "npm:0.23.0" - "@esbuild/freebsd-x64": "npm:0.23.0" - "@esbuild/linux-arm": "npm:0.23.0" - "@esbuild/linux-arm64": "npm:0.23.0" - "@esbuild/linux-ia32": "npm:0.23.0" - "@esbuild/linux-loong64": "npm:0.23.0" - "@esbuild/linux-mips64el": "npm:0.23.0" - "@esbuild/linux-ppc64": "npm:0.23.0" - "@esbuild/linux-riscv64": "npm:0.23.0" - "@esbuild/linux-s390x": "npm:0.23.0" - "@esbuild/linux-x64": "npm:0.23.0" - "@esbuild/netbsd-x64": "npm:0.23.0" - "@esbuild/openbsd-arm64": "npm:0.23.0" - "@esbuild/openbsd-x64": "npm:0.23.0" - "@esbuild/sunos-x64": "npm:0.23.0" - "@esbuild/win32-arm64": "npm:0.23.0" - "@esbuild/win32-ia32": "npm:0.23.0" - "@esbuild/win32-x64": "npm:0.23.0" + "@esbuild/aix-ppc64": "npm:0.25.10" + "@esbuild/android-arm": "npm:0.25.10" + "@esbuild/android-arm64": "npm:0.25.10" + "@esbuild/android-x64": "npm:0.25.10" + "@esbuild/darwin-arm64": "npm:0.25.10" + "@esbuild/darwin-x64": "npm:0.25.10" + "@esbuild/freebsd-arm64": "npm:0.25.10" + "@esbuild/freebsd-x64": "npm:0.25.10" + "@esbuild/linux-arm": "npm:0.25.10" + "@esbuild/linux-arm64": "npm:0.25.10" + "@esbuild/linux-ia32": "npm:0.25.10" + "@esbuild/linux-loong64": "npm:0.25.10" + "@esbuild/linux-mips64el": "npm:0.25.10" + "@esbuild/linux-ppc64": "npm:0.25.10" + "@esbuild/linux-riscv64": "npm:0.25.10" + "@esbuild/linux-s390x": "npm:0.25.10" + "@esbuild/linux-x64": "npm:0.25.10" + "@esbuild/netbsd-arm64": "npm:0.25.10" + "@esbuild/netbsd-x64": "npm:0.25.10" + "@esbuild/openbsd-arm64": "npm:0.25.10" + "@esbuild/openbsd-x64": "npm:0.25.10" + "@esbuild/openharmony-arm64": "npm:0.25.10" + "@esbuild/sunos-x64": "npm:0.25.10" + "@esbuild/win32-arm64": "npm:0.25.10" + "@esbuild/win32-ia32": "npm:0.25.10" + "@esbuild/win32-x64": "npm:0.25.10" dependenciesMeta: "@esbuild/aix-ppc64": optional: true @@ -31747,12 +31763,16 @@ __metadata: optional: true "@esbuild/linux-x64": optional: true + "@esbuild/netbsd-arm64": + optional: true "@esbuild/netbsd-x64": optional: true "@esbuild/openbsd-arm64": optional: true "@esbuild/openbsd-x64": optional: true + "@esbuild/openharmony-arm64": + optional: true "@esbuild/sunos-x64": optional: true "@esbuild/win32-arm64": @@ -31763,7 +31783,7 @@ __metadata: optional: true bin: esbuild: bin/esbuild - checksum: 10c0/08c148c067795165798c0467ce02d2d1ecedc096989bded5f0d795c61a1fcbec6c14d0a3c9f4ad6185cc29ec52087acaa335ed6d98be6ad57f7fa4264626bde0 + checksum: 10c0/8ee5fdd43ed0d4092ce7f41577c63147f54049d5617763f0549c638bbe939e8adaa8f1a2728adb63417eb11df51956b7b0d8eb88ee08c27ad1d42960256158fa languageName: node linkType: hard @@ -52719,7 +52739,6 @@ __metadata: twenty-shared: "workspace:*" type-fest: "npm:4.10.1" typeorm: "patch:typeorm@0.3.20#./patches/typeorm+0.3.20.patch" - typescript: "npm:5.9.2" unzipper: "npm:^0.12.3" uuid: "npm:9.0.1" vite-tsconfig-paths: "npm:4.3.2" @@ -52952,7 +52971,7 @@ __metadata: deep-equal: "npm:^2.2.2" dotenv-cli: "npm:^7.2.1" drizzle-orm: "npm:^0.29.3" - esbuild: "npm:^0.23.0" + esbuild: "npm:^0.25.10" eslint: "npm:^9.32.0" eslint-config-prettier: "npm:^9.1.0" eslint-plugin-import: "npm:^2.31.0"