diff --git a/.erb/configs/webpack.config.base.ts b/.erb/configs/webpack.config.base.ts index 7455f26ed..8c397a64d 100644 --- a/.erb/configs/webpack.config.base.ts +++ b/.erb/configs/webpack.config.base.ts @@ -1,7 +1,3 @@ -/** - * Base webpack config used across other specific configs - */ - import path from 'path'; import { cwd } from 'process'; import { TsconfigPathsPlugin } from 'tsconfig-paths-webpack-plugin'; @@ -48,9 +44,6 @@ const configuration: webpack.Configuration = { }, }, - /** - * Determine the array of extensions that should be used to resolve modules. - */ resolve: { alias: { ...aliases }, extensions: ['.js', '.jsx', '.json', '.ts', '.tsx'], diff --git a/.erb/configs/webpack.config.main.prod.ts b/.erb/configs/webpack.config.main.prod.ts index 4bc5aa287..542c91fbd 100644 --- a/.erb/configs/webpack.config.main.prod.ts +++ b/.erb/configs/webpack.config.main.prod.ts @@ -1,7 +1,3 @@ -/** - * Webpack config for production electron main process - */ - import path from 'path'; import webpack from 'webpack'; import { merge } from 'webpack-merge'; @@ -10,21 +6,13 @@ import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer'; import Dotenv from 'dotenv-webpack'; import baseConfig from './webpack.config.base'; import webpackPaths from './webpack.paths'; -import checkNodeEnv from '../scripts/check-node-env'; import deleteSourceMaps from '../scripts/delete-source-maps'; -checkNodeEnv('production'); deleteSourceMaps(); -const devtoolsConfig = { - devtool: 'source-map', -}; - const configuration: webpack.Configuration = { - ...devtoolsConfig, - + devtool: 'source-map', mode: 'production', - target: 'electron-main', entry: { @@ -59,9 +47,7 @@ const configuration: webpack.Configuration = { * NODE_ENV should be production so that modules do not perform certain * development checks */ - new webpack.EnvironmentPlugin({ - NODE_ENV: 'production', - }), + new webpack.EnvironmentPlugin({ NODE_ENV: 'production' }), new Dotenv({ ignoreStub: true }), ], diff --git a/.erb/configs/webpack.config.sync-engine.ts b/.erb/configs/webpack.config.sync-engine.ts index 689e2373c..245c5cddb 100644 --- a/.erb/configs/webpack.config.sync-engine.ts +++ b/.erb/configs/webpack.config.sync-engine.ts @@ -1,41 +1,25 @@ -/** - * Build config for electron renderer process - */ - import path from 'path'; import webpack from 'webpack'; -import HtmlWebpackPlugin from 'html-webpack-plugin'; import { merge } from 'webpack-merge'; import TerserPlugin from 'terser-webpack-plugin'; import baseConfig from './webpack.config.base'; import webpackPaths from './webpack.paths'; import Dotenv from 'dotenv-webpack'; -import { cwd } from 'process'; const configuration: webpack.Configuration = { - mode: process.env.NODE_ENV as 'none' | 'development' | 'production' | undefined, - - target: 'electron-renderer', + devtool: 'source-map', + mode: 'production', + target: 'electron-main', module: { rules: [{ test: /\.node$/, loader: 'node-loader' }], }, - entry: ['core-js', 'regenerator-runtime/runtime', path.join(webpackPaths.srcSyncEnginePath, 'index.ts')], + entry: [path.join(webpackPaths.srcSyncEnginePath, 'index.ts')], output: { path: webpackPaths.distSyncEnginePath, - publicPath: './', - filename: 'renderer.js', - library: { - type: 'umd', - }, - }, - - resolve: { - alias: { - 'virtual-drive/dist': path.resolve(cwd(), '../node-win/dist'), - }, + filename: '[name].js', }, optimization: { @@ -49,16 +33,8 @@ const configuration: webpack.Configuration = { plugins: [ new Dotenv({ ignoreStub: true }), - - new HtmlWebpackPlugin({ - filename: 'index.html', - minify: { - collapseWhitespace: true, - removeAttributeQuotes: true, - removeComments: true, - }, - isBrowser: false, - isDevelopment: process.env.NODE_ENV !== 'production', + new webpack.EnvironmentPlugin({ + NODE_ENV: 'production', }), ], }; diff --git a/.gitignore b/.gitignore index 27b431a09..278dd0231 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,4 @@ npm-debug.log.* src/test/screenshots *.db +dist \ No newline at end of file diff --git a/package.json b/package.json index a56e5e00a..3372c72d4 100644 --- a/package.json +++ b/package.json @@ -8,10 +8,11 @@ "url": "https://github.com/internxt/drive-desktop" }, "scripts": { + "abc": "tsc -p tsconfig.sync-engine.json && tsc-alias -p tsconfig.sync-engine.json", "build": "concurrently \"npm run build:main\" \"npm run build:backups\" \"npm run build:renderer\" \"npm run build:sync-engine\"", "build:main": "cross-env NODE_ENV=production TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.main.prod.ts", "build:renderer": "cross-env NODE_ENV=production TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.renderer.prod.ts", - "build:sync-engine": "cross-env NODE_ENV=production TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.sync-engine.ts", + "build:sync-engine": "cross-env TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.sync-engine.ts", "build:backups": "cross-env NODE_ENV=production TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.backups.ts", "rebuild": "electron-rebuild --parallel --types prod,dev,optional --module-dir release/app", "lint": "cross-env NODE_ENV=development eslint . --ext .ts,.tsx", @@ -21,11 +22,9 @@ "publish": "ts-node ./.erb/scripts/clean.js dist && npm run build && electron-builder build --publish always", "postinstall": "ts-node .erb/scripts/check-native-dep.js && electron-builder install-app-deps && cross-env NODE_ENV=development TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.renderer.dev.dll.ts && opencollective-postinstall", "========== Start ==========": "", - "start": "ts-node ./.erb/scripts/check-port-in-use.js && npm run start:sync-engine && npm run start:renderer && npm run start:backups", + "start": "ts-node ./.erb/scripts/check-port-in-use.js && yarn abc && npm run start:renderer && npm run start:backups", "start:main": "cross-env NODE_ENV=development electron -r ts-node/register/transpile-only -r tsconfig-paths/register ./src/apps/main/main.ts", "start:renderer": "cross-env NODE_ENV=development TS_NODE_TRANSPILE_ONLY=true webpack serve --config ./.erb/configs/webpack.config.renderer.dev.ts", - "start:sync": "cross-env NODE_ENV=development TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.sync.ts", - "start:sync-engine": "cross-env NODE_ENV=development TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.sync-engine.ts", "start:backups": "cross-env NODE_ENV=production TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.backups.ts", "start:node-win": "cd ../node-win && yarn build:ts && cd ../drive-desktop && yarn start", "========== Testing ==========": "", @@ -203,10 +202,12 @@ "ts-essentials": "^10.0.4", "ts-loader": "^9.2.6", "ts-node": "^10.4.0", + "tsc-alias": "^1.8.11", "tsconfig-paths": "^4.2.0", "tsconfig-paths-webpack-plugin": "^4.2.0", "typescript": "^4.5.4", "url-loader": "^4.1.1", + "virtual-drive": "../node-win", "vite-tsconfig-paths": "^5.1.4", "vitest": "^3.0.2", "vitest-mock-extended": "^2.0.2", diff --git a/release/app/yarn.lock b/release/app/yarn.lock index 62e32894d..1dc55a0e2 100644 --- a/release/app/yarn.lock +++ b/release/app/yarn.lock @@ -1220,9 +1220,9 @@ util-deprecate@^1.0.1: integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== uuid@^11.0.3: - version "11.0.5" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-11.0.5.tgz#07b46bdfa6310c92c3fb3953a8720f170427fc62" - integrity sha512-508e6IcKLrhxKdBbcA2b4KQZlLVp2+J5UwQ6F7Drckkc5N9ZJwFa4TgWtsww9UG8fGHbm6gbV19TdM5pQ4GaIA== + version "11.1.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-11.1.0.tgz#9549028be1753bb934fc96e2bca09bb4105ae912" + integrity sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A== uuid@^8.3.0, uuid@^8.3.2: version "8.3.2" @@ -1352,6 +1352,6 @@ yargs@^17.6.2, yargs@^17.7.2: yargs-parser "^21.1.1" zod@^3.24.1: - version "3.24.1" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.1.tgz#27445c912738c8ad1e9de1bea0359fa44d9d35ee" - integrity sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A== + version "3.24.2" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.2.tgz#8efa74126287c675e92f46871cfc8d15c34372b3" + integrity sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ== diff --git a/src/apps/main/background-processes/sync-engine.ts b/src/apps/main/background-processes/sync-engine.ts index b723a41e7..5d9e6652f 100644 --- a/src/apps/main/background-processes/sync-engine.ts +++ b/src/apps/main/background-processes/sync-engine.ts @@ -13,6 +13,9 @@ import { getUser } from '../auth/service'; import { FetchWorkspacesService } from '../remote-sync/workspace/fetch-workspaces.service'; import { decryptMessageWithPrivateKey } from '@/apps/shared/crypto/service'; import configStore from '../config'; +import { utilityProcess } from 'electron/main'; +import electron from 'electron'; +import { fork } from 'child_process'; interface WorkerConfig { worker: BrowserWindow | null; @@ -74,6 +77,27 @@ export async function spawnSyncEngineWorker(config: Config) { Logger.info(`[MAIN] SPAWNING SYNC ENGINE WORKER for workspace ${providerName}: ${workspaceId}...`); workers[workspaceId].startingWorker = true; + logger.debug({ msg: 'Testttttttttttttttttttttttttt', electron }); + + // const child = utilityProcess.fork(path.join(process.cwd(), 'dist', 'src', 'apps', 'sync-engine', 'index.js')); + // const child = utilityProcess.fork(path.join(process.cwd(), 'release', 'app', 'dist', 'sync-engine', 'main.js')); + // logger.debug({ msg: '🚀 ~ spawnSyncEngineWorker ~ child:', child }); + + // child.postMessage({ type: 'SET_CONFIG', config }); + // child.on('message', (message) => { + // logger.debug({ msg: message }); + // }); + + const child = fork(path.join('dist', 'src', 'apps', 'sync-engine', 'index.js')); + + child.on('message', (message) => { + logger.debug({ msg: 'Received', message }); + }); + + child.send({ greeting: 'Test' }); + + return; + const worker = new BrowserWindow({ webPreferences: { nodeIntegration: true, diff --git a/src/apps/main/realtime.ts b/src/apps/main/realtime.ts index 2d75bd0cc..3321ba49c 100644 --- a/src/apps/main/realtime.ts +++ b/src/apps/main/realtime.ts @@ -60,7 +60,7 @@ function cleanAndStartRemoteNotifications() { }); socket.on('connect_error', (error) => { - Logger.error('❌ Remote notifications connect error: ', error); + // Logger.error('❌ Remote notifications connect error: ', error); }); socket.on('event', async (data) => { diff --git a/src/apps/node-win.ts b/src/apps/node-win.ts new file mode 100644 index 000000000..4fcc084c9 --- /dev/null +++ b/src/apps/node-win.ts @@ -0,0 +1,2 @@ +import { VirtualDrive, PinState, SyncState } from 'virtual-drive/dist'; +export { VirtualDrive, PinState, SyncState }; diff --git a/src/apps/sync-engine/dependency-injection/DependencyContainerFactory.ts b/src/apps/sync-engine/dependency-injection/DependencyContainerFactory.ts index 8d0a45002..8bf69f2ac 100644 --- a/src/apps/sync-engine/dependency-injection/DependencyContainerFactory.ts +++ b/src/apps/sync-engine/dependency-injection/DependencyContainerFactory.ts @@ -1,4 +1,4 @@ -import { DomainEventSubscribers } from '../../../context/virtual-drive/shared/infrastructure/DomainEventSubscribers'; +import { DomainEventSubscribers } from '@/context/virtual-drive/shared/infrastructure/DomainEventSubscribers'; import { getUser } from '../../main/auth/service'; import { DependencyContainer } from './DependencyContainer'; import { buildBoundaryBridgeContainer } from './boundaryBridge/build'; diff --git a/src/apps/sync-engine/index.ts b/src/apps/sync-engine/index.ts index 9ccc4dfd8..c31d6947a 100644 --- a/src/apps/sync-engine/index.ts +++ b/src/apps/sync-engine/index.ts @@ -1,146 +1,137 @@ import Logger from 'electron-log'; -import { ipcRenderer } from 'electron'; +import electron from 'electron'; import { DependencyContainerFactory } from './dependency-injection/DependencyContainerFactory'; import packageJson from '../../../package.json'; import { BindingsManager } from './BindingManager'; import fs from 'fs/promises'; import { iconPath } from '../utils/icon'; -import * as Sentry from '@sentry/electron/renderer'; import { setConfig, Config, getConfig } from './config'; import { FetchWorkspacesService } from '../main/remote-sync/workspace/fetch-workspaces.service'; +import { customInspect } from '../shared/logger/custom-inspect'; +Logger.log('==============================', customInspect(electron)); Logger.log(`Running sync engine ${packageJson.version}`); -function initSentry() { - Sentry.init({ - dsn: process.env.SENTRY_DSN, - enabled: true, // it is true but is using app.isPackaged from the main process - }); - Sentry.captureMessage('Sync engine process started'); -} +// process.parentPort.on('message', (e) => { +// Logger.log('===========================', e); +// process.parentPort.postMessage('Received'); +// }); -initSentry(); - -async function ensureTheFolderExist(path: string) { - try { - await fs.access(path); - } catch { - Logger.info(`Folder <${path}> does not exists, going to create it`); - await fs.mkdir(path); - } -} - -async function setUp() { - Logger.info('[SYNC ENGINE] Starting sync engine process'); - - const { rootPath, providerName } = getConfig(); - - Logger.info('[SYNC ENGINE] Going to use root folder: ', rootPath); +process.on('message', (e) => { + process.send?.({ reply: 'Using child_process' }); +}); - await ensureTheFolderExist(rootPath); - - const factory = new DependencyContainerFactory(); - - const container = await factory.build(); - - const bindings = new BindingsManager( - container, - { - root: rootPath, - icon: iconPath, - }, - providerName, - ); - - ipcRenderer.on('USER_LOGGED_OUT', async () => { - bindings.cleanQueue(); - }); - - ipcRenderer.on('CHECK_SYNC_ENGINE_RESPONSE', async (event) => { - Logger.info('[SYNC ENGINE] Checking sync engine response'); - const placeholderStatuses = await container.filesCheckerStatusInRoot.run(); - const placeholderStates = placeholderStatuses; - event.sender.send('CHECK_SYNC_CHANGE_STATUS', placeholderStates, getConfig().workspaceId); - }); - - ipcRenderer.on('UPDATE_SYNC_ENGINE_PROCESS', async () => { - Logger.info('[SYNC ENGINE] Updating sync engine'); - await bindings.update(); - Logger.info('[SYNC ENGINE] sync engine updated successfully'); - }); - - ipcRenderer.on('FALLBACK_SYNC_ENGINE_PROCESS', async () => { - Logger.info('[SYNC ENGINE] Fallback sync engine'); - - await bindings.polling(); - - Logger.info('[SYNC ENGINE] sync engine fallback successfully'); - }); - - ipcRenderer.on('UPDATE_UNSYNC_FILE_IN_SYNC_ENGINE_PROCESS', async (event) => { - Logger.info('[SYNC ENGINE] updating file unsync'); - - const filesPending = await bindings.getFileInSyncPending(); - - event.sender.send('UPDATE_UNSYNC_FILE_IN_SYNC_ENGINE', filesPending); - }); - - ipcRenderer.on('STOP_AND_CLEAR_SYNC_ENGINE_PROCESS', async (event) => { - Logger.info('[SYNC ENGINE] Stopping and clearing sync engine'); - - try { - await bindings.stop(); - await bindings.cleanUp(); - - Logger.info('[SYNC ENGINE] sync engine stopped and cleared successfully'); - - event.sender.send('SYNC_ENGINE_STOP_AND_CLEAR_SUCCESS'); - } catch (error: unknown) { - Logger.error('[SYNC ENGINE] Error stopping and cleaning: ', error); - Sentry.captureException(error); - event.sender.send('ERROR_ON_STOP_AND_CLEAR_SYNC_ENGINE_PROCESS'); - } - }); - - await bindings.start(packageJson.version); - - await bindings.watch(); - - Logger.info('[SYNC ENGINE] Second sync engine started'); - - ipcRenderer.send('CHECK_SYNC'); -} - -async function refreshToken() { - try { - Logger.info('[SYNC ENGINE] Refreshing token'); - const credential = await FetchWorkspacesService.getCredencials(getConfig().workspaceId); - const newToken = credential.tokenHeader; - setConfig({ ...getConfig(), workspaceToken: newToken }); - } catch (exc) { - Logger.error('[SYNC ENGINE] Error refreshing token', exc); - } -} - -ipcRenderer.once('SET_CONFIG', (event, config: Config) => { - setConfig(config); - - if (config.workspaceToken) { - setInterval(refreshToken, 23 * 60 * 60 * 1000); - } +// async function ensureTheFolderExist(path: string) { +// try { +// await fs.access(path); +// } catch { +// Logger.info(`Folder <${path}> does not exists, going to create it`); +// await fs.mkdir(path); +// } +// } - setUp() - .then(() => { - Logger.info('[SYNC ENGINE] Sync engine has successfully started'); - ipcRenderer.send('SYNC_ENGINE_PROCESS_SETUP_SUCCESSFUL', config.workspaceId); - }) - .catch((error) => { - Logger.error('[SYNC ENGINE] Error setting up', error); - Sentry.captureException(error); - if (error.toString().includes('Error: ConnectSyncRoot failed')) { - Logger.info('[SYNC ENGINE] We need to restart the app virtual drive'); - Sentry.captureMessage('Restarting sync engine virtual drive is required'); - } - ipcRenderer.send('SYNC_ENGINE_PROCESS_SETUP_FAILED', config.workspaceId); - }); -}); +// async function setUp() { +// Logger.info('[SYNC ENGINE] Starting sync engine process'); + +// const { rootPath, providerName } = getConfig(); + +// Logger.info('[SYNC ENGINE] Going to use root folder: ', rootPath); + +// await ensureTheFolderExist(rootPath); + +// const factory = new DependencyContainerFactory(); + +// const container = await factory.build(); + +// const bindings = new BindingsManager( +// container, +// { +// root: rootPath, +// icon: iconPath, +// }, +// providerName, +// ); + +// ipcMain.on('USER_LOGGED_OUT', async () => { +// bindings.cleanQueue(); +// }); + +// ipcMain.on('CHECK_SYNC_ENGINE_RESPONSE', async (event) => { +// Logger.info('[SYNC ENGINE] Checking sync engine response'); +// const placeholderStatuses = await container.filesCheckerStatusInRoot.run(); +// const placeholderStates = placeholderStatuses; +// }); + +// ipcMain.on('UPDATE_SYNC_ENGINE_PROCESS', async () => { +// Logger.info('[SYNC ENGINE] Updating sync engine'); +// await bindings.update(); +// Logger.info('[SYNC ENGINE] sync engine updated successfully'); +// }); + +// ipcMain.on('FALLBACK_SYNC_ENGINE_PROCESS', async () => { +// Logger.info('[SYNC ENGINE] Fallback sync engine'); + +// await bindings.polling(); + +// Logger.info('[SYNC ENGINE] sync engine fallback successfully'); +// }); + +// ipcMain.on('UPDATE_UNSYNC_FILE_IN_SYNC_ENGINE_PROCESS', async (event) => { +// Logger.info('[SYNC ENGINE] updating file unsync'); + +// const filesPending = await bindings.getFileInSyncPending(); +// }); + +// ipcMain.on('STOP_AND_CLEAR_SYNC_ENGINE_PROCESS', async (event) => { +// Logger.info('[SYNC ENGINE] Stopping and clearing sync engine'); + +// try { +// await bindings.stop(); +// await bindings.cleanUp(); + +// Logger.info('[SYNC ENGINE] sync engine stopped and cleared successfully'); +// } catch (error: unknown) { +// Logger.error('[SYNC ENGINE] Error stopping and cleaning: ', error); +// } +// }); + +// await bindings.start(packageJson.version); + +// await bindings.watch(); + +// Logger.info('[SYNC ENGINE] Second sync engine started'); + +// ipcMain.emit('CHECK_SYNC'); +// } + +// async function refreshToken() { +// try { +// Logger.info('[SYNC ENGINE] Refreshing token'); +// const credential = await FetchWorkspacesService.getCredencials(getConfig().workspaceId); +// const newToken = credential.tokenHeader; +// setConfig({ ...getConfig(), workspaceToken: newToken }); +// } catch (exc) { +// Logger.error('[SYNC ENGINE] Error refreshing token', exc); +// } +// } + +// ipcMain.once('SET_CONFIG', (event, config: Config) => { +// setConfig(config); + +// if (config.workspaceToken) { +// setInterval(refreshToken, 23 * 60 * 60 * 1000); +// } + +// setUp() +// .then(() => { +// Logger.info('[SYNC ENGINE] Sync engine has successfully started'); +// ipcMain.emit('SYNC_ENGINE_PROCESS_SETUP_SUCCESSFUL', config.workspaceId); +// }) +// .catch((error) => { +// Logger.error('[SYNC ENGINE] Error setting up', error); +// if (error.toString().includes('Error: ConnectSyncRoot failed')) { +// Logger.info('[SYNC ENGINE] We need to restart the app virtual drive'); +// } +// ipcMain.emit('SYNC_ENGINE_PROCESS_SETUP_FAILED', config.workspaceId); +// }); +// }); diff --git a/src/context/shared/infrastructure/crypt.ts b/src/context/shared/infrastructure/crypt.ts index 7cdc607a1..77a7c7492 100644 --- a/src/context/shared/infrastructure/crypt.ts +++ b/src/context/shared/infrastructure/crypt.ts @@ -4,7 +4,7 @@ import Logger from 'electron-log'; // Webpack dotenv plugin won't replace if you destructure // eslint-disable-next-line prefer-destructuring -const CRYPTO_KEY = process.env.NEW_CRYPTO_KEY; +const CRYPTO_KEY = process.env.NEW_CRYPTO_KEY ?? ''; if (!CRYPTO_KEY) { Logger.error('No encryption key provided'); diff --git a/src/context/virtual-drive/files/application/FileCheckerStatusInRoot.ts b/src/context/virtual-drive/files/application/FileCheckerStatusInRoot.ts index 7fec784a3..cb8d9911d 100644 --- a/src/context/virtual-drive/files/application/FileCheckerStatusInRoot.ts +++ b/src/context/virtual-drive/files/application/FileCheckerStatusInRoot.ts @@ -2,7 +2,7 @@ import Logger from 'electron-log'; import fs from 'fs'; import { DependencyInjectionLocalRootFolderPath } from '../../../../apps/sync-engine/dependency-injection/common/localRootFolderPath'; import { NodeWinLocalFileSystem } from '../infrastructure/NodeWinLocalFileSystem'; -import { PinState, SyncState } from 'virtual-drive/dist'; +import { PinState, SyncState } from '@/apps/node-win'; export class FileCheckerStatusInRoot { constructor(private readonly localFileSystem: NodeWinLocalFileSystem) {} diff --git a/src/context/virtual-drive/files/application/FileFolderContainerDetector.ts b/src/context/virtual-drive/files/application/FileFolderContainerDetector.ts index 00b65608f..ac72cfb8d 100644 --- a/src/context/virtual-drive/files/application/FileFolderContainerDetector.ts +++ b/src/context/virtual-drive/files/application/FileFolderContainerDetector.ts @@ -17,7 +17,7 @@ export class FileFolderContainerDetector { if (!file) { throw new FileNotFoundError(contentId); } - const folder = this.folderFinder.findFromId(file.folderId); + const folder = this.folderFinder.findFromId(file.folderId.value); return folder.uuid === folderContentId; } } diff --git a/src/context/virtual-drive/files/infrastructure/NodeWinLocalFileSystem.ts b/src/context/virtual-drive/files/infrastructure/NodeWinLocalFileSystem.ts index 7fa2ce0ad..cb145d188 100644 --- a/src/context/virtual-drive/files/infrastructure/NodeWinLocalFileSystem.ts +++ b/src/context/virtual-drive/files/infrastructure/NodeWinLocalFileSystem.ts @@ -1,9 +1,9 @@ -import { VirtualDrive } from 'virtual-drive/dist'; import { FileStatuses } from '../../files/domain/FileStatus'; import { File } from '../domain/File'; import { RelativePathToAbsoluteConverter } from '../../shared/application/RelativePathToAbsoluteConverter'; import fs from 'fs/promises'; import Logger from 'electron-log'; +import { VirtualDrive } from '@/apps/node-win'; export class NodeWinLocalFileSystem { constructor( diff --git a/src/context/virtual-drive/folders/infrastructure/NodeWinLocalFolderSystem.ts b/src/context/virtual-drive/folders/infrastructure/NodeWinLocalFolderSystem.ts index 7ea4288df..99f537526 100644 --- a/src/context/virtual-drive/folders/infrastructure/NodeWinLocalFolderSystem.ts +++ b/src/context/virtual-drive/folders/infrastructure/NodeWinLocalFolderSystem.ts @@ -1,7 +1,7 @@ -import { VirtualDrive } from 'virtual-drive/dist'; import { Folder } from '../domain/Folder'; import { FolderStatuses } from '../domain/FolderStatus'; import { RelativePathToAbsoluteConverter } from '../../shared/application/RelativePathToAbsoluteConverter'; +import { VirtualDrive } from '@/apps/node-win'; export class NodeWinLocalFolderSystem { constructor( diff --git a/tsconfig.json b/tsconfig.json index 67824e794..160530239 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,7 +10,6 @@ "strict": true, "pretty": true, "sourceMap": true, - "rootDir": ".", "noImplicitReturns": true, "noImplicitAny": true, "noImplicitThis": true, @@ -28,13 +27,13 @@ "outDir": "release/app/dist", "types": ["vitest/globals"], "paths": { - "@/*": ["./src/*"], - "virtual-drive/dist": ["../node-win/dist"] + "@/*": ["./src/*"] } }, "exclude": [ "release/build", "release/app/dist", + "dist", ".erb/dll", "src/workers/backups/process.ts", "src/workers/backups", diff --git a/tsconfig.sync-engine.json b/tsconfig.sync-engine.json new file mode 100644 index 000000000..5fa967897 --- /dev/null +++ b/tsconfig.sync-engine.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "declaration": false, + "declarationMap": false, + "outDir": "dist", + "sourceMap": false + }, + "extends": "./tsconfig.json", + "include": ["src/apps/sync-engine/index.ts"] +} diff --git a/yarn.lock b/yarn.lock index c482578d1..11db7258d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4313,6 +4313,11 @@ commander@^8.3.0: resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== +commander@^9.0.0: + version "9.5.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" + integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== + common-path-prefix@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" @@ -6560,7 +6565,7 @@ globalyzer@0.1.0: resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465" integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q== -globby@^11.1.0: +globby@^11.0.4, globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -7741,6 +7746,11 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash.chunk@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.chunk/-/lodash.chunk-4.2.0.tgz#66e5ce1f76ed27b4303d8c6512e8d1216e8106bc" + integrity sha512-ZzydJKfUHJwHa+hF5X66zLFCBrWn5GeF28OHEr4WVWtNDXlQ/IjWKPBiikqKo2ne0+v6JgCgJ0GzJp8k8bHC7w== + lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" @@ -8268,6 +8278,11 @@ multipipe@^4.0.0: duplexer2 "^0.1.2" object-assign "^4.1.0" +mylas@^2.1.9: + version "2.1.13" + resolved "https://registry.yarnpkg.com/mylas/-/mylas-2.1.13.tgz#1e23b37d58fdcc76e15d8a5ed23f9ae9fc0cbdf4" + integrity sha512-+MrqnJRtxdF+xngFfUUkIMQrUUL0KsxbADUkn23Z/4ibGg192Q+z+CQyiYwvWTsYjJygmMR8+w3ZDa98Zh6ESg== + mz@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" @@ -8890,6 +8905,13 @@ playwright@1.26.1: dependencies: playwright-core "1.26.1" +plimit-lit@^1.2.6: + version "1.6.1" + resolved "https://registry.yarnpkg.com/plimit-lit/-/plimit-lit-1.6.1.tgz#a34594671b31ee8e93c72d505dfb6852eb72374a" + integrity sha512-B7+VDyb8Tl6oMJT9oSO2CW8XC/T4UcJGrwOVoNGwOQsQYhlpfajmrMj5xeejqaASq3V/EqThyOeATEOMuSEXiA== + dependencies: + queue-lit "^1.5.1" + plist@^3.0.1, plist@^3.0.4: version "3.1.0" resolved "https://registry.yarnpkg.com/plist/-/plist-3.1.0.tgz#797a516a93e62f5bde55e0b9cc9c967f860893c9" @@ -9338,6 +9360,11 @@ query-string@^7.1.0: split-on-first "^1.0.0" strict-uri-encode "^2.0.0" +queue-lit@^1.5.1: + version "1.5.2" + resolved "https://registry.yarnpkg.com/queue-lit/-/queue-lit-1.5.2.tgz#83c24d4f4764802377b05a6e5c73017caf3f8747" + integrity sha512-tLc36IOPeMAubu8BkW8YDBV+WyIgKlYU7zUNs0J5Vk9skSZ4JfGlPOqplP0aHdfv7HL0B2Pg6nwiq60Qc6M2Hw== + queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" @@ -10908,6 +10935,18 @@ ts-node@^10.4.0: v8-compile-cache-lib "^3.0.1" yn "3.1.1" +tsc-alias@^1.8.11: + version "1.8.11" + resolved "https://registry.yarnpkg.com/tsc-alias/-/tsc-alias-1.8.11.tgz#acd3f7680a69ff82bed2df2ef26072e445c15470" + integrity sha512-2DuEQ58A9Rj2NE2c1+/qaGKlshni9MCK95MJzRGhQG0CYLw0bE/ACgbhhTSf/p1svLelwqafOd8stQate2bYbg== + dependencies: + chokidar "^3.5.3" + commander "^9.0.0" + globby "^11.0.4" + mylas "^2.1.9" + normalize-path "^3.0.0" + plimit-lit "^1.2.6" + tsconfck@^3.0.3: version "3.1.5" resolved "https://registry.yarnpkg.com/tsconfck/-/tsconfck-3.1.5.tgz#2f07f9be6576825e7a77470a5304ce06c7746e61" @@ -11201,6 +11240,11 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== +uuid@^11.0.3: + version "11.1.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-11.1.0.tgz#9549028be1753bb934fc96e2bca09bb4105ae912" + integrity sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A== + uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" @@ -11233,6 +11277,17 @@ verror@^1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +virtual-drive@../node-win: + version "1.0.1" + dependencies: + chokidar "^3.6.0" + lodash.chunk "^4.2.0" + tsconfig-paths "^4.2.0" + uuid "^11.0.3" + winston "^3.17.0" + yargs "^17.7.2" + zod "^3.24.1" + vite-node@3.0.5: version "3.0.5" resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-3.0.5.tgz#6a0d06f7a4bdaae6ddcdedc12d910d886cf7d62f" @@ -11572,7 +11627,7 @@ winston-transport@^4.9.0: readable-stream "^3.6.2" triple-beam "^1.3.0" -winston@^3.3.3: +winston@^3.17.0, winston@^3.3.3: version "3.17.0" resolved "https://registry.yarnpkg.com/winston/-/winston-3.17.0.tgz#74b8665ce9b4ea7b29d0922cfccf852a08a11423" integrity sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw== @@ -11714,7 +11769,7 @@ yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^17.0.1, yargs@^17.5.1: +yargs@^17.0.1, yargs@^17.5.1, yargs@^17.7.2: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== @@ -11744,3 +11799,8 @@ yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zod@^3.24.1: + version "3.24.2" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.2.tgz#8efa74126287c675e92f46871cfc8d15c34372b3" + integrity sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==