From 6cc419ed8e5de42c83efa91b184f732924181155 Mon Sep 17 00:00:00 2001 From: Manuele Conti Date: Tue, 24 Mar 2026 18:06:55 +0100 Subject: [PATCH 01/16] Guard system info requests during window teardown Fix a race where the renderer could request system:get-system-info while the Electron BrowserWindow was already being destroyed. The IPC handler previously called isMaximized() on a stale BrowserWindow reference, which raised "Object has been destroyed" and surfaced as an unhandled promise rejection in development logs. This change guards the main-process handler with isDestroyed() before reading window state, and wraps the renderer initialization request in try/catch so startup or teardown races do not produce unhandled rejections. --- src/main/modules/ipc/main.ts | 4 ++- .../components/_templates/app-layout.tsx | 28 +++++++++++-------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/main/modules/ipc/main.ts b/src/main/modules/ipc/main.ts index ae73dde85..709edc3d2 100644 --- a/src/main/modules/ipc/main.ts +++ b/src/main/modules/ipc/main.ts @@ -751,11 +751,13 @@ class MainProcessBridge implements MainIpcModule { nativeTheme.themeSource = savedTheme } + const isWindowMaximized = this.mainWindow && !this.mainWindow.isDestroyed() ? this.mainWindow.isMaximized() : false + return { OS: platform, architecture: 'x64', prefersDarkMode: nativeTheme.shouldUseDarkColors, - isWindowMaximized: this.mainWindow?.isMaximized(), + isWindowMaximized, } } handleStoreRetrieveRecent = async () => { diff --git a/src/renderer/components/_templates/app-layout.tsx b/src/renderer/components/_templates/app-layout.tsx index 9bff6771b..0febce45c 100644 --- a/src/renderer/components/_templates/app-layout.tsx +++ b/src/renderer/components/_templates/app-layout.tsx @@ -28,22 +28,26 @@ const AppLayout = ({ children, ...rest }: AppLayoutProps): ReactNode => { useEffect(() => { const getUserSystemProps = async () => { - const { OS, architecture, prefersDarkMode, isWindowMaximized } = await window.bridge.getSystemInfo() - const recent = await window.bridge.retrieveRecent() + try { + const { OS, architecture, prefersDarkMode, isWindowMaximized } = await window.bridge.getSystemInfo() + const recent = await window.bridge.retrieveRecent() - setRecent(recent) - setSystemConfigs({ - OS, - arch: architecture, - shouldUseDarkMode: prefersDarkMode, - isWindowMaximized, - }) - if (OS === 'darwin' || OS === 'win32') { - setIsLinux(false) + setRecent(recent) + setSystemConfigs({ + OS, + arch: architecture, + shouldUseDarkMode: prefersDarkMode, + isWindowMaximized, + }) + if (OS === 'darwin' || OS === 'win32') { + setIsLinux(false) + } + } catch (error) { + console.error('Failed to read system info during app layout initialization:', error) } } void getUserSystemProps() - }, [setSystemConfigs]) + }, [setRecent, setSystemConfigs]) return ( <> From 33a8b2fc0b61f55649e396a7efa9f0f9aa7389eb Mon Sep 17 00:00:00 2001 From: Manuele Conti Date: Mon, 6 Apr 2026 20:46:26 +0200 Subject: [PATCH 02/16] decouple app layout init reads --- src/renderer/components/_templates/app-layout.tsx | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/renderer/components/_templates/app-layout.tsx b/src/renderer/components/_templates/app-layout.tsx index 0febce45c..802e80a16 100644 --- a/src/renderer/components/_templates/app-layout.tsx +++ b/src/renderer/components/_templates/app-layout.tsx @@ -30,9 +30,6 @@ const AppLayout = ({ children, ...rest }: AppLayoutProps): ReactNode => { const getUserSystemProps = async () => { try { const { OS, architecture, prefersDarkMode, isWindowMaximized } = await window.bridge.getSystemInfo() - const recent = await window.bridge.retrieveRecent() - - setRecent(recent) setSystemConfigs({ OS, arch: architecture, @@ -45,6 +42,13 @@ const AppLayout = ({ children, ...rest }: AppLayoutProps): ReactNode => { } catch (error) { console.error('Failed to read system info during app layout initialization:', error) } + + try { + const recent = await window.bridge.retrieveRecent() + setRecent(recent) + } catch (error) { + console.error('Failed to read recent projects during app layout initialization:', error) + } } void getUserSystemProps() }, [setRecent, setSystemConfigs]) From 1bc576ed0cc80c39ea3dcac3e45e9e6170e8cde2 Mon Sep 17 00:00:00 2001 From: Manuele Conti Date: Thu, 25 Jun 2026 23:13:47 +0200 Subject: [PATCH 03/16] fix: remove stale renderer app layout --- .../components/_templates/app-layout.tsx | 97 ------------------- 1 file changed, 97 deletions(-) delete mode 100644 src/renderer/components/_templates/app-layout.tsx diff --git a/src/renderer/components/_templates/app-layout.tsx b/src/renderer/components/_templates/app-layout.tsx deleted file mode 100644 index 802e80a16..000000000 --- a/src/renderer/components/_templates/app-layout.tsx +++ /dev/null @@ -1,97 +0,0 @@ -import { - ConfirmDeleteModalProps, - SaveChangeModalProps, - SaveChangesFileModalData, -} from '@root/renderer/components/_organisms/modals' -import { TitleBar } from '@root/renderer/components/_organisms/title-bar' -import { useOpenPLCStore } from '@root/renderer/store' -import { cn } from '@root/utils' -import { ComponentPropsWithoutRef, ReactNode, useEffect, useState } from 'react' - -import Toaster from '../_features/[app]/toast/toaster' -import { ProjectModal } from '../_features/[start]/new-project/project-modal' -import { - ConfirmDeleteElementModal, - QuitApplicationModal, - SaveChangesFileModal, - SaveChangesModal, -} from '../_organisms/modals' -import { AcceleratorHandler } from './accelerator-handler' - -type AppLayoutProps = ComponentPropsWithoutRef<'main'> -const AppLayout = ({ children, ...rest }: AppLayoutProps): ReactNode => { - const [isLinux, setIsLinux] = useState(true) - const { - modals, - workspaceActions: { setSystemConfigs, setRecent }, - } = useOpenPLCStore() - - useEffect(() => { - const getUserSystemProps = async () => { - try { - const { OS, architecture, prefersDarkMode, isWindowMaximized } = await window.bridge.getSystemInfo() - setSystemConfigs({ - OS, - arch: architecture, - shouldUseDarkMode: prefersDarkMode, - isWindowMaximized, - }) - if (OS === 'darwin' || OS === 'win32') { - setIsLinux(false) - } - } catch (error) { - console.error('Failed to read system info during app layout initialization:', error) - } - - try { - const recent = await window.bridge.retrieveRecent() - setRecent(recent) - } catch (error) { - console.error('Failed to read recent projects during app layout initialization:', error) - } - } - void getUserSystemProps() - }, [setRecent, setSystemConfigs]) - - return ( - <> - {!isLinux && } -
- {children} - - {modals?.['create-project']?.open === true && } - {modals?.['save-changes-project']?.open === true && ( - - )} - {modals?.['save-changes-file']?.open === true && ( - - )} - {modals?.['quit-application']?.open === true && ( - - )} - {modals?.['confirm-delete-element']?.open === true && ( - - )} - -
- - ) -} - -export { AppLayout } From ccf45bcaddb604371d978479da5e3391c0ee6914 Mon Sep 17 00:00:00 2001 From: Manuele Conti Date: Thu, 25 Jun 2026 23:29:37 +0200 Subject: [PATCH 04/16] test: cover destroyed window system info guard --- src/main/modules/ipc/main.spec.ts | 104 ++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 src/main/modules/ipc/main.spec.ts diff --git a/src/main/modules/ipc/main.spec.ts b/src/main/modules/ipc/main.spec.ts new file mode 100644 index 000000000..ab6f8d685 --- /dev/null +++ b/src/main/modules/ipc/main.spec.ts @@ -0,0 +1,104 @@ +import MainProcessBridge from './main' + +jest.mock('electron', () => ({ + app: { getPath: jest.fn(() => '/tmp') }, + dialog: {}, + nativeTheme: { + shouldUseDarkColors: false, + themeSource: 'system', + }, + shell: { openExternal: jest.fn() }, +})) + +jest.mock('@root/backend/editor/ethercat', () => ({ + ESIService: jest.fn(), +})) + +jest.mock('@root/backend/editor/library-manager/desktop-catalog-transport', () => ({ + createDesktopCatalogTransport: jest.fn(() => ({})), +})) + +jest.mock('@root/backend/editor/utils/runtime-https-config', () => ({ + getRuntimeHttpsOptions: jest.fn(() => ({})), +})) + +jest.mock('@root/backend/shared/ethercat/esi-parser-main', () => ({ + parseESIDeviceFull: jest.fn(), +})) + +jest.mock('@root/backend/shared/library/public-catalog-client', () => ({ + listPublicLibraries: jest.fn(), +})) + +jest.mock('../../../backend/editor/library-manager', () => ({ + LibraryManagerModule: jest.fn(() => ({ + loadEnabledArchives: jest.fn(() => ({ archives: [], missing: [] })), + })), +})) + +jest.mock('../../../backend/editor/package-manager', () => ({ + PackageManagerModule: jest.fn(() => ({})), +})) + +jest.mock('../../../backend/editor/services', () => ({ + logger: { + error: jest.fn(), + info: jest.fn(), + warn: jest.fn(), + }, +})) + +jest.mock('../../../backend/editor/utils', () => ({ + getOpenProjectPath: jest.fn(), + getProjectPath: jest.fn(), +})) + +jest.mock('../../../backend/shared/simulator/simulator-module', () => ({ + SimulatorModule: jest.fn(() => ({ stop: jest.fn() })), +})) + +const createBridge = (mainWindow: { isDestroyed: jest.Mock; isMaximized: jest.Mock }) => + new MainProcessBridge({ + ipcMain: {}, + mainWindow, + projectService: {}, + store: { get: jest.fn(() => undefined) }, + menuBuilder: {}, + pouService: {}, + compilerModule: {}, + hardwareModule: {}, + } as never) + +describe('MainProcessBridge.handleGetSystemInfo', () => { + it('does not read maximized state from a destroyed window', () => { + const mainWindow = { + isDestroyed: jest.fn(() => true), + isMaximized: jest.fn(() => true), + } + const bridge = createBridge(mainWindow) + + expect(bridge.handleGetSystemInfo()).toEqual( + expect.objectContaining({ + isWindowMaximized: false, + }), + ) + expect(mainWindow.isDestroyed).toHaveBeenCalledTimes(1) + expect(mainWindow.isMaximized).not.toHaveBeenCalled() + }) + + it('reads maximized state from a live window', () => { + const mainWindow = { + isDestroyed: jest.fn(() => false), + isMaximized: jest.fn(() => true), + } + const bridge = createBridge(mainWindow) + + expect(bridge.handleGetSystemInfo()).toEqual( + expect.objectContaining({ + isWindowMaximized: true, + }), + ) + expect(mainWindow.isDestroyed).toHaveBeenCalledTimes(1) + expect(mainWindow.isMaximized).toHaveBeenCalledTimes(1) + }) +}) From a9f5b24f26125f8f1105f2ea75b5e541d4e95817 Mon Sep 17 00:00:00 2001 From: Jeykco Date: Tue, 30 Jun 2026 13:32:31 -0500 Subject: [PATCH 05/16] Fix --- build-jwplc-editor.bat | 174 ++++++++++++++++++ .../editor/device/configuration/board.tsx | 4 +- 2 files changed, 177 insertions(+), 1 deletion(-) create mode 100644 build-jwplc-editor.bat diff --git a/build-jwplc-editor.bat b/build-jwplc-editor.bat new file mode 100644 index 000000000..ba5dc3b0e --- /dev/null +++ b/build-jwplc-editor.bat @@ -0,0 +1,174 @@ +@echo off +setlocal EnableExtensions EnableDelayedExpansion + +rem ============================================================================ +rem OpenPLC Editor - JWPLC Edition builder +rem Ubicacion recomendada: +rem openplc-editor\build-jwplc-editor.bat +rem +rem Uso rapido: +rem build-jwplc-editor.bat +rem +rem Opciones: +rem build-jwplc-editor.bat --install +rem build-jwplc-editor.bat --clean +rem build-jwplc-editor.bat --install --clean +rem build-jwplc-editor.bat --open-output +rem +rem Requisito: +rem Node 22.x. Si fnm esta instalado, el script intenta activar Node 22. +rem ============================================================================ + +set "ROOT=%~dp0" +if "%ROOT:~-1%"=="\" set "ROOT=%ROOT:~0,-1%" + +set "RUN_INSTALL=0" +set "RUN_CLEAN=1" +set "OPEN_OUTPUT=0" + +:parse_args +if "%~1"=="" goto args_done +if /I "%~1"=="--install" set "RUN_INSTALL=1" +if /I "%~1"=="--clean" set "RUN_CLEAN=1" +if /I "%~1"=="--no-clean" set "RUN_CLEAN=0" +if /I "%~1"=="--open-output" set "OPEN_OUTPUT=1" +shift +goto parse_args +:args_done + +echo. +echo ============================================================ +echo OpenPLC Editor - JWPLC Edition builder +echo ============================================================ +echo Root: "%ROOT%" +echo. + +cd /d "%ROOT%" || exit /b 1 + +if not exist "%ROOT%\package.json" ( + echo [ERROR] No se encontro package.json. + echo Coloca este .bat en la raiz del repo openplc-editor. + exit /b 1 +) + +where node >nul 2>nul +if errorlevel 1 ( + echo [WARN] Node no esta disponible en PATH. +) else ( + echo [INFO] Node actual: + node -v +) + +rem Intentar activar Node 22 con fnm si esta disponible. +where fnm >nul 2>nul +if not errorlevel 1 ( + echo. + echo [INFO] fnm detectado. Intentando activar Node 22... + for /f "tokens=*" %%I in ('fnm env --use-on-cd --shell cmd 2^>nul') do call %%I + fnm install 22 + if errorlevel 1 ( + echo [ERROR] fnm no pudo instalar Node 22. + exit /b 1 + ) + fnm use 22 + if errorlevel 1 ( + echo [ERROR] fnm no pudo activar Node 22. + exit /b 1 + ) +) + +where node >nul 2>nul +if errorlevel 1 ( + echo [ERROR] Node.js no esta disponible. Instala Node 22 o fnm. + exit /b 1 +) + +for /f "tokens=1 delims=." %%M in ('node -p "process.versions.node"') do set "NODE_MAJOR=%%M" + +echo. +echo [INFO] Node final: +node -v +echo [INFO] npm: +call npm.cmd -v + +if not "%NODE_MAJOR%"=="22" ( + echo. + echo [ERROR] Este repo debe compilarse con Node 22.x. + echo Node actual major: %NODE_MAJOR% + echo. + echo Sugerencia: + echo winget install Schniz.fnm + echo fnm install 22 + echo fnm use 22 + exit /b 1 +) + +if "%RUN_CLEAN%"=="1" ( + echo. + echo [1/4] Limpiando salidas previas... + if exist "%ROOT%\dist" rmdir /s /q "%ROOT%\dist" + if exist "%ROOT%\release\build" rmdir /s /q "%ROOT%\release\build" +) else ( + echo. + echo [1/4] Limpieza omitida. Usa --clean si quieres borrar dist y release\build. +) + +if "%RUN_INSTALL%"=="1" ( + echo. + echo [2/4] Instalando dependencias... + if exist "%ROOT%\package-lock.json" ( + call npm.cmd ci + ) else ( + call npm.cmd install + ) + if errorlevel 1 ( + echo [ERROR] Fallo la instalacion de dependencias. + exit /b 1 + ) +) else ( + echo. + echo [2/4] Instalacion omitida. Usa --install si cambiaste dependencias o node_modules no existe. +) + +echo. +echo [3/4] Construyendo instalador... +call npm.cmd run package +if errorlevel 1 ( + echo [ERROR] Fallo npm run package. + exit /b 1 +) + +echo. +echo [4/4] Buscando instalador generado... +set "BUILD_DIR=%ROOT%\release\build" + +if not exist "%BUILD_DIR%" ( + echo [ERROR] No existe release\build. + exit /b 1 +) + +dir /b "%BUILD_DIR%\*.exe" 2>nul +if errorlevel 1 ( + echo [WARN] No se encontro ningun .exe en "%BUILD_DIR%". +) else ( + echo. + echo [OK] Instalador(es) generado(s) en: + echo "%BUILD_DIR%" +) + +if "%OPEN_OUTPUT%"=="1" ( + start "" "%BUILD_DIR%" +) + +echo. +echo ============================================================ +echo Build finalizado +echo ============================================================ +echo. + +echo. +echo Presiona ESC para cerrar esta ventana... +powershell -NoProfile -ExecutionPolicy Bypass -Command "do { $key = [Console]::ReadKey($true) } until ($key.Key -eq 'Escape')" + +endlocal +exit /b 0 diff --git a/src/frontend/components/_features/[workspace]/editor/device/configuration/board.tsx b/src/frontend/components/_features/[workspace]/editor/device/configuration/board.tsx index 7f49abeb9..69ae6ba86 100644 --- a/src/frontend/components/_features/[workspace]/editor/device/configuration/board.tsx +++ b/src/frontend/components/_features/[workspace]/editor/device/configuration/board.tsx @@ -648,7 +648,9 @@ const Board = memo(function () { viewportRef={communicationSelectRef} > {availableCommunicationPorts.map((port) => { - const displayName = port.name?.trim() || port.address + const portAddress = port.address?.trim() + const portName = port.name?.trim() + const displayName = portName && portName !== portAddress ? `${portAddress} (${portName})` : portAddress return ( Date: Tue, 30 Jun 2026 15:03:59 -0500 Subject: [PATCH 06/16] modbus fix --- build-jwplc-editor (2).bat | 169 +++++++++++++++++++++++++++++++++++++ build-jwplc-editor.bat | 7 +- 2 files changed, 170 insertions(+), 6 deletions(-) create mode 100644 build-jwplc-editor (2).bat diff --git a/build-jwplc-editor (2).bat b/build-jwplc-editor (2).bat new file mode 100644 index 000000000..9c8fe93e0 --- /dev/null +++ b/build-jwplc-editor (2).bat @@ -0,0 +1,169 @@ +@echo off +setlocal EnableExtensions EnableDelayedExpansion + +rem ============================================================================ +rem OpenPLC Editor - JWPLC Edition builder +rem Ubicacion recomendada: +rem openplc-editor\build-jwplc-editor.bat +rem +rem Uso rapido: +rem build-jwplc-editor.bat +rem +rem Opciones: +rem build-jwplc-editor.bat --install +rem build-jwplc-editor.bat --clean +rem build-jwplc-editor.bat --install --clean +rem build-jwplc-editor.bat --open-output +rem +rem Requisito: +rem Node 22.x. Si fnm esta instalado, el script intenta activar Node 22. +rem ============================================================================ + +set "ROOT=%~dp0" +if "%ROOT:~-1%"=="\" set "ROOT=%ROOT:~0,-1%" + +set "RUN_INSTALL=0" +set "RUN_CLEAN=0" +set "OPEN_OUTPUT=0" + +:parse_args +if "%~1"=="" goto args_done +if /I "%~1"=="--install" set "RUN_INSTALL=1" +if /I "%~1"=="--clean" set "RUN_CLEAN=1" +if /I "%~1"=="--open-output" set "OPEN_OUTPUT=1" +shift +goto parse_args +:args_done + +echo. +echo ============================================================ +echo OpenPLC Editor - JWPLC Edition builder +echo ============================================================ +echo Root: "%ROOT%" +echo. + +cd /d "%ROOT%" || exit /b 1 + +if not exist "%ROOT%\package.json" ( + echo [ERROR] No se encontro package.json. + echo Coloca este .bat en la raiz del repo openplc-editor. + exit /b 1 +) + +where node >nul 2>nul +if errorlevel 1 ( + echo [WARN] Node no esta disponible en PATH. +) else ( + echo [INFO] Node actual: + node -v +) + +rem Intentar activar Node 22 con fnm si esta disponible. +where fnm >nul 2>nul +if not errorlevel 1 ( + echo. + echo [INFO] fnm detectado. Intentando activar Node 22... + for /f "tokens=*" %%I in ('fnm env --use-on-cd --shell cmd 2^>nul') do call %%I + fnm install 22 + if errorlevel 1 ( + echo [ERROR] fnm no pudo instalar Node 22. + exit /b 1 + ) + fnm use 22 + if errorlevel 1 ( + echo [ERROR] fnm no pudo activar Node 22. + exit /b 1 + ) +) + +where node >nul 2>nul +if errorlevel 1 ( + echo [ERROR] Node.js no esta disponible. Instala Node 22 o fnm. + exit /b 1 +) + +for /f "tokens=1 delims=." %%M in ('node -p "process.versions.node"') do set "NODE_MAJOR=%%M" + +echo. +echo [INFO] Node final: +node -v +echo [INFO] npm: +call npm.cmd -v + +if not "%NODE_MAJOR%"=="22" ( + echo. + echo [ERROR] Este repo debe compilarse con Node 22.x. + echo Node actual major: %NODE_MAJOR% + echo. + echo Sugerencia: + echo winget install Schniz.fnm + echo fnm install 22 + echo fnm use 22 + exit /b 1 +) + +if "%RUN_CLEAN%"=="1" ( + echo. + echo [1/4] Limpiando salidas previas... + if exist "%ROOT%\dist" rmdir /s /q "%ROOT%\dist" + if exist "%ROOT%\release\build" rmdir /s /q "%ROOT%\release\build" +) else ( + echo. + echo [1/4] Limpieza omitida. Usa --clean si quieres borrar dist y release\build. +) + +if "%RUN_INSTALL%"=="1" ( + echo. + echo [2/4] Instalando dependencias... + if exist "%ROOT%\package-lock.json" ( + call npm.cmd ci + ) else ( + call npm.cmd install + ) + if errorlevel 1 ( + echo [ERROR] Fallo la instalacion de dependencias. + exit /b 1 + ) +) else ( + echo. + echo [2/4] Instalacion omitida. Usa --install si cambiaste dependencias o node_modules no existe. +) + +echo. +echo [3/4] Construyendo instalador... +call npm.cmd run package +if errorlevel 1 ( + echo [ERROR] Fallo npm run package. + exit /b 1 +) + +echo. +echo [4/4] Buscando instalador generado... +set "BUILD_DIR=%ROOT%\release\build" + +if not exist "%BUILD_DIR%" ( + echo [ERROR] No existe release\build. + exit /b 1 +) + +dir /b "%BUILD_DIR%\*.exe" 2>nul +if errorlevel 1 ( + echo [WARN] No se encontro ningun .exe en "%BUILD_DIR%". +) else ( + echo. + echo [OK] Instalador(es) generado(s) en: + echo "%BUILD_DIR%" +) + +if "%OPEN_OUTPUT%"=="1" ( + start "" "%BUILD_DIR%" +) + +echo. +echo ============================================================ +echo Build finalizado +echo ============================================================ +echo. + +endlocal +exit /b 0 diff --git a/build-jwplc-editor.bat b/build-jwplc-editor.bat index ba5dc3b0e..9c8fe93e0 100644 --- a/build-jwplc-editor.bat +++ b/build-jwplc-editor.bat @@ -23,14 +23,13 @@ set "ROOT=%~dp0" if "%ROOT:~-1%"=="\" set "ROOT=%ROOT:~0,-1%" set "RUN_INSTALL=0" -set "RUN_CLEAN=1" +set "RUN_CLEAN=0" set "OPEN_OUTPUT=0" :parse_args if "%~1"=="" goto args_done if /I "%~1"=="--install" set "RUN_INSTALL=1" if /I "%~1"=="--clean" set "RUN_CLEAN=1" -if /I "%~1"=="--no-clean" set "RUN_CLEAN=0" if /I "%~1"=="--open-output" set "OPEN_OUTPUT=1" shift goto parse_args @@ -166,9 +165,5 @@ echo Build finalizado echo ============================================================ echo. -echo. -echo Presiona ESC para cerrar esta ventana... -powershell -NoProfile -ExecutionPolicy Bypass -Command "do { $key = [Console]::ReadKey($true) } until ($key.Key -eq 'Escape')" - endlocal exit /b 0 From 4accc96819eb12eab23c6def75c00ee6fcd2dc5b Mon Sep 17 00:00:00 2001 From: Jeykco Date: Tue, 30 Jun 2026 16:40:35 -0500 Subject: [PATCH 07/16] Create jwplc-modbus-sidebar-search.txt --- jwplc-modbus-sidebar-search.txt | 2673 +++++++++++++++++++++++++++++++ 1 file changed, 2673 insertions(+) create mode 100644 jwplc-modbus-sidebar-search.txt diff --git a/jwplc-modbus-sidebar-search.txt b/jwplc-modbus-sidebar-search.txt new file mode 100644 index 000000000..b7c09fea1 --- /dev/null +++ b/jwplc-modbus-sidebar-search.txt @@ -0,0 +1,2673 @@ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\App.tsx:5: // ST / IL / Python LanguageConfigurations). Imported here as a +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\App.tsx:92: const runtimeIpAddress = useOpenPLCStore((state) => state.deviceDefinitions.configuration.runtimeIpAddress || '') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.spec.ts:114: expect(typeof compilerModule.arduinoCliConfigurationFilePath).toBe('string') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.spec.ts:481: fs.writeFileSync(join(srcDir, 'configuration.cpp'), '// config\n', 'utf-8') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.spec.ts:499: expect(compileCmds).toContain('configuration.cpp') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.spec.ts:621: fs.writeFileSync(join(srcDir, 'configuration.cpp'), '// config body\n', 'utf-8') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.spec.ts:644: expect(fs.existsSync(join(stashDir, 'configuration.cpp'))).toBe(true) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.spec.ts:646: expect(fs.existsSync(join(srcDir, 'configuration.cpp'))).toBe(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.spec.ts:661: expect(result.objectFiles.map((p) => p.split(/[\\/]/).pop())).toEqual(['configuration.o', 'pou_MAIN.o']) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:11: import type { VppModbusScreenState } from '@root/backend/shared/compile/steps/modbus-defines' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:91: import type { DeviceConfiguration, DevicePin } from '@root/backend/shared/types/PLC/devices' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:168: arduinoCliConfigurationFilePath: string +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:210: // Runtime API polling configuration (important-comment) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:223: this.arduinoCliConfigurationFilePath = join(electronApp.getPath('userData'), 'User', 'arduino-cli.yaml') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:225: this.arduinoCliBaseParameters = ['--config-file', this.arduinoCliConfigurationFilePath] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:413: * devices/configuration.json. Returns `{}` on any read/parse error — +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:419: const configPath = join(projectPath, 'devices', 'configuration.json') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:1750: // and the arduino-cli pass (ModbusSlave still rides arduino-cli); internal +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:1858: const devicesConfigurationFilePath = join(devicesDirectoryPath, 'configuration.json') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:1861: await CompilerModule.readJSONFile(devicesConfigurationFilePath) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:1864: // No devices/configuration.json yet — drop into the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2105: * merged with vendor screen data (hal-config, module-configuration, io-mapping) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2173: // Read vendor screen data from the project's device configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2174: const deviceConfigPath = join(normalizedProjectPath, 'devices', 'configuration.json') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2181: // Device configuration may not exist yet — use empty vendor data +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2211: // generator can encode per-slot configuration bytes without +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2382: * Compute per-slot module-configuration bytes for an Arduino VPP +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2529: const hasServers = projectData.servers && projectData.servers.length > 0 +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2531: if (!isRuntimeV4 && hasServers) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2534: message: `Warning: Your project contains Modbus Server configurations, but the selected target (${boardTarget}) does not support this feature. Modbus Server is only supported on OpenPLC Runtime v4. The server configurations will be ignored during compilation.`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2540: message: `Warning: Your project contains Remote IO configurations, but the selected target (${boardTarget}) does not support this feature. Remote IO is only supported on OpenPLC Runtime v4. The remote device configurations will be ignored during compilation.`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2601: // `#include "debug_dispatch.hpp"` from `ModbusSlave.cpp`. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2729: // Pull the persisted VPP Modbus screen state from +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2730: // `devices/configuration.json` so non-runtime / non-simulator +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2732: // baked into the firmware. Without this, ModbusSlave.cpp's +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2734: // never enables Modbus — at which point the debugger can't +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2736: let vppModbusState: VppModbusScreenState | undefined +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2738: const devicesConfigurationFilePath = join(normalizedProjectPath, 'devices', 'configuration.json') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2740: const deviceConfig = await CompilerModule.readJSONFile(devicesConfigurationFilePath) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2742: vppModbusState = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2743: modbus_rtu: vendorScreenData['modbus_rtu'] as VppModbusScreenState['modbus_rtu'], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2744: modbus_tcp: vendorScreenData['modbus_tcp'] as VppModbusScreenState['modbus_tcp'], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2747: // No configuration.json — leave undefined so the shared +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2748: // pipeline skips the Modbus block entirely (matches the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2755: // per-slot module-configuration bytes into vpp_config.h (the MCU +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2792: ...(vppModbusState ? { vppModbusState } : {}), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\editor-compiler-platform-port.ts:181: // (discriminated-union POUs + singular `configuration`). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\editor-compiler-platform-port.ts:452: * `devices/configuration.json` on disk, which lags the live store +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\__tests__\load-firmware-skeleton.test.ts:88: writeFileSync(join(tmp, 'Baremetal', 'ModbusSlave.cpp'), '/* mb */\n') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\__tests__\load-firmware-skeleton.test.ts:96: expect(result['examples/Baremetal/ModbusSlave.cpp']).toBe('/* mb */\n') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\__tests__\load-firmware-skeleton.test.ts:103: writeFileSync(join(tmp, 'Baremetal', 'modules', 'modbus_master.cpp'), '/* mm */\n') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\__tests__\load-firmware-skeleton.test.ts:104: writeFileSync(join(tmp, 'Baremetal', 'modules', 'modbus_master.h'), '#pragma once\n') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\__tests__\load-firmware-skeleton.test.ts:109: expect(result['examples/Baremetal/modules/modbus_master.cpp']).toBe('/* mm */\n') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\__tests__\load-firmware-skeleton.test.ts:110: expect(result['examples/Baremetal/modules/modbus_master.h']).toBe('#pragma once\n') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\hardware\hardware-module.ts:27: arduinoCliConfigurationFilePath: string +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\hardware\hardware-module.ts:43: this.arduinoCliConfigurationFilePath = join(electronApp.getPath('userData'), 'User', 'arduino-cli.yaml') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\hardware\hardware-module.ts:45: this.arduinoCliBaseParameters = ['--config-file', this.arduinoCliConfigurationFilePath] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\hardware\hardware-module.ts:234: // Per-module configuration screens live alongside top-level +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\hardware\hardware-module.ts:336: async getDeviceConfigurationOptions() { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-client.ts:6: export enum ModbusFunctionCode { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-client.ts:14: export enum ModbusDebugResponse { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-client.ts:20: interface ModbusTcpClientOptions { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-client.ts:26: export class ModbusTcpClient { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-client.ts:34: constructor(options: ModbusTcpClientOptions) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-client.ts:123: const functionCode = ModbusFunctionCode.DEBUG_GET_MD5 +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-client.ts:150: if (responseFunctionCode !== (ModbusFunctionCode.DEBUG_GET_MD5 as number)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-client.ts:154: if (statusCode !== (ModbusDebugResponse.SUCCESS as number)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-client.ts:184: const functionCode = ModbusFunctionCode.DEBUG_GET_LIST +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-client.ts:222: if (responseFunctionCode !== (ModbusFunctionCode.DEBUG_GET_LIST as number)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-client.ts:226: if (statusCode === (ModbusDebugResponse.ERROR_OUT_OF_BOUNDS as number)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-client.ts:230: if (statusCode === (ModbusDebugResponse.ERROR_OUT_OF_MEMORY as number)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-client.ts:234: if (statusCode !== (ModbusDebugResponse.SUCCESS as number)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-client.ts:284: const functionCode = ModbusFunctionCode.DEBUG_SET +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-client.ts:328: if (responseFunctionCode !== (ModbusFunctionCode.DEBUG_SET as number)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-client.ts:332: if (statusCode === (ModbusDebugResponse.ERROR_OUT_OF_BOUNDS as number)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-client.ts:336: if (statusCode === (ModbusDebugResponse.ERROR_OUT_OF_MEMORY as number)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-client.ts:340: if (statusCode !== (ModbusDebugResponse.SUCCESS as number)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-rtu-client.ts:8: import { ModbusDebugResponse, ModbusFunctionCode } from './modbus-client' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-rtu-client.ts:10: interface ModbusRtuClientOptions { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-rtu-client.ts:25: export class ModbusRtuClient { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-rtu-client.ts:69: constructor(options: ModbusRtuClientOptions) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-rtu-client.ts:83: crcHi = crcLo ^ ModbusRtuClient.CRC_HI_TABLE[index] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-rtu-client.ts:84: crcLo = ModbusRtuClient.CRC_LO_TABLE[index] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-rtu-client.ts:256: const functionCode = ModbusFunctionCode.DEBUG_GET_MD5 +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-rtu-client.ts:282: if (functionCodeResponse !== (ModbusFunctionCode.DEBUG_GET_MD5 as number)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-rtu-client.ts:286: if (statusCode !== (ModbusDebugResponse.SUCCESS as number)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-rtu-client.ts:319: const functionCode = ModbusFunctionCode.DEBUG_GET_LIST +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-rtu-client.ts:345: if (functionCodeResponse !== (ModbusFunctionCode.DEBUG_GET_LIST as number)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-rtu-client.ts:349: if (statusCode === (ModbusDebugResponse.ERROR_OUT_OF_BOUNDS as number)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-rtu-client.ts:353: if (statusCode === (ModbusDebugResponse.ERROR_OUT_OF_MEMORY as number)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-rtu-client.ts:357: if (statusCode !== (ModbusDebugResponse.SUCCESS as number)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-rtu-client.ts:401: const functionCode = ModbusFunctionCode.DEBUG_SET +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-rtu-client.ts:433: if (functionCodeResponse !== (ModbusFunctionCode.DEBUG_SET as number)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-rtu-client.ts:437: if (statusCode === (ModbusDebugResponse.ERROR_OUT_OF_BOUNDS as number)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-rtu-client.ts:441: if (statusCode === (ModbusDebugResponse.ERROR_OUT_OF_MEMORY as number)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-rtu-client.ts:445: if (statusCode !== (ModbusDebugResponse.SUCCESS as number)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\project-service\index.ts:270: join(projectPath, 'devices', 'configuration.json'), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\project-service\index.ts:271: 'devices/configuration.json', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\project-service\index.ts:285: const serverFiles = await readDirRecursive(join(projectPath, 'devices', 'servers'), 'devices/servers') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\project-service\index.ts:460: // arrays are empty (e.g. fresh library with no servers yet), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\project-service\index.ts:463: ['pous/programs', 'pous/functions', 'pous/function-blocks', 'devices/servers', 'devices/remote'].map((d) => +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\project-service\data\xml-file.ts:40: configurations: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\project-service\data\xml-file.ts:41: configuration: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\project-service\utils\create-project.ts:71: CreateJSONFile(`${basePath}/devices`, JSON.stringify(built.deviceConfiguration, null, 2), 'configuration') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\project-service\utils\create-project.ts:76: title: 'Error creating device configuration file', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\project-service\utils\create-project.ts:77: description: `Failed to create device configuration file at ${basePath}/devices`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\project-service\utils\create-project.ts:145: deviceConfiguration: built.deviceConfiguration, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\project-service\utils\read-project.ts:1: import { DeviceConfiguration, DevicePin } from '@root/backend/shared/types/PLC/devices' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\project-service\utils\read-project.ts:9: PLCServerSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\project-service\utils\read-project.ts:469: * This includes the project.json, devices/configuration.json, and devices/pin-mapping.json files. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\project-service\utils\read-project.ts:551: * Read server config files from the devices/servers directory. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\project-service\utils\read-project.ts:555: const serversDir = join(basePath, 'devices', 'servers') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\project-service\utils\read-project.ts:556: if (fileOrDirectoryExists(serversDir)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\project-service\utils\read-project.ts:557: const serverEntries = readdirSync(serversDir, { withFileTypes: true }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\project-service\utils\read-project.ts:560: const serverFilePath = join(serversDir, entry.name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\project-service\utils\read-project.ts:564: const result = PLCServerSchema.safeParse(parsedServer) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\project-service\utils\read-project.ts:603: deviceConfiguration: projectFiles['devices/configuration.json'] as DeviceConfiguration, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\project-service\utils\read-project.ts:605: servers: serverFiles, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\user-service\index.ts:147: * Checks if the Arduino CLI configuration file exists and creates it if it doesn't. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\utils\json-manager.ts:14: * `devices/configuration.json` / `pin-mapping.json` exactly this +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:37: // PLCProjectData is read from the schema-shape type (singular `configuration`) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:40: // (plural `configurations`) and converts at the pipeline entry — see C1 +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:206: * fall back to its legacy `devices/configuration.json` disk +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:214: /** Persisted VPP Modbus screen state for the target device, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:215: * sourced from `DeviceConfiguration.vendorScreenData` under +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:216: * the `modbus_rtu` / `modbus_tcp` keys. Threaded straight +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:220: * Modbus screen lands on the web build. */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:221: vppModbusState?: import('./steps/modbus-defines').VppModbusScreenState +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:222: /** User-authored configuration-screen data from +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:223: * `DeviceConfiguration.vendorScreenData`. The platform adapter +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:224: * reads `devices/configuration.json` (editor) or the store (web) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:354: vppModbusState, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:420: // POU layout (discriminated union vs. flat record) and configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:421: // field name (`configuration` vs. `configurations`). Each platform +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:499: servers: processedData.servers as never, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:501: instances: processedData.configuration.resource.instances.map( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:528: modbusSlave: confs.modbusSlave, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:529: modbusMaster: confs.modbusMaster, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:702: ...(vppModbusState !== undefined ? { vppModbusState } : {}), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:708: // configuration screens as C preprocessor #defines; the HAL driver +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:797: // persisted value in `devices/configuration.json`). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\compose-firmware-bundle.ts:173: // vpp_config.h carries the user's configuration-screen data for +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-confs.ts:2: * Author the runtime v4 conf/* JSON strings (Modbus slave + master, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-confs.ts:3: * S7Comm, OPC-UA, EtherCAT) from a project's `servers`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-confs.ts:15: * - The atomic generators (`generateModbusSlaveConfig`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-confs.ts:16: * `generateModbusMasterConfig`, `generateS7CommConfig`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-confs.ts:28: * the project's `servers` / `remoteDevices`, the OPC-UA +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-confs.ts:39: import { generateModbusSlaveConfig } from '../../../../frontend/utils/modbus/generate-modbus-slave-config' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-confs.ts:45: import { generateModbusMasterConfig } from '../../utils/modbus/generate-modbus-master-config' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-confs.ts:50: * the editor's `projectData.configuration.resource.instances` slice. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-confs.ts:59: /** Project's `data.servers` — Modbus slave, S7Comm, OPC-UA all +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-confs.ts:61: servers: PLCServer[] | undefined +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-confs.ts:62: /** Project's `data.remoteDevices` — Modbus master + EtherCAT read +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-confs.ts:65: /** Program instances (mapped from `projectData.configuration.resource. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-confs.ts:86: modbusSlave: string | null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-confs.ts:87: modbusMaster: string | null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-confs.ts:100: * `OPC-UA Configuration Error:` prefix and rethrown. Other +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-confs.ts:106: * configuration is invalid: ')` without logging +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-confs.ts:113: const { servers, remoteDevices, instances, debugMapContent, log } = input +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-confs.ts:115: // Modbus slave / master / S7Comm: pure helpers. Each returns `null` +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-confs.ts:122: const modbusSlave = generateModbusSlaveConfig(servers as Parameters[0]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-confs.ts:123: const modbusMaster = generateModbusMasterConfig( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-confs.ts:124: remoteDevices as Parameters[0], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-confs.ts:127: const s7Comm = generateS7CommConfig(servers) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-confs.ts:135: opcUa = generateOpcUaConfig(servers, debugMapContent, instances, (msg) => log(msg, 'info')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-confs.ts:138: log(`OPC-UA Configuration Error:\n${error.message}`, 'error') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-confs.ts:152: throw new Error(`EtherCAT configuration is invalid: ${ethercatErrors.join('; ')}`) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-confs.ts:155: return { modbusSlave, modbusMaster, s7Comm, opcUa, ethercat } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-defines.ts:21: import { generateModbusDefines, type VppModbusScreenState } from './modbus-defines' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-defines.ts:23: export type { VppModbusScreenState } from './modbus-defines' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-defines.ts:67: * fixed-Modbus block, which the avr8js emulator's serial +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-defines.ts:71: /** Persisted VPP Modbus screen state, sourced from +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-defines.ts:72: * `DeviceConfiguration.vendorScreenData` under the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-defines.ts:73: * `modbus_rtu` / `modbus_tcp` keys. When present and the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-defines.ts:75: * swaps the comms-config block for `generateModbusDefines()` +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-defines.ts:77: * by `resources/sources/Baremetal/ModbusSlave.cpp`). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-defines.ts:81: vppModbusState?: VppModbusScreenState +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-defines.ts:90: * 3. `// Comms Configuration` (simulator-only) — fixed Modbus RTU +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-defines.ts:92: * Modbus traffic into the running emulator. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-defines.ts:103: const { boardEntry, devicePinMapping, stProgramFileContent, buildMD5Hash, boardRuntime, vppModbusState } = input +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-defines.ts:133: // 4. Comms Configuration. Two sources, mutually exclusive: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-defines.ts:136: // simulator targets regardless of vppModbusState. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-defines.ts:138: // VPP Modbus screen state via `generateModbusDefines()`. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-defines.ts:139: // The historical `communicationConfigurationSchema` +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-defines.ts:141: // from `DeviceConfiguration.communicationConfiguration`; +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-defines.ts:143: // emit nothing — `ModbusSlave.cpp` then sees no +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-defines.ts:144: // MODBUS_ENABLED define and stays quiescent. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-defines.ts:145: // Runtime-v4 / runtime-v3 targets route Modbus config through +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-defines.ts:146: // `conf/modbus_slave.json` in the upload bundle and emit no +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-defines.ts:149: DEFINES_CONTENT += '//Comms Configuration\n' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-defines.ts:155: DEFINES_CONTENT += '#define MODBUS_ENABLED\n' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-defines.ts:157: } else if (boardRuntime !== 'openplc-compiler' && vppModbusState) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-defines.ts:158: const modbusBlock = generateModbusDefines(vppModbusState) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-defines.ts:159: if (modbusBlock.length > 0) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-defines.ts:160: DEFINES_CONTENT += modbusBlock +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-vpp-config.ts:8: * microcontroller targets every byte of configuration has to be baked +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-vpp-config.ts:11: * value the user set on the device's configuration screens. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-vpp-config.ts:37: /** `DeviceConfiguration.vendorScreenData` from the project model. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-vpp-config.ts:59: lines.push('// Carries the user-authored configuration-screen data for this') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-vpp-config.ts:94: * parent path (`VPP_MODULE_CONFIGURATION_SLOTSCONFIG_`), so the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:2: * Emit the `//Comms Configuration` block in `defines.h` from a board's +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:3: * persisted VPP Modbus screen state. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:5: * The screen is declared in `packages/com.openplc.arduino/screens/modbus.json` +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:7: * `DeviceConfiguration.vendorScreenData` under keys `modbus_rtu` and +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:8: * `modbus_tcp` (one per `section.id` in the screen JSON, resolved by +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:12: * `communicationConfiguration` pipeline used (removed in commit +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:13: * c379c7a9c "drop communicationConfiguration from device schema") — +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:17: * `MBTCP_PWD`, `MODBUS_ENABLED`. The consumer (`resources/sources/ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:18: * Baremetal/ModbusSlave.cpp`) was kept intact and still reads these +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:22: * for fishing `modbus_rtu` and `modbus_tcp` out of `vendorScreenData`. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:27: * field IDs declared in `screens/modbus.json` — keep in sync if the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:30: export interface VppModbusScreenState { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:31: modbus_rtu?: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:39: modbus_tcp?: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:82: // Modbus screen (`packages/com.openplc.arduino/screens/modbus.json`). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:85: // touches — toggling "Enable Modbus RTU" alone results in +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:88: // to compile (ModbusSlave.cpp uses them as object/literal values). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:101: * Build the `//Comms Configuration` block. Returns an empty string when +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:103: * without Modbus configured. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:113: export function generateModbusDefines(state: VppModbusScreenState): string { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:114: const rtu = state.modbus_rtu ?? {} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:115: const tcp = state.modbus_tcp ?? {} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:122: lines.push('//Comms Configuration') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:147: // inside `mbconfig_ethernet_iface` (see `ModbusSlave.cpp:199-225`), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:173: // `MODBUS_ENABLED` gates everything Modbus in ModbusSlave.cpp. Emit +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:175: lines.push('#define MODBUS_ENABLED') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\compose-firmware-bundle.test.ts:26: 'examples/Baremetal/modules/Modbus.cpp': '// Modbus helper\n', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\compose-firmware-bundle.test.ts:31: expect(out['examples/Baremetal/modules/Modbus.cpp']).toBe('// Modbus helper\n') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:4: * The atomic generators (`generateModbusSlaveConfig`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:24: jest.mock('../../utils/modbus/generate-modbus-master-config', () => ({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:25: generateModbusMasterConfig: jest.fn(), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:33: jest.mock('../../../../frontend/utils/modbus/generate-modbus-slave-config', () => ({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:34: generateModbusSlaveConfig: jest.fn(), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:62: import { generateModbusMasterConfig } from '../../utils/modbus/generate-modbus-master-config' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:65: import { generateModbusSlaveConfig } from '../../../../frontend/utils/modbus/generate-modbus-slave-config' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:70: const mockedModbusSlave = generateModbusSlaveConfig as jest.MockedFunction +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:71: const mockedModbusMaster = generateModbusMasterConfig as jest.MockedFunction +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:79: servers: [] as PLCServer[], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:92: mockedModbusSlave.mockReturnValue(null) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:93: mockedModbusMaster.mockReturnValue(null) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:102: mockedModbusSlave.mockReturnValue('{"modbus_slave":{}}') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:103: mockedModbusMaster.mockReturnValue('{"modbus_master":{}}') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:110: modbusSlave: '{"modbus_slave":{}}', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:111: modbusMaster: '{"modbus_master":{}}', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:118: it('passes servers + debugMapContent + instances + log to generateOpcUaConfig', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:119: const servers = [{ name: 'opcua-server' }] as PLCServer[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:122: generateRuntimeConfs(makeInput({ servers, instances, debugMapContent: '{"k":"v"}', log })) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:124: expect(mockedOpcUa.mock.calls[0][0]).toBe(servers) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:132: mockedOpcUa.mockImplementation((_servers, _dbg, _inst, innerLog) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:140: it('forwards Modbus master skip diagnostics through the log callback as level=warning', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:142: mockedModbusMaster.mockImplementation((_devices, innerLog) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:143: innerLog?.('Modbus RTU device "BadRTU" is missing a serial port configuration and will be skipped.') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:148: 'Modbus RTU device "BadRTU" is missing a serial port configuration and will be skipped.', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:157: modbusSlave: null, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:158: modbusMaster: null, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:167: it('logs "OPC-UA Configuration Error:" prefix and rethrows on OpcUaConfigError', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:174: expect(log).toHaveBeenCalledWith('OPC-UA Configuration Error:\nInvalid node id "foo"', 'error') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:217: 'EtherCAT configuration is invalid: slave 0 missing vendor id; slave 2 invalid PDO', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:234: it('returns ethercat: null when no remote devices configured (generator returns null)', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:254: it('runs Modbus + S7 + OPC-UA generators before EtherCAT (OPC-UA error short-circuits the rest)', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:256: mockedModbusSlave.mockImplementation(() => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:257: callOrder.push('modbus-slave') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:260: mockedModbusMaster.mockImplementation(() => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-confs.test.ts:261: callOrder.push('modbus-master') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-defines.test.ts:85: expect(out).toContain('//Comms Configuration\n') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-defines.test.ts:91: expect(out).toContain('#define MODBUS_ENABLED\n') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-defines.test.ts:98: expect(arduinoCli).not.toContain('Comms Configuration') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-defines.test.ts:100: expect(openplcCompiler).not.toContain('Comms Configuration') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-defines.test.ts:103: it('emits a Modbus defines block from vppModbusState on arduino-cli runtimes', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-defines.test.ts:104: // arduino-cli is the runtime that drives `defines.h`-based Modbus +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-defines.test.ts:105: // config; runtime-v3/v4 route via `conf/modbus_slave.json` and +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-defines.test.ts:107: // in `generateModbusDefines` so we know the wiring is end-to-end. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-defines.test.ts:111: vppModbusState: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-defines.test.ts:112: modbus_rtu: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-defines.test.ts:123: expect(out).toContain('#define MODBUS_ENABLED') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-defines.test.ts:126: it('skips the vppModbusState branch entirely for openplc-compiler', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-defines.test.ts:127: // openplc-compiler emits no MODBUS macros even when a screen +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-defines.test.ts:132: vppModbusState: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-defines.test.ts:133: modbus_rtu: { enabled: true, rtu_interface: 'Serial1', rtu_baud_rate: '115200', rtu_slave_id: 1 }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-defines.test.ts:137: expect(out).not.toContain('MODBUS_ENABLED') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-defines.test.ts:140: it('omits the Modbus block when vppModbusState produces an empty payload', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-defines.test.ts:141: // generateModbusDefines returns "" when both rtu and tcp are +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-defines.test.ts:144: // simply absent", same as no vppModbusState supplied). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-defines.test.ts:148: vppModbusState: { modbus_rtu: { enabled: false }, modbus_tcp: { enabled: false } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-defines.test.ts:317: '//Comms Configuration', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-defines.test.ts:323: '#define MODBUS_ENABLED', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:33: 'modbus-rtu': { baud_rate: 115200, slave_id: 1, enabled: true, port_name: 'COM3' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:36: expect(out).toContain('#define VPP_MODBUS_RTU_BAUD_RATE 115200') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:37: expect(out).toContain('#define VPP_MODBUS_RTU_SLAVE_ID 1') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:38: expect(out).toContain('#define VPP_MODBUS_RTU_ENABLED 1') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:39: expect(out).toContain('#define VPP_MODBUS_RTU_PORT_NAME "COM3"') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:107: 'modbus.rtu': { baud_rate: 9600 }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:112: expect(out).toContain('#define VPP_MODBUS_RTU_BAUD_RATE 9600') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:191: 'module-configuration': { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:209: 'modbus-rtu': { enabled: true, baud_rate: 115200, slave_id: 1 }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:214: expect(out).toContain('#define VPP_MODULE_CONFIGURATION_SLOTS_COUNT 2') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:215: expect(out).toContain('#define VPP_MODULE_CONFIGURATION_SLOTS { "opta-builtin", "opta-ext-d1608e" }') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:216: expect(out).toContain('#define VPP_MODULE_CONFIGURATION_SLOTSCONFIG_1_I1_MODE "bool"') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:217: expect(out).toContain('#define VPP_MODULE_CONFIGURATION_SLOTSCONFIG_1_I2_MODE "analog"') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:218: expect(out).toContain('#define VPP_MODULE_CONFIGURATION_SLOTSCONFIG_2_I1_MODE "analog"') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:219: expect(out).toContain('#define VPP_MODBUS_RTU_ENABLED 1') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:220: expect(out).toContain('#define VPP_MODBUS_RTU_BAUD_RATE 115200') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:1: import { generateModbusDefines } from '../steps/modbus-defines' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:3: describe('generateModbusDefines', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:5: expect(generateModbusDefines({})).toBe('') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:6: expect(generateModbusDefines({ modbus_rtu: {}, modbus_tcp: {} })).toBe('') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:7: expect(generateModbusDefines({ modbus_rtu: { enabled: false }, modbus_tcp: { enabled: false } })).toBe('') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:11: const out = generateModbusDefines({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:12: modbus_rtu: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:21: '//Comms Configuration', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:26: '#define MODBUS_ENABLED', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:33: // Real-world scenario: user toggles "Enable Modbus RTU" without +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:35: // that changed. ModbusSlave.cpp still expects MBSERIAL_IFACE, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:39: const out = generateModbusDefines({ modbus_rtu: { enabled: true } }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:44: expect(out).toContain('#define MODBUS_ENABLED') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:48: const out = generateModbusDefines({ modbus_tcp: { enabled: true } }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:56: const out = generateModbusDefines({ modbus_tcp: { enabled: true, enable_dhcp: true } }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:65: const out = generateModbusDefines({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:66: modbus_rtu: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:80: const checkboxOff = generateModbusDefines({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:81: modbus_rtu: { enabled: true, enable_rs485_en_pin: false, rtu_rs485_en_pin: 'D2' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:86: const checkboxOn = generateModbusDefines({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:87: modbus_rtu: { enabled: true, enable_rs485_en_pin: true, rtu_rs485_en_pin: 'D2' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:92: const checkboxOnEmptyPin = generateModbusDefines({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:93: modbus_rtu: { enabled: true, enable_rs485_en_pin: true, rtu_rs485_en_pin: '' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:99: const out = generateModbusDefines({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:100: modbus_tcp: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:118: expect(out).toContain('#define MODBUS_ENABLED') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:122: const out = generateModbusDefines({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:123: modbus_tcp: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:145: const out = generateModbusDefines({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:146: modbus_tcp: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:161: const out = generateModbusDefines({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:162: modbus_tcp: { enabled: true, tcp_interface: 'Ethernet', enable_dhcp: true }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:171: it('combines RTU + TCP and emits MODBUS_ENABLED exactly once', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:172: const out = generateModbusDefines({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:173: modbus_rtu: { enabled: true, rtu_interface: 'Serial', rtu_baud_rate: '9600', rtu_slave_id: 5 }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:174: modbus_tcp: { enabled: true, tcp_interface: 'Ethernet', enable_dhcp: true }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:178: const occurrences = out.match(/#define MODBUS_ENABLED/g) ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:183: const out = generateModbusDefines({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:184: modbus_tcp: { enabled: true, enable_dhcp: true }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:191: const out = generateModbusDefines({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:192: modbus_tcp: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:203: const out = generateModbusDefines({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:204: modbus_tcp: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:218: const out = generateModbusDefines({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:219: modbus_rtu: { enabled: false, rtu_interface: 'Serial', rtu_baud_rate: '115200' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:220: modbus_tcp: { enabled: false, tcp_interface: 'Ethernet', enable_dhcp: true }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:226: const out = generateModbusDefines({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:227: modbus_rtu: { enabled: true, rtu_interface: 'Serial', rtu_baud_rate: '115200', rtu_slave_id: 1 }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\pipeline-runtime-v3.test.ts:39: generateRuntimeConfs: jest.fn(() => ({ modbusSlave: '', modbusMaster: '', s7Comm: '', opcUa: null, ethercat: '' })), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\pipeline-runtime-v3.test.ts:70: configuration: { resource: { tasks: [], instances: [], globalVariables: [] } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\pipeline-runtime-v3.test.ts:71: servers: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\pipeline.test.ts:54: modbusSlave: '', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\pipeline.test.ts:55: modbusMaster: '', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\pipeline.test.ts:97: configuration: { resource: { tasks: [], instances: [], globalVariables: [] } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\pipeline.test.ts:98: servers: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\pipeline.test.ts:536: configuration: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\pipeline.test.ts:972: return { modbusSlave: '', modbusMaster: '', s7Comm: '', opcUa: null, ethercat: '' } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\validate-empty-variables.test.ts:51: configuration: { resource: { tasks: [], instances: [], globalVariables: [] } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\index.ts:1: export { ModbusRtuTransport } from './modbus-rtu-transport' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\modbus-pdu.ts:2: * Modbus PDU builder/parser — pure helpers for the OpenPLC v4 debug +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\modbus-pdu.ts:3: * wire protocol. Builds and parses Modbus PDUs (no TCP header, no +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\modbus-pdu.ts:10: * `WebSocketDebugClient` and web's `ModbusDataChannelTransport` both +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\modbus-pdu.ts:44: import { ModbusDebugResponse, ModbusFunctionCode } from '../simulator/types' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\modbus-pdu.ts:81: if (code === ModbusDebugResponse.ERROR_OUT_OF_BOUNDS) return 'ERROR_OUT_OF_BOUNDS' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\modbus-pdu.ts:82: if (code === ModbusDebugResponse.ERROR_OUT_OF_MEMORY) return 'ERROR_OUT_OF_MEMORY' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\modbus-pdu.ts:92: writeU8(buf, 0, ModbusFunctionCode.DEBUG_GET_MD5) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\modbus-pdu.ts:105: writeU8(buf, 0, ModbusFunctionCode.DEBUG_GET_LIST) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\modbus-pdu.ts:125: writeU8(buf, 0, ModbusFunctionCode.DEBUG_SET) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\modbus-pdu.ts:162: if (fc !== ModbusFunctionCode.DEBUG_GET_MD5) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\modbus-pdu.ts:166: if (status !== ModbusDebugResponse.SUCCESS) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\modbus-pdu.ts:201: if (fc !== ModbusFunctionCode.DEBUG_GET_LIST) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\modbus-pdu.ts:205: if (status !== ModbusDebugResponse.SUCCESS) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\modbus-pdu.ts:240: if (fc !== ModbusFunctionCode.DEBUG_SET) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\modbus-pdu.ts:244: if (status !== ModbusDebugResponse.SUCCESS) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\modbus-pdu.ts:252: * Extract the function code from a Modbus PDU response. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\modbus-rtu-transport.ts:2: * Modbus RTU Transport — simulator debug transport. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\modbus-rtu-transport.ts:4: * Thin adapter that wraps the existing SimulatorService + ModbusRtuClient +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\modbus-rtu-transport.ts:9: * VirtualSerialPort + ModbusRtuClient pair (MainProcessBridge lines 894-909). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\modbus-rtu-transport.ts:16: export class ModbusRtuTransport implements DebugTransport { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\types.ts:5: * Mirrors the implicit interface from openplc-editor where ModbusTcpClient, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\types.ts:6: * ModbusRtuClient, and WebSocketDebugClient all implement the same methods. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\types.ts:8: * openplc-web transports: ModbusRtuTransport (simulator), ModbusDataChannelTransport (WebRTC), HttpTransport. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\types.ts:44: * to whichever client is active (ModbusTcpClient | ModbusRtuClient | WebSocketDebugClient). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\websocket-debug-transport.ts:16: * Wire details — every operation here is a Modbus PDU built / +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\websocket-debug-transport.ts:17: * parsed by `backend/shared/debug/modbus-pdu.ts`. The Socket.IO +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\websocket-debug-transport.ts:33: } from './modbus-pdu' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\websocket-debug-transport.ts:149: * Send a Modbus PDU over the `debug_command` event and parse the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-pdu.test.ts:13: import { ModbusDebugResponse, ModbusFunctionCode } from '../../simulator/types' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-pdu.test.ts:22: } from '../modbus-pdu' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-pdu.test.ts:30: expect(buf[0]).toBe(ModbusFunctionCode.DEBUG_GET_MD5) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-pdu.test.ts:42: buf[0] = ModbusFunctionCode.DEBUG_GET_MD5 +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-pdu.test.ts:43: buf[1] = ModbusDebugResponse.SUCCESS +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-pdu.test.ts:70: buf[0] = ModbusFunctionCode.DEBUG_GET_MD5 +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-pdu.test.ts:71: buf[1] = ModbusDebugResponse.SUCCESS +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-pdu.test.ts:85: expect(() => parseGetMd5Response(new Uint8Array([0x00, ModbusDebugResponse.SUCCESS, 0xad, 0xde]))).toThrow( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-pdu.test.ts:93: new Uint8Array([ModbusFunctionCode.DEBUG_GET_MD5, ModbusDebugResponse.ERROR_OUT_OF_BOUNDS, 0xad, 0xde]), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-pdu.test.ts:106: expect(buf[0]).toBe(ModbusFunctionCode.DEBUG_GET_LIST) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-pdu.test.ts:123: buf[0] = ModbusFunctionCode.DEBUG_GET_LIST +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-pdu.test.ts:124: buf[1] = ModbusDebugResponse.SUCCESS +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-pdu.test.ts:145: const buf = new Uint8Array([ModbusFunctionCode.DEBUG_GET_LIST, ModbusDebugResponse.SUCCESS]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-pdu.test.ts:156: expect(buf[0]).toBe(ModbusFunctionCode.DEBUG_SET) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-pdu.test.ts:181: parseSetVariableResponse(new Uint8Array([ModbusFunctionCode.DEBUG_SET, ModbusDebugResponse.SUCCESS])), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-pdu.test.ts:187: new Uint8Array([ModbusFunctionCode.DEBUG_SET, ModbusDebugResponse.ERROR_OUT_OF_BOUNDS]), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-rtu-transport.test.ts:40: import { ModbusRtuTransport } from '../modbus-rtu-transport' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-rtu-transport.test.ts:42: describe('ModbusRtuTransport', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-rtu-transport.test.ts:43: let transport: ModbusRtuTransport +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-rtu-transport.test.ts:47: transport = new ModbusRtuTransport() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\device-config-defaults.ts:4: * Default per-slave configuration for a newly added EtherCAT device. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\enrich-device-data.ts:15: SDOConfigurationEntry, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\enrich-device-data.ts:19: import { extractDefaultSdoConfigurations } from './sdo-config-defaults' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\enrich-device-data.ts:114: sdoConfigurations?: SDOConfigurationEntry[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\enrich-device-data.ts:122: sdoConfigurations: device.coeObjects?.length ? extractDefaultSdoConfigurations(device.coeObjects) : undefined, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\esi-parser-main.ts:7: * - parseESIDeviceFull: Extracts complete device data on-demand (for configuration) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\esi-parser.ts:255: * already-used locations from other devices (Modbus or EtherCAT). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\generate-ethercat-config.ts:6: SDOConfigurationEntry, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\generate-ethercat-config.ts:86: sdo_configurations: RuntimeSdoConfig[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\generate-ethercat-config.ts:209: * Converts SDOConfigurationEntry[] to RuntimeSdoConfig[] for the runtime plugin. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\generate-ethercat-config.ts:216: function buildSdoConfigurations(entries: SDOConfigurationEntry[] | undefined): RuntimeSdoConfig[] { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\generate-ethercat-config.ts:283: sdo_configurations: buildSdoConfigurations(device.sdoConfigurations), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\generate-ethercat-config.ts:290: * Generates the EtherCAT plugin configuration JSON from the project's remote devices. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\generate-ethercat-config.ts:296: * @returns The EtherCAT configuration as a JSON string, or null if no devices are configured +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\index.ts:7: export { extractDefaultSdoConfigurations } from './sdo-config-defaults' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\sdo-config-defaults.ts:2: * SDO Configuration Defaults Extraction +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\sdo-config-defaults.ts:15: import type { ESICoEObject, SDOConfigurationEntry } from '@root/middleware/shared/ports/esi-types' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\sdo-config-defaults.ts:117: * Extract default SDO configurations from CoE Object Dictionary. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\sdo-config-defaults.ts:119: * Returns one SDOConfigurationEntry per RW parameter found in the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\sdo-config-defaults.ts:127: export function extractDefaultSdoConfigurations(coeObjects: ESICoEObject[]): SDOConfigurationEntry[] { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\sdo-config-defaults.ts:128: const entries: SDOConfigurationEntry[] = [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\validate-ethercat-config.ts:43: * Run all internal validations on the EtherCAT runtime configuration JSON +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\debug-spec.ts:48: /** Mirror of `DeviceConfiguration` minus VPP screen data, which lives under `screens`. */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\debug-spec.ts:49: configuration: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\debug-spec.ts:56: * `DeviceConfiguration.vendorScreenData` — the editor passes it +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\debug-spec.ts:260: return { kind: 'error', title: 'Configuration Error', body: raw.required } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\board-info-resolver.test.ts:190: label: 'Modbus TCP', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\board-info-resolver.test.ts:393: label: 'Modbus TCP', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:12: configuration: { deviceBoard: 'Arduino Mega' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:71: { label: 'RTU', channel: 'rtu', enabledWhen: { $ref: 'screens.modbus_rtu.enabled' }, params: {} }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:72: { label: 'TCP', channel: 'tcp', enabledWhen: { $ref: 'screens.modbus_tcp.enabled' }, params: {} }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:74: messages: { noneEnabled: { title: 'Modbus Required', body: 'Enable RTU or TCP.' } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:77: expect(result).toEqual({ kind: 'error', title: 'Modbus Required', body: 'Enable RTU or TCP.' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:84: channels: [{ label: 'RTU', channel: 'rtu', enabledWhen: { $ref: 'screens.modbus_rtu.enabled' }, params: {} }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:97: { label: 'RTU', channel: 'rtu', enabledWhen: { $ref: 'screens.modbus_rtu.enabled' }, params: {} }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:98: { label: 'TCP', channel: 'tcp', enabledWhen: { $ref: 'screens.modbus_tcp.enabled' }, params: {} }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:105: state: { screens: { modbus_rtu: { enabled: true }, modbus_tcp: { enabled: true } } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:123: { label: 'RTU', channel: 'rtu', enabledWhen: { $ref: 'screens.modbus_rtu.enabled' }, params: {} }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:124: { label: 'TCP', channel: 'tcp', enabledWhen: { $ref: 'screens.modbus_tcp.enabled' }, params: {} }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:130: state: { screens: { modbus_rtu: { enabled: true }, modbus_tcp: { enabled: true } } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:143: { label: 'RTU', channel: 'rtu', enabledWhen: { $ref: 'screens.modbus_rtu.enabled' }, params: {} }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:144: { label: 'TCP', channel: 'tcp', enabledWhen: { $ref: 'screens.modbus_tcp.enabled' }, params: {} }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:149: makeContext({ state: { screens: { modbus_rtu: { enabled: true } } } }), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:190: port: { $ref: 'configuration.communicationPort' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:191: baudRate: { $ref: 'screens.modbus_rtu.rtu_baud_rate' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:200: configuration: { deviceBoard: 'Arduino Mega', communicationPort: '/dev/cu.usb' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:201: screens: { modbus_rtu: { rtu_baud_rate: '115200' } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:218: params: { baudRate: { $ref: 'screens.modbus_rtu.rtu_baud_rate', default: '115200' } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:237: baudRate: { $ref: 'screens.modbus_rtu.rtu_baud_rate', as: 'number' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:238: slaveId: { $ref: 'screens.modbus_rtu.rtu_slave_id', as: 'number' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:246: state: { screens: { modbus_rtu: { rtu_baud_rate: '57600', rtu_slave_id: 7 } } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:263: params: { ipAddress: { $ref: 'screens.modbus_tcp.ip_address' } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:281: params: { port: { $ref: 'configuration.communicationPort', required: 'No serial port selected.' } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:286: expect(result).toEqual({ kind: 'error', title: 'Configuration Error', body: 'No serial port selected.' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:299: params: { baudRate: { $ref: 'screens.modbus_rtu.rtu_baud_rate', as: 'number' } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:305: makeContext({ state: { screens: { modbus_rtu: { rtu_baud_rate: 'not-a-number' } } } }), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:349: params: { slaveId: { $ref: 'screens.modbus_rtu.rtu_slave_id', as: 'string' } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:355: makeContext({ state: { screens: { modbus_rtu: { rtu_slave_id: 7 } } } }), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:382: params: { ipAddress: { $ref: 'screens.modbus_tcp.ip_address' } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:385: when: { $ref: 'screens.modbus_tcp.enable_dhcp' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:399: makeContext({ state: { screens: { modbus_tcp: { enable_dhcp: true } } } }), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:415: screens: { modbus_tcp: { enable_dhcp: true } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:430: state: { screens: { modbus_tcp: { enable_dhcp: false, ip_address: '10.0.0.5' } } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:506: params: { ipAddress: { $ref: 'configuration.runtimeIpAddress' } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:513: state: { configuration: { deviceBoard: 'OpenPLC Runtime v3', runtimeIpAddress: '10.0.0.10' } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:532: ipAddress: { $ref: 'configuration.runtimeIpAddress' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:542: configuration: { deviceBoard: 'OpenPLC Runtime v4', runtimeIpAddress: '10.0.0.20' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:573: ipAddress: { $ref: 'configuration.runtimeIpAddress' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:584: configuration: { deviceBoard: 'OpenPLC Runtime v4' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\build-pipeline.ts:186: configuration: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\build-pipeline.ts:188: ...project.data.configuration.resource, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\build-pipeline.ts:190: ...project.data.configuration.resource.tasks, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\build-pipeline.ts:194: ...project.data.configuration.resource.instances, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\build-pipeline.ts:372: // - `_config.st` (xml2st's CONFIGURATION block references the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\build-pipeline.ts:375: // diagnostics). Libraries don't carry configurations +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\build-pipeline.ts:535: * is filtered out upstream (libraries don't carry configurations), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\program-build-pipeline.ts:247: // shared `configuration.cpp`. The runtime's Makefile picks up +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\__tests__\build-pipeline.test.ts:65: configuration: { resource: { tasks: [], instances: [], globalVariables: [] } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\__tests__\build-pipeline.test.ts:232: const { tasks, instances } = stubbed.data.configuration.resource +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\__tests__\build-pipeline.test.ts:253: configuration: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\__tests__\build-pipeline.test.ts:270: expect(stubbed.data.configuration.resource.tasks).toHaveLength(2) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\__tests__\build-pipeline.test.ts:271: expect(stubbed.data.configuration.resource.tasks[0]?.name).toBe('preExisting') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\__tests__\build-pipeline.test.ts:272: expect(stubbed.data.configuration.resource.globalVariables[0]?.name).toBe('preExistingGlobal') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\__tests__\build-pipeline.test.ts:447: it('drops `_config.st` so strucpp does not error on the stub configuration', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\__tests__\build-pipeline.test.ts:450: // CONFIGURATION block. Leaving `_config.st` in the strucpp +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\__tests__\build-pipeline.test.ts:464: 'CONFIGURATION Config0\n' + +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\__tests__\build-pipeline.test.ts:469: 'END_CONFIGURATION\n' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\__tests__\build-pipeline.test.ts:780: expect(verification.data.configuration.resource.tasks).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\__tests__\build-pipeline.test.ts:781: expect(verification.data.configuration.resource.instances).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\__tests__\library-build-orchestrator.test.ts:110: configuration: { resource: { tasks: [], instances: [], globalVariables: [] } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\__tests__\poll-runtime-compilation.test.ts:119: '[DEBUG] update_plugin_configurations called\n', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\project\create-project-files.ts:20: import type { DeviceConfiguration, DevicePin } from '../types/PLC/devices' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\project\create-project-files.ts:41: deviceConfiguration: DeviceConfiguration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\project\create-project-files.ts:136: * - PLC project: full configuration with one cyclic task ('task0'), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\project\create-project-files.ts:138: * - Library project: degenerate configuration (empty tasks, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\project\create-project-files.ts:140: * library doesn't run anything; the configuration block exists +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\project\create-project-files.ts:161: configuration: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\project\create-project-files.ts:201: const deviceConfiguration = getDefaultSchemaValues( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\project\create-project-files.ts:202: projectDefaultFilesMapSchema['devices/configuration.json'], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\project\create-project-files.ts:203: ) as DeviceConfiguration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\project\create-project-files.ts:211: deviceConfiguration, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\project\iterate-write-project-files.ts:32: | { category: 'device-config'; relativePath: 'devices/configuration.json'; content: string } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\project\iterate-write-project-files.ts:52: yield { category: 'device-config', relativePath: 'devices/configuration.json', content: files.deviceConfig } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\project\project-files-schema.ts:1: import { deviceConfigurationSchema, pinMappingFileSchema } from '@root/backend/shared/types/PLC/devices' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\project\project-files-schema.ts:6: 'devices/configuration.json': deviceConfigurationSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\project\__tests__\create-project-files.test.ts:85: const resource = built.project.data.configuration.resource +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\project\__tests__\create-project-files.test.ts:131: it('emits a degenerate configuration (no tasks, no instances)', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\project\__tests__\create-project-files.test.ts:132: const resource = built.project.data.configuration.resource +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\project\__tests__\iterate-write-project-files.test.ts:43: relativePath: 'devices/configuration.json', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\project\__tests__\iterate-write-project-files.test.ts:57: relativePath: 'devices/configuration.json', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\project\__tests__\iterate-write-project-files.test.ts:110: { relativePath: 'devices/servers/modbus.json', content: '{"port":502}' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\project\__tests__\iterate-write-project-files.test.ts:111: { relativePath: 'devices/servers/opcua.json', content: '{"port":4840}' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\project\__tests__\iterate-write-project-files.test.ts:115: { category: 'server', relativePath: 'devices/servers/modbus.json', content: '{"port":502}' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\project\__tests__\iterate-write-project-files.test.ts:116: { category: 'server', relativePath: 'devices/servers/opcua.json', content: '{"port":4840}' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\project\__tests__\iterate-write-project-files.test.ts:161: it('emits in a stable order: project.json, device-config, pin-mapping, library-manifest, pous, servers, remote-devices', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\project\__tests__\iterate-write-project-files.test.ts:168: serverFiles: [{ relativePath: 'devices/servers/s.json', content: 'S' }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\index.ts:1: export type { SerialPortLike } from './modbus-rtu-client' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\index.ts:2: export { ModbusRtuClient } from './modbus-rtu-client' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\index.ts:5: export { ModbusDebugResponse, ModbusFunctionCode } from './types' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\modbus-rtu-client.ts:4: import { ModbusDebugResponse, ModbusFunctionCode } from './types' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\modbus-rtu-client.ts:21: interface ModbusRtuClientOptions { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\modbus-rtu-client.ts:69: // Modbus RTU Client (web-compatible) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\modbus-rtu-client.ts:72: export class ModbusRtuClient { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\modbus-rtu-client.ts:112: constructor(options: ModbusRtuClientOptions) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\modbus-rtu-client.ts:124: crcHi = crcLo ^ ModbusRtuClient.CRC_HI_TABLE[index] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\modbus-rtu-client.ts:125: crcLo = ModbusRtuClient.CRC_LO_TABLE[index] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\modbus-rtu-client.ts:150: // Matches ARDUINO_BOOTLOADER_DELAY_MS in the editor's ModbusRtuClient. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\modbus-rtu-client.ts:269: const functionCode = ModbusFunctionCode.DEBUG_GET_MD5 +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\modbus-rtu-client.ts:295: if (functionCodeResponse !== (ModbusFunctionCode.DEBUG_GET_MD5 as number)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\modbus-rtu-client.ts:299: if (statusCode !== (ModbusDebugResponse.SUCCESS as number)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\modbus-rtu-client.ts:332: const functionCode = ModbusFunctionCode.DEBUG_GET_LIST +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\modbus-rtu-client.ts:358: if (functionCodeResponse !== (ModbusFunctionCode.DEBUG_GET_LIST as number)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\modbus-rtu-client.ts:362: if (statusCode === (ModbusDebugResponse.ERROR_OUT_OF_BOUNDS as number)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\modbus-rtu-client.ts:366: if (statusCode === (ModbusDebugResponse.ERROR_OUT_OF_MEMORY as number)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\modbus-rtu-client.ts:370: if (statusCode !== (ModbusDebugResponse.SUCCESS as number)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\modbus-rtu-client.ts:414: const functionCode = ModbusFunctionCode.DEBUG_SET +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\modbus-rtu-client.ts:444: if (functionCodeResponse !== (ModbusFunctionCode.DEBUG_SET as number)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\modbus-rtu-client.ts:448: if (statusCode === (ModbusDebugResponse.ERROR_OUT_OF_BOUNDS as number)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\modbus-rtu-client.ts:452: if (statusCode === (ModbusDebugResponse.ERROR_OUT_OF_MEMORY as number)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\modbus-rtu-client.ts:456: if (statusCode !== (ModbusDebugResponse.SUCCESS as number)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\simulator-module.ts:206: // Wire USART0 TX to the Modbus RTU bridge callback +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\types.ts:1: export enum ModbusFunctionCode { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\types.ts:9: export enum ModbusDebugResponse { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\virtual-serial-port.ts:6: * ModbusRtuClient to communicate with the avr8js emulator unchanged. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\virtual-serial-port.ts:24: // Wire UART RX: bytes from emulated device -> ModbusRtuClient via 'data' events +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\debug-e2e.test.ts:5: * real ModbusRtuClient + VirtualSerialPort + SimulatorModule stack, and +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\debug-e2e.test.ts:14: * targeting arduino:avr:mega with MODBUS_ENABLED + MBSERIAL defined. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\debug-e2e.test.ts:22: import { ModbusRtuClient } from '../modbus-rtu-client' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\debug-e2e.test.ts:26: // jsdom polyfill — matches modbus-rtu-client.test.ts. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\debug-e2e.test.ts:38: describeIfHex('Phase 4 debugger end-to-end (avr8js + ModbusRtuClient)', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\debug-e2e.test.ts:41: let client: ModbusRtuClient +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\debug-e2e.test.ts:48: client = new ModbusRtuClient({ slaveId: 1, timeout: 5000, serialPort: vsp }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:2: * Tests for ModbusRtuClient. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:9: import { ModbusRtuClient, type SerialPortLike } from '../modbus-rtu-client' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:10: import { ModbusDebugResponse, ModbusFunctionCode } from '../types' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:172: describe('ModbusRtuClient', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:174: let client: ModbusRtuClient +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:179: client = new ModbusRtuClient({ slaveId: 1, timeout: CLIENT_TIMEOUT, serialPort: port }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:267: payload[0] = ModbusDebugResponse.SUCCESS +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:271: autoRespond(buildResponse(1, ModbusFunctionCode.DEBUG_GET_MD5, payload)) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:283: payload[0] = ModbusDebugResponse.SUCCESS +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:288: autoRespond(buildResponse(1, ModbusFunctionCode.DEBUG_GET_MD5, payload)) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:297: const payload = new Uint8Array([ModbusDebugResponse.SUCCESS]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:307: autoRespond(buildResponse(1, ModbusFunctionCode.DEBUG_GET_MD5, payload)) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:343: payload[0] = ModbusDebugResponse.SUCCESS +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:353: autoRespond(buildResponse(1, ModbusFunctionCode.DEBUG_GET_LIST, payload)) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:365: const payload = new Uint8Array([ModbusDebugResponse.SUCCESS]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:377: buildResponse(1, ModbusFunctionCode.DEBUG_GET_LIST, new Uint8Array([ModbusDebugResponse.ERROR_OUT_OF_BOUNDS])), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:389: buildResponse(1, ModbusFunctionCode.DEBUG_GET_LIST, new Uint8Array([ModbusDebugResponse.ERROR_OUT_OF_MEMORY])), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:400: autoRespond(buildResponse(1, ModbusFunctionCode.DEBUG_GET_LIST, new Uint8Array([0x99]))) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:411: buildResponse(1, ModbusFunctionCode.DEBUG_GET_LIST, new Uint8Array([ModbusDebugResponse.SUCCESS, 0x00])), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:423: payload[0] = ModbusDebugResponse.SUCCESS +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:428: autoRespond(buildResponse(1, ModbusFunctionCode.DEBUG_GET_LIST, payload)) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:470: autoRespond(buildResponse(1, ModbusFunctionCode.DEBUG_SET, new Uint8Array([ModbusDebugResponse.SUCCESS]))) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:479: autoRespond(buildResponse(1, ModbusFunctionCode.DEBUG_SET, new Uint8Array([ModbusDebugResponse.SUCCESS]))) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:488: autoRespond(buildResponse(1, 0x99, new Uint8Array([ModbusDebugResponse.SUCCESS]))) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:499: buildResponse(1, ModbusFunctionCode.DEBUG_SET, new Uint8Array([ModbusDebugResponse.ERROR_OUT_OF_BOUNDS])), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:511: buildResponse(1, ModbusFunctionCode.DEBUG_SET, new Uint8Array([ModbusDebugResponse.ERROR_OUT_OF_MEMORY])), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:522: autoRespond(buildResponse(1, ModbusFunctionCode.DEBUG_SET, new Uint8Array([0x99]))) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:600: autoRespond(buildResponse(1, ModbusFunctionCode.DEBUG_SET, new Uint8Array([ModbusDebugResponse.SUCCESS]))) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:618: autoRespond(buildResponse(1, ModbusFunctionCode.DEBUG_SET, new Uint8Array([ModbusDebugResponse.SUCCESS]))) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:634: function mockSendRequest(client: ModbusRtuClient, response: Uint8Array | Error | string): void { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:709: autoRespond(buildResponse(1, ModbusFunctionCode.DEBUG_SET, new Uint8Array([ModbusDebugResponse.SUCCESS]))) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:724: autoRespond(buildResponse(1, ModbusFunctionCode.DEBUG_SET, new Uint8Array([ModbusDebugResponse.SUCCESS]))) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:738: const frame = new Uint8Array([0x01, ModbusFunctionCode.DEBUG_SET, ModbusDebugResponse.SUCCESS]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:762: ModbusFunctionCode.DEBUG_SET, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:763: new Uint8Array([ModbusDebugResponse.SUCCESS]), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\from-schema.ts:33: configuration: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\from-schema.ts:34: tasks: (data.configuration?.resource?.tasks ?? []).map(projectTask), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\from-schema.ts:35: instances: (data.configuration?.resource?.instances ?? []).map(projectInstance), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\from-schema.ts:36: globalVariables: (data.configuration?.resource?.globalVariables ?? []).map((v) => +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\from-schema.ts:47: type SchemaTask = SchemaPLCProjectData['configuration']['resource']['tasks'][number] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\from-schema.ts:48: type SchemaInstance = SchemaPLCProjectData['configuration']['resource']['instances'][number] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\from-schema.ts:156: // vars live under configuration.globalVariables, not in a POU +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\index.ts:5: * - Data types, configuration, textual POUs (ST / IL / Python / C++) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\index.ts:17: import { generateConfigurations } from './emit/configuration' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\index.ts:58: * type, POU, and configuration. Pure function — no I/O, no +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\index.ts:105: // Trailing CONFIGURATION block — emit IR-native. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\index.ts:106: for (const [text] of generateConfigurations(project)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\types.ts:13: * `servers`, no `remoteDevices`, no `libraries`, no `debugVariables`. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\types.ts:24: configuration: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\types.ts:143: /* ---------------------------- configuration ------------------------------- */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\configuration.ts:2: * IR-native `CONFIGURATION … END_CONFIGURATION` block emitter. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\configuration.ts:4: * Walks `TranspileProject.configuration` and emits byte-identical +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\configuration.ts:5: * chunks against the python oracle's `ProgramGenerator.GenerateConfiguration` +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\configuration.ts:8: * The IR carries exactly one configuration with one resource, named +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\configuration.ts:10: * produces. Global vars are emitted under the configuration block +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\configuration.ts:15: import { computeConfigurationName, computeConfigurationResourceName } from '../helpers/text-helpers' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\configuration.ts:24: * Emit the trailing `\nCONFIGURATION … END_CONFIGURATION\n` block. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\configuration.ts:29: export function generateConfigurations(project: TranspileProject): ProgramChunk[] { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\configuration.ts:30: const configTagname = computeConfigurationName(CONFIG_NAME) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\configuration.ts:31: const resourceTagname = computeConfigurationResourceName(CONFIG_NAME, RESOURCE_NAME) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\configuration.ts:35: out.push(['\nCONFIGURATION ', []]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\configuration.ts:39: // Configuration-level global variables. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\configuration.ts:42: project.configuration.globalVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\configuration.ts:60: project.configuration.tasks.forEach((task, taskNumber) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\configuration.ts:93: for (const task of project.configuration.tasks) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\configuration.ts:94: for (const instance of project.configuration.instances) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\configuration.ts:106: for (const instance of project.configuration.instances) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\configuration.ts:117: out.push(['END_CONFIGURATION\n', []]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\helpers\text-helpers.ts:70: export function computeConfigurationName(name: string): string { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\helpers\text-helpers.ts:76: export function computeConfigurationResourceName(config: string, resource: string): string { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:267: const PLCConfigurationSchema = z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:274: type PLCConfiguration = z.infer +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:276: const PLCServerProtocolSchema = z.enum(['modbus-tcp', 's7comm', 'ethernet-ip', 'opcua']) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:279: const ModbusSlaveBufferMappingSchema = z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:297: type ModbusSlaveBufferMapping = z.infer +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:299: const ModbusSlaveConfigSchema = z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:303: bufferMapping: ModbusSlaveBufferMappingSchema.optional(), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:305: type ModbusSlaveConfig = z.infer +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:327: const S7CommServerSettingsSchema = z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:338: type S7CommServerSettings = z.infer +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:393: server: S7CommServerSettingsSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:402: // OPC-UA Server Configuration Types +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:462: // OPC-UA Field Configuration Schema (for structure fields) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:489: // OPC-UA Node Configuration Schema (variable/structure/array) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:508: const OpcUaServerSettingsSchema = z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:517: type OpcUaServerSettings = z.infer +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:519: // OPC-UA Security Configuration Schema +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:528: // OPC-UA Address Space Configuration Schema +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:535: // Complete OPC-UA Server Configuration Schema +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:537: server: OpcUaServerSettingsSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:546: const PLCServerSchema = z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:549: modbusSlaveConfig: ModbusSlaveConfigSchema.optional(), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:553: type PLCServer = z.infer +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:555: // Remote Device (Modbus Master) types +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:556: const ModbusFunctionCodeSchema = z.enum(['1', '2', '3', '4', '5', '6', '15', '16']) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:557: type ModbusFunctionCode = z.infer +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:559: const ModbusErrorHandlingSchema = z.enum(['keep-last-value', 'set-to-zero']) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:560: type ModbusErrorHandling = z.infer +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:562: // Modbus transport type: TCP/IP or RTU (serial) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:563: const ModbusTransportTypeSchema = z.enum(['tcp', 'rtu']) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:564: type ModbusTransportType = z.infer +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:566: // Modbus RTU parity settings +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:567: const ModbusParitySchema = z.enum(['N', 'E', 'O']) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:568: type ModbusParity = z.infer +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:570: const ModbusIOPointSchema = z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:577: type ModbusIOPoint = z.infer +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:579: const ModbusIOGroupSchema = z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:582: functionCode: ModbusFunctionCodeSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:586: errorHandling: ModbusErrorHandlingSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:587: ioPoints: z.array(ModbusIOPointSchema), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:589: type ModbusIOGroup = z.infer +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:591: const ModbusTcpConfigSchema = z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:593: transport: ModbusTransportTypeSchema.optional(), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:600: parity: ModbusParitySchema.optional(), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:606: ioGroups: z.array(ModbusIOGroupSchema), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:608: type ModbusTcpConfig = z.infer +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:610: const PLCRemoteDeviceProtocolSchema = z.enum(['modbus-tcp', 'ethernet-ip', 'ethercat', 'profinet']) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:613: // ---- EtherCAT Configuration Schemas ---- +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:697: const SDOConfigurationEntrySchema = z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:723: sdoConfigurations: z.array(SDOConfigurationEntrySchema).optional(), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:744: modbusTcpConfig: ModbusTcpConfigSchema.optional(), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:791: configuration: PLCConfigurationSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:792: servers: z.array(PLCServerSchema).optional(), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:819: deletedServers: z +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:858: ModbusErrorHandlingSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:859: ModbusFunctionCodeSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:860: ModbusIOGroupSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:861: ModbusIOPointSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:862: ModbusParitySchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:863: ModbusSlaveBufferMappingSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:864: ModbusSlaveConfigSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:865: ModbusTcpConfigSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:866: ModbusTransportTypeSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:877: OpcUaServerSettingsSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:882: PLCConfigurationSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:899: PLCServerSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:909: S7CommServerSettingsSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:913: SDOConfigurationEntrySchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:921: ModbusErrorHandling, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:922: ModbusFunctionCode, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:923: ModbusIOGroup, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:924: ModbusIOPoint, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:925: ModbusParity, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:926: ModbusSlaveBufferMapping, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:927: ModbusSlaveConfig, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:928: ModbusTcpConfig, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:929: ModbusTransportType, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:940: OpcUaServerSettings, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:945: PLCConfiguration, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:972: S7CommServerSettings, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\devices\configuration.ts:3: const deviceConfigurationSchema = z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\devices\configuration.ts:22: type DeviceConfiguration = z.infer +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\devices\configuration.ts:24: export { deviceConfigurationSchema } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\devices\configuration.ts:25: export type { DeviceConfiguration } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\devices\index.ts:1: export * from './configuration' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\devices\pin.ts:19: * in the alias registry along with VPP / Modbus / EtherCAT aliases, so +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\devices\pin.ts:48: * `BoardInfo.name` (the value of `configuration.deviceBoard`). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\devices\pin.ts:49: * Pin configuration is preserved per target so switching +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\devices\pin.ts:54: * under whatever `configuration.deviceBoard` names as the active +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\migrate-project-to-name-type-system.ts:35: * 3. Removes all `id` fields from task and instance configurations +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\migrate-project-to-name-type-system.ts:63: const globalVariableCount = migratedProject.configuration.resource.globalVariables.length +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\migrate-project-to-name-type-system.ts:64: migratedProject.configuration.resource.globalVariables = +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\migrate-project-to-name-type-system.ts:65: migratedProject.configuration.resource.globalVariables.map(removeVariableIds) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\migrate-project-to-name-type-system.ts:80: migratedProject.configuration.resource.tasks = migratedProject.configuration.resource.tasks.map((task) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\migrate-project-to-name-type-system.ts:85: migratedProject.configuration.resource.instances = migratedProject.configuration.resource.instances.map( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\migrate-project-to-name-type-system.ts:109: migratedProject.configuration.resource.globalVariables.forEach((variable) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\migrate-project-to-name-type-system.ts:140: const hasGlobalVariableIds = projectData.configuration.resource.globalVariables.some( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:20: DeviceConfiguration, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:30: import { deviceConfigurationSchema, pinMappingFileSchema } from '../types/PLC/devices' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:31: import { PLCProjectSchema, PLCRemoteDeviceSchema, PLCServerSchema } from '../types/PLC/open-plc' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:49: configurations: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:56: servers?: PLCServer[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:72: deviceConfiguration?: DeviceConfiguration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:76: * gets keyed under `deviceConfiguration.deviceBoard` on load. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:334: * @param deviceConfig - Raw content of devices/configuration.json +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:337: * @param serverFiles - Raw server config files from devices/servers/ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:380: // Parse and Zod-validate device configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:381: let deviceConfiguration: DeviceConfiguration | undefined +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:385: const result = deviceConfigurationSchema.safeParse(raw) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:387: deviceConfiguration = result.data +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:389: console.error('[parseProjectFiles] devices/configuration.json Zod errors:', result.error.issues) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:390: warnings.push('devices/configuration.json has invalid structure and was loaded with defaults.') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:391: deviceConfiguration = getDefaultSchemaValues(deviceConfigurationSchema) as DeviceConfiguration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:394: deviceConfiguration = getDefaultSchemaValues(deviceConfigurationSchema) as DeviceConfiguration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:397: warnings.push('devices/configuration.json is malformed and could not be read. Using defaults.') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:398: deviceConfiguration = getDefaultSchemaValues(deviceConfigurationSchema) as DeviceConfiguration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:405: // keyed under whatever `configuration.deviceBoard` resolves to on +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:444: const servers: PLCServer[] = [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:448: const result = PLCServerSchema.safeParse(parsed) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:450: servers.push(result.data) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:453: warnings.push(`Server file "${file.relativePath}" has invalid configuration and was skipped.`) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:470: warnings.push(`Remote device file "${file.relativePath}" has invalid configuration and was skipped.`) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:479: const configuration = (data.configuration ?? +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:480: data.configurations ?? { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:482: }) as ParsedProjectData['projectData']['configurations'] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:486: // get here `configuration.resource` is always populated. Kept as a defensive guard against +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:489: if (!configuration.resource) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:490: configuration.resource = { tasks: [], instances: [], globalVariables: [] } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:492: /* istanbul ignore next -- defensive: PLCConfigurationSchema requires tasks/instances/ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:495: if (!configuration.resource.tasks) configuration.resource.tasks = [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:497: if (!configuration.resource.instances) configuration.resource.instances = [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:499: if (!configuration.resource.globalVariables) configuration.resource.globalVariables = [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:506: configurations: configuration, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:507: servers: servers.length > 0 ? servers : ((data.servers as PLCServer[]) ?? []), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:523: deviceConfiguration, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:1: import type { ModbusIOGroup, PLCRemoteDevice } from '../../../../middleware/shared/ports/types' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:3: interface ModbusMasterIOPoint { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:12: interface ModbusMasterDeviceConfigBase { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:17: io_points: ModbusMasterIOPoint[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:21: interface ModbusMasterTcpDeviceConfig extends ModbusMasterDeviceConfigBase { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:28: interface ModbusMasterRtuDeviceConfig extends ModbusMasterDeviceConfigBase { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:37: type ModbusMasterDeviceConfig = ModbusMasterTcpDeviceConfig | ModbusMasterRtuDeviceConfig +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:39: interface ModbusMasterDevice { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:41: protocol: 'MODBUS' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:42: config: ModbusMasterDeviceConfig +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:45: type ModbusMasterConfig = ModbusMasterDevice[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:53: type ModbusMasterConfigLog = (message: string) => void +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:73: * Converts a ModbusIOGroup to a ModbusMasterIOPoint for the runtime configuration. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:76: const convertIOGroupToIOPoint = (ioGroup: ModbusIOGroup): ModbusMasterIOPoint => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:90: * Converts a PLCRemoteDevice with Modbus configuration to a ModbusMasterDevice +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:91: * for the runtime configuration. Supports both TCP and RTU transports. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:93: const convertRemoteDeviceToModbusMaster = ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:95: log?: ModbusMasterConfigLog, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:96: ): ModbusMasterDevice | null => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:97: /* istanbul ignore next -- defensive: callers pre-filter to modbus-tcp with config */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:98: if (device.protocol !== 'modbus-tcp' || !device.modbusTcpConfig) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:102: const { modbusTcpConfig } = device +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:103: const ioGroups = modbusTcpConfig.ioGroups || [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:109: const ioPoints: ModbusMasterIOPoint[] = ioGroups.map(convertIOGroupToIOPoint) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:112: const transport = modbusTcpConfig.transport || 'tcp' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:115: // RTU configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:116: if (!modbusTcpConfig.serialPort) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:120: log?.(`Modbus RTU device "${device.name}" is missing a serial port configuration and will be skipped.`) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:126: protocol: 'MODBUS', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:130: serial_port: modbusTcpConfig.serialPort, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:131: baud_rate: modbusTcpConfig.baudRate ?? 9600, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:132: parity: modbusTcpConfig.parity ?? 'N', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:133: stop_bits: modbusTcpConfig.stopBits ?? 1, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:134: data_bits: modbusTcpConfig.dataBits ?? 8, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:135: timeout_ms: modbusTcpConfig.timeout, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:136: slave_id: modbusTcpConfig.slaveId ?? 1, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:141: // TCP configuration (default) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:144: protocol: 'MODBUS', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:148: host: modbusTcpConfig.host ?? '127.0.0.1', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:149: port: modbusTcpConfig.port ?? 502, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:150: timeout_ms: modbusTcpConfig.timeout, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:151: slave_id: modbusTcpConfig.slaveId ?? 1, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:159: * Generates the Modbus Master plugin configuration JSON from the project's remote devices. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:160: * Returns null if there are no Modbus TCP devices configured. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:165: * @returns The Modbus Master configuration as a JSON string, or null if no devices are configured +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:167: export const generateModbusMasterConfig = ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:169: log?: ModbusMasterConfigLog, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:175: const modbusTcpDevices = remoteDevices.filter((device) => device.protocol === 'modbus-tcp' && device.modbusTcpConfig) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:177: if (modbusTcpDevices.length === 0) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:181: const config: ModbusMasterConfig = modbusTcpDevices +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:182: .map((device) => convertRemoteDeviceToModbusMaster(device, log)) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:183: .filter((device): device is ModbusMasterDevice => device !== null) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\generate-modbus-master-config.ts:192: export type { ModbusMasterConfig, ModbusMasterDevice, ModbusMasterDeviceConfig, ModbusMasterIOPoint } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:2: import { generateModbusMasterConfig } from '../generate-modbus-master-config' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:6: protocol: 'modbus-tcp', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:7: modbusTcpConfig: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:30: protocol: 'modbus-tcp', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:31: modbusTcpConfig: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:55: describe('generateModbusMasterConfig', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:57: expect(generateModbusMasterConfig(undefined)).toBeNull() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:61: expect(generateModbusMasterConfig([])).toBeNull() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:64: it('returns null when no modbus-tcp devices exist', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:66: expect(generateModbusMasterConfig(devices)).toBeNull() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:69: it('returns null when modbus-tcp device has no config', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:70: const devices: PLCRemoteDevice[] = [{ name: 'NoConfig', protocol: 'modbus-tcp' }] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:71: expect(generateModbusMasterConfig(devices)).toBeNull() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:74: it('returns null when modbus-tcp device has empty IO groups', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:78: protocol: 'modbus-tcp', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:79: modbusTcpConfig: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:85: expect(generateModbusMasterConfig(devices)).toBeNull() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:89: const result = generateModbusMasterConfig([makeTcpDevice()]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:95: expect(parsed[0].protocol).toBe('MODBUS') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:105: const result = generateModbusMasterConfig([makeTcpDevice()]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:118: const result = generateModbusMasterConfig([makeRtuDevice()]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:134: protocol: 'modbus-tcp', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:135: modbusTcpConfig: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:153: expect(generateModbusMasterConfig([device])).toBeNull() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:159: protocol: 'modbus-tcp', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:160: modbusTcpConfig: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:179: expect(generateModbusMasterConfig([device], log)).toBeNull() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:181: 'Modbus RTU device "BadRTU" is missing a serial port configuration and will be skipped.', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:188: protocol: 'modbus-tcp', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:189: modbusTcpConfig: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:206: const result = generateModbusMasterConfig([device]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:216: protocol: 'modbus-tcp', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:217: modbusTcpConfig: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:236: const result = generateModbusMasterConfig([device]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:247: device.modbusTcpConfig!.ioGroups[0].offset = '0xABCD' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:249: const result = generateModbusMasterConfig([device]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:256: device.modbusTcpConfig!.ioGroups[0].offset = '256' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:258: const result = generateModbusMasterConfig([device]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:265: device.modbusTcpConfig!.ioGroups[0].offset = 'abc' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:267: const result = generateModbusMasterConfig([device]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:274: device.modbusTcpConfig!.ioGroups[0].ioPoints = [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:276: const result = generateModbusMasterConfig([device]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:283: device.modbusTcpConfig!.ioGroups[0].ioPoints = undefined +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:285: const result = generateModbusMasterConfig([device]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:291: const result = generateModbusMasterConfig([makeTcpDevice({ name: 'Dev1' }), makeTcpDevice({ name: 'Dev2' })]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:299: it('skips non-modbus devices in mixed array', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:300: const devices: PLCRemoteDevice[] = [{ name: 'EtherCAT', protocol: 'ethercat' }, makeTcpDevice({ name: 'Modbus1' })] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:302: const result = generateModbusMasterConfig(devices) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:305: expect(parsed[0].name).toBe('Modbus1') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:310: device.modbusTcpConfig!.ioGroups[0].offset = ' 10 ' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:312: const result = generateModbusMasterConfig([device]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:319: device.modbusTcpConfig!.ioGroups[0].offset = '0Xff' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:321: const result = generateModbusMasterConfig([device]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:329: protocol: 'modbus-tcp', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:330: modbusTcpConfig: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:336: // The filter will match (protocol + config present), but convertRemoteDeviceToModbusMaster +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\modbus\__tests__\generate-modbus-master-config.test.ts:338: expect(generateModbusMasterConfig([device])).toBeNull() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\split-program-st.ts:91: const otherStartRe = /^(PROGRAM|FUNCTION|FUNCTION_BLOCK|TYPE|CONFIGURATION|VAR_GLOBAL)\b/i +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\split-program-st.ts:105: * `CONFIGURATION..END_CONFIGURATION` blocks in document order. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\split-program-st.ts:112: const startRe = /^(TYPE|CONFIGURATION|VAR_GLOBAL)\b/i +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\split-program-st.ts:115: CONFIGURATION: /^END_CONFIGURATION\b/i, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\split-program-st.ts:180: // Generic blocks (TYPE / VAR_GLOBAL / CONFIGURATION) — must not +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\split-program-st.ts:212: CONFIGURATION: '_config.st', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\xml-generator.ts:30: * any program POU name and uses the configuration's `instances[]` +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\xml-generator.ts:54: const configuration = projectToGenerateXML.configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\xml-generator.ts:55: xmlResult = oldEditorInstanceToXml(oldXml, configuration) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\xml-generator.ts:69: const configuration = projectToGenerateXML.configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\xml-generator.ts:70: xmlResult = codeSysInstanceToXml(csXml, configuration) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\collect-library-blocks.test.ts:32: // configuration etc. are unused by the collector +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\preprocess-pous.test.ts:57: configurations: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\split-program-st.test.ts:91: it('extracts CONFIGURATION into _config.st', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\split-program-st.test.ts:95: 'CONFIGURATION Config0\n' + +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\split-program-st.test.ts:100: 'END_CONFIGURATION\n' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\split-program-st.test.ts:104: expect(result!.files.get('_config.st')).toContain('CONFIGURATION Config0') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\split-program-st.test.ts:247: it('handles a multi-POU + TYPE + CONFIGURATION program', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\split-program-st.test.ts:267: CONFIGURATION Config0 +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\split-program-st.test.ts:272: END_CONFIGURATION +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\xml-generator.test.ts:72: configuration: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\xml-generator.test.ts:92: // compiler now picks the entry program from the configuration's +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\xml-generator.test.ts:153: expect(mockOldInstanceToXml).toHaveBeenCalledWith(expect.anything(), project.configuration) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\xml-generator.test.ts:180: expect(mockCsInstanceToXml).toHaveBeenCalledWith(expect.anything(), project.configuration) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\byte-encoder.ts:2: * Encodes form-field values into a configuration byte array. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\byte-encoder.ts:4: * VPP module configuration screens declare an `encoding` block per +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\byte-encoder.ts:6: * SPI configuration payload the runtime plugin pushes to each slot +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\byte-encoder.ts:84: * Encode field values into a configuration byte array. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:51: type ModuleConfiguration = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:56: * configuration form. */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:120: /** Module configuration bytes for the runtime to push over SPI +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:123: * no configuration screen or the user left every field empty. */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:218: * - Which module is in each slot (from vendor screen `module-configuration`) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:224: const moduleConfig = (vendorScreenData['module-configuration'] as ModuleConfiguration | undefined) ?? {} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:291: // Module configuration bytes — only when the manifest declared a +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:304: * Build the per-slot module-configuration byte entries for an Arduino +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:324: const moduleConfig = (vendorScreenData['module-configuration'] as ModuleConfiguration | undefined) ?? {} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:379: /* Module configuration encoding */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:420: * Encode the configuration bytes for a single slot. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:455: * data (keyed by persistence keys other than 'module-configuration' and +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:457: * from the backplane configuration + I/O mapping. When `devicePins` is +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:471: const RESERVED_KEYS = new Set(['module-configuration', 'io-mapping']) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:479: // Always write the slots array from module configuration + IO mapping +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:139: it('skips reserved keys (module-configuration, io-mapping) when merging at root', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:141: 'module-configuration': { slots: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:146: // it's the computed slots array, not the raw module-configuration. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:172: 'module-configuration': { slots: ['di-8'] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:194: 'module-configuration': { slots: ['di-8'] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:209: 'module-configuration': { slots: ['ai-4'] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:224: 'module-configuration': { slots: ['real-ai-2'] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:248: 'module-configuration': { slots: ['real-ao-1'] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:270: 'module-configuration': { slots: ['mixed'] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:303: 'module-configuration': { slots: ['ai4-ao2-flip'] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:341: 'module-configuration': { slots: ['real-bad'] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:355: 'module-configuration': { slots: ['unknown-module'] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:364: 'module-configuration': { slots: [null, 'di-8', null] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:383: 'module-configuration': { slots: ['di-8-nohw'] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:395: 'module-configuration': { slots: ['di-8'] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:410: 'module-configuration': { slots: ['di-8'] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:429: 'module-configuration': { slots: ['di-bad'] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:447: 'module-configuration': { slots: ['empty'] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:471: 'module-configuration': { slots: ['ai-bad'] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:496: 'module-configuration': { slots: ['weird'] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:521: 'module-configuration': { slots: ['mixed'] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:542: /* module_config (per-slot configuration bytes) */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:547: 'module-configuration': { slots: ['thm-4'] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:559: 'module-configuration': { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:574: 'module-configuration': { slots: ['di-8'] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:591: 'module-configuration': { slots: ['empty-screen'] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:615: const data: VendorScreenData = { 'module-configuration': { slots: ['bad-screen'] } } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:629: const data: VendorScreenData = { 'module-configuration': { slots: ['null-def'] } } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:659: const data: VendorScreenData = { 'module-configuration': { slots: ['short'] } } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:667: 'module-configuration': { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:749: 'module-configuration': { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:764: 'module-configuration': { slots: ['thm-4'] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:775: 'module-configuration': { slots: ['di-8', null, 'not-a-module'] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:780: it('returns [] when there is no module-configuration', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\migrate-project-to-name-type-system.test.ts:17: configuration: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\migrate-project-to-name-type-system.test.ts:73: configuration: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\migrate-project-to-name-type-system.test.ts:175: configuration: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\migrate-project-to-name-type-system.test.ts:187: expect('id' in migratedProject.configuration.resource.globalVariables[0]).toBe(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\migrate-project-to-name-type-system.test.ts:235: configuration: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\migrate-project-to-name-type-system.test.ts:247: expect('id' in migratedProject.configuration.resource.tasks[0]).toBe(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\migrate-project-to-name-type-system.test.ts:252: configuration: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\migrate-project-to-name-type-system.test.ts:262: expect('id' in migratedProject.configuration.resource.instances[0]).toBe(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\migrate-project-to-name-type-system.test.ts:281: configuration: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\migrate-project-to-name-type-system.test.ts:307: configuration: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:15: configuration: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:27: /** Minimal valid device configuration JSON. */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:60: expect(result.deviceConfiguration).toBeDefined() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:428: expect(result.deviceConfiguration).toBeDefined() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:444: expect(result.warnings!.some((w) => w.includes('configuration.json'))).toBe(true) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:445: expect(result.deviceConfiguration).toBeDefined() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:451: expect(result.warnings!.some((w) => w.includes('configuration.json') && w.includes('malformed'))).toBe(true) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:524: protocol: 'modbus-tcp', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:525: modbusSlaveConfig: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:531: const serverFiles: RawProjectFile[] = [{ relativePath: 'devices/servers/TestServer.json', content: serverJson }] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:533: expect(result.projectData.servers).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:534: expect(result.projectData.servers![0].name).toBe('TestServer') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:540: { relativePath: 'devices/servers/Bad.json', content: JSON.stringify({ name: 123 }) }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:543: expect(result.projectData.servers).toHaveLength(0) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:550: const serverFiles: RawProjectFile[] = [{ relativePath: 'devices/servers/Broken.json', content: '{not json' }] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:552: expect(result.projectData.servers).toHaveLength(0) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:555: it('uses servers from project.json when no server files parsed', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:557: servers: [{ name: 'FallbackServer', protocol: 'modbus-tcp' }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:560: expect(result.projectData.servers).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:561: expect(result.projectData.servers![0].name).toBe('FallbackServer') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:573: protocol: 'modbus-tcp', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:574: modbusTcpConfig: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:602: it('uses remote devices from project.json when no remote device files parsed', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:604: remoteDevices: [{ name: 'FallbackRemote', protocol: 'modbus-tcp' }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:613: // Line 453 — configuration fallback defaults +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:616: describe('parseProjectFiles — configuration fallback', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:623: configuration: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:629: expect(result.projectData.configurations.resource.tasks).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:630: expect(result.projectData.configurations.resource.instances).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:631: expect(result.projectData.configurations.resource.globalVariables).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:635: // `data.configurations` is `{ resource: null }` — the `??` chain +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:638: // `if (!configuration.resource)` guard which fills in the default. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:644: configurations: { resource: null }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:648: expect(result.projectData.configurations.resource).toBeDefined() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:649: expect(result.projectData.configurations.resource.tasks).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:650: expect(result.projectData.configurations.resource.instances).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:651: expect(result.projectData.configurations.resource.globalVariables).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:655: // Use "configurations" with a resource that has only tasks (no instances or globalVariables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:661: configurations: { resource: { tasks: [] } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:665: expect(result.projectData.configurations.resource.tasks).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:666: expect(result.projectData.configurations.resource.instances).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:667: expect(result.projectData.configurations.resource.globalVariables).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:670: it('provides default configuration when data has neither configuration nor configurations field', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:679: expect(result.projectData.configurations.resource.tasks).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared-data\mock\object-to-create-project.ts:47: configurations: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared-data\mock\object-to-create-project.ts:48: configuration: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\assets\icons\project\ServersFolder.tsx:5: type IServersFolderIconProps = ComponentProps<'svg'> & { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\assets\icons\project\ServersFolder.tsx:15: export const ServersFolderIcon = (props: IServersFolderIconProps) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\tab\index.tsx:49: configuration: , +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\tab\index.tsx:80: | 'configuration' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\create-element\index.tsx:23: // programs / servers / remote devices are program-level +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\create-element\index.tsx:35: return projectCaps.hasServers +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\create-element\element-card\index.tsx:47: protocol: 'modbus-tcp' | 's7comm' | 'ethernet-ip' | 'opcua' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\create-element\element-card\index.tsx:52: protocol: 'modbus-tcp' | 'ethernet-ip' | 'ethercat' | 'profinet' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\create-element\element-card\index.tsx:56: { value: 'modbus-tcp', label: 'Modbus/TCP', disabled: false }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\create-element\element-card\index.tsx:63: { value: 'modbus-tcp', label: 'Modbus', disabled: false }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\create-element\element-card\index.tsx:113: setError: serverSetError, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\create-element\element-card\index.tsx:132: const deviceBoard = useOpenPLCStore((state) => state.deviceDefinitions.configuration.deviceBoard) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\create-element\element-card\index.tsx:197: serverSetError('name', { type: 'already-exists' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\create-element\element-card\index.tsx:382: Server configuration is only available for OpenPLC Runtime v4 targets. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\create-element\element-card\index.tsx:385: Please select OpenPLC Runtime v4 in the Device Configuration to enable this feature. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\create-element\element-card\index.tsx:517: Remote device configuration is only available for OpenPLC Runtime v4 targets. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\create-element\element-card\index.tsx:520: Please select OpenPLC Runtime v4 in the Device Configuration to enable this feature. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\index.tsx:4: import { DeviceConfigurationEditor } from './configuration' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\index.tsx:19: handleFileAndWorkspaceSavedState('Configuration') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\index.tsx:26: {derivation === 'orchestrators' ? : } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:35: data: { pous, servers, remoteDevices }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:58: const runtimeIpAddress = useOpenPLCStore((state) => state.deviceDefinitions.configuration.runtimeIpAddress || '') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:83: const [v4FeaturesAffected, setV4FeaturesAffected] = useState<{ hasServers: boolean; hasRemoteDevices: boolean }>({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:84: hasServers: false, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:316: // Warn when the new target can't host the servers or remote-device +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:318: const hasServers = servers && servers.length > 0 +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:320: const targetCantHostServers = !targetCaps.modbusTcpServer && !targetCaps.opcuaServer && !targetCaps.s7Server +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:321: const targetCantHostRemoteIo = !targetCaps.modbusTcpRemote && !targetCaps.ethercat +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:323: const losingServers = hasServers && targetCantHostServers +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:326: if (losingServers || losingRemoteIo) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:328: setV4FeaturesAffected({ hasServers: !!losingServers, hasRemoteDevices: !!losingRemoteIo }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:343: servers, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:566: Built-in simulator — no configuration required. Press Build to compile and run. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:806: {v4FeaturesAffected.hasServers && v4FeaturesAffected.hasRemoteDevices +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:807: ? 'Modbus Server and Remote IO Not Supported' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:808: : v4FeaturesAffected.hasServers +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:809: ? 'Modbus Server Not Supported' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:816: {v4FeaturesAffected.hasServers && v4FeaturesAffected.hasRemoteDevices +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:817: ? 'Modbus Server and Remote IO configurations' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:818: : v4FeaturesAffected.hasServers +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:819: ? 'Modbus Server configuration' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:820: : 'Remote IO configuration'} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:825: {v4FeaturesAffected.hasServers && v4FeaturesAffected.hasRemoteDevices +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:826: ? 'Modbus Server and Remote IO configurations that will be disabled' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:827: : v4FeaturesAffected.hasServers +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:828: ? 'Modbus Server configurations that will be disabled' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:829: : 'Remote IO configurations that will be disabled'}{' '} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:831: {v4FeaturesAffected.hasServers && v4FeaturesAffected.hasRemoteDevices +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:832: ? 'Modbus Server and Remote IO are' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:833: : v4FeaturesAffected.hasServers +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:834: ? 'Modbus Server is' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\index.tsx:5: * Device Configuration screen. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\index.tsx:7: * Used to ship a built-in Communication section (Modbus RTU / Modbus +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\index.tsx:12: * `configuration.vendorScreenData[screenId]`. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\index.tsx:14: const DeviceConfigurationEditor = () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\index.tsx:16: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\index.tsx:22: export { DeviceConfigurationEditor } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\components\pin-mapping-table.tsx:55: // alias, a Modbus point alias, or an EtherCAT channel alias. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\components\pin-mapping-table.tsx:58: const board = state.deviceDefinitions.configuration.deviceBoard +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\components\pin-mapping-table.tsx:65: state.deviceDefinitions.configuration.vendorScreenData?.['io-mapping'] as +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\form-layout.tsx:78: const vendorScreenData = useOpenPLCStore((s) => s.deviceDefinitions.configuration.vendorScreenData) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\form-layout.tsx:108: // reuse a field id (e.g. both modbus_rtu and modbus_tcp own an +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\io-table-layout.tsx:33: const vsd = state.deviceDefinitions.configuration.vendorScreenData +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\io-table-layout.tsx:34: const moduleConfig = vsd?.['module-configuration'] as +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\io-table-layout.tsx:38: const boardName = state.deviceDefinitions.configuration.deviceBoard +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\io-table-layout.tsx:46: state.deviceDefinitions.pinMapping.pinsByBoard[state.deviceDefinitions.configuration.deviceBoard] ?? [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\io-table-layout.tsx:55: s.deviceDefinitions.configuration.vendorScreenData?.['module-configuration'] as +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\io-table-layout.tsx:164: state.deviceDefinitions.configuration.deviceBoard ?? '', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\io-table-layout.tsx:169: pins: state.deviceDefinitions.pinMapping.pinsByBoard[state.deviceDefinitions.configuration.deviceBoard] ?? [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\io-table-layout.tsx:247: No modules configured. Assign modules in Backplane Configuration to generate I/O mappings. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:88: // to the configuration form. The screen JSON is a vendor artifact — +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:261: const vendorScreenData = useOpenPLCStore((s) => s.deviceDefinitions.configuration.vendorScreenData) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:263: const persistenceKey = getSectionPersistenceKey(section) ?? 'module-configuration' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:416: const vsd = state.deviceDefinitions.configuration.vendorScreenData +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:420: state.deviceDefinitions.configuration.deviceBoard, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:431: // modbus remote, EtherCAT) when active for the target. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:433: state.deviceDefinitions.pinMapping.pinsByBoard[state.deviceDefinitions.configuration.deviceBoard] ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:564: const vsd = useOpenPLCStore.getState().deviceDefinitions.configuration.vendorScreenData +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:614: const vsd = useOpenPLCStore.getState().deviceDefinitions.configuration.vendorScreenData +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:640: const vsd = state.deviceDefinitions.configuration.vendorScreenData +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:652: state.deviceDefinitions.configuration.deviceBoard ?? '', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:658: pins: state.deviceDefinitions.pinMapping.pinsByBoard[state.deviceDefinitions.configuration.deviceBoard] ?? [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:696: * to `slotsConfig[slot][modeFieldId]` via the 'module-configuration' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:709: const vsd = state.deviceDefinitions.configuration.vendorScreenData +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:710: const moduleConfig = (vsd?.['module-configuration'] ?? {}) as ModuleConfigState +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:718: setVendorScreenData('module-configuration', { ...moduleConfig, slotsConfig: nextSlotsConfig }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:1012: This module ships a configuration screen but it could not be loaded. Reinstall the vendor +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:1017: {/* Configuration (only when this module has a configScreen). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:1023: Configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:1182: Every module will be removed from the backplane and the slot configuration cleared. I/O addresses allocated +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\ethercat-device-editor.tsx:2: import { useDeviceConfiguration } from '@root/frontend/hooks/use-device-configuration' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\ethercat-device-editor.tsx:12: SDOConfigurationEntry, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\ethercat-device-editor.tsx:21: DeviceConfigurationForm, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\ethercat-device-editor.tsx:23: } from './components/device-configuration-form' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\ethercat-device-editor.tsx:25: type DeviceDetailTab = 'info' | 'configuration' | 'startup-params' | 'channel-mappings' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\ethercat-device-editor.tsx:67: const vendorScreenData = useOpenPLCStore((s) => s.deviceDefinitions.configuration.vendorScreenData) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\ethercat-device-editor.tsx:106: // EtherCAT is sharing the image table with VPP and Modbus TCP on +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\ethercat-device-editor.tsx:112: state.deviceDefinitions.configuration.deviceBoard, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\ethercat-device-editor.tsx:121: state.deviceDefinitions.pinMapping.pinsByBoard[state.deviceDefinitions.configuration.deviceBoard] ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\ethercat-device-editor.tsx:186: const handleUpdateSdoConfigurations = useCallback( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\ethercat-device-editor.tsx:187: (sdoConfigurations: SDOConfigurationEntry[]) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\ethercat-device-editor.tsx:188: syncDevicesToStore(configuredDevices.map((d) => (d.id === deviceId ? { ...d, sdoConfigurations } : d))) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\ethercat-device-editor.tsx:245: // Use the device configuration hook for channels, CoE objects, etc. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\ethercat-device-editor.tsx:247: useDeviceConfiguration({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\ethercat-device-editor.tsx:264: The EtherCAT device could not be found. It may have been removed from the bus configuration. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\ethercat-device-editor.tsx:290: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\ethercat-device-editor.tsx:343: {/* Configuration Tab */} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\ethercat-device-editor.tsx:345: value='configuration' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\ethercat-device-editor.tsx:350: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\ethercat-device-editor.tsx:364: sdoConfigurations={device.sdoConfigurations} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\ethercat-device-editor.tsx:366: onUpdateSdoConfigurations={handleUpdateSdoConfigurations} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\index.tsx:45: >['deviceDefinitions']['configuration']['vendorScreenData'], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\index.tsx:48: const boardInfo = state.deviceAvailableOptions.availableBoards.get(state.deviceDefinitions.configuration.deviceBoard) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\index.tsx:56: state.deviceDefinitions.pinMapping.pinsByBoard[state.deviceDefinitions.configuration.deviceBoard] ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\index.tsx:101: * - Advanced: Master configuration (enable plugin, cycle time, watchdog) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\index.tsx:103: * Individual device configuration (I/O mapping, SDO, etc.) is handled by +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\index.tsx:116: const vendorScreenData = useOpenPLCStore((s) => s.deviceDefinitions.configuration.vendorScreenData) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\index.tsx:575:

EtherCAT Master Configuration

+C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\configured-device-row.tsx:2: import { useDeviceConfiguration } from '@root/frontend/hooks/use-device-configuration' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\configured-device-row.tsx:11: SDOConfigurationEntry, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\configured-device-row.tsx:15: import { ChannelMappingsSection, DeviceConfigurationForm, SdoParametersSection } from './device-configuration-form' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\configured-device-row.tsx:28: onUpdateSdoConfigurations: (configs: SDOConfigurationEntry[]) => void +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\configured-device-row.tsx:43: onUpdateSdoConfigurations, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\configured-device-row.tsx:67: useDeviceConfiguration({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\configured-device-row.tsx:186: {/* Configuration Section */} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\configured-device-row.tsx:192: Configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\configured-device-row.tsx:194: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\configured-device-row.tsx:210: sdoConfigurations={device.sdoConfigurations} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\configured-device-row.tsx:212: onUpdateSdoConfigurations={onUpdateSdoConfigurations} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\configured-devices.tsx:10: SDOConfigurationEntry, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\configured-devices.tsx:25: onUpdateSdoConfigurations: (deviceId: string, configs: SDOConfigurationEntry[]) => void +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\configured-devices.tsx:43: onUpdateSdoConfigurations, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\configured-devices.tsx:148: onUpdateSdoConfigurations={(configs) => onUpdateSdoConfigurations(device.id, configs)} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\device-configuration-form.tsx:1: import { extractDefaultSdoConfigurations } from '@root/backend/shared/ethercat/sdo-config-defaults' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\device-configuration-form.tsx:11: SDOConfigurationEntry, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\device-configuration-form.tsx:28: // ===================== Configuration Form ===================== +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\device-configuration-form.tsx:30: type DeviceConfigurationFormProps = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\device-configuration-form.tsx:35: const DeviceConfigurationForm = ({ config, updateConfig }: DeviceConfigurationFormProps) => ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\device-configuration-form.tsx:317: sdoConfigurations: SDOConfigurationEntry[] | undefined +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\device-configuration-form.tsx:319: onUpdateSdoConfigurations: (configs: SDOConfigurationEntry[]) => void +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\device-configuration-form.tsx:325: sdoConfigurations, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\device-configuration-form.tsx:327: onUpdateSdoConfigurations, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\device-configuration-form.tsx:337: {!isLoading && sdoConfigurations && sdoConfigurations.length > 0 && ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\device-configuration-form.tsx:338: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\device-configuration-form.tsx:341: {!isLoading && !loadError && sdoConfigurations && sdoConfigurations.length === 0 && ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\device-configuration-form.tsx:347: {!isLoading && !loadError && !sdoConfigurations && coeObjects && coeObjects.length > 0 && ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\device-configuration-form.tsx:355: onUpdateSdoConfigurations(extractDefaultSdoConfigurations(coeObjects)) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\device-configuration-form.tsx:371: {!isLoading && !loadError && !sdoConfigurations && !coeObjects && ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\device-configuration-form.tsx:422: export { ChannelMappingsSection, DeviceConfigurationForm, SdoParametersSection } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\device-detail-panel.tsx:2: import { useDeviceConfiguration } from '@root/frontend/hooks/use-device-configuration' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\device-detail-panel.tsx:11: SDOConfigurationEntry, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\device-detail-panel.tsx:15: import { ChannelMappingsSection, DeviceConfigurationForm, SdoParametersSection } from './device-configuration-form' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\device-detail-panel.tsx:25: onUpdateSdoConfigurations: (configs: SDOConfigurationEntry[]) => void +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\device-detail-panel.tsx:28: type DeviceDetailTab = 'info' | 'configuration' | 'startup-params' | 'channel-mappings' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\device-detail-panel.tsx:54: onUpdateSdoConfigurations, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\device-detail-panel.tsx:77: useDeviceConfiguration({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\device-detail-panel.tsx:104: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\device-detail-panel.tsx:171: {/* Configuration Tab */} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\device-detail-panel.tsx:173: value='configuration' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\device-detail-panel.tsx:178: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\device-detail-panel.tsx:192: sdoConfigurations={device.sdoConfigurations} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\device-detail-panel.tsx:194: onUpdateSdoConfigurations={onUpdateSdoConfigurations} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\devices-tab.tsx:201: Double-click a device to open its configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\runtime-status-panel.tsx:198: EtherCAT plugin not active - start PLC with EtherCAT configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\runtime-status-panel.tsx:263: * Cycle metrics moved to the Device ? Configuration screen +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\sdo-parameters-table.tsx:3: import type { SDOConfigurationEntry } from '@root/middleware/shared/ports/esi-types' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\sdo-parameters-table.tsx:7: sdoConfigurations: SDOConfigurationEntry[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\sdo-parameters-table.tsx:8: onUpdateSdoConfigurations: (configs: SDOConfigurationEntry[]) => void +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\sdo-parameters-table.tsx:17: entries: SDOConfigurationEntry[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\sdo-parameters-table.tsx:83: entry: SDOConfigurationEntry +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\sdo-parameters-table.tsx:158: const SdoParametersTable = ({ sdoConfigurations, onUpdateSdoConfigurations }: SdoParametersTableProps) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\sdo-parameters-table.tsx:165: for (const entry of sdoConfigurations) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\sdo-parameters-table.tsx:174: }, [sdoConfigurations]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\sdo-parameters-table.tsx:228: const updated = sdoConfigurations.map((entry) => +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\sdo-parameters-table.tsx:231: onUpdateSdoConfigurations(updated) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\sdo-parameters-table.tsx:233: [sdoConfigurations, onUpdateSdoConfigurations], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\sdo-parameters-table.tsx:237: const reset = sdoConfigurations.map((entry) => ({ ...entry, value: entry.defaultValue })) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\sdo-parameters-table.tsx:238: onUpdateSdoConfigurations(reset) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\sdo-parameters-table.tsx:239: }, [sdoConfigurations, onUpdateSdoConfigurations]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\sdo-parameters-table.tsx:241: const hasModifiedValues = sdoConfigurations.some((entry) => entry.value !== entry.defaultValue) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\sdo-parameters-table.tsx:242: const totalEntries = sdoConfigurations.length +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\sdo-parameters-table.tsx:316: {sdoConfigurations.length === 0 +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\orchestrators\orchestrators-list.tsx:83: const boardName = state.deviceDefinitions.configuration.deviceBoard +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:1: import type { ModbusIOGroup, ModbusIOPoint } from '@root/middleware/shared/ports/types' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:40: // Modbus transport type options +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:49: // the Modbus master plugin entirely. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:52: // RTU configuration options +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:162: editingGroup?: ModbusIOGroup | null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:348: ioGroup: ModbusIOGroup +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:405: (ioGroup.ioPoints ?? []).map((ioPoint: ModbusIOPoint, index: number) => ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:418: ioPoint: ModbusIOPoint +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:495: const [editingGroup, setEditingGroup] = useState(null) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:498: if (remoteDevice?.modbusTcpConfig) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:499: const config = remoteDevice.modbusTcpConfig +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:530: // the compiler silently drops it from the Modbus master config. The UI +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:535: const config = remoteDevice?.modbusTcpConfig +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:543: () => remoteDevice?.modbusTcpConfig?.ioGroups || [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:544: [remoteDevice?.modbusTcpConfig?.ioGroups], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:592: if (host !== remoteDevice?.modbusTcpConfig?.host) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:596: }, [host, deviceName, remoteDevice?.modbusTcpConfig?.host, projectActions, sharedWorkspaceActions]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:600: if (!isNaN(portNum) && portNum !== remoteDevice?.modbusTcpConfig?.port) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:604: }, [port, deviceName, remoteDevice?.modbusTcpConfig?.port, projectActions, sharedWorkspaceActions]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:608: if (!isNaN(timeoutNum) && timeoutNum !== remoteDevice?.modbusTcpConfig?.timeout) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:612: }, [timeout, deviceName, remoteDevice?.modbusTcpConfig?.timeout, projectActions, sharedWorkspaceActions]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:622: slaveIdNum !== remoteDevice?.modbusTcpConfig?.slaveId +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:627: }, [slaveId, transport, deviceName, remoteDevice?.modbusTcpConfig?.slaveId, projectActions, sharedWorkspaceActions]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:759: if (protocol !== 'modbus-tcp') { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:768: Configuration for this protocol is not yet available. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:791: Protocol: Modbus {transport === 'tcp' ? '(TCP/IP)' : '(RTU/Serial)'} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:1002: ioGroups.map((ioGroup: ModbusIOGroup) => ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\ladder\index.tsx:66: globalVariables: openPLCStoreBase.getState().project.data.configurations.resource.globalVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:155: configurations: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:161: configuration: { deviceBoard }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\index.ts:93: 'configuration', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\index.ts:94: 'end_configuration', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\configs\languages\_.register.ts:16: conf: monaco.languages.LanguageConfiguration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\configs\languages\_.register.ts:22: * @param {ILangImp} options - The language definition, configuration, and Monarch providers. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\configs\languages\_.register.ts:30: monaco.languages.setLanguageConfiguration(languageId, conf) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\configs\languages\il\il.ts:3: export const conf: languages.LanguageConfiguration = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\configs\languages\python\python.ts:4: export const conf: languages.LanguageConfiguration = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\configs\languages\st\st.register.ts:24: const conf: monaco.languages.LanguageConfiguration = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\configs\languages\st\st.register.ts:64: monaco.languages.setLanguageConfiguration(LANGUAGE_ID, conf) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\search-in-project\index.tsx:26: { value: 'configuration' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\search-in-project\index.tsx:171: configuration: 'configuration', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\search-in-project\index.tsx:312: const resourceGlobalVar = data.configurations.resource.globalVariables.filter((variable) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\search-in-project\index.tsx:313: const resourceMatchesFilter = activeFilters.length === 0 || activeFilters.includes('configuration') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\search-in-project\index.tsx:324: const resourceTasks = data.configurations.resource.tasks.filter((task) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\search-in-project\index.tsx:325: const resourceMatchesFilter = activeFilters.length === 0 || activeFilters.includes('configuration') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\search-in-project\index.tsx:336: const resourceInstances = data.configurations.resource.instances.filter((instance) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\search-in-project\index.tsx:337: const resourceMatchesFilter = activeFilters.length === 0 || activeFilters.includes('configuration') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:8: // Types (self-contained — modbus utils not yet migrated) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:11: interface ModbusSlaveBufferMapping { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:34: modbusStart: number +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:35: modbusEnd: number +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:37: modbusCount: number +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:49: interface ModbusAddressMapping { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:66: function calculateModbusAddressMapping(bufferMapping: ModbusSlaveBufferMapping): ModbusAddressMapping { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:76: const mdModbusCount = holdingRegisters.mdCount * 2 +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:77: const mdEnd = holdingRegisters.mdCount > 0 ? mdStart + mdModbusCount - 1 : mdStart - 1 +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:79: const mlStart = mdStart + mdModbusCount +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:80: const mlModbusCount = holdingRegisters.mlCount * 4 +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:81: const mlEnd = holdingRegisters.mlCount > 0 ? mlStart + mlModbusCount - 1 : mlStart - 1 +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:83: const totalHoldingRegisters = holdingRegisters.qwCount + holdingRegisters.mwCount + mdModbusCount + mlModbusCount +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:103: modbusStart: qwStart, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:104: modbusEnd: Math.max(0, qwEnd), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:106: modbusCount: holdingRegisters.qwCount, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:113: modbusStart: mwStart, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:114: modbusEnd: Math.max(mwStart, mwEnd), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:116: modbusCount: holdingRegisters.mwCount, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:123: modbusStart: mdStart, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:124: modbusEnd: Math.max(mdStart, mdEnd), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:126: modbusCount: mdModbusCount, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:134: modbusStart: mlStart, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:135: modbusEnd: Math.max(mlStart, mlEnd), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:137: modbusCount: mlModbusCount, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:152: modbusStart: qxStart, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:153: modbusEnd: Math.max(0, qxEnd), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:155: modbusCount: coils.qxBits, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:162: modbusStart: mxStart, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:163: modbusEnd: Math.max(mxStart, mxEnd), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:165: modbusCount: coils.mxBits, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:179: modbusStart: 0, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:180: modbusEnd: Math.max(0, discreteInputs.ixBits - 1), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:182: modbusCount: discreteInputs.ixBits, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:196: modbusStart: 0, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:197: modbusEnd: Math.max(0, inputRegisters.iwCount - 1), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:199: modbusCount: inputRegisters.iwCount, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:238: Modbus Addresses +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:266: {row.modbusStart.toLocaleString()} - {row.modbusEnd.toLocaleString()} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:274: {row.disabled ? '0' : row.modbusCount.toLocaleString()} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:286: bufferMapping: ModbusSlaveBufferMapping +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:293: const mapping = useMemo(() => calculateModbusAddressMapping(bufferMapping), [bufferMapping]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:313: This reference shows how IEC 61131-3 PLC addresses map to Modbus addresses based on your current buffer +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:314: configuration. The mapping is sequential within each Modbus data block type. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:329: export type { AddressMappingRow, AddressMappingSection, ModbusSlaveBufferMapping } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\index.tsx:3: import type { ModbusBufferMapping } from '@root/middleware/shared/ports/types' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\index.tsx:8: import { DEFAULT_BUFFER_MAPPING } from '../../../../../../utils/modbus/generate-modbus-slave-config' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\index.tsx:103: const ModbusServerEditor = () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\index.tsx:115: return project.data.servers?.find((s) => s.name === serverName) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\index.tsx:116: }, [project.data.servers, serverName]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\index.tsx:118: // Server configuration state +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\index.tsx:141: (bufferMapping: ModbusBufferMapping | typeof DEFAULT_BUFFER_MAPPING = DEFAULT_BUFFER_MAPPING) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\index.tsx:166: if (server?.modbusSlaveConfig) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\index.tsx:167: setEnabled(server.modbusSlaveConfig.enabled) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\index.tsx:168: setNetworkInterface(server.modbusSlaveConfig.networkInterface || '0.0.0.0') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\index.tsx:169: setPort(server.modbusSlaveConfig.port.toString()) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\index.tsx:170: setBufferMappingState(server.modbusSlaveConfig.bufferMapping || DEFAULT_BUFFER_MAPPING) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\index.tsx:199: if (!isNaN(portNum) && portNum >= 1 && portNum <= 65535 && portNum !== server?.modbusSlaveConfig?.port) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\index.tsx:203: }, [port, serverName, server?.modbusSlaveConfig?.port, projectActions, handleFileAndWorkspaceSavedState]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\index.tsx:223: const bufferMapping = server?.modbusSlaveConfig?.bufferMapping || DEFAULT_BUFFER_MAPPING +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\index.tsx:285: if (protocol !== 'modbus-tcp') { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\index.tsx:289: Configuration for {protocol} servers is not yet available. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\index.tsx:299: Modbus TCP Slave Server: {serverName} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\index.tsx:301:

Protocol: Modbus/TCP

+C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\index.tsx:305: {/* Server Configuration Section */} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\index.tsx:307:

Server Configuration

+C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\index.tsx:382: Configure the size of each register segment exposed by the Modbus TCP Slave server. These values define how +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\index.tsx:506: export { ModbusServerEditor } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\index.tsx:18: * This component provides the configuration interface for the OPC-UA server. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\index.tsx:20: * - General Settings: Server name, port, endpoint configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\index.tsx:32: // Input styles matching Modbus server editor +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\index.tsx:63: // Get the current server configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\index.tsx:68: return project.data.servers?.find((s) => s.name === serverName) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\index.tsx:69: }, [project.data.servers, serverName]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\index.tsx:83: const handleServerSettingsUpdate = useCallback( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\index.tsx:123: Configuration for {protocol} servers is not yet available. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\index.tsx:132:

Loading OPC-UA configuration...

+C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\index.tsx:162: onServerUpdate={handleServerSettingsUpdate} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\index.tsx:302: {/* Server Configuration Section */} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\index.tsx:304:

Server Configuration

+C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\index.tsx:446: {/* Timing Configuration Section */} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\index.tsx:448:

Timing Configuration

+C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\index.tsx:471: {/* Namespace Configuration Section */} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\index.tsx:473:

Namespace Configuration

+C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\address-space-tab.tsx:111: // Handle save from configuration modal +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\address-space-tab.tsx:268: {/* Variable Configuration Modal */} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\certificate-modal.tsx:185: Unique identifier used to reference this certificate in user configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:35: // PBKDF2 configuration - matches OpenPLC Runtime's expected format +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\variable-config-modal.tsx:191: // Field configurations (for structures/arrays) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\variable-config-modal.tsx:203: // Editing existing configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\variable-config-modal.tsx:214: // New configuration - generate defaults +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:443: * Hook to extract variables from the project for OPC-UA address space configuration. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:464: const globalVars = projectData.configurations.resource.globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:477: }, [projectData.pous, projectData.dataTypes, projectData.configurations.resource.globalVariables, libraries.system]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\s7comm-server\index.tsx:14: // Default configurations +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\s7comm-server\index.tsx:331: return project.data.servers?.find((s) => s.name === serverName) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\s7comm-server\index.tsx:332: }, [project.data.servers, serverName]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\s7comm-server\index.tsx:394: projectActions.updateS7CommServerSettings(serverName, { enabled: newEnabled }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\s7comm-server\index.tsx:403: projectActions.updateS7CommServerSettings(serverName, { bindAddress: newAddress }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\s7comm-server\index.tsx:413: projectActions.updateS7CommServerSettings(serverName, { port: portNum }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\s7comm-server\index.tsx:426: projectActions.updateS7CommServerSettings(serverName, { maxClients: num }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\s7comm-server\index.tsx:439: projectActions.updateS7CommServerSettings(serverName, { pduSize: num }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\s7comm-server\index.tsx:512: Configuration for {protocol} servers is not yet available. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\s7comm-server\index.tsx:534: {/* Server Configuration Section */} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\s7comm-server\index.tsx:537: Server Configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\vendor-screen\index.tsx:5: import { VendorScreenRenderer } from '../device/configuration/vendor-screen' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\vendor-screen\index.tsx:27: const deviceBoard = useOpenPLCStore((s) => s.deviceDefinitions.configuration.deviceBoard) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\vendor-screen\index.tsx:29: const vendorScreenData = useOpenPLCStore((s) => s.deviceDefinitions.configuration.vendorScreenData) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\search\index.tsx:209: path: `/data/configuration/resource`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\search\index.tsx:228: path: `/data/configuration/resource`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\search\index.tsx:247: path: `/data/configuration/resource`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\search\display\tree-view.tsx:87: data: { pous, dataTypes, configurations }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\search\display\tree-view.tsx:96: (branchTarget === 'resource' && configurations !== null) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\search\display\tree-view.tsx:267: data: { pous, configurations }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\search\display\tree-view.tsx:274: pous.some((pou) => (pou.interface?.variables ?? []).length > 0) || configurations !== null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\breadcrumbs\index.tsx:49: configuration: ConfigIcon, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\breadcrumbs\index.tsx:61: if (meta.name === 'Configuration') { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\breadcrumbs\index.tsx:72: const deviceTypeDerivation = meta.name === 'Configuration' ? 'configuration' : null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\breadcrumbs\index.tsx:116: const category = editor.type === 'plc-server' ? 'Servers' : 'Remote Devices' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\breadcrumbs\index.tsx:156: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\global-variables-table\elements\array-modal.tsx:33: configurations: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:144: const instances = project.data.configurations.resource.instances +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:254: project.data.configurations.resource.instances, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:191: const instances = project.data.configurations.resource.instances +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\instances-table\selectable-cell.tsx:21: configurations: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\project-tree\index.tsx:107: server: { BranchIcon: ServerIcon, label: 'Servers' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\project-tree\index.tsx:108: 'remote-device': { BranchIcon: RemoteDeviceIcon, label: 'Remote Devices' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\project-tree\index.tsx:113: data: { pous, dataTypes, servers, remoteDevices }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\project-tree\index.tsx:124: (branchTarget === 'server' && servers !== undefined && servers.length > 0) || +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\project-tree\index.tsx:179: nestedBranchTarget: 'array' | 'enumerated' | 'structure' | 'configuration' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\project-tree\index.tsx:187: configuration: { BranchIcon: ConfigIcon, label: 'Configurations' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\editable-cell.tsx:54: data: { pous, configurations }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\editable-cell.tsx:66: const globalVariables = configurations.resource.globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\explorer\project.tsx:45: data: { pous, dataTypes, configurations, servers, remoteDevices }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\explorer\project.tsx:62: // Servers / Remote-Devices / VPP screens are program-level +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\explorer\project.tsx:67: const deviceBoard = useOpenPLCStore((s) => s.deviceDefinitions.configuration.deviceBoard) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\explorer\project.tsx:72: const handleCreateTab = ({ elementType, name, path, configuration: tabConfig }: TabsProps) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\explorer\project.tsx:73: const tabToBeCreated = { name, path, elementType, configuration: tabConfig } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\explorer\project.tsx:332: configuration: configurations, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\explorer\project.tsx:334: path: `/data/configuration/resource`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\explorer\project.tsx:350: key='Configuration' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\explorer\project.tsx:353: label='Configuration' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\explorer\project.tsx:356: name: 'Configuration', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\explorer\project.tsx:357: path: `/device/configuration`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\explorer\project.tsx:358: elementType: { type: 'device', derivation: 'configuration' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\explorer\project.tsx:398: {/* Project Servers tree branch — gated by project type only. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\explorer\project.tsx:399: * The Servers branch must remain visible on platforms that +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\explorer\project.tsx:402: * it via the `projectCaps.hasServers` capability check. */} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\explorer\project.tsx:403: {projectCaps.hasServers && ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\explorer\project.tsx:405: {[...(servers || [])] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\explorer\project.tsx:416: path: `/servers/${server.name}`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\explorer\project.tsx:425: {/* Project Remote Devices tree branch — hidden for libraries. */} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\global-variables-editor\index.tsx:29: configurations: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\global-variables-editor\index.tsx:42: data: { pous: snapshotPous, configurations }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\global-variables-editor\index.tsx:54: globalVariables: configurations.resource.globalVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\global-variables-editor\index.tsx:57: [snapshotPous, configurations.resource.globalVariables, rawPushToHistory], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\instances-editor\index.tsx:13: import { parseResourceConfigurationToString } from '../../../utils/parse-resource-configuration-to-string' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\instances-editor\index.tsx:14: import { parseResourceStringToConfiguration } from '../../../utils/parse-resource-string-to-configuration' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\instances-editor\index.tsx:30: configurations: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\instances-editor\index.tsx:42: data: { pous: snapshotPous, configurations }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\instances-editor\index.tsx:54: globalVariables: configurations.resource.globalVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\instances-editor\index.tsx:57: [snapshotPous, configurations.resource.globalVariables, rawPushToHistory], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\instances-editor\index.tsx:61: const [editorCode, setEditorCode] = useState(() => parseResourceConfigurationToString(tasks, instanceData)) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\instances-editor\index.tsx:75: setEditorCode(parseResourceConfigurationToString(tasks, instanceData)) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\instances-editor\index.tsx:224: const { instances, tasks } = parseResourceStringToConfiguration(editorCode) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\modals\server-ip-mismatch-modal.tsx:66: The following servers are configured with IP addresses that don't exist on the target device: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\task-editor\index.tsx:13: import { parseResourceConfigurationToString } from '../../../utils/parse-resource-configuration-to-string' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\task-editor\index.tsx:14: import { parseResourceStringToConfiguration } from '../../../utils/parse-resource-string-to-configuration' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\task-editor\index.tsx:30: configurations: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\task-editor\index.tsx:42: data: { pous: snapshotPous, configurations }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\task-editor\index.tsx:54: globalVariables: configurations.resource.globalVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\task-editor\index.tsx:57: [snapshotPous, configurations.resource.globalVariables, rawPushToHistory], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\task-editor\index.tsx:61: const [editorCode, setEditorCode] = useState(() => parseResourceConfigurationToString(taskData, instances)) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\task-editor\index.tsx:75: setEditorCode(parseResourceConfigurationToString(taskData, instances)) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\task-editor\index.tsx:222: const { instances, tasks } = parseResourceStringToConfiguration(editorCode) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:100: data: { pous: snapshotPous, configurations }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:112: globalVariables: configurations.resource.globalVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:115: [snapshotPous, configurations.resource.globalVariables, rawPushToHistory], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:110: const currentBoardInfo = availableBoards.get(deviceDefinitions.configuration.deviceBoard) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:202: state.deviceDefinitions.configuration.deviceBoard, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:254: boardTarget: deviceDefinitions.configuration.deviceBoard, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:263: runtimeIpAddress: deviceDefinitions.configuration.runtimeIpAddress || null, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:270: communicationPort: deviceDefinitions.configuration.communicationPort || undefined, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:271: // User-authored configuration-screen data — the shared +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:275: vendorScreenData: deviceDefinitions.configuration.vendorScreenData, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:596: const runtimeIpAddress = deviceDefinitions.configuration.runtimeIpAddress || null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:674: const cfg = store.deviceDefinitions.configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:677: // `modbus_rtu`); resolver state's `screens` shape matches +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:684: configuration: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:786: const boardTarget = devDefs.configuration.deviceBoard +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-alias-registry.ts:43: const deviceBoard = useOpenPLCStore((s) => s.deviceDefinitions.configuration.deviceBoard) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-alias-registry.ts:45: const vsd = useOpenPLCStore((s) => s.deviceDefinitions.configuration.vendorScreenData) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-device-configuration.ts:3: import { extractDefaultSdoConfigurations } from '@root/backend/shared/ethercat/sdo-config-defaults' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-device-configuration.ts:24: type UseDeviceConfigurationParams = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-device-configuration.ts:34: type UseDeviceConfigurationResult = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-device-configuration.ts:43: export function useDeviceConfiguration({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-device-configuration.ts:51: }: UseDeviceConfigurationParams): UseDeviceConfigurationResult { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-device-configuration.ts:91: const { sdoConfigurations, ...rest } = enrichDeviceData(result.device, externalAddresses) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-device-configuration.ts:92: onEnrichDeviceRef.current(device.sdoConfigurations !== undefined ? rest : { ...rest, sdoConfigurations }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-device-configuration.ts:93: } else if (device.sdoConfigurations === undefined && result.device.coeObjects?.length) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-device-configuration.ts:99: sdoConfigurations: extractDefaultSdoConfigurations(result.device.coeObjects), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-device-configuration.ts:137: const board = state.deviceDefinitions.configuration.deviceBoard ?? '' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-device-configuration.ts:141: state.deviceDefinitions.configuration.vendorScreenData?.['io-mapping'] as +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-pou-snapshot.ts:31: globalVariables: JSON.parse(JSON.stringify(project.data.configurations.resource.globalVariables)), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-pou-snapshot.ts:34: [project.data.pous, project.data.configurations.resource.globalVariables, ladderFlows, fbdFlows, pushToHistory], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-runtime-polling.ts:89: // status/logs so the Configuration screen's stats stay fresh without +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-store-selectors.ts:20: // component subscribed to it (manifests as a blank device-configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-store-selectors.ts:36: useDeviceBoard: () => useOpenPLCStore((state) => state.deviceDefinitions.configuration.deviceBoard), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-store-selectors.ts:37: useCommunicationPort: () => useOpenPLCStore((state) => state.deviceDefinitions.configuration.communicationPort), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-store-selectors.ts:40: (state) => state.deviceDefinitions.configuration.selectedPlatformOptions ?? EMPTY_SELECTED_PLATFORM_OPTIONS, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-store-selectors.ts:50: * `configuration.deviceBoard` in the per-board pin-mapping dict. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-store-selectors.ts:59: state.deviceDefinitions.pinMapping.pinsByBoard[state.deviceDefinitions.configuration.deviceBoard] ?? EMPTY_PINS, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-store-selectors.ts:86: // Modbus IO points +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-store-selectors.ts:87: if (device.modbusTcpConfig?.ioGroups) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-store-selectors.ts:88: for (const ioGroup of device.modbusTcpConfig.ioGroups) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-store-selectors.ts:128: const vendorScreenData = useOpenPLCStore((state) => state.deviceDefinitions.configuration.vendorScreenData) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-target-capabilities.ts:29: const deviceBoard = useOpenPLCStore((s) => s.deviceDefinitions.configuration.deviceBoard) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugPolling.ts:21: * - Modbus RTU / simulator: 50ms (no network; keep the UI snappy) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugPolling.ts:53: // Modbus RTU : capped at 19 so the REQUEST stays =63 bytes and +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugPolling.ts:62: // Modbus TCP : Arduino sketch's MAX_MB_FRAME caps it; 60 is +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugSession.ts:67: const boardTarget = deviceDefinitions.configuration.deviceBoard +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugSession.ts:82: const instances = project.data.configurations.resource.instances +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:29: import { ModbusServerEditor } from '../components/_features/[workspace]/editor/server/modbus-server' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:536: {editor['type'] === 'plc-server' && editor.meta.protocol === 'modbus-tcp' && ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:537: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:57: const debugVariables = collectDebugVariables(project.data.configurations.resource.globalVariables, project.data.pous) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:66: // the wrong sidebar shape (Resource / Servers / Devices visible +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:75: configuration: project.data.configurations, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:114: * Configuration / pin-mapping / server / remote-device files are +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:127: for (const s of project.data.servers ?? []) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:129: path: `devices/servers/${s.name}.json`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:144: path: 'devices/configuration.json', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:145: content: JSON.stringify(deviceDefinitions.configuration, null, 2), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:188: * persists both the configuration and pin-mapping JSON files. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:206: path: 'devices/configuration.json', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:207: content: JSON.stringify(deviceDefinitions.configuration, null, 2), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:221: const server = project.data.servers?.find((s) => s.name === fileName) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:223: return [{ path: `devices/servers/${fileName}.json`, content: JSON.stringify(server, null, 2), category: 'server' }] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:424: ...(deviceConfig !== undefined ? [{ path: 'devices/configuration.json', content: deviceConfig }] : []), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:524: // (configuration + pin-mapping). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:546: const configRes = await projectPort.saveFile(joinPath(projectPath, 'devices/configuration.json'), config.content) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:552: const res = await projectPort.saveFile(joinPath(projectPath, 'devices/servers', `${fileName}.json`), spec.content) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:577: // Surgical save: read devices/configuration.json from disk and +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:777: * project-level fields (`data.dataTypes`, `data.configuration`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:835: const boardId = state.deviceDefinitions.configuration.deviceBoard +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:842: const vendorScreenData = state.deviceDefinitions.configuration.vendorScreenData ?? {} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:854: * `devices/configuration.json` from disk, swaps in **only** the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:856: * vendorScreenData and every other configuration field stay verbatim +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:869: const fullPath = joinPath(projectPath, 'devices/configuration.json') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:878: const memVendor = state.deviceDefinitions.configuration.vendorScreenData ?? {} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:889: return { success: false, error: 'devices/configuration.json on disk is malformed' } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:911: const boardId = state.deviceDefinitions.configuration.deviceBoard +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\start-language-service.ts:70: // Servers send these when background analysis catches up to +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\start-language-service.ts:101: // Provider configuration -------------------------------------------------- +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\start-language-service.ts:109: // Diagnostics configuration ----------------------------------------------- +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\start-language-service.ts:147: * `null`. Mirrors `rootUri` in semantics; LSP servers +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\start-language-service.ts:271: // Handler for `workspace/semanticTokens/refresh` — servers send +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\internal\symbol-helpers.ts:92: * lists from older servers get rewrapped this way. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\definition-redirect.test.ts:66: // LocationLink but servers (and our codepath) tolerate it +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\__tests__\index.test.ts:96: describe('startPythonLsp configuration', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\boot.ts:40: * intentionally absent on this build", not a misconfiguration. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\index.ts:10: * ST-specific configuration: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\index.ts:122: // Provider configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\index.ts:161: // Diagnostics configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\index.ts:67: * Configuration for store initialization. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\index.ts:71: /** AI feature configuration from platform environment */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:4: import type { DeviceConfiguration, DevicePin } from '../../../../middleware/shared/ports/types' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:5: import { defaultDeviceConfiguration } from './data/types' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:27: const board = draft.deviceDefinitions.configuration.deviceBoard +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:40: configuration: defaultDeviceConfiguration, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:97: setDeviceDefinitions: ({ configuration, pinMapping }): void => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:100: if (configuration) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:101: deviceDefinitions.configuration = mergeDeviceConfigWithDefaults(configuration, defaultDeviceConfiguration) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:102: if (deviceDefinitions.configuration.runtimeIpAddress) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:103: runtimeConnection.ipAddress = deviceDefinitions.configuration.runtimeIpAddress +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:109: // accompanying configuration names (or the current +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:110: // store value if no configuration was passed). This +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:114: const targetBoard = deviceDefinitions.configuration.deviceBoard +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:127: deviceDefinitions.configuration = defaultDeviceConfiguration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:256: const activeBoard = draft.deviceDefinitions.configuration.deviceBoard +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:386: if (deviceDefinitions.configuration.deviceBoard !== deviceBoard) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:387: deviceDefinitions.configuration.selectedPlatformOptions = {} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:395: const cfg = deviceDefinitions.configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:399: deviceDefinitions.configuration.deviceBoard = deviceBoard +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:408: store creation (defaults + the merge in normalizeConfigurationForLoad), so this +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:410: if (!deviceDefinitions.configuration.selectedPlatformOptions) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:411: deviceDefinitions.configuration.selectedPlatformOptions = {} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:413: deviceDefinitions.configuration.selectedPlatformOptions[key] = value +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:421: deviceDefinitions.configuration.selectedPlatformOptions = {} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:429: deviceDefinitions.configuration.communicationPort = communicationPort +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:436: deviceDefinitions.configuration.runtimeIpAddress = ipAddress +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:531: if (!deviceDefinitions.configuration.vendorScreenData) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:532: deviceDefinitions.configuration.vendorScreenData = {} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:534: deviceDefinitions.configuration.vendorScreenData[persistenceKey] = data +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:535: syncActiveBoardVendorBucket(deviceDefinitions.configuration) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:552: if (!deviceDefinitions.configuration.vendorScreenData) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:553: deviceDefinitions.configuration.vendorScreenData = {} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:555: const target = deviceDefinitions.configuration.vendorScreenData +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:563: syncActiveBoardVendorBucket(deviceDefinitions.configuration) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:577: function syncActiveBoardVendorBucket(configuration: DeviceConfiguration): void { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:578: if (!configuration.vendorScreenDataByBoard) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:579: configuration.vendorScreenDataByBoard = {} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:581: configuration.vendorScreenDataByBoard[configuration.deviceBoard] = { ...(configuration.vendorScreenData ?? {}) } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:596: provided: Partial, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:598: ): Pick { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:618: provided: Partial, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:619: defaults: DeviceConfiguration, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:620: ): DeviceConfiguration { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\slice.ts:629: // Must merge — otherwise loading a project whose configuration.json +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\types.ts:5: DeviceConfiguration, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\types.ts:29: * `deviceConfiguration.deviceBoard`; the active board's array is +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\types.ts:36: * `devices/configuration.json` names as the active one. See +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\types.ts:82: configuration: DeviceConfiguration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\types.ts:118: configuration?: Partial +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\types.ts:121: * `configuration.deviceBoard` resolves to (or the store's +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\data\types.ts:1: import type { DeviceConfiguration } from '../../../../../middleware/shared/ports/types' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\device\data\types.ts:3: export const defaultDeviceConfiguration: DeviceConfiguration = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\types.ts:147: derivation: 'configuration' | 'pin-mapping' | 'orchestrators' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\types.ts:154: protocol: 'modbus-tcp' | 's7comm' | 'ethernet-ip' | 'opcua' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\types.ts:161: protocol: 'modbus-tcp' | 'ethernet-ip' | 'ethercat' | 'profinet' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:6: ModbusIOPoint, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:12: S7CommServerSettings, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:26: import { DEFAULT_BUFFER_MAPPING } from '../../../utils/modbus/generate-modbus-slave-config' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:35: // Default S7Comm configurations +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:36: const DEFAULT_S7COMM_SERVER_SETTINGS: S7CommServerSettings = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:62: // Default OPC-UA configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:98: if (serverData.protocol === 'modbus-tcp' && !serverData.modbusSlaveConfig) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:101: modbusSlaveConfig: { enabled: false, networkInterface: '0.0.0.0', port: 502 }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:161: ): ModbusIOPoint[] { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:163: const points: ModbusIOPoint[] = [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:203: live.deviceDefinitions.configuration.deviceBoard ?? '', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:207: live.deviceDefinitions.configuration.vendorScreenData?.['io-mapping'] as +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:214: pins: live.deviceDefinitions.pinMapping.pinsByBoard[live.deviceDefinitions.configuration.deviceBoard] ?? [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:329: configurations: { resource: { tasks: [], instances: [], globalVariables: [] } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:330: servers: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:363: configurations: { resource: { tasks: [], instances: [], globalVariables: [] } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:364: servers: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:504: // Cascade the rename into the configuration's `instances[]`. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:511: // tracked in `configurations.resource.instances`. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:513: for (const instance of slice.project.data.configurations.resource.instances) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:564: : getState().project.data.configurations.resource.globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:581: variables = slice.project.data.configurations.resource.globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:613: slice.project.data.configurations.resource.globalVariables = variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:652: variables = slice.project.data.configurations.resource.globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:683: : getState().project.data.configurations.resource.globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:697: const globalVars = state.project.data.configurations.resource.globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:729: : slice.project.data.configurations.resource.globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:761: : slice.project.data.configurations.resource.globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:778: live.deviceDefinitions.configuration.deviceBoard ?? '', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:782: live.deviceDefinitions.configuration.vendorScreenData?.['io-mapping'] as +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:789: pins: live.deviceDefinitions.pinMapping.pinsByBoard[live.deviceDefinitions.configuration.deviceBoard] ?? [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:854: const globals = slice.project.data.configurations.resource.globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:874: * alias on a producer channel (pin mapping, VPP module, Modbus +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:915: const globals = slice.project.data.configurations.resource.globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:997: const tasks = getState().project.data.configurations.resource.tasks +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1002: const tasks = slice.project.data.configurations.resource.tasks +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1015: slice.project.data.configurations.resource.tasks = tasks +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1023: const tasks = slice.project.data.configurations.resource.tasks +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1034: const tasks = slice.project.data.configurations.resource.tasks +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1042: const tasks = slice.project.data.configurations.resource.tasks +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1054: const instances = getState().project.data.configurations.resource.instances +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1059: const instances = slice.project.data.configurations.resource.instances +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1072: slice.project.data.configurations.resource.instances = instances +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1080: const instances = slice.project.data.configurations.resource.instances +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1091: const instances = slice.project.data.configurations.resource.instances +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1099: const instances = slice.project.data.configurations.resource.instances +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1108: // Servers +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1111: const servers = getState().project.data.servers ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1112: if (servers.some((s) => s.name === dto.data.name)) return fail('Server already exists') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1116: if (!slice.project.data.servers) slice.project.data.servers = [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1117: slice.project.data.servers.push(initializeServerProtocolConfig(dto.data)) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1125: if (!slice.project.data.servers) return +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1126: slice.pendingDeletions.push(`devices/servers/${name}.json`) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1127: slice.project.data.servers = slice.project.data.servers.filter((s) => s.name !== name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1133: /* istanbul ignore next -- defensive: servers array initialized during createServer */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1134: const servers = getState().project.data.servers ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1135: if (servers.some((s) => s.name === newName)) return fail('Server name already exists') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1139: const server = slice.project.data.servers?.find((s) => s.name === name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1143: slice.pendingDeletions.push(`devices/servers/${name}.json`) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1153: const server = slice.project.data.servers?.find((s) => s.name === name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1154: if (!server?.modbusSlaveConfig) return +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1155: if (config.enabled !== undefined) server.modbusSlaveConfig.enabled = config.enabled +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1156: if (config.networkInterface !== undefined) server.modbusSlaveConfig.networkInterface = config.networkInterface +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1157: if (config.port !== undefined) server.modbusSlaveConfig.port = config.port +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1159: const base = server.modbusSlaveConfig.bufferMapping ?? DEFAULT_BUFFER_MAPPING +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1160: server.modbusSlaveConfig.bufferMapping = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1175: updateS7CommServerSettings: (name, settings) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1178: const server = slice.project.data.servers?.find((s) => s.name === name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1188: const server = slice.project.data.servers?.find((s) => s.name === name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1198: const server = slice.project.data.servers?.find((s) => s.name === name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1208: const server = slice.project.data.servers?.find((s) => s.name === name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1221: const server = slice.project.data.servers?.find((s) => s.name === name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1232: const server = slice.project.data.servers?.find((s) => s.name === name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1248: const server = slice.project.data.servers?.find((s) => s.name === name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1262: const server = slice.project.data.servers?.find((s) => s.name === name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1280: const server = slice.project.data.servers?.find((s) => s.name === name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1290: const server = slice.project.data.servers?.find((s) => s.name === name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1301: const server = slice.project.data.servers?.find((s) => s.name === name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1313: const server = slice.project.data.servers?.find((s) => s.name === name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1323: const server = slice.project.data.servers?.find((s) => s.name === name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1334: const server = slice.project.data.servers?.find((s) => s.name === name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1344: const server = slice.project.data.servers?.find((s) => s.name === name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1356: const server = slice.project.data.servers?.find((s) => s.name === name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1366: const server = slice.project.data.servers?.find((s) => s.name === name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1377: const server = slice.project.data.servers?.find((s) => s.name === name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1387: const server = slice.project.data.servers?.find((s) => s.name === name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1397: const server = slice.project.data.servers?.find((s) => s.name === name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1408: const server = slice.project.data.servers?.find((s) => s.name === name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1419: // Remote devices +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1429: if (device.protocol === 'modbus-tcp' && !device.modbusTcpConfig) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1430: device.modbusTcpConfig = { host: '127.0.0.1', port: 502, slaveId: 1, timeout: 1000, ioGroups: [] } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1474: if (!device?.modbusTcpConfig) return +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1476: if (config.transport !== undefined) device.modbusTcpConfig.transport = config.transport +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1477: if (config.host !== undefined) device.modbusTcpConfig.host = config.host +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1478: if (config.port !== undefined) device.modbusTcpConfig.port = config.port +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1481: if (config.serialPort !== undefined) device.modbusTcpConfig.serialPort = config.serialPort +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1482: if (config.baudRate !== undefined) device.modbusTcpConfig.baudRate = config.baudRate +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1483: if (config.parity !== undefined) device.modbusTcpConfig.parity = config.parity +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1484: if (config.stopBits !== undefined) device.modbusTcpConfig.stopBits = config.stopBits +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1485: if (config.dataBits !== undefined) device.modbusTcpConfig.dataBits = config.dataBits +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1487: if (config.slaveId !== undefined) device.modbusTcpConfig.slaveId = config.slaveId +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1488: if (config.timeout !== undefined) device.modbusTcpConfig.timeout = config.timeout +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1496: // every Modbus / EtherCAT remote device — including this one's +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1501: live.deviceDefinitions.configuration.deviceBoard ?? '', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1505: live.deviceDefinitions.configuration.vendorScreenData?.['io-mapping'] as +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1513: pins: live.deviceDefinitions.pinMapping.pinsByBoard[live.deviceDefinitions.configuration.deviceBoard] ?? [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1524: if (!device?.modbusTcpConfig) return +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1528: device.modbusTcpConfig.ioGroups.push({ ...group, ioPoints }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1537: if (!device?.modbusTcpConfig) return +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1538: const group = device.modbusTcpConfig.ioGroups.find((g) => g.id === groupId) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1548: if (!device?.modbusTcpConfig) return +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1549: device.modbusTcpConfig.ioGroups = device.modbusTcpConfig.ioGroups.filter((g) => g.id !== groupId) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1561: const sourceRef = { kind: 'modbus-tcp-remote' as const, ref: `${deviceName}:${pointId}` } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1563: live.deviceDefinitions?.configuration?.deviceBoard ?? '', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1567: live.deviceDefinitions?.configuration?.vendorScreenData?.['io-mapping'] as +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1576: live.deviceDefinitions?.configuration?.deviceBoard ?? '' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1601: ?.modbusTcpConfig?.ioGroups?.find((g) => g.id === groupId) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1610: if (!device?.modbusTcpConfig) return +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1611: const group = device.modbusTcpConfig.ioGroups.find((g) => g.id === groupId) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1627: response = { ok: false, message: 'No remote devices found' } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\types.ts:3: ModbusBufferMapping, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\types.ts:4: ModbusIOGroup, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\types.ts:25: S7CommServerSettings, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\types.ts:154: * mutates an alias-producing source (VPP slot edits, Modbus / EtherCAT +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\types.ts:172: * Modbus TCP remote, EtherCAT) when the user renames the alias on +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\types.ts:213: // Servers +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\types.ts:223: bufferMapping?: Partial +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\types.ts:228: updateS7CommServerSettings: (name: string, settings: Partial) => ProjectResponse +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\types.ts:265: // Remote devices +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\types.ts:284: addIOGroup: (deviceName: string, group: ModbusIOGroup) => ProjectResponse +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\types.ts:288: updates: Partial>, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:272: /* istanbul ignore next -- defensive: servers is always initialized as [] */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:273: const servers = state.project.data.servers ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:274: if (servers.some((s) => s.name === name)) return { ok: false, message: 'Server already exists' } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:704: if (data.deviceConfiguration || data.devicePinMapping) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:706: configuration: data.deviceConfiguration, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:717: const globalVars = getState().project.data.configurations.resource.globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:761: const servers = data.projectData.servers +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:762: if (servers) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:763: servers.forEach((s) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:784: files['Configuration'] = { type: 'device', filePath: 'Configuration', saved: true } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:936: JSON.stringify(state.project.data.configurations.resource.globalVariables), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:993: JSON.stringify(state.project.data.configurations.resource.globalVariables), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\types.ts:2: DeviceConfiguration, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\types.ts:99: create: (args: { name: string; protocol: 'modbus-tcp' | 's7comm' | 'ethernet-ip' | 'opcua' }) => SharedResponse +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\types.ts:106: create: (args: { name: string; protocol: 'modbus-tcp' | 'ethernet-ip' | 'ethercat' | 'profinet' }) => SharedResponse +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\types.ts:128: deviceConfiguration?: DeviceConfiguration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\utils.ts:150: protocol: 'modbus-tcp' | 's7comm' | 'ethernet-ip' | 'opcua', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\utils.ts:160: protocol: 'modbus-tcp' | 'ethernet-ip' | 'ethercat' | 'profinet', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\tabs\types.ts:14: | { type: 'device'; derivation: 'configuration' | 'pin-mapping' | 'orchestrators' } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\tabs\types.ts:15: | { type: 'server'; protocol: 'modbus-tcp' | 's7comm' | 'ethernet-ip' | 'opcua' } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\tabs\types.ts:16: | { type: 'remote-device'; protocol: 'modbus-tcp' | 'ethernet-ip' | 'ethercat' | 'profinet' } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\tabs\types.ts:23: configuration?: Record +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\tabs\utils.ts:77: meta: { name, path: `/data/configuration/resource` }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\tabs\utils.ts:85: derivation: 'configuration' | 'pin-mapping' | 'orchestrators', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\tabs\utils.ts:96: protocol: 'modbus-tcp' | 'ethernet-ip' | 'ethercat' | 'profinet', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\tabs\utils.ts:109: protocol: 'modbus-tcp' | 's7comm' | 'ethernet-ip' | 'opcua', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\types.ts:46: // System configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\console-slice.test.ts:203: store.getState().consoleActions.setSearchTerm('modbus') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\console-slice.test.ts:205: expect(store.getState().filters.searchTerm).toBe('modbus') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:7: import { defaultDeviceConfiguration } from '../slices/device/data/types' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:36: * keys pins by `configuration.deviceBoard`, so tests that used to +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:42: const board = state.deviceDefinitions.configuration.deviceBoard +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:128: expect(s.deviceDefinitions.configuration).toEqual(defaultDeviceConfiguration) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:208: it('merges partial configuration with defaults', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:211: configuration: { deviceBoard: 'Mega', communicationPort: 'COM3' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:213: const cfg = store.getState().deviceDefinitions.configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:217: expect(cfg.runtimeIpAddress).toBe(defaultDeviceConfiguration.runtimeIpAddress) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:231: configuration: { runtimeIpAddress: '192.168.0.100' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:233: expect(store.getState().deviceDefinitions.configuration.runtimeIpAddress).toBe('192.168.0.100') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:240: configuration: { runtimeIpAddress: '' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:245: it('handles call with neither configuration nor pinMapping', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:250: expect(store.getState().deviceDefinitions.configuration).toEqual(defaultDeviceConfiguration) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:259: it('resets configuration to defaults', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:263: expect(store.getState().deviceDefinitions.configuration).toEqual(defaultDeviceConfiguration) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:748: expect(store.getState().deviceDefinitions.configuration.deviceBoard).toBe('Arduino Mega') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:756: expect(store.getState().deviceDefinitions.configuration.selectedPlatformOptions).toEqual({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:761: expect(store.getState().deviceDefinitions.configuration.selectedPlatformOptions).toEqual({}) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:771: expect(store.getState().deviceDefinitions.configuration.selectedPlatformOptions).toEqual({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:882: // the accompanying configuration names — so a legacy project +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:886: configuration: { deviceBoard: 'Arduino Mega' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:899: configuration: { deviceBoard: 'Arduino Mega' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:916: expect(store.getState().deviceDefinitions.configuration.selectedPlatformOptions).toEqual({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:926: expect(store.getState().deviceDefinitions.configuration.selectedPlatformOptions).toEqual({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:936: expect(store.getState().deviceDefinitions.configuration.selectedPlatformOptions).toEqual({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:948: expect(store.getState().deviceDefinitions.configuration.selectedPlatformOptions).toEqual({}) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:965: store.getState().deviceActions.setVendorScreenData('modbus_rtu', { enabled: true, baud: '115200' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:968: const snapshot = { modbus_rtu: { enabled: true, baud: '115200' } } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:970: store.getState().deviceActions.setVendorScreenData('modbus_rtu', { enabled: false, baud: '57600' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:972: store.getState().deviceActions.restoreVendorScreenSlice(['modbus_rtu'], snapshot) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:973: expect(store.getState().deviceDefinitions.configuration.vendorScreenData?.modbus_rtu).toEqual({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:983: store.getState().deviceActions.setVendorScreenData('modbus_rtu', { enabled: true }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:985: store.getState().deviceActions.restoreVendorScreenSlice(['modbus_rtu'], snapshot) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:986: expect(store.getState().deviceDefinitions.configuration.vendorScreenData?.modbus_rtu).toBeUndefined() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:994: store.getState().deviceActions.setVendorScreenData('modbus_rtu', { enabled: true }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:997: store.getState().deviceActions.restoreVendorScreenSlice(['modbus_rtu'], { modbus_rtu: { enabled: false } }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:999: // modbus_rtu was reverted to snapshot… +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1000: expect(store.getState().deviceDefinitions.configuration.vendorScreenData?.modbus_rtu).toEqual({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1004: expect(store.getState().deviceDefinitions.configuration.vendorScreenData?.['io-mapping']).toEqual({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1015: expect(store.getState().deviceDefinitions.configuration.vendorScreenData).toEqual( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1016: defaultDeviceConfiguration.vendorScreenData, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1018: store.getState().deviceActions.restoreVendorScreenSlice(['modbus_rtu'], { modbus_rtu: { enabled: false } }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1019: expect(store.getState().deviceDefinitions.configuration.vendorScreenData?.modbus_rtu).toEqual({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1033: const vsd = (state: ReturnType) => state.deviceDefinitions.configuration.vendorScreenData +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1035: state.deviceDefinitions.configuration.vendorScreenDataByBoard +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1041: store.getState().deviceActions.setVendorScreenData('module-configuration', { slots: ['mod-a'] }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1043: expect(vsd(store.getState())).toEqual({ 'module-configuration': { slots: ['mod-a'] } }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1044: expect(archive(store.getState())?.['SLM-RP4']).toEqual({ 'module-configuration': { slots: ['mod-a'] } }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1050: store.getState().deviceActions.setVendorScreenData('module-configuration', { slots: ['mod-a'] }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1062: actions.setVendorScreenData('module-configuration', { slots: ['slm-mod'] }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1066: actions.setVendorScreenData('module-configuration', { slots: ['p1am-mod'] }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1070: expect(vsd(store.getState())).toEqual({ 'module-configuration': { slots: ['slm-mod'] } }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1072: expect(archive(store.getState())?.['P1AM-100']).toEqual({ 'module-configuration': { slots: ['p1am-mod'] } }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1078: store.getState().deviceActions.setVendorScreenData('modbus_rtu', { enabled: true }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1079: store.getState().deviceActions.restoreVendorScreenSlice(['modbus_rtu'], { modbus_rtu: { enabled: false } }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1081: expect(archive(store.getState())?.['SLM-RP4']).toEqual({ modbus_rtu: { enabled: false } }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1090: const cfg = (store: ReturnType) => store.getState().deviceDefinitions.configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1095: configuration: { deviceBoard: 'SLM-RP4', vendorScreenData: { 'module-configuration': { slots: ['x'] } } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1097: expect(cfg(store).vendorScreenData).toEqual({ 'module-configuration': { slots: ['x'] } }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1098: expect(cfg(store).vendorScreenDataByBoard).toEqual({ 'SLM-RP4': { 'module-configuration': { slots: ['x'] } } }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1104: configuration: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1107: 'SLM-RP4': { 'module-configuration': { slots: ['slm'] } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1108: 'P1AM-100': { 'module-configuration': { slots: ['p1am'] } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1112: expect(cfg(store).vendorScreenData).toEqual({ 'module-configuration': { slots: ['p1am'] } }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1118: configuration: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1120: vendorScreenData: { 'module-configuration': { slots: ['flat'] } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1121: vendorScreenDataByBoard: { 'SLM-RP4': { 'module-configuration': { slots: ['slm'] } } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1124: expect(cfg(store).vendorScreenData).toEqual({ 'module-configuration': { slots: ['flat'] } }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1126: expect(cfg(store).vendorScreenDataByBoard?.['P1AM-100']).toEqual({ 'module-configuration': { slots: ['flat'] } }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1127: expect(cfg(store).vendorScreenDataByBoard?.['SLM-RP4']).toEqual({ 'module-configuration': { slots: ['slm'] } }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1133: configuration: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1135: vendorScreenDataByBoard: { 'SLM-RP4': { 'module-configuration': { slots: ['slm'] } } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1139: expect(cfg(store).vendorScreenDataByBoard).toEqual({ 'SLM-RP4': { 'module-configuration': { slots: ['slm'] } } }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1144: store.getState().deviceActions.setDeviceDefinitions({ configuration: { deviceBoard: 'P1AM-100' } }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1157: expect(store.getState().deviceDefinitions.configuration.communicationPort).toBe('/dev/ttyUSB0') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1166: it('sets ipAddress in both configuration and runtimeConnection', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1169: expect(store.getState().deviceDefinitions.configuration.runtimeIpAddress).toBe('10.0.0.5') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:1423: expect(store.getState().deviceDefinitions.configuration.deviceBoard).toBe('Custom') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-types.test.ts:168: configuration: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:5: ModbusIOGroup, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:79: function makeModbusTcpServer(name: string): PLCServer { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:82: protocol: 'modbus-tcp', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:83: modbusSlaveConfig: { enabled: false, networkInterface: '0.0.0.0', port: 502 }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:156: protocol: 'modbus-tcp', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:157: modbusTcpConfig: { host: '127.0.0.1', port: 502, slaveId: 1, timeout: 1000, ioGroups: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:211: function makeIOGroup(id: string, functionCode: ModbusIOGroup['functionCode'] = '3', length = 2): ModbusIOGroup { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:240: data: { ...current.data, servers: [...(current.data.servers ?? []), server] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:253: * Modbus claims. Producer-edit actions (addIOGroup, updateIOGroup …) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:254: * rely on `caps.modbusTcpRemote = true` to count sibling groups when +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:269: modbusTcpRemote: true, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:271: modbusTcpServer: true, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:274: debuggerTransports: ['websocket'], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:307: expect(project.data.configurations.resource.tasks).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:308: expect(project.data.configurations.resource.instances).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:309: expect(project.data.configurations.resource.globalVariables).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:310: expect(project.data.servers).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:324: configurations: { resource: { tasks: [], instances: [], globalVariables: [] } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:325: servers: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:541: it('cascades the rename into matching configuration instances (program POUs)', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:552: const instances = store.getState().project.data.configurations.resource.instances +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:586: expect(store.getState().project.data.configurations.resource.instances[0].program).toBe('Helper') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:664: expect(store.getState().project.data.configurations.resource.globalVariables).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:675: const gv = store.getState().project.data.configurations.resource.globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:727: expect(store.getState().project.data.configurations.resource.globalVariables).toHaveLength(2) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:762: expect(store.getState().project.data.configurations.resource.globalVariables[0].location).toBe('%QW0') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:797: let v = store.getState().project.data.configurations.resource.globalVariables[0] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:807: v = store.getState().project.data.configurations.resource.globalVariables[0] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:898: expect(store.getState().project.data.configurations.resource.globalVariables).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:957: const gv = store.getState().project.data.configurations.resource.globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1170: expect(store.getState().project.data.configurations.resource.tasks).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1177: expect(store.getState().project.data.configurations.resource.tasks[1].name).toBe('B') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1193: expect(store.getState().project.data.configurations.resource.tasks).toHaveLength(2) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1194: expect(store.getState().project.data.configurations.resource.tasks[0].name).toBe('New1') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1204: expect(store.getState().project.data.configurations.resource.tasks[0].name).toBe('TaskUpdated') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1205: expect(store.getState().project.data.configurations.resource.tasks[0].priority).toBe(5) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1211: expect(store.getState().project.data.configurations.resource.tasks[0].name).toBe('Task0') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1217: expect(store.getState().project.data.configurations.resource.tasks[0].name).toBe('Task0') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1226: expect(store.getState().project.data.configurations.resource.tasks).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1227: expect(store.getState().project.data.configurations.resource.tasks[0].name).toBe('B') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1233: expect(store.getState().project.data.configurations.resource.tasks).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1239: expect(store.getState().project.data.configurations.resource.tasks).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1249: const tasks = store.getState().project.data.configurations.resource.tasks +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1257: expect(store.getState().project.data.configurations.resource.tasks[0].name).toBe('A') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1263: expect(store.getState().project.data.configurations.resource.tasks[0].name).toBe('A') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1274: expect(store.getState().project.data.configurations.resource.instances).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1281: expect(store.getState().project.data.configurations.resource.instances[1].name).toBe('B') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1299: expect(store.getState().project.data.configurations.resource.instances).toHaveLength(2) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1309: expect(store.getState().project.data.configurations.resource.instances[0].name).toBe('InstUpdated') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1315: expect(store.getState().project.data.configurations.resource.instances[0].name).toBe('Inst0') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1321: expect(store.getState().project.data.configurations.resource.instances[0].name).toBe('Inst0') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1330: expect(store.getState().project.data.configurations.resource.instances).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1331: expect(store.getState().project.data.configurations.resource.instances[0].name).toBe('B') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1337: expect(store.getState().project.data.configurations.resource.instances).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1343: expect(store.getState().project.data.configurations.resource.instances).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1353: const instances = store.getState().project.data.configurations.resource.instances +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1361: expect(store.getState().project.data.configurations.resource.instances[0].name).toBe('A') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1367: expect(store.getState().project.data.configurations.resource.instances[0].name).toBe('A') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1372: // Servers +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1375: it('creates a modbus-tcp server with default config', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1377: data: { name: 'ModbusServer', protocol: 'modbus-tcp' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1380: const servers = store.getState().project.data.servers ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1381: expect(servers).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1382: expect(servers[0].modbusSlaveConfig).toBeDefined() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1383: expect(servers[0].modbusSlaveConfig?.port).toBe(502) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1391: const server = (store.getState().project.data.servers ?? [])[0] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1402: const server = (store.getState().project.data.servers ?? [])[0] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1409: data: makeModbusTcpServer('Srv'), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1412: const srv = (store.getState().project.data.servers ?? [])[0] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1413: expect(srv.modbusSlaveConfig?.port).toBe(502) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1417: store.getState().projectActions.createServer({ data: makeModbusTcpServer('Srv') }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1418: const result = store.getState().projectActions.createServer({ data: makeModbusTcpServer('Srv') }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1428: const srv = (store.getState().project.data.servers ?? [])[0] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1429: expect(srv.modbusSlaveConfig).toBeUndefined() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1437: seedServer(store, makeModbusTcpServer('A')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1438: seedServer(store, makeModbusTcpServer('B')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1441: expect(store.getState().project.data.servers).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1442: expect(store.getState().project.data.servers![0].name).toBe('B') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1453: seedServer(store, makeModbusTcpServer('OldName')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1456: expect(store.getState().project.data.servers![0].name).toBe('NewName') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1460: seedServer(store, makeModbusTcpServer('A')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1461: seedServer(store, makeModbusTcpServer('B')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1474: it('updates modbus config fields', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1475: seedServer(store, makeModbusTcpServer('Srv')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1482: const config = store.getState().project.data.servers![0].modbusSlaveConfig! +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1489: seedServer(store, makeModbusTcpServer('Srv')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1493: const config = store.getState().project.data.servers![0].modbusSlaveConfig! +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1498: seedServer(store, makeModbusTcpServer('Srv')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1505: const config = store.getState().project.data.servers![0].modbusSlaveConfig! +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1510: it('does nothing when server has no modbusSlaveConfig', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1520: describe('updateS7CommServerSettings', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1523: const result = store.getState().projectActions.updateS7CommServerSettings('S7', { port: 200, enabled: true }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1525: const settings = store.getState().project.data.servers![0].s7commSlaveConfig!.server +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1532: seedServer(store, makeModbusTcpServer('Modbus')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1533: const result = store.getState().projectActions.updateS7CommServerSettings('Modbus', { port: 200 }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1543: expect(store.getState().project.data.servers![0].s7commSlaveConfig!.plcIdentity!.name).toBe('Custom PLC') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1544: expect(store.getState().project.data.servers![0].s7commSlaveConfig!.plcIdentity!.moduleType).toBe( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1550: seedServer(store, makeModbusTcpServer('Modbus')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1551: const result = store.getState().projectActions.updateS7CommPlcIdentity('Modbus', { name: 'X' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1561: expect(store.getState().project.data.servers![0].s7commSlaveConfig!.dataBlocks).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1565: seedServer(store, makeModbusTcpServer('Modbus')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1566: const result = store.getState().projectActions.addS7CommDataBlock('Modbus', makeDataBlock(1)) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1577: expect(store.getState().project.data.servers![0].s7commSlaveConfig!.dataBlocks[0].description).toBe('Updated') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1584: expect(store.getState().project.data.servers![0].s7commSlaveConfig!.dataBlocks[0].description).toBe('DB1') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1591: expect(store.getState().project.data.servers![0].s7commSlaveConfig!.dataBlocks[0].description).toBe('DB1') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1602: expect(store.getState().project.data.servers![0].s7commSlaveConfig!.dataBlocks).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1603: expect(store.getState().project.data.servers![0].s7commSlaveConfig!.dataBlocks[0].dbNumber).toBe(2) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1610: expect(store.getState().project.data.servers![0].s7commSlaveConfig!.dataBlocks).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1617: expect(store.getState().project.data.servers![0].s7commSlaveConfig!.dataBlocks).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1629: const slaveConfig = store.getState().project.data.servers![0].s7commSlaveConfig as unknown as Record< +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1642: const slaveConfig = store.getState().project.data.servers![0].s7commSlaveConfig as unknown as Record< +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1652: seedServer(store, makeModbusTcpServer('Modbus')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1655: .projectActions.updateS7CommSystemArea('Modbus', 'peArea', { enabled: true, sizeBytes: 1 }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1665: const logging = store.getState().project.data.servers![0].s7commSlaveConfig!.logging! +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1671: seedServer(store, makeModbusTcpServer('Modbus')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1672: const result = store.getState().projectActions.updateS7CommLogging('Modbus', { logErrors: false }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1687: const srvConfig = store.getState().project.data.servers![0].opcuaServerConfig!.server +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1693: seedServer(store, makeModbusTcpServer('Modbus')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1694: const result = store.getState().projectActions.updateOpcUaServerConfig('Modbus', { enabled: true }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1705: expect(store.getState().project.data.servers![0].opcuaServerConfig!.securityProfiles).toHaveLength(2) // default + new +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1709: seedServer(store, makeModbusTcpServer('Modbus')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1710: const result = store.getState().projectActions.addOpcUaSecurityProfile('Modbus', makeSecurityProfile('p')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1722: const profiles = store.getState().project.data.servers![0].opcuaServerConfig!.securityProfiles +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1730: expect(store.getState().project.data.servers![0].opcuaServerConfig!.securityProfiles[0].enabled).toBe(true) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1740: const profiles = store.getState().project.data.servers![0].opcuaServerConfig!.securityProfiles +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1746: seedServer(store, makeModbusTcpServer('Modbus')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1747: const result = store.getState().projectActions.removeOpcUaSecurityProfile('Modbus', 'x') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1757: expect(store.getState().project.data.servers![0].opcuaServerConfig!.users).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1761: seedServer(store, makeModbusTcpServer('Modbus')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1762: const result = store.getState().projectActions.addOpcUaUser('Modbus', makeOpcUaUser('u1')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1773: expect(store.getState().project.data.servers![0].opcuaServerConfig!.users[0].role).toBe('engineer') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1780: expect(store.getState().project.data.servers![0].opcuaServerConfig!.users[0].role).toBe('operator') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1791: expect(store.getState().project.data.servers![0].opcuaServerConfig!.users).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1792: expect(store.getState().project.data.servers![0].opcuaServerConfig!.users[0].id).toBe('u2') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1796: seedServer(store, makeModbusTcpServer('Modbus')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1797: const result = store.getState().projectActions.removeOpcUaUser('Modbus', 'u1') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1809: const security = store.getState().project.data.servers![0].opcuaServerConfig!.security +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1819: const security = store.getState().project.data.servers![0].opcuaServerConfig!.security +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1826: seedServer(store, makeModbusTcpServer('Modbus')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1827: const result = store.getState().projectActions.updateOpcUaServerCertificateStrategy('Modbus', 'custom', 'C', 'K') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1838: store.getState().project.data.servers![0].opcuaServerConfig!.security.trustedClientCertificates, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1843: seedServer(store, makeModbusTcpServer('Modbus')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1844: const result = store.getState().projectActions.addOpcUaTrustedCertificate('Modbus', makeTrustedCert('cert1')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1856: const certs = store.getState().project.data.servers![0].opcuaServerConfig!.security.trustedClientCertificates +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1862: seedServer(store, makeModbusTcpServer('Modbus')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1863: const result = store.getState().projectActions.removeOpcUaTrustedCertificate('Modbus', 'cert1') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1873: expect(store.getState().project.data.servers![0].opcuaServerConfig!.addressSpace.namespaceUri).toBe( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1879: seedServer(store, makeModbusTcpServer('Modbus')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1880: const result = store.getState().projectActions.updateOpcUaAddressSpaceNamespace('Modbus', 'urn:x') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1890: expect(store.getState().project.data.servers![0].opcuaServerConfig!.addressSpace.nodes).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1894: seedServer(store, makeModbusTcpServer('Modbus')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1895: const result = store.getState().projectActions.addOpcUaNode('Modbus', makeOpcUaNode('node1')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1908: expect(store.getState().project.data.servers![0].opcuaServerConfig!.addressSpace.nodes[0].displayName).toBe( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1917: expect(store.getState().project.data.servers![0].opcuaServerConfig!.addressSpace.nodes[0].displayName).toBe( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1930: const nodes = store.getState().project.data.servers![0].opcuaServerConfig!.addressSpace.nodes +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1936: seedServer(store, makeModbusTcpServer('Modbus')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1937: const result = store.getState().projectActions.removeOpcUaNode('Modbus', 'node1') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1943: // Remote devices +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1967: expect(result).toEqual({ ok: false, message: 'No remote devices found' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1977: // makeRemoteDevice defaults to modbus-tcp — same guard the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1997: it('creates a remote device with default modbus config', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1999: data: { name: 'Dev1', protocol: 'modbus-tcp' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2004: expect(devices[0].modbusTcpConfig).toBeDefined() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2005: expect(devices[0].modbusTcpConfig?.host).toBe('127.0.0.1') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2008: it('does not overwrite existing modbus config', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2013: expect(store.getState().project.data.remoteDevices![0].modbusTcpConfig?.port).toBe(502) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2016: it('creates a device with non-modbus protocol without adding config', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2021: expect(store.getState().project.data.remoteDevices![0].modbusTcpConfig).toBeUndefined() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2080: const cfg = store.getState().project.data.remoteDevices![0].modbusTcpConfig! +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2099: const cfg = store.getState().project.data.remoteDevices![0].modbusTcpConfig! +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2109: it('does nothing when device has no modbusTcpConfig', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2118: const cfg = store.getState().project.data.remoteDevices![0].modbusTcpConfig! +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2126: // Cap-gated pool needs a target with modbusTcpRemote capability, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2127: // otherwise sibling Modbus groups don't count and consecutive +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2139: const ioGroups = store.getState().project.data.remoteDevices![0].modbusTcpConfig!.ioGroups +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2150: const points = store.getState().project.data.remoteDevices![0].modbusTcpConfig!.ioGroups[0].ioPoints! +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2159: const points = store.getState().project.data.remoteDevices![0].modbusTcpConfig!.ioGroups[0].ioPoints! +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2167: const points = store.getState().project.data.remoteDevices![0].modbusTcpConfig!.ioGroups[0].ioPoints! +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2175: const points = store.getState().project.data.remoteDevices![0].modbusTcpConfig!.ioGroups[0].ioPoints! +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2183: const points = store.getState().project.data.remoteDevices![0].modbusTcpConfig!.ioGroups[0].ioPoints! +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2191: const points = store.getState().project.data.remoteDevices![0].modbusTcpConfig!.ioGroups[0].ioPoints! +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2200: const points = store.getState().project.data.remoteDevices![0].modbusTcpConfig!.ioGroups[0].ioPoints! +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2209: const groups = store.getState().project.data.remoteDevices![0].modbusTcpConfig!.ioGroups +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2221: const groups = store.getState().project.data.remoteDevices![0].modbusTcpConfig!.ioGroups +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2230: it('does nothing when device has no modbusTcpConfig', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2239: const group = makeIOGroup('g1', '99' as ModbusIOGroup['functionCode'], 1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2241: const groups = store.getState().project.data.remoteDevices![0].modbusTcpConfig!.ioGroups +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2251: device.modbusTcpConfig!.ioGroups = [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2271: const groups = store.getState().project.data.remoteDevices![0].modbusTcpConfig!.ioGroups +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2279: device.modbusTcpConfig!.ioGroups = [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2299: const groups = store.getState().project.data.remoteDevices![0].modbusTcpConfig!.ioGroups +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2308: // inactive — adding a Modbus group must allocate from %IW0 +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2358: const points = store.getState().project.data.remoteDevices![0].modbusTcpConfig!.ioGroups[0].ioPoints! +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2374: expect(store.getState().project.data.remoteDevices![0].modbusTcpConfig!.ioGroups[0].name).toBe('renamed') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2381: expect(store.getState().project.data.remoteDevices![0].modbusTcpConfig!.ioGroups[0].name).toBe('group-g1') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2384: it('does nothing when device has no modbusTcpConfig', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2402: expect(store.getState().project.data.remoteDevices![0].modbusTcpConfig!.ioGroups).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2403: expect(store.getState().project.data.remoteDevices![0].modbusTcpConfig!.ioGroups[0].id).toBe('g2') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2406: it('does nothing when device has no modbusTcpConfig', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2421: const pointId = store.getState().project.data.remoteDevices![0].modbusTcpConfig!.ioGroups[0].ioPoints![0].id +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2424: expect(store.getState().project.data.remoteDevices![0].modbusTcpConfig!.ioGroups[0].ioPoints![0].alias).toBe( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2443: it('does nothing when device has no modbusTcpConfig', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2451: // Defensive guard coverage — operations on servers missing expected configs +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2481: it('createServer when servers array is initially undefined', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2485: data: { ...s.project.data, servers: undefined as unknown as PLCServer[] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2489: data: { name: 'S1', protocol: 'modbus-tcp' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2492: expect(store.getState().project.data.servers).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2495: it('deleteServer when servers array is undefined', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2499: data: { ...s.project.data, servers: undefined as unknown as PLCServer[] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2506: it('updateServerName when servers array is empty', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2511: it('updateServerConfig on a server without modbusSlaveConfig', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2517: it('updateS7CommServerSettings on a server without s7commSlaveConfig', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2518: seedServer(store, { name: 'Modbus', protocol: 'modbus-tcp' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2519: const result = store.getState().projectActions.updateS7CommServerSettings('Modbus', { enabled: true }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2524: seedServer(store, { name: 'Modbus', protocol: 'modbus-tcp' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2525: const result = store.getState().projectActions.updateS7CommPlcIdentity('Modbus', { name: 'Test' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2530: seedServer(store, { name: 'Modbus', protocol: 'modbus-tcp' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2531: const result = store.getState().projectActions.addS7CommDataBlock('Modbus', { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2541: seedServer(store, { name: 'Modbus', protocol: 'modbus-tcp' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2542: const result = store.getState().projectActions.updateS7CommDataBlock('Modbus', 0, { description: 'Updated' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2547: seedServer(store, { name: 'Modbus', protocol: 'modbus-tcp' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2548: const result = store.getState().projectActions.removeS7CommDataBlock('Modbus', 0) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2553: seedServer(store, { name: 'Modbus', protocol: 'modbus-tcp' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2554: const result = store.getState().projectActions.updateS7CommSystemArea('Modbus', 'peArea', { enabled: true }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2559: seedServer(store, { name: 'Modbus', protocol: 'modbus-tcp' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2560: const result = store.getState().projectActions.updateS7CommLogging('Modbus', { logErrors: false }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2565: seedServer(store, { name: 'Modbus', protocol: 'modbus-tcp' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2566: const result = store.getState().projectActions.updateOpcUaServerConfig('Modbus', { enabled: true }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2571: seedServer(store, { name: 'Modbus', protocol: 'modbus-tcp' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2572: const result = store.getState().projectActions.addOpcUaSecurityProfile('Modbus', { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2584: seedServer(store, { name: 'Modbus', protocol: 'modbus-tcp' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2585: const result = store.getState().projectActions.updateOpcUaSecurityProfile('Modbus', 'p1', { enabled: false }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2590: seedServer(store, { name: 'Modbus', protocol: 'modbus-tcp' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2591: const result = store.getState().projectActions.removeOpcUaSecurityProfile('Modbus', 'p1') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2596: seedServer(store, { name: 'Modbus', protocol: 'modbus-tcp' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2597: const result = store.getState().projectActions.addOpcUaUser('Modbus', { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2609: seedServer(store, { name: 'Modbus', protocol: 'modbus-tcp' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2610: const result = store.getState().projectActions.updateOpcUaUser('Modbus', 'u1', { role: 'viewer' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2615: seedServer(store, { name: 'Modbus', protocol: 'modbus-tcp' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2616: const result = store.getState().projectActions.removeOpcUaUser('Modbus', 'u1') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2621: seedServer(store, { name: 'Modbus', protocol: 'modbus-tcp' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2624: .projectActions.updateOpcUaServerCertificateStrategy('Modbus', 'custom', 'cert', 'key') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2629: seedServer(store, { name: 'Modbus', protocol: 'modbus-tcp' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2630: const result = store.getState().projectActions.addOpcUaTrustedCertificate('Modbus', { id: 'c1', pem: 'data' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2635: seedServer(store, { name: 'Modbus', protocol: 'modbus-tcp' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2636: const result = store.getState().projectActions.removeOpcUaTrustedCertificate('Modbus', 'c1') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2641: seedServer(store, { name: 'Modbus', protocol: 'modbus-tcp' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2642: const result = store.getState().projectActions.updateOpcUaAddressSpaceNamespace('Modbus', 'urn:test') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2647: seedServer(store, { name: 'Modbus', protocol: 'modbus-tcp' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2648: const result = store.getState().projectActions.addOpcUaNode('Modbus', { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2664: seedServer(store, { name: 'Modbus', protocol: 'modbus-tcp' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2665: const result = store.getState().projectActions.updateOpcUaNode('Modbus', 'n1', { displayName: 'Updated' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2670: seedServer(store, { name: 'Modbus', protocol: 'modbus-tcp' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2671: const result = store.getState().projectActions.removeOpcUaNode('Modbus', 'n1') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2683: data: { name: 'RD1', protocol: 'modbus-tcp' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2699: it('updateRemoteDeviceConfig on a device without modbusTcpConfig', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2710: expect(device?.modbusTcpConfig?.port).toBe(503) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2712: expect(device?.modbusTcpConfig?.host).toBe('127.0.0.1') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2715: it('addIOGroup on a device without modbusTcpConfig', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2721: it('updateIOGroup on a device without modbusTcpConfig', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2727: it('deleteIOGroup on a device without modbusTcpConfig', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2781: expect(store.getState().project.data.configurations.resource.globalVariables).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2782: expect(store.getState().project.data.configurations.resource.globalVariables[0].name).toBe('gVar2') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2818: expect(store.getState().project.data.servers![0].opcuaServerConfig!.cycleTimeMs).toBe(200) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:3077: expect(store.getState().project.data.configurations.resource.globalVariables).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:579: data: { name, protocol: 'modbus-tcp' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:581: const editorModel = { type: 'plc-server' as const, meta: { name, protocol: 'modbus-tcp' as const } } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:586: elementType: { type: 'server', protocol: 'modbus-tcp' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:615: expect(state.project.data.servers).toHaveLength(0) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:624: meta: { name: 'Server1', protocol: 'modbus-tcp' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:636: meta: { name: 'Server2', protocol: 'modbus-tcp' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:658: const server = state.project.data.servers?.find((s) => s.name === 'NewServer') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:680: data: { name, protocol: 'modbus-tcp' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:684: meta: { name, protocol: 'modbus-tcp' as const }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:690: elementType: { type: 'remote-device', protocol: 'modbus-tcp' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:727: meta: { name: 'Device1', protocol: 'modbus-tcp' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:739: meta: { name: 'Device2', protocol: 'modbus-tcp' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1090: expect(store.getState().project.data.configurations.resource.globalVariables).toEqual(globalVars) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1110: expect(store.getState().project.data.configurations.resource.globalVariables).toEqual(existingGlobals) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1192: expect(store.getState().project.data.configurations.resource.globalVariables).toEqual(existingGlobals) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1244: expect(store.getState().project.data.configurations.resource.globalVariables).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1319: expect(store.getState().project.data.configurations.resource.globalVariables).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1323: expect(store.getState().project.data.configurations.resource.globalVariables).toEqual(globalVars) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1599: configurations: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1603: >['project']['data']['configurations']['resource']['tasks'], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1606: >['project']['data']['configurations']['resource']['instances'], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1609: >['project']['data']['configurations']['resource']['globalVariables'], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1613: servers: undefined as ReturnType['project']['data']['servers'], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1639: expect(state.files['Configuration']).toBeDefined() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1728: deviceConfiguration: deviceConfig, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1734: expect(store.getState().deviceDefinitions.configuration.deviceBoard).toBe('test-board') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1749: it('registers servers as files', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1751: data.projectData.servers = [{ name: 'Server1', protocol: 'modbus-tcp' }] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1759: it('registers remote devices as files', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1761: data.projectData.remoteDevices = [{ name: 'Device1', protocol: 'modbus-tcp' }] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1790: data.projectData.configurations.resource.globalVariables = [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1805: const globalVars = store.getState().project.data.configurations.resource.globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1833: const globalVars = store.getState().project.data.configurations.resource.globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1971: const result = store.getState().serverActions.create({ name: 'MyServer', protocol: 'modbus-tcp' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1975: expect(state.project.data.servers).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1976: expect(state.project.data.servers![0].name).toBe('MyServer') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1985: store.getState().serverActions.create({ name: 'Dup', protocol: 'modbus-tcp' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1997: const result = store.getState().remoteDeviceActions.create({ name: 'MyDevice', protocol: 'modbus-tcp' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:2011: store.getState().remoteDeviceActions.create({ name: 'Dup', protocol: 'modbus-tcp' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-utils.test.ts:264: it('creates a server editor for modbus-tcp', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-utils.test.ts:265: const result = createEditorObjectForServer('ModbusServer', 'modbus-tcp') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-utils.test.ts:268: meta: { name: 'ModbusServer', protocol: 'modbus-tcp' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-utils.test.ts:301: it('creates a remote device editor for modbus-tcp', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-utils.test.ts:302: const result = createEditorObjectForRemoteDevice('Device1', 'modbus-tcp') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-utils.test.ts:305: meta: { name: 'Device1', protocol: 'modbus-tcp' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\sync-variable-aliases-action.test.ts:95: configurations: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\sync-variable-aliases-action.test.ts:96: ...current.data.configurations, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\sync-variable-aliases-action.test.ts:98: ...current.data.configurations.resource, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\sync-variable-aliases-action.test.ts:223: expect(store.getState().project.data.configurations.resource.globalVariables[0].alias).toBe('valve') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\sync-variable-aliases-action.test.ts:238: protocol: 'modbus-tcp', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\sync-variable-aliases-action.test.ts:239: modbusTcpConfig: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\tabs-utils.test.ts:147: meta: { name: 'Resource', path: '/data/configuration/resource' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\tabs-utils.test.ts:167: it('creates a device editor for configuration', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\tabs-utils.test.ts:168: const result = CreateDeviceEditor('Dev', 'configuration') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\tabs-utils.test.ts:171: meta: { name: 'Dev', derivation: 'configuration' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\tabs-utils.test.ts:190: const result = CreateDeviceEditor(undefined, 'configuration') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\tabs-utils.test.ts:198: expect(() => CreateDeviceEditor('Dev', '' as 'configuration')).toThrow('Invalid derivation value') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\tabs-utils.test.ts:207: const result = CreateRemoteDeviceEditor('RemDev', 'modbus-tcp') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\tabs-utils.test.ts:210: meta: { name: 'RemDev', protocol: 'modbus-tcp' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\tabs-utils.test.ts:296: name: 'Diff: devices/configuration.json', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\tabs-utils.test.ts:297: elementType: { type: 'diff-viewer', filePath: 'devices/configuration.json' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\tabs-utils.test.ts:302: expect(result.meta.filePath).toBe('devices/configuration.json') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\tabs-utils.test.ts:303: expect(result.meta.name).toBe('Diff: devices/configuration.json') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-parser.ts:7: * the editor's store, polling loop, and Modbus clients already consume. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-parser.ts:37: * (polling loop, modbus clients) keeps a plain `number` indirection. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-builder.ts:125: * @param instanceName - Instance name from Resources configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-traversal.ts:67: /** Instance name from Resources configuration */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\device.ts:39: * The `debuggerTransports.length > 0` guard treats EMPTY_CAPABILITIES +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\device.ts:47: if (caps.debuggerTransports.length === 0) return false +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\device.ts:71: * — Runtime v3 only speaks Modbus TCP, Arduino uses Modbus RTU/TCP, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\device.ts:79: if (caps.debuggerTransports.includes('websocket')) return true +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\device.ts:151: message: `Runtime version mismatch: Selected "${boardTarget}" but connected to a ${detectedVersion} runtime. Please update your device configuration to match the connected runtime.`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\keywords.ts:43: 'CONFIGURATION', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\keywords.ts:44: 'END_CONFIGURATION', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\location-dropdown-options.ts:66: /** Modbus TCP slave / EtherCAT remote IO points, already flattened +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\location-dropdown-options.ts:68: * when EITHER `capabilities.modbusTcpRemote` or +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\location-dropdown-options.ts:100: // EtherCAT and Modbus TCP slave I/O points share one bucket in the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\location-dropdown-options.ts:105: capabilities.modbusTcpRemote || capabilities.ethercat ? buildRemoteDeviceOptionGroups(cellId, remoteIOPoints) : [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\parse-resource-configuration-to-string.ts:6: export function parseResourceConfigurationToString(taskList: PLCTask[], instanceList: PLCInstance[]): string { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\parse-resource-configuration-to-string.ts:15: let out = 'CONFIGURATION Config0\n' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\parse-resource-configuration-to-string.ts:31: out += 'END_CONFIGURATION' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\parse-resource-string-to-configuration.ts:64: export function parseResourceStringToConfiguration(configString: string): { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\parse-resource-string-to-configuration.ts:163: if (/^(CONFIGURATION|RESOURCE|END_RESOURCE|END_CONFIGURATION)/i.test(lineWithoutComment)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\version-control-content.ts:19: * (`project.json`, `devices/configuration.json`, `devices/pin-mapping.json`). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\addCppLocalVariables.test.ts:12: configurations: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:11: interface ModbusSlaveNetworkConfig { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:16: interface ModbusSlaveHoldingRegisters { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:23: interface ModbusSlaveCoils { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:28: interface ModbusSlaveDiscreteInputs { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:32: interface ModbusSlaveInputRegisters { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:36: interface ModbusSlaveBufferMapping { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:37: holding_registers: ModbusSlaveHoldingRegisters +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:38: coils: ModbusSlaveCoils +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:39: discrete_inputs: ModbusSlaveDiscreteInputs +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:40: input_registers: ModbusSlaveInputRegisters +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:43: interface ModbusSlaveConfig { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:44: network_configuration: ModbusSlaveNetworkConfig +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:45: buffer_mapping: ModbusSlaveBufferMapping +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:49: * Generates the Modbus Slave plugin configuration JSON from the project's servers. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:50: * Returns null if there are no enabled Modbus TCP servers configured. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:52: * @param servers - Array of PLCServer from the project data +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:53: * @returns The Modbus Slave configuration as a JSON string, or null if no servers are configured +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:55: export const generateModbusSlaveConfig = (servers: PLCServer[] | undefined): string | null => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:56: if (!servers || servers.length === 0) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:60: const modbusServer = servers.find((server) => server.protocol === 'modbus-tcp' && server.modbusSlaveConfig) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:62: if (!modbusServer || !modbusServer.modbusSlaveConfig) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:66: const { modbusSlaveConfig } = modbusServer +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:69: const bufferMapping = modbusSlaveConfig.bufferMapping || DEFAULT_BUFFER_MAPPING +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:71: const config: ModbusSlaveConfig = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:72: network_configuration: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:73: host: modbusSlaveConfig.networkInterface || '0.0.0.0', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:74: port: modbusSlaveConfig.port || 502, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:100: ModbusSlaveBufferMapping, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:101: ModbusSlaveCoils, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:102: ModbusSlaveConfig, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:103: ModbusSlaveDiscreteInputs, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:104: ModbusSlaveHoldingRegisters, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:105: ModbusSlaveInputRegisters, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\generate-modbus-slave-config.ts:106: ModbusSlaveNetworkConfig, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:2: import { DEFAULT_BUFFER_MAPPING, generateModbusSlaveConfig } from '../generate-modbus-slave-config' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:4: const makeModbusServer = (overrides?: Partial): PLCServer => ({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:5: name: 'ModbusSlave', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:6: protocol: 'modbus-tcp', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:7: modbusSlaveConfig: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:15: describe('generateModbusSlaveConfig', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:17: expect(generateModbusSlaveConfig(undefined)).toBeNull() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:21: expect(generateModbusSlaveConfig([])).toBeNull() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:24: it('returns null when no modbus-tcp servers exist', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:25: const servers: PLCServer[] = [{ name: 'S7', protocol: 's7comm' }] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:26: expect(generateModbusSlaveConfig(servers)).toBeNull() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:29: it('returns null when modbus-tcp server has no slave config', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:30: const servers: PLCServer[] = [{ name: 'NoConfig', protocol: 'modbus-tcp' }] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:31: expect(generateModbusSlaveConfig(servers)).toBeNull() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:34: it('generates config with correct network configuration', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:35: const result = generateModbusSlaveConfig([makeModbusServer()]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:39: expect(parsed.network_configuration.host).toBe('192.168.1.1') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:40: expect(parsed.network_configuration.port).toBe(5020) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:44: const server = makeModbusServer() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:45: server.modbusSlaveConfig!.networkInterface = '' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:46: server.modbusSlaveConfig!.port = 0 +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:48: const result = generateModbusSlaveConfig([server]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:50: expect(parsed.network_configuration.host).toBe('0.0.0.0') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:51: expect(parsed.network_configuration.port).toBe(502) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:55: const result = generateModbusSlaveConfig([makeModbusServer()]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:70: const server = makeModbusServer() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:71: server.modbusSlaveConfig!.bufferMapping = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:78: const result = generateModbusSlaveConfig([server]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:92: const server = makeModbusServer() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:93: server.modbusSlaveConfig!.bufferMapping = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:98: const result = generateModbusSlaveConfig([server]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:108: it('finds first modbus-tcp server in mixed array', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:109: const servers: PLCServer[] = [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:111: makeModbusServer(), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:115: const result = generateModbusSlaveConfig(servers) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:118: expect(parsed.network_configuration.host).toBe('192.168.1.1') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:122: const result = generateModbusSlaveConfig([makeModbusServer()]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:128: const server = makeModbusServer() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:129: server.modbusSlaveConfig!.bufferMapping = {} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\modbus\__tests__\generate-modbus-slave-config.test.ts:131: const result = generateModbusSlaveConfig([server]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\generate-opcua-config.ts:32: * Runtime configuration interfaces +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\generate-opcua-config.ts:150: * Build the runtime server configuration from editor config +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\generate-opcua-config.ts:176: * Build the runtime security configuration from editor config +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\generate-opcua-config.ts:193: * Build the runtime users configuration from editor config +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\generate-opcua-config.ts:318: * Build the complete address space configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\generate-opcua-config.ts:404: * Generates the OPC-UA configuration JSON for the runtime plugin. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\generate-opcua-config.ts:414: * @param servers - Array of configured PLC servers +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\generate-opcua-config.ts:416: * @param instances - Array of PLC instances from Resources configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\generate-opcua-config.ts:421: servers: PLCServer[] | undefined, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\generate-opcua-config.ts:426: // 1. Find OPC-UA server configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\generate-opcua-config.ts:427: if (!servers || servers.length === 0) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\generate-opcua-config.ts:431: const opcuaServer = servers.find((s) => s.protocol === 'opcua' && s.opcuaServerConfig?.server.enabled) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\generate-opcua-config.ts:452: // 3. Build runtime configuration. Field-level resolution failures +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\generate-opcua-config.ts:489: * Validates the OPC-UA configuration before generation. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\index.ts:2: * OPC-UA Configuration Utilities +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\index.ts:4: * This module provides utilities for generating OPC-UA server configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\resolve-indices.ts:88: ` Make sure the program is instantiated in the Resources configuration.`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\types.ts:2: * OPC-UA Configuration Types +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\__tests__\generate-opcua-config.test.ts:113: it('returns null when servers is undefined', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\__tests__\generate-opcua-config.test.ts:117: it('returns null when servers is empty', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\base-xml.ts:49: configurations: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\base-xml.ts:50: configuration: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\instances-xml.ts:1: import { PLCConfiguration } from '@root/middleware/shared/ports/open-plc-types' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\instances-xml.ts:5: export const codeSysInstanceToXml = (xml: BaseXml, configuration: PLCConfiguration) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\instances-xml.ts:6: const { instances, tasks, globalVariables } = configuration.resource +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\instances-xml.ts:29: if (!xml.project.instances.configurations.configuration.resource.task) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\instances-xml.ts:30: xml.project.instances.configurations.configuration.resource.task = [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\instances-xml.ts:32: xml.project.instances.configurations.configuration.resource.task.push(t) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\instances-xml.ts:56: if (!xml.project.instances.configurations.configuration.globalVars) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\instances-xml.ts:57: xml.project.instances.configurations.configuration.globalVars = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\instances-xml.ts:61: if (!xml.project.instances.configurations.configuration.globalVars.variable) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\instances-xml.ts:62: xml.project.instances.configurations.configuration.globalVars.variable = [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\instances-xml.ts:64: xml.project.instances.configurations.configuration.globalVars.variable.push(v) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\base-xml.test.ts:30: expect(xml.project.instances.configurations.configuration['@name']).toBe('Config0') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\base-xml.test.ts:31: expect(xml.project.instances.configurations.configuration.resource['@name']).toBe('Res0') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\base-xml.test.ts:32: expect(xml.project.instances.configurations.configuration.resource.task).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\instances-xml.test.ts:1: import type { PLCConfiguration } from '@root/middleware/shared/ports/open-plc-types' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\instances-xml.test.ts:8: const makeConfig = (overrides: Partial = {}): PLCConfiguration => ({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\instances-xml.test.ts:26: const task = result.project.instances.configurations.configuration.resource.task[0] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\instances-xml.test.ts:41: const task = result.project.instances.configurations.configuration.resource.task[0] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\instances-xml.test.ts:49: ;(xml.project.instances.configurations.configuration.resource as unknown as Record).task = +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\instances-xml.test.ts:55: expect(result.project.instances.configurations.configuration.resource.task).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\instances-xml.test.ts:72: const tasks = result.project.instances.configurations.configuration.resource.task +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\instances-xml.test.ts:93: const gv = result.project.instances.configurations.configuration.globalVars!.variable![0] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\instances-xml.test.ts:115: const gv = result.project.instances.configurations.configuration.globalVars!.variable![0] as unknown as Record< +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\instances-xml.test.ts:135: const gv = result.project.instances.configurations.configuration.globalVars!.variable![0] as unknown as Record< +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\instances-xml.test.ts:155: expect(result.project.instances.configurations.configuration.globalVars!.variable).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\instances-xml.test.ts:160: ;(xml.project.instances.configurations.configuration as unknown as Record).globalVars = {} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\instances-xml.test.ts:172: expect(result.project.instances.configurations.configuration.globalVars!.variable).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\base-xml.ts:56: configurations: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\base-xml.ts:57: configuration: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\base-xml.ts:85: const configuration = project.data.configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\base-xml.ts:86: xmlResult = oldEditorInstanceToXml(xmlResult, configuration) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\instances-xml.ts:1: import { PLCConfiguration } from '@root/middleware/shared/ports/open-plc-types' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\instances-xml.ts:8: export const oldEditorInstanceToXml = (xml: BaseXml, configuration: PLCConfiguration) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\instances-xml.ts:9: const { instances, tasks, globalVariables } = configuration.resource +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\instances-xml.ts:32: if (!xml.project.instances.configurations.configuration.resource.task) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\instances-xml.ts:33: xml.project.instances.configurations.configuration.resource.task = [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\instances-xml.ts:35: xml.project.instances.configurations.configuration.resource.task.push(t) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\instances-xml.ts:57: if (!xml.project.instances.configurations.configuration.globalVars) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\instances-xml.ts:58: xml.project.instances.configurations.configuration.globalVars = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\instances-xml.ts:62: if (!xml.project.instances.configurations.configuration.globalVars.variable) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\instances-xml.ts:63: xml.project.instances.configurations.configuration.globalVars.variable = [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\instances-xml.ts:65: xml.project.instances.configurations.configuration.globalVars.variable.push(v) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\base-xml.test.ts:32: expect(xml.project.instances.configurations.configuration['@name']).toBe('Config0') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\base-xml.test.ts:33: expect(xml.project.instances.configurations.configuration.resource['@name']).toBe('Res0') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\base-xml.test.ts:34: expect(xml.project.instances.configurations.configuration.resource.task).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\base-xml.test.ts:62: configuration: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\instances-xml.test.ts:1: import type { PLCConfiguration } from '@root/middleware/shared/ports/open-plc-types' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\instances-xml.test.ts:8: const makeConfig = (overrides: Partial = {}): PLCConfiguration => ({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\instances-xml.test.ts:26: const task = result.project.instances.configurations.configuration.resource.task[0] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\instances-xml.test.ts:40: const task = result.project.instances.configurations.configuration.resource.task[0] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\instances-xml.test.ts:47: ;(xml.project.instances.configurations.configuration.resource as unknown as Record).task = +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\instances-xml.test.ts:53: expect(result.project.instances.configurations.configuration.resource.task).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\instances-xml.test.ts:72: const gv = result.project.instances.configurations.configuration.globalVars!.variable![0] as unknown as Record< +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\instances-xml.test.ts:91: const gv = result.project.instances.configurations.configuration.globalVars!.variable![0] as unknown as Record< +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\instances-xml.test.ts:106: const gv = result.project.instances.configurations.configuration.globalVars!.variable![0] as unknown as Record< +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\instances-xml.test.ts:121: const gv = result.project.instances.configurations.configuration.globalVars!.variable![0] as unknown as Record< +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\instances-xml.test.ts:136: expect(result.project.instances.configurations.configuration.globalVars!.variable).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\instances-xml.test.ts:141: ;(xml.project.instances.configurations.configuration as unknown as Record).globalVars = {} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\instances-xml.test.ts:148: expect(result.project.instances.configurations.configuration.globalVars!.variable).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\instances-xml.test.ts:159: const gv = result.project.instances.configurations.configuration.globalVars!.variable![0] as unknown as Record< +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\instances-xml.test.ts:183: const gv = result.project.instances.configurations.configuration.globalVars!.variable![0] as unknown as Record< +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\addPythonLocalVariables.test.ts:12: configurations: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\s7comm\generate-s7comm-config.ts:4: * S7Comm Runtime Configuration Interfaces +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\s7comm\generate-s7comm-config.ts:69: * Generates the S7Comm configuration JSON for the runtime plugin. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\s7comm\generate-s7comm-config.ts:72: * @param servers - Array of configured PLC servers +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\s7comm\generate-s7comm-config.ts:75: export const generateS7CommConfig = (servers: PLCServer[] | undefined): string | null => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\s7comm\generate-s7comm-config.ts:76: if (!servers || servers.length === 0) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\s7comm\generate-s7comm-config.ts:80: const s7commServer = servers.find((server) => server.protocol === 's7comm' && server.s7commSlaveConfig) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\s7comm\generate-s7comm-config.ts:88: // Build the runtime configuration object +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\s7comm\__tests__\generate-s7comm-config.test.ts:82: it('returns null for undefined servers', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\s7comm\__tests__\generate-s7comm-config.test.ts:86: it('returns null for empty servers array', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\s7comm\__tests__\generate-s7comm-config.test.ts:91: const servers: PLCServer[] = [{ name: 'Modbus', protocol: 'modbus-tcp' }] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\s7comm\__tests__\generate-s7comm-config.test.ts:92: expect(generateS7CommConfig(servers)).toBeNull() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\s7comm\__tests__\generate-s7comm-config.test.ts:96: const servers: PLCServer[] = [{ name: 'S7', protocol: 's7comm' }] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\s7comm\__tests__\generate-s7comm-config.test.ts:97: expect(generateS7CommConfig(servers)).toBeNull() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\s7comm\__tests__\generate-s7comm-config.test.ts:303: it('finds the s7comm server in a mixed servers array', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\s7comm\__tests__\generate-s7comm-config.test.ts:304: const servers: PLCServer[] = [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\s7comm\__tests__\generate-s7comm-config.test.ts:305: { name: 'Modbus', protocol: 'modbus-tcp' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\s7comm\__tests__\generate-s7comm-config.test.ts:310: const result = generateS7CommConfig(servers) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\vpp\__tests__\persistence-keys.test.ts:41: { id: 'modules', persistence: 'module-configuration', layout: 'module-slots' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\vpp\__tests__\persistence-keys.test.ts:45: expect(collectScreenPersistenceKeys(screen)).toEqual(['hal-config', 'module-configuration', 'io-mapping']) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\vpp\__tests__\persistence-keys.test.ts:83: // definition: a hal-config + module-configuration pair. The +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\vpp\__tests__\persistence-keys.test.ts:90: { id: 'mods', persistence: 'module-configuration', layout: 'module-slots', title: 'Modules' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\vpp\__tests__\persistence-keys.test.ts:95: expect(keys).toContain('module-configuration') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\location-dropdown-options.test.ts:113: it('drops remote-device IO points when both `modbusTcpRemote` and `ethercat` are disabled', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\location-dropdown-options.test.ts:128: it('surfaces remote-device IO points when EITHER `modbusTcpRemote` OR `ethercat` is enabled', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\location-dropdown-options.test.ts:158: // The simulator preset enables modbusTcpRemote + ethercat as +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-configuration-to-string.test.ts:2: import { parseResourceConfigurationToString } from '../parse-resource-configuration-to-string' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-configuration-to-string.test.ts:4: describe('parseResourceConfigurationToString', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-configuration-to-string.test.ts:6: expect(parseResourceConfigurationToString([], [])).toBe('(* No tasks or program instances declared. *)') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-configuration-to-string.test.ts:11: const result = parseResourceConfigurationToString(tasks, []) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-configuration-to-string.test.ts:13: expect(result).toContain('CONFIGURATION Config0') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-configuration-to-string.test.ts:17: expect(result).toContain('END_CONFIGURATION') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-configuration-to-string.test.ts:22: const result = parseResourceConfigurationToString(tasks, []) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-configuration-to-string.test.ts:31: const result = parseResourceConfigurationToString(tasks, []) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-configuration-to-string.test.ts:38: const result = parseResourceConfigurationToString(tasks, []) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-configuration-to-string.test.ts:47: const result = parseResourceConfigurationToString(tasks, []) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-configuration-to-string.test.ts:55: const result = parseResourceConfigurationToString(tasks, instances) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-configuration-to-string.test.ts:63: const result = parseResourceConfigurationToString(tasks, instances) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-configuration-to-string.test.ts:81: const result = parseResourceConfigurationToString(tasks, instances) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:1: import { parseResourceStringToConfiguration } from '../parse-resource-string-to-configuration' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:3: describe('parseResourceStringToConfiguration', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:7: const result = parseResourceStringToConfiguration('') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:13: const { tasks, instances } = parseResourceStringToConfiguration(input) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:22: const { tasks, instances } = parseResourceStringToConfiguration(input) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:28: it('parses a full configuration block with wrappers', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:30: 'CONFIGURATION Config0', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:35: 'END_CONFIGURATION', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:38: const { tasks, instances } = parseResourceStringToConfiguration(input) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:49: const { tasks } = parseResourceStringToConfiguration(input) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:55: const { tasks } = parseResourceStringToConfiguration(input) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:65: const { tasks } = parseResourceStringToConfiguration(input) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:74: const { tasks, instances } = parseResourceStringToConfiguration(input) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:83: const { tasks } = parseResourceStringToConfiguration(input) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:95: expect(() => parseResourceStringToConfiguration(input)).toThrow(/Duplicate TASK name/) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:100: expect(() => parseResourceStringToConfiguration(input)).toThrow(/reserved keyword/) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:106: expect(() => parseResourceStringToConfiguration(input)).toThrow(/parentheses/) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:111: expect(() => parseResourceStringToConfiguration(input)).toThrow(/semicolon/) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:119: expect(() => parseResourceStringToConfiguration(input)).toThrow(/Assignment operator/) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:124: expect(() => parseResourceStringToConfiguration(input)).toThrow(/Invalid or unsupported characters/) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:130: expect(() => parseResourceStringToConfiguration(input)).toThrow(/Unrecognized declaration format/) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:142: expect(() => parseResourceStringToConfiguration(input)).toThrow(/Duplicate PROGRAM name/) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:147: expect(() => parseResourceStringToConfiguration(input)).toThrow(/Missing "WITH" keyword/) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:152: expect(() => parseResourceStringToConfiguration(input)).toThrow(/Missing colon/) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:157: expect(() => parseResourceStringToConfiguration(input)).toThrow(/Missing semicolon/) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:162: expect(() => parseResourceStringToConfiguration(input)).toThrow(/Invalid or unsupported characters/) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:168: expect(() => parseResourceStringToConfiguration(input)).toThrow(/Unrecognized declaration format/) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:181: expect(() => parseResourceStringToConfiguration(input)).toThrow(/must start with the "TASK" keyword/) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:187: expect(() => parseResourceStringToConfiguration(input)).toThrow(/must start with the "PROGRAM" keyword/) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:194: expect(() => parseResourceStringToConfiguration(input)).toThrow(/Unrecognized or misplaced declaration/) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:204: expect(() => parseResourceStringToConfiguration(input)).toThrow( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:214: expect(() => parseResourceStringToConfiguration(input)).toThrow(/line 1/) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:227: const { tasks, instances } = parseResourceStringToConfiguration(input) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:236: it('parses case-insensitive CONFIGURATION/RESOURCE wrapper keywords', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:238: 'configuration Config0', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:242: 'end_configuration', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\parse-resource-string-to-configuration.test.ts:245: const { tasks } = parseResourceStringToConfiguration(input) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\unique-slave-name.test.ts:8: it('returns empty set when there are no remote devices', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\unique-slave-name.test.ts:12: it('returns empty set when remote devices have no ethercat config', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\main.ts:123: * Splash window configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\main.ts:154: * Main window configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:40: import { ModbusTcpClient } from '../../../backend/editor/modbus/modbus-client' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:41: import { ModbusRtuClient } from '../../../backend/editor/modbus/modbus-rtu-client' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:59: private debuggerModbusClient: ModbusTcpClient | ModbusRtuClient | null = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1435: let client: ModbusTcpClient | ModbusRtuClient | null = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1440: client = new ModbusRtuClient({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1452: this.debuggerModbusClient = client +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1488: client = new ModbusTcpClient({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1500: this.debuggerModbusClient && +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1504: const { md5: targetMd5, targetEndian } = await this.debuggerModbusClient.getMd5Hash() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1509: client = new ModbusRtuClient({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1525: this.debuggerModbusClient = client +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1641: if (!this.debuggerModbusClient) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1650: this.debuggerModbusClient = new ModbusRtuClient({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1662: this.debuggerModbusClient = new ModbusTcpClient({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1672: this.debuggerModbusClient = new ModbusRtuClient({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1683: await this.debuggerModbusClient.connect() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1686: this.debuggerModbusClient = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1693: const result = await this.debuggerModbusClient.getVariablesList(variableIndexes) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1706: if (this.debuggerModbusClient) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1707: this.debuggerModbusClient.disconnect() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1708: this.debuggerModbusClient = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1727: if (this.debuggerModbusClient) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1728: this.debuggerModbusClient.disconnect() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1729: this.debuggerModbusClient = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1733: this.debuggerModbusClient = new ModbusRtuClient({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1740: await this.debuggerModbusClient.connect() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1747: await this.debuggerModbusClient.getMd5Hash() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1749: if (this.debuggerModbusClient) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1750: this.debuggerModbusClient.disconnect() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1751: this.debuggerModbusClient = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1776: if (this.debuggerModbusClient) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1777: this.debuggerModbusClient.disconnect() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1778: this.debuggerModbusClient = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1784: this.debuggerModbusClient = new ModbusTcpClient({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1789: await this.debuggerModbusClient.connect() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1797: this.debuggerModbusClient && +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1807: if (this.debuggerModbusClient) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1808: this.debuggerModbusClient.disconnect() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1809: this.debuggerModbusClient = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1812: this.debuggerModbusClient = new ModbusRtuClient({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1818: await this.debuggerModbusClient.connect() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1829: this.debuggerModbusClient = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1842: if (this.debuggerModbusClient) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1843: this.debuggerModbusClient.disconnect() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1844: this.debuggerModbusClient = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1888: if (!this.debuggerModbusClient) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1889: logger.info('[IPC Handler] Modbus client not connected') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1894: const result = await this.debuggerModbusClient.setVariable(variableIndex, force, buffer) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1895: logger.info('[IPC Handler] Modbus setVariable result: ' + JSON.stringify(result)) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1898: logger.error('[IPC Handler] Modbus setVariable error: ' + getErrorMessage(error)) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\compiler-adapter.ts:11: * - Port uses `configurations` (plural), IPC uses `configuration` (singular) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\compiler-adapter.ts:47: configuration: PLCProjectData['configurations'] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\compiler-adapter.ts:48: servers?: PLCProjectData['servers'] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\compiler-adapter.ts:73: configuration: data.configurations, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\compiler-adapter.ts:74: servers: data.servers, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\compiler-adapter.ts:220: // User-authored configuration-screen data — threaded +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\debugger-adapter.ts:5: * methods. The main process manages Modbus clients (TCP, RTU, WebSocket) and the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\debugger-adapter.ts:9: * The main process persists the Modbus/WebSocket client between calls and handles +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\project-adapter.ts:10: * - Editor uses `configuration` (singular), port uses `configurations` (plural) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\project-adapter.ts:24: DeviceConfiguration, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\project-adapter.ts:62: configuration: { resource: { tasks: PLCTask[]; instances: PLCInstance[]; globalVariables: PLCVariable[] } } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\project-adapter.ts:63: servers?: unknown[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\project-adapter.ts:69: deviceConfiguration: DeviceConfiguration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\project-adapter.ts:132: const configuration = content.project.data.configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\project-adapter.ts:145: configurations: configuration, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\project-adapter.ts:146: servers: content.project.data.servers as PLCProjectData['servers'], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\project-adapter.ts:165: deviceConfiguration: content.deviceConfiguration, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\simulator-adapter.ts:6: * and ModbusRtuClient are managed internally by the main process. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\compiler-adapter.test.ts:41: configurations: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\compiler-adapter.test.ts:139: expect(result.configuration).toBe(mockProjectData.configurations) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\compiler-adapter.test.ts:507: configuration: mockProjectData.configurations, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\compiler-adapter.test.ts:779: configurations: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\compiler-adapter.test.ts:809: configurations: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\compiler-adapter.test.ts:890: configurations: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\compiler-adapter.test.ts:922: configurations: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\compiler-adapter.test.ts:972: configurations: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\compiler-adapter.test.ts:1007: configurations: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\project-adapter.test.ts:14: configuration: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\project-adapter.test.ts:42: deviceConfiguration: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\project-adapter.test.ts:79: configuration: { resource: { tasks: [], instances: [], globalVariables: [] } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\project-adapter.test.ts:183: it('maps configuration to configurations field', async () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\project-adapter.test.ts:186: expect(result.data?.projectData.configurations).toEqual({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\project-adapter.test.ts:191: it('includes device configuration and pin mapping', async () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\project-adapter.test.ts:194: expect(result.data?.deviceConfiguration?.deviceBoard).toBe('Arduino Uno') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\compiler-port.ts:48: /** User-authored configuration-screen data +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\compiler-port.ts:49: * (`DeviceConfiguration.vendorScreenData`). Threaded through the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\debug-spec-types.ts:11: * (`configuration.*`, `screens..`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\debug-spec-types.ts:13: * section's `id` field (e.g. `modbus_rtu`) — the same key +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\debug-spec-types.ts:14: * `DeviceConfiguration.vendorScreenData` is indexed by. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\debug-spec-types.ts:38: * (e.g. `configuration.communicationPort`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\debug-spec-types.ts:39: * `screens.modbus_rtu.enabled`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\debugger-port.ts:4: * Editor adapter: Routes through IPC to main process Modbus clients +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\debugger-port.ts:7: * WebRTCTransport, ModbusRtuTransport (simulator), or HTTP fallback. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\debugger-port.ts:9: * The underlying protocol is always Modbus PDU with custom function codes +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\device-port.ts:2: * DevicePort — Abstracts hardware/board discovery and configuration. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\device-port.ts:28: * Get all available boards with their hardware specs and pin configurations. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\esi-port.ts:5: * for use in device configuration. The persistence mechanism differs between +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\esi-port.ts:78: * This is called when the user selects a device for detailed configuration. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\esi-types.ts:35: * Sync Manager configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\esi-types.ts:53: * FMMU (Fieldbus Memory Management Unit) configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\esi-types.ts:154: // ===================== SDO CONFIGURATION ===================== +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\esi-types.ts:157: * SDO (Service Data Object) configuration entry for startup parameters. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\esi-types.ts:160: export interface SDOConfigurationEntry { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\esi-types.ts:183: * Returned by enrichDeviceData() and used by device configuration components. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\esi-types.ts:190: sdoConfigurations?: SDOConfigurationEntry[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\esi-types.ts:207: /** FMMU configurations */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\esi-types.ts:209: /** Sync Manager configurations */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\esi-types.ts:482: /** Per-slave configuration settings */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\esi-types.ts:495: sdoConfigurations?: SDOConfigurationEntry[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\esi-types.ts:498: // ===================== PER-SLAVE CONFIGURATION ===================== +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\esi-types.ts:512: * Addressing configuration for an EtherCAT slave. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\esi-types.ts:569: * Complete per-slave configuration for a configured EtherCAT device. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\ethercat-types.ts:168: * Slave configuration entry for validation requests. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\ethercat-types.ts:178: /** PDO mapping configuration */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\ethercat-types.ts:188: /** List of slave configurations */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\ethercat-types.ts:198: /** Whether the configuration is valid */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\ethercat-types.ts:200: /** List of validation errors (configuration is invalid if non-empty) */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\ethercat-types.ts:202: /** List of warnings (configuration is valid but may have issues) */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\ethercat-types.ts:238: * IPC response for validating configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\ethercat-types.ts:333: /** Master name from configuration */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\index.ts:91: DeviceConfiguration, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\open-plc-types.ts:79: // Configuration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\open-plc-types.ts:82: export interface PLCConfiguration { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\open-plc-types.ts:97: configuration: PLCConfiguration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\open-plc-types.ts:98: servers?: PLCServer[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\open-plc-types.ts:106: deletedServers?: Array<{ name: string; protocol: string }> +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\platform-capabilities.ts:101: /** True if the app supports EtherCAT device configuration and ESI repository. */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\project-port.ts:32: import type { DeviceConfiguration, DevicePin, PLCProjectData, ProjectMeta, RecentProject, Unsubscribe } from './types' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\project-port.ts:47: deviceConfiguration?: DeviceConfiguration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\project-port.ts:95: /** Pre-serialized devices/configuration.json content. `undefined` +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\project-port.ts:150: /** Raw content of devices/configuration.json */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\project-port.ts:161: /** Raw server config files from devices/servers/ */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\runtime-port.ts:216: /** Validate an EtherCAT configuration against the runtime. */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\simulator-port.ts:5: * Firmware loaded from disk path. USART0 bridged to ModbusRtuClient. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\simulator-port.ts:8: * Uses browser-compatible Uint8Array-based Modbus RTU client. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\simulator-port.ts:53: * Web adapter: initializes virtual serial port and Modbus RTU client. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\simulator-port.ts:61: * Cleans up virtual serial port and Modbus client state. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:162: // Servers & Communication Protocols +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:165: export type ServerProtocol = 'modbus-tcp' | 's7comm' | 'ethernet-ip' | 'opcua' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:166: export type RemoteDeviceProtocol = 'modbus-tcp' | 'ethernet-ip' | 'ethercat' | 'profinet' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:168: // Modbus +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:169: export interface ModbusSlaveConfig { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:173: bufferMapping?: ModbusBufferMapping +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:176: export interface ModbusBufferMapping { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:183: export interface ModbusIOPoint { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:191: export interface ModbusIOGroup { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:199: ioPoints?: ModbusIOPoint[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:202: export interface ModbusRemoteTcpConfig { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:213: ioGroups: ModbusIOGroup[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:217: export interface S7CommServerSettings { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:288: server: S7CommServerSettings +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:296: export interface OpcUaServerSettings { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:382: server: OpcUaServerSettings +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:394: modbusSlaveConfig?: ModbusSlaveConfig +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:417: modbusTcpConfig?: ModbusRemoteTcpConfig +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:438: configurations: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:445: servers?: PLCServer[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:509: /** Show Device / Configuration / Orchestrators entries. */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:511: /** Show Server entries (Modbus / OPC-UA servers). */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:512: hasServers: boolean +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:513: /** Show Remote-Device entries (Modbus client, EtherCAT). */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:541: hasServers: false, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:556: hasServers: true, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:665: /** Path (in the manifest) to this module's configuration screen. The +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:920: export interface DeviceConfiguration { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:926: * Modbus tables, …). This is the flat view every consumer and the compile +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:1252: * Platform-provided configuration for the AI feature. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\codesys\base-diagram.ts:51: configurations: z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\codesys\base-diagram.ts:52: configuration: z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\base-diagram.ts:58: configurations: z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\base-diagram.ts:59: configuration: z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\__tests__\project-capabilities.test.ts:34: expect(caps.hasServers).toBe(true) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\__tests__\project-capabilities.test.ts:59: expect(caps.hasServers).toBe(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\address-pool.ts:32: * 3. Modbus TCP remote-device I/O points (per-device, per-group). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\address-pool.ts:45: export type SourceKind = 'pin-mapping' | 'vpp-io' | 'modbus-tcp-remote' | 'ethercat' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\address-pool.ts:110: modbusTcpConfig?: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\address-pool.ts:222: // 3. Modbus TCP slave remote-device I/O points. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\address-pool.ts:223: if (caps.modbusTcpRemote && inputs.remoteDevices && ignore !== 'modbus-tcp-remote') { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\address-pool.ts:226: for (const group of dev.modbusTcpConfig?.ioGroups ?? []) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\address-pool.ts:228: claim(point.iecLocation, { kind: 'modbus-tcp-remote', ref: `${devRef}:${point.id}` }, point.alias) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\alias-registry.ts:110: * - `modbus-tcp-remote` ref="d1:point17" ? "Modbus device d1 point point17" +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\alias-registry.ts:127: case 'modbus-tcp-remote': { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\alias-registry.ts:133: return `Modbus device ${device} point ${point}` +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\alias-registry.ts:135: return `Modbus TCP (${source.ref})` +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\address-pool.test.ts:61: it('claims Modbus TCP remote-device I/O points', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\address-pool.test.ts:66: modbusTcpConfig: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\address-pool.test.ts:82: expect(pool.byAddress.get('%MW10')?.source.kind).toBe('modbus-tcp-remote') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\address-pool.test.ts:133: modbusTcpConfig: { ioGroups: [{ ioPoints: [{ id: 'p1', iecLocation: '%MW5' }] }] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\address-pool.test.ts:142: expect(pool.conflicts[0].sources.map((s) => s.kind)).toEqual(['vpp-io', 'modbus-tcp-remote', 'ethercat']) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\address-pool.test.ts:153: modbusTcpConfig: { ioGroups: [{ ioPoints: [{ id: 'p1', iecLocation: '%MW5' }] }] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\address-pool.test.ts:293: modbusTcpConfig: { ioGroups: [{ ioPoints: [{ id: 'p1', iecLocation: '%MW5' }] }] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\address-pool.test.ts:303: it('Runtime v4 plain: VPP off, modbus-remote on', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\address-pool.test.ts:308: it('VPP-enabled v4 target: VPP + modbus-remote', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\address-pool.test.ts:313: it('Simulator: modbus-remote + ethercat enabled (no-ops), no pins', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\alias-registry.test.ts:20: { name: 'd', modbusTcpConfig: { ioGroups: [{ ioPoints: [{ id: 'p', iecLocation: '%MW1' }] }] } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\alias-registry.test.ts:55: // mapping, one from a Modbus remote device. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\alias-registry.test.ts:62: modbusTcpConfig: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\alias-registry.test.ts:68: { ...arduino, modbusTcpRemote: true }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\alias-registry.test.ts:88: modbusTcpConfig: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\alias-registry.test.ts:110: // Same project data — Arduino-target view skips VPP and Modbus +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\alias-registry.test.ts:198: expect(isAliasNameAvailable(reg, 'tank', { kind: 'modbus-tcp-remote', ref: 'd:p' })).toBe(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\sync-variable-aliases.test.ts:105: it('refresh is producer-agnostic: alias name wins over IEC address for VPP, Modbus, and EtherCAT alike', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\sync-variable-aliases.test.ts:119: name: 'modbus-slave', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\sync-variable-aliases.test.ts:120: // Modbus: alias "temp" relocated from %IW0 to %IW20. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\sync-variable-aliases.test.ts:121: modbusTcpConfig: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\sync-variable-aliases.test.ts:144: { ...RUNTIME_V4_CAPABILITIES, vppIo: true, modbusTcpRemote: true, ethercat: true }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\library\compose-runtime-v4-bundle.ts:37: * helpers themselves stay in `frontend/utils/{modbus,opcua,s7comm}` +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\library\compose-runtime-v4-bundle.ts:38: * and `backend/shared/{ethercat,utils/modbus}` — callers invoke +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\library\compose-runtime-v4-bundle.ts:79: /** From `generateModbusSlaveConfig(servers)`. */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\library\compose-runtime-v4-bundle.ts:80: modbusSlave: string | null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\library\compose-runtime-v4-bundle.ts:81: /** From `generateModbusMasterConfig(remoteDevices)`. */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\library\compose-runtime-v4-bundle.ts:82: modbusMaster: string | null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\library\compose-runtime-v4-bundle.ts:83: /** From `generateS7CommConfig(servers)`. */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\library\compose-runtime-v4-bundle.ts:85: /** From `generateOpcUaConfig(servers, generated_debug.cpp, instances)`. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\library\compose-runtime-v4-bundle.ts:141: if (input.confs.modbusSlave) files['conf/modbus_slave.json'] = input.confs.modbusSlave +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\library\compose-runtime-v4-bundle.ts:142: if (input.confs.modbusMaster) files['conf/modbus_master.json'] = input.confs.modbusMaster +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\library\__tests__\compose-runtime-v4-bundle.test.ts:23: modbusSlave: null, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\library\__tests__\compose-runtime-v4-bundle.test.ts:24: modbusMaster: null, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\library\__tests__\compose-runtime-v4-bundle.test.ts:82: expect('conf/modbus_slave.json' in files).toBe(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\library\__tests__\compose-runtime-v4-bundle.test.ts:83: expect('conf/modbus_master.json' in files).toBe(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\library\__tests__\compose-runtime-v4-bundle.test.ts:94: modbusSlave: '{"slaves":[{"id":1}]}', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\library\__tests__\compose-runtime-v4-bundle.test.ts:95: modbusMaster: '{"masters":[]}', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\library\__tests__\compose-runtime-v4-bundle.test.ts:96: s7Comm: '{"servers":[]}', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\library\__tests__\compose-runtime-v4-bundle.test.ts:102: expect(files['conf/modbus_slave.json']).toBe('{"slaves":[{"id":1}]}') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\library\__tests__\compose-runtime-v4-bundle.test.ts:103: expect(files['conf/modbus_master.json']).toBe('{"masters":[]}') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\library\__tests__\compose-runtime-v4-bundle.test.ts:104: expect(files['conf/s7comm.json']).toBe('{"servers":[]}') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\presets.ts:18: // Servers and remote IO are no-ops at the bytecode level but reported +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\presets.ts:21: modbusTcpRemote: true, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\presets.ts:23: modbusTcpServer: true, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\presets.ts:27: // exposes — not Modbus TCP. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\presets.ts:28: debuggerTransports: ['modbus-serial'], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\presets.ts:39: modbusTcpRemote: false, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\presets.ts:41: modbusTcpServer: false, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\presets.ts:44: debuggerTransports: ['modbus-tcp'], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\presets.ts:57: modbusTcpRemote: true, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\presets.ts:59: modbusTcpServer: true, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\presets.ts:62: debuggerTransports: ['websocket'], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\presets.ts:73: modbusTcpRemote: false, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\presets.ts:75: modbusTcpServer: false, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\presets.ts:81: debuggerTransports: ['modbus-serial', 'modbus-tcp'], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\resolve.ts:42: modbusTcpRemote: false, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\resolve.ts:44: modbusTcpServer: false, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\resolve.ts:47: debuggerTransports: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\types.ts:23: * - modbus-serial: Modbus RTU over USB / virtual serial. Used by +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\types.ts:25: * - modbus-tcp: Modbus TCP. Used by Runtime v3 and Arduino with +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\types.ts:32: export type DebuggerTransport = 'modbus-serial' | 'modbus-tcp' | 'websocket' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\types.ts:48: /** Modbus TCP slave remote devices. */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\types.ts:49: modbusTcpRemote: boolean +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\types.ts:65: modbusTcpServer: boolean +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\types.ts:74: debuggerTransports: DebuggerTransport[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:15: expect(caps.modbusTcpRemote).toBe(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:16: expect(caps.debuggerTransports).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:32: expect(caps.modbusTcpServer).toBe(true) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:42: expect(caps.modbusTcpServer).toBe(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:43: expect(caps.debuggerTransports).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:53: expect(caps.modbusTcpRemote).toBe(RUNTIME_V4_CAPABILITIES.modbusTcpRemote) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:54: expect(caps.debuggerTransports).toEqual(RUNTIME_V4_CAPABILITIES.debuggerTransports) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:66: expect(caps.modbusTcpServer).toBe(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:72: capabilities: { modbusTcpServer: true }, // some hypothetical custom Arduino +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:74: expect(caps.modbusTcpServer).toBe(true) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:94: expect(caps.debuggerTransports).toEqual(ARDUINO_CLI_CAPABILITIES.debuggerTransports) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:102: capabilities: { modbusTcpServer: true, modbusTcpRemote: true, debuggerTransports: ['websocket'] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:104: expect(caps.modbusTcpServer).toBe(true) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:105: expect(caps.modbusTcpRemote).toBe(true) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:106: expect(caps.debuggerTransports).toEqual(['websocket']) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:115: expect(SIMULATOR_CAPABILITIES.modbusTcpRemote).toBe(true) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:117: expect(SIMULATOR_CAPABILITIES.modbusTcpServer).toBe(true) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:120: expect(SIMULATOR_CAPABILITIES.debuggerTransports).toEqual(['modbus-serial']) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:125: it('Runtime v3 has the corrected matrix (no servers, no remote IO, Python yes)', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:126: expect(RUNTIME_V3_CAPABILITIES.modbusTcpServer).toBe(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:129: expect(RUNTIME_V3_CAPABILITIES.modbusTcpRemote).toBe(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:132: expect(RUNTIME_V3_CAPABILITIES.debuggerTransports).toEqual(['modbus-tcp']) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:137: expect(RUNTIME_V4_CAPABILITIES.modbusTcpServer).toBe(true) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:138: expect(RUNTIME_V4_CAPABILITIES.modbusTcpRemote).toBe(true) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:141: expect(RUNTIME_V4_CAPABILITIES.debuggerTransports).toEqual(['websocket']) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:148: expect(ARDUINO_CLI_CAPABILITIES.modbusTcpServer).toBe(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:150: expect(ARDUINO_CLI_CAPABILITIES.debuggerTransports).toEqual(['modbus-serial', 'modbus-tcp']) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\types\IPC\project-service\create-project.ts:1: import { DeviceConfiguration, DevicePin } from '@root/backend/shared/types/PLC/devices' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\types\IPC\project-service\create-project.ts:42: deviceConfiguration: DeviceConfiguration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\types\IPC\project-service\index.ts:1: import { DeviceConfiguration, DevicePin } from '@root/backend/shared/types/PLC/devices' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\types\IPC\project-service\index.ts:28: deviceConfiguration: DeviceConfiguration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\types\IPC\project-service\read-project.ts:1: import { DeviceConfiguration, DevicePin } from '@root/backend/shared/types/PLC/devices' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\types\IPC\project-service\read-project.ts:15: deviceConfiguration: DeviceConfiguration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\types\IPC\project-service\read-project.ts:17: servers?: PLCServer[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\types\PLC\devices\configuration.ts:3: const deviceConfigurationSchema = z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\types\PLC\devices\configuration.ts:14: type DeviceConfiguration = z.infer +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\types\PLC\devices\configuration.ts:16: export { deviceConfigurationSchema } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\types\PLC\devices\configuration.ts:17: export type { DeviceConfiguration } From 47540c43d0f66ac2594e07fae0c44fa1f8ee9cf2 Mon Sep 17 00:00:00 2001 From: Jeykco Date: Tue, 30 Jun 2026 21:20:09 -0500 Subject: [PATCH 08/16] fix modbus rtu --- build-jwplc-editor.bat | 169 ------------------ resources/sources/Baremetal/Baremetal.ino | 31 +++- .../shared/compile/steps/modbus-defines.ts | 3 + 3 files changed, 30 insertions(+), 173 deletions(-) delete mode 100644 build-jwplc-editor.bat diff --git a/build-jwplc-editor.bat b/build-jwplc-editor.bat deleted file mode 100644 index 9c8fe93e0..000000000 --- a/build-jwplc-editor.bat +++ /dev/null @@ -1,169 +0,0 @@ -@echo off -setlocal EnableExtensions EnableDelayedExpansion - -rem ============================================================================ -rem OpenPLC Editor - JWPLC Edition builder -rem Ubicacion recomendada: -rem openplc-editor\build-jwplc-editor.bat -rem -rem Uso rapido: -rem build-jwplc-editor.bat -rem -rem Opciones: -rem build-jwplc-editor.bat --install -rem build-jwplc-editor.bat --clean -rem build-jwplc-editor.bat --install --clean -rem build-jwplc-editor.bat --open-output -rem -rem Requisito: -rem Node 22.x. Si fnm esta instalado, el script intenta activar Node 22. -rem ============================================================================ - -set "ROOT=%~dp0" -if "%ROOT:~-1%"=="\" set "ROOT=%ROOT:~0,-1%" - -set "RUN_INSTALL=0" -set "RUN_CLEAN=0" -set "OPEN_OUTPUT=0" - -:parse_args -if "%~1"=="" goto args_done -if /I "%~1"=="--install" set "RUN_INSTALL=1" -if /I "%~1"=="--clean" set "RUN_CLEAN=1" -if /I "%~1"=="--open-output" set "OPEN_OUTPUT=1" -shift -goto parse_args -:args_done - -echo. -echo ============================================================ -echo OpenPLC Editor - JWPLC Edition builder -echo ============================================================ -echo Root: "%ROOT%" -echo. - -cd /d "%ROOT%" || exit /b 1 - -if not exist "%ROOT%\package.json" ( - echo [ERROR] No se encontro package.json. - echo Coloca este .bat en la raiz del repo openplc-editor. - exit /b 1 -) - -where node >nul 2>nul -if errorlevel 1 ( - echo [WARN] Node no esta disponible en PATH. -) else ( - echo [INFO] Node actual: - node -v -) - -rem Intentar activar Node 22 con fnm si esta disponible. -where fnm >nul 2>nul -if not errorlevel 1 ( - echo. - echo [INFO] fnm detectado. Intentando activar Node 22... - for /f "tokens=*" %%I in ('fnm env --use-on-cd --shell cmd 2^>nul') do call %%I - fnm install 22 - if errorlevel 1 ( - echo [ERROR] fnm no pudo instalar Node 22. - exit /b 1 - ) - fnm use 22 - if errorlevel 1 ( - echo [ERROR] fnm no pudo activar Node 22. - exit /b 1 - ) -) - -where node >nul 2>nul -if errorlevel 1 ( - echo [ERROR] Node.js no esta disponible. Instala Node 22 o fnm. - exit /b 1 -) - -for /f "tokens=1 delims=." %%M in ('node -p "process.versions.node"') do set "NODE_MAJOR=%%M" - -echo. -echo [INFO] Node final: -node -v -echo [INFO] npm: -call npm.cmd -v - -if not "%NODE_MAJOR%"=="22" ( - echo. - echo [ERROR] Este repo debe compilarse con Node 22.x. - echo Node actual major: %NODE_MAJOR% - echo. - echo Sugerencia: - echo winget install Schniz.fnm - echo fnm install 22 - echo fnm use 22 - exit /b 1 -) - -if "%RUN_CLEAN%"=="1" ( - echo. - echo [1/4] Limpiando salidas previas... - if exist "%ROOT%\dist" rmdir /s /q "%ROOT%\dist" - if exist "%ROOT%\release\build" rmdir /s /q "%ROOT%\release\build" -) else ( - echo. - echo [1/4] Limpieza omitida. Usa --clean si quieres borrar dist y release\build. -) - -if "%RUN_INSTALL%"=="1" ( - echo. - echo [2/4] Instalando dependencias... - if exist "%ROOT%\package-lock.json" ( - call npm.cmd ci - ) else ( - call npm.cmd install - ) - if errorlevel 1 ( - echo [ERROR] Fallo la instalacion de dependencias. - exit /b 1 - ) -) else ( - echo. - echo [2/4] Instalacion omitida. Usa --install si cambiaste dependencias o node_modules no existe. -) - -echo. -echo [3/4] Construyendo instalador... -call npm.cmd run package -if errorlevel 1 ( - echo [ERROR] Fallo npm run package. - exit /b 1 -) - -echo. -echo [4/4] Buscando instalador generado... -set "BUILD_DIR=%ROOT%\release\build" - -if not exist "%BUILD_DIR%" ( - echo [ERROR] No existe release\build. - exit /b 1 -) - -dir /b "%BUILD_DIR%\*.exe" 2>nul -if errorlevel 1 ( - echo [WARN] No se encontro ningun .exe en "%BUILD_DIR%". -) else ( - echo. - echo [OK] Instalador(es) generado(s) en: - echo "%BUILD_DIR%" -) - -if "%OPEN_OUTPUT%"=="1" ( - start "" "%BUILD_DIR%" -) - -echo. -echo ============================================================ -echo Build finalizado -echo ============================================================ -echo. - -endlocal -exit /b 0 diff --git a/resources/sources/Baremetal/Baremetal.ino b/resources/sources/Baremetal/Baremetal.ino index 126e6478e..3a21af45e 100644 --- a/resources/sources/Baremetal/Baremetal.ino +++ b/resources/sources/Baremetal/Baremetal.ino @@ -30,6 +30,19 @@ #include "defines.h" #include "arduino_runtime_glue.h" +#if defined(JWPLC_BASIC) + +#include + +#ifndef JWPLC_RS485_RX_PIN +#define JWPLC_RS485_RX_PIN 16 +#endif + +#ifndef JWPLC_RS485_TX_PIN +#define JWPLC_RS485_TX_PIN 17 +#endif +#endif + #ifdef MODBUS_ENABLED #include "ModbusSlave.h" #endif @@ -148,11 +161,21 @@ void setup() { if (pinMask_AOUT[i] == MBSERIAL_TXPIN) pinMask_AOUT[i] = 255; } - MBSERIAL_IFACE.begin(MBSERIAL_BAUD); - mbconfig_serial_iface(&MBSERIAL_IFACE, MBSERIAL_BAUD, MBSERIAL_TXPIN); + #if defined(JWPLC_BASIC) && defined(MBSERIAL_IFACE_IS_SERIAL2) + JWPLC_RS485.begin(MBSERIAL_BAUD); + mbconfig_serial_iface(&JWPLC_RS485, MBSERIAL_BAUD, MBSERIAL_TXPIN); + #else + MBSERIAL_IFACE.begin(MBSERIAL_BAUD); + mbconfig_serial_iface(&MBSERIAL_IFACE, MBSERIAL_BAUD, MBSERIAL_TXPIN); + #endif #else - MBSERIAL_IFACE.begin(MBSERIAL_BAUD); - mbconfig_serial_iface(&MBSERIAL_IFACE, MBSERIAL_BAUD, -1); + #if defined(JWPLC_BASIC) && defined(MBSERIAL_IFACE_IS_SERIAL2) + JWPLC_RS485.begin(MBSERIAL_BAUD); + mbconfig_serial_iface(&JWPLC_RS485, MBSERIAL_BAUD, -1); + #else + MBSERIAL_IFACE.begin(MBSERIAL_BAUD); + mbconfig_serial_iface(&MBSERIAL_IFACE, MBSERIAL_BAUD, -1); + #endif #endif modbus.slaveid = MBSERIAL_SLAVE; #endif diff --git a/src/backend/shared/compile/steps/modbus-defines.ts b/src/backend/shared/compile/steps/modbus-defines.ts index 693eb0b96..f746bd292 100644 --- a/src/backend/shared/compile/steps/modbus-defines.ts +++ b/src/backend/shared/compile/steps/modbus-defines.ts @@ -126,6 +126,9 @@ export function generateModbusDefines(state: VppModbusScreenState): string { const baud = rtu.rtu_baud_rate ?? RTU_DEFAULTS.rtu_baud_rate const slave = typeof rtu.rtu_slave_id === 'number' ? rtu.rtu_slave_id : RTU_DEFAULTS.rtu_slave_id lines.push(`#define MBSERIAL_IFACE ${iface}`) + if (iface === 'Serial2') { + lines.push('#define MBSERIAL_IFACE_IS_SERIAL2') + } lines.push(`#define MBSERIAL_BAUD ${baud}`) lines.push(`#define MBSERIAL_SLAVE ${slave}`) if (rtu.enable_rs485_en_pin === true && rtu.rtu_rs485_en_pin) { From d567b92735f308d197ab424bc89022be30cd4349 Mon Sep 17 00:00:00 2001 From: Jeykco Date: Tue, 30 Jun 2026 22:08:59 -0500 Subject: [PATCH 09/16] Create jwplc-debugger-chart-search.txt --- jwplc-debugger-chart-search.txt | 5001 +++++++++++++++++++++++++++++++ 1 file changed, 5001 insertions(+) create mode 100644 jwplc-debugger-chart-search.txt diff --git a/jwplc-debugger-chart-search.txt b/jwplc-debugger-chart-search.txt new file mode 100644 index 000000000..51f777232 --- /dev/null +++ b/jwplc-debugger-chart-search.txt @@ -0,0 +1,5001 @@ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\App.tsx:7: // editor, variables text-mode editor, future LSP-driven views — sees +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\App.tsx:10: // any editor that mounted first (e.g. variables text-mode opened +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\jest-vi-shim.ts:27: // `frontend/utils/cpp/addCppLocalVariables` cloning the project +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:1001: // The debugger will be redesigned in Phase 4. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:1262: variables: pou.variables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2386: * (analog ranges, thermocouple types, ...) must be baked into the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2734: // never enables Modbus — at which point the debugger can't +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2855: async compileForDebugger( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2876: message: `Compiling for debugger - project: ${projectPath}, board: ${boardTarget}`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:3159: * the difference between "blank console for 30 seconds while +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:3220: // take 10+ seconds on a large library and the user needs +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\ethercat\esi-service.ts:140: // Corrupted JSON: rename the bad file to `.corrupt-.bak` and +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-client.ts:170: async getVariablesList(variableIndexes: number[]): Promise<{ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-rtu-client.ts:219: // OpenPLC debugger ignores CRC errors — mismatch is non-fatal +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\modbus\modbus-rtu-client.ts:311: async getVariablesList(variableIndexes: number[]): Promise<{ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\logger-service\index.ts:5: const { combine, colorize, timestamp, label, printf } = format +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\logger-service\index.ts:9: const timestampFormatter = () => new Date().toLocaleString('en-US', { timeZone: timezone }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\logger-service\index.ts:11: const autonomyLoggerFormat = printf(({ level, message, label, timestamp }) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\logger-service\index.ts:12: return `${timestamp as string} [${label as string}] ${level}: ${message as string}` +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\logger-service\index.ts:19: format: combine(label({ label: 'autonomy' }), timestamp({ format: timestampFormatter() }), autonomyLoggerFormat), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\project-service\utils\read-project.ts:186: * Fallback extraction when parsing fails - extracts raw variables block and body +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\project-service\utils\read-project.ts:191: * @returns A partial PLCPou with empty variables array but preserved variablesText +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\project-service\utils\read-project.ts:202: let variablesText = 'VAR\nEND_VAR' // Default if no variables section found +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\project-service\utils\read-project.ts:223: variablesText = remainingContent.slice(varSectionStart, lastEndVarIndex) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\project-service\utils\read-project.ts:275: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\project-service\utils\read-project.ts:277: variablesText, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\project-service\utils\read-project.ts:358: // format ({type, data: {name, variables, body, documentation}}). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\project-service\utils\read-project.ts:363: interface?: { returnType?: string; variables: unknown[] } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\project-service\utils\read-project.ts:372: variables: portPou.interface?.variables ?? [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\services\project-service\utils\read-project.ts:617: console.log(`Migration successful: ${report.variablesMigrated} variables migrated`) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\utils\ipc-pou-to-flat.ts:8: export function ipcPouToFlat(pou: IpcPou): FlatPou & { variablesText?: string } { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\utils\ipc-pou-to-flat.ts:15: variables: (data.variables ?? []) as NonNullable['variables'], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\utils\ipc-pou-to-flat.ts:19: variablesText: (data.variablesText as string | undefined) ?? undefined, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\utils\transpiler-mode.ts:10: * `CompilerModule.compileForDebugger`) reads the same flag. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:47: import { findEmptyFbdVariables } from './steps/validate-empty-variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:210: * debugger reads these out of memory to map debug variable +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:381: originalCppPous?: Array<{ name: string; code: string; variables: unknown[] }> +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:393: const emptyVariables = findEmptyFbdVariables(processedData) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:394: if (emptyVariables.length > 0) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:395: for (const variable of emptyVariables) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:479: // Cache the debug-map.json bytes so the debugger can map variable +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\compose-firmware-bundle.ts:106: variables: pou.variables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-defines.ts:60: * this back on `FC 0x45` and the debugger uses it to confirm +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\validate-empty-variables.ts:50: * "BLINK_PY0"` or `"T#1s"`. Output variables are fed by an incoming +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\validate-empty-variables.ts:51: * edge; input variables drive an outgoing one. Returns `null` when the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\validate-empty-variables.ts:78: export function findEmptyFbdVariables(projectData: PLCProjectData): EmptyFbdVariable[] { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\compose-firmware-bundle.test.ts:213: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\compose-firmware-bundle.test.ts:236: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\pipeline-runtime-v3.test.ts:70: configuration: { resource: { tasks: [], instances: [], globalVariables: [] } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\pipeline.test.ts:97: configuration: { resource: { tasks: [], instances: [], globalVariables: [] } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\pipeline.test.ts:230: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\pipeline.test.ts:540: globalVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\validate-empty-variables.test.ts:13: import { findEmptyFbdVariables } from '../steps/validate-empty-variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\validate-empty-variables.test.ts:40: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\validate-empty-variables.test.ts:51: configuration: { resource: { tasks: [], instances: [], globalVariables: [] } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\validate-empty-variables.test.ts:55: describe('findEmptyFbdVariables — detection', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\validate-empty-variables.test.ts:57: const issues = findEmptyFbdVariables( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\validate-empty-variables.test.ts:64: const issues = findEmptyFbdVariables( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\validate-empty-variables.test.ts:72: findEmptyFbdVariables(makeProject([makeFbdPou('main', [varNode('v1', 'input-variable', ' ')])])), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\validate-empty-variables.test.ts:77: const issues = findEmptyFbdVariables( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\validate-empty-variables.test.ts:85: expect(findEmptyFbdVariables(makeProject([makeFbdPou('main', nodes)]))).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\validate-empty-variables.test.ts:90: expect(findEmptyFbdVariables(makeProject([makeFbdPou('main', nodes)]))).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\validate-empty-variables.test.ts:96: data: { name: 'st_pou', language: 'st', variables: [], documentation: '', body: { language: 'st', value: '' } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\validate-empty-variables.test.ts:98: expect(findEmptyFbdVariables(makeProject([stPou]))).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\validate-empty-variables.test.ts:104: const issues = findEmptyFbdVariables(makeProject([a, b])) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\validate-empty-variables.test.ts:110: describe('findEmptyFbdVariables — connection description', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\validate-empty-variables.test.ts:116: const issues = findEmptyFbdVariables(makeProject([makeFbdPou('main', [block, empty], [edge])])) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\validate-empty-variables.test.ts:124: const issues = findEmptyFbdVariables(makeProject([makeFbdPou('main', [empty, block], [edge])])) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\validate-empty-variables.test.ts:133: const issues = findEmptyFbdVariables(makeProject([makeFbdPou('main', [block, empty], [edge])])) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\validate-empty-variables.test.ts:141: const issues = findEmptyFbdVariables(makeProject([makeFbdPou('main', [block, empty], [edge])])) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\validate-empty-variables.test.ts:149: const issues = findEmptyFbdVariables(makeProject([makeFbdPou('main', [other, empty], [edge])])) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\validate-empty-variables.test.ts:157: const issues = findEmptyFbdVariables(makeProject([makeFbdPou('main', [other, empty], [edge])])) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\validate-empty-variables.test.ts:164: const issues = findEmptyFbdVariables(makeProject([makeFbdPou('main', [empty], [edge])])) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\modbus-rtu-transport.ts:18: await simulatorService.connectDebugger() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\modbus-rtu-transport.ts:22: simulatorService.disconnectDebugger() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\modbus-rtu-transport.ts:34: async getVariablesList(indexes: number[]): Promise { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\modbus-rtu-transport.ts:39: const result = await simulatorService.getVariablesList(indexes) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\types.ts:32: * swap at the debugger's read / write boundaries. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\types.ts:50: getVariablesList(indexes: number[]): Promise +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\websocket-debug-transport.ts:132: async getVariablesList(variableIndexes: number[]): Promise { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-rtu-transport.test.ts:4: const mockConnectDebugger = jest.fn() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-rtu-transport.test.ts:5: const mockDisconnectDebugger = jest.fn() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-rtu-transport.test.ts:8: const mockGetVariablesList = jest.fn() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-rtu-transport.test.ts:13: connectDebugger: mockConnectDebugger, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-rtu-transport.test.ts:14: disconnectDebugger: mockDisconnectDebugger, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-rtu-transport.test.ts:17: getVariablesList: mockGetVariablesList, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-rtu-transport.test.ts:54: it('delegates to simulatorService.connectDebugger', async () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-rtu-transport.test.ts:55: mockConnectDebugger.mockResolvedValue(undefined) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-rtu-transport.test.ts:57: expect(mockConnectDebugger).toHaveBeenCalledTimes(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-rtu-transport.test.ts:65: it('delegates to simulatorService.disconnectDebugger', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-rtu-transport.test.ts:67: expect(mockDisconnectDebugger).toHaveBeenCalledTimes(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-rtu-transport.test.ts:87: // getVariablesList +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-rtu-transport.test.ts:89: describe('getVariablesList', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-rtu-transport.test.ts:92: const result = await transport.getVariablesList([0, 1]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-rtu-transport.test.ts:98: mockGetVariablesList.mockResolvedValue({ success: false, error: 'some error' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-rtu-transport.test.ts:100: const result = await transport.getVariablesList([0]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-rtu-transport.test.ts:106: mockGetVariablesList.mockResolvedValue({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-rtu-transport.test.ts:113: const result = await transport.getVariablesList([0, 1, 2]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-rtu-transport.test.ts:123: mockGetVariablesList.mockResolvedValue({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\debug\__tests__\modbus-rtu-transport.test.ts:130: const result = await transport.getVariablesList([0]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\esi-parser-main.ts:298: return { success: false, error: `Device index ${deviceIndex} out of range (0-${deviceElements.length - 1})` } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\esi-parser.ts:186: * A direction-tagged bit range for conflict detection on IEC locations. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\esi-parser.ts:190: type IecBitRange = { direction: 'I' | 'Q'; startBit: number; endBit: number } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\esi-parser.ts:201: * Parse an IEC location string (`%IX0.0`, `%IB0`, `%QW2`, ...) into a bit range. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\esi-parser.ts:205: export function parseIecLocationToBitRange(location: string): IecBitRange | null { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\esi-parser.ts:217: function bitRangesOverlap(a: IecBitRange, b: IecBitRange): boolean { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\esi-parser.ts:261: // Normalize existing addresses to bit ranges so conflict detection catches +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\esi-parser.ts:263: const usedRanges: IecBitRange[] = [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\esi-parser.ts:266: const range = parseIecLocationToBitRange(addr) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\esi-parser.ts:267: if (range) usedRanges.push(range) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\esi-parser.ts:272: const range = parseIecLocationToBitRange(candidate) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\esi-parser.ts:273: if (!range) return false +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\esi-parser.ts:274: return usedRanges.some((r) => bitRangesOverlap(range, r)) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\esi-parser.ts:295: // Find a non-conflicting address (checks bit-range overlap, not string equality) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\esi-parser.ts:305: const candidateRange = parseIecLocationToBitRange(candidate) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\esi-parser.ts:306: if (candidateRange) usedRanges.push(candidateRange) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\sdo-config-defaults.ts:6: * manufacturer-specific and profile-specific ranges, excluding objects that +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\sdo-config-defaults.ts:18: * Parse a hex index string to a number for range comparison. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\sdo-config-defaults.ts:25: * Check if an object index is in a configurable range. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\sdo-config-defaults.ts:30: function isConfigurableRange(index: string): boolean { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\sdo-config-defaults.ts:120: * configurable ranges (0x2000+) that is NOT mapped to a PDO. PDO-mapped +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\ethercat\sdo-config-defaults.ts:131: if (!isConfigurableRange(obj.index)) continue +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\debug-spec.ts:88: * - `config` ? hand straight to `DebuggerPort.connect()`. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\debug-spec.ts:215: body: msg?.body ?? 'Multiple debug channels are enabled. Which one should the debugger use?', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:136: expect(result.body).toBe('Multiple debug channels are enabled. Which one should the debugger use?') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:172: it('returns `error` for an out-of-range channel index', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\build-pipeline.ts:171: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\build-pipeline.ts:323: variables: unknown[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\build-pipeline.ts:525: variables: b.variables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\deploy-runtime-program.ts:104: // sits unloaded and the debugger reads the old program's MD5. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\installed-library-rows.ts:47: * (install timestamp + how it was acquired) to an `InstalledLibrary` +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\library-build-orchestrator.ts:276: (projectData as { originalCppPous?: Array<{ name: string; code: string; variables: unknown[] }> }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\library-build-orchestrator.ts:281: variables: b.variables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\program-build-helpers.ts:14: * copy-pasted blocks in `compileProgram` / `compileForDebugger` +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\program-build-helpers.ts:57: * instead of the raw line number — the variables-table view doesn't +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\program-build-helpers.ts:166: : `[${err.pouName} / variables, line ${err.line}]` +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\program-build-pipeline.ts:95: * it later (build pipeline manifests, debugger cache keys). */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\program-build-pipeline.ts:261: // Phase 4 debugger artifacts (present starting with strucpp v0.3.0). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\__tests__\build-pipeline.test.ts:58: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\__tests__\build-pipeline.test.ts:65: configuration: { resource: { tasks: [], instances: [], globalVariables: [] } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\__tests__\build-pipeline.test.ts:219: expect(stub.data.variables).toEqual([ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\__tests__\build-pipeline.test.ts:251: it('preserves the original POU list, tasks, instances, and globalVariables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\__tests__\build-pipeline.test.ts:257: globalVariables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\__tests__\build-pipeline.test.ts:272: expect(stubbed.data.configuration.resource.globalVariables[0]?.name).toBe('preExistingGlobal') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\__tests__\build-pipeline.test.ts:349: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\__tests__\build-pipeline.test.ts:359: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\__tests__\build-pipeline.test.ts:611: variables: [{ name: 'x', class: 'input', type: { definition: 'base-type', value: 'BOOL' } }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\__tests__\build-pipeline.test.ts:629: variables: [{ name: 'x', class: 'input', type: { definition: 'base-type', value: 'BOOL' } }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\__tests__\build-pipeline.test.ts:657: cppBlocks: [{ name: 'CppOnly', code: 'void setup() {}\nvoid loop() {}', variables: [] }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\__tests__\library-build-orchestrator.test.ts:110: configuration: { resource: { tasks: [], instances: [], globalVariables: [] } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\__tests__\library-build-orchestrator.test.ts:381: originalCppPous: [{ name: 'MyCppFb', code: 'void setup() {}', variables: [] }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\__tests__\library-build-orchestrator.test.ts:397: expect(aux.cppBlocks).toEqual([{ name: 'MyCppFb', code: 'void setup() {}', variables: [] }]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\__tests__\program-build-helpers.test.ts:37: data: { name, language, variables: [], body: { language, value: '' }, documentation: '' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\__tests__\program-build-helpers.test.ts:47: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\__tests__\program-build-helpers.test.ts:56: data: { name, language, variables: [], body: { language, value: '' }, documentation: '' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\__tests__\program-build-helpers.test.ts:134: expect(out).toBe('[Main / variables, line 4]\n') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\library\__tests__\program-build-helpers.test.ts:208: // repro — should route the navigation hook into the variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\project\create-project-files.ts:111: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\project\create-project-files.ts:139: * instances, globalVariables). Schema-valid but inert. The +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\project\create-project-files.ts:182: globalVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\project\__tests__\create-project-files.test.ts:135: expect(resource.globalVariables).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\modbus-rtu-client.ts:238: // OpenPLC debugger ignores CRC errors -- mismatch is non-fatal +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\modbus-rtu-client.ts:324: async getVariablesList(variableIndexes: number[]): Promise<{ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\simulator-module.ts:30: // Nanoseconds per CPU cycle at 16 MHz +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\simulator-module.ts:39: // cover seconds of sim time without hitting the instruction limit). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\simulator-service.ts:57: * Connect the debugger to the running simulator. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\simulator-service.ts:59: async connectDebugger(): Promise { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\simulator-service.ts:61: await this.port.connectDebugger() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\simulator-service.ts:65: * Disconnect the debugger from the simulator. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\simulator-service.ts:67: disconnectDebugger(): void { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\simulator-service.ts:68: this.port?.disconnectDebugger() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\simulator-service.ts:83: async getVariablesList(indexes: number[]): Promise<{ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\simulator-service.ts:91: return this.port.getDebugVariablesList(indexes) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\debug-e2e.test.ts:2: * End-to-end debugger validation over avr8js. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\debug-e2e.test.ts:38: describeIfHex('Phase 4 debugger end-to-end (avr8js + ModbusRtuClient)', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\debug-e2e.test.ts:73: const read = await client.getVariablesList([addr]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\extended-sram.test.ts:51: it('round-trips writes/reads across the full extended SRAM range', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:335: // getVariablesList +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:337: describe('getVariablesList', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:355: const result = await client.getVariablesList([0, 1]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:368: const result = await client.getVariablesList([0]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:380: const result = await client.getVariablesList([999]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:392: const result = await client.getVariablesList([0]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:402: const result = await client.getVariablesList([0]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:414: const result = await client.getVariablesList([0]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:430: const result = await client.getVariablesList([0]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:439: const result = await client.getVariablesList([0]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:457: const result = await client.getVariablesList([0]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:559: const result = await client.getVariablesList([0]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:570: const result = await client.getVariablesList([0]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:582: const result = await client.getVariablesList([0]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:591: const result = await client.getVariablesList([0]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:611: const result = await client.getVariablesList([0]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:656: it('getVariablesList handles response too short (<9 bytes)', async () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:659: const result = await client.getVariablesList([0]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:664: it('getVariablesList handles non-Error exception', async () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\modbus-rtu-client.test.ts:667: const result = await client.getVariablesList([0]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\simulator-module.test.ts:157: // Write 2 bytes: first is in-range (0x3FFFF), second is out-of-range (0x40000). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\simulator-service.test.ts:16: connectDebugger: jest.fn().mockResolvedValue(undefined), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\simulator-service.test.ts:17: disconnectDebugger: jest.fn(), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\simulator-service.test.ts:19: getDebugVariablesList: jest.fn().mockResolvedValue({ success: true }), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\simulator-service.test.ts:116: // connectDebugger +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\simulator-service.test.ts:118: describe('connectDebugger', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\simulator-service.test.ts:121: await expect(service.connectDebugger()).rejects.toThrow('SimulatorPort not registered') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\simulator-service.test.ts:124: it('delegates to port.connectDebugger', async () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\simulator-service.test.ts:128: await service.connectDebugger() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\simulator-service.test.ts:129: expect(port.connectDebugger).toHaveBeenCalledTimes(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\simulator-service.test.ts:134: // disconnectDebugger +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\simulator-service.test.ts:136: describe('disconnectDebugger', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\simulator-service.test.ts:140: service.disconnectDebugger() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\simulator-service.test.ts:143: it('delegates to port.disconnectDebugger', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\simulator-service.test.ts:147: service.disconnectDebugger() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\simulator-service.test.ts:148: expect(port.disconnectDebugger).toHaveBeenCalledTimes(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\simulator-service.test.ts:171: // getVariablesList +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\simulator-service.test.ts:173: describe('getVariablesList', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\simulator-service.test.ts:176: const result = await service.getVariablesList([0, 1]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\simulator-service.test.ts:180: it('delegates to port.getDebugVariablesList', async () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\simulator-service.test.ts:183: const port = makePort({ getDebugVariablesList: jest.fn().mockResolvedValue(expected) }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\simulator\__tests__\simulator-service.test.ts:186: const result = await service.getVariablesList([0]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\from-schema.ts:36: globalVariables: (data.configuration?.resource?.globalVariables ?? []).map((v) => +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\from-schema.ts:44: type SchemaVariable = NonNullable[number] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\from-schema.ts:52: const variables = (pou.data.variables ?? []).map(projectVariable) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\from-schema.ts:58: variables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\from-schema.ts:156: // vars live under configuration.globalVariables, not in a POU +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\pou-emission-order.ts:25: * matching a project POU name (FB instance variables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\pou-emission-order.ts:61: for (const v of pou.interface?.variables ?? []) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\types.ts:13: * `servers`, no `remoteDevices`, no `libraries`, no `debugVariables`. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\types.ts:27: globalVariables: TranspileVariable[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\types.ts:48: variables: TranspileVariable[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\types.ts:101: * `user-data-type` — referenced data-type name (struct/enum/subrange) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\configuration.ts:39: // Configuration-level global variables. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\configuration.ts:42: project.configuration.globalVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\configuration.ts:125: variables: TranspileVariable[], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\configuration.ts:131: if (variables.length === 0) return +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\configuration.ts:134: const range: [number, number] = [0, variables.length] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\configuration.ts:140: void range +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\configuration.ts:144: variables.forEach((variable, idx) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\data-types.ts:11: * for line. Only difference from the DOM version: no `subrange` +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\data-types.ts:13: * subranges (matches the schema at `backend/shared/types/PLC/open-plc.ts`). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\data-types.ts:90: [`${lower}`, [tagname, 'range', i, 'lower']], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\data-types.ts:92: [`${upper}`, [tagname, 'range', i, 'upper']], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\pou-graphical.ts:6: * sections + END. Trigger variables and function-call output temps +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\pou-graphical.ts:133: const iface = computeInterface(pou.interface?.variables ?? [], resolvedSyntheticVars) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\pou-graphical.ts:169: function computeInterface(variables: TranspileVariable[], syntheticVars: SyntheticVar[]): InterfaceEntry[] { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\pou-graphical.ts:180: for (const v of variables) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\pou-textual.ts:72: const iface = computeInterface(pou.interface.variables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\pou-textual.ts:136: function computeInterface(variables: TranspileVariable[]): InterfaceEntry[] { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\pou-textual.ts:137: // Bucket variables by class, mirroring the order Python's varlist +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\emit\pou-textual.ts:154: for (const v of variables) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\walker\ld.ts:207: // - coils, outVariables, inOutVariables — write targets +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\walker\ld.ts:213: // Empty-name variables are dropped to match `ladder-xml.ts`:602, which +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\walker\narrow.ts:189: const variables = variant['variables'] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\walker\narrow.ts:190: if (Array.isArray(variables)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\walker\narrow.ts:191: for (const v of variables) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\transpilers\st-transpiler\walker\types.ts:4: * declaration / variables header. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:44: const PLCStructureVariableSchema = z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:92: variable: z.array(PLCStructureVariableSchema), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:98: type PLCStructureVariable = z.infer +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:108: const PLCVariableSchema = z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:157: type PLCVariable = z.infer +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:158: const PLCGlobalVariableSchema = PLCVariableSchema +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:159: type PLCGlobalVariable = z.infer +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:208: variables: z.array(PLCVariableSchema), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:211: /** Raw unparsed variables text - used to preserve user input even if it doesn't parse correctly */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:212: variablesText: z.string().optional(), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:221: variables: z.array(PLCVariableSchema), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:224: /** Raw unparsed variables text - used to preserve user input even if it doesn't parse correctly */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:225: variablesText: z.string().optional(), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:242: variables: z.array(PLCVariableSchema), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:245: /** Raw unparsed variables text - used to preserve user input even if it doesn't parse correctly */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:246: variablesText: z.string().optional(), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:271: globalVariables: z.array(PLCVariableSchema.omit({ class: true })), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:751: * Since POU variables are saved as text files (IEC 61131-3 format) which don't support debug flags, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:754: const PLCDebugVariablesSchema = z +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:761: type PLCDebugVariables = z.infer +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:809: debugVariables: PLCDebugVariablesSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:884: PLCDebugVariablesSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:888: PLCGlobalVariableSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:901: PLCStructureVariableSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:903: PLCVariableSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:947: PLCDebugVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\devices\pin.ts:20: * variables in the program can bind to a stable name regardless of the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\migrate-project-to-name-type-system.ts:10: variablesMigrated: number +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\migrate-project-to-name-type-system.ts:21: * Removes all ID fields from variables in a project +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\migrate-project-to-name-type-system.ts:33: * 1. Removes all `id` fields from variables (local and global) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\migrate-project-to-name-type-system.ts:34: * 2. Removes all `id` fields from structure variables in data types +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\migrate-project-to-name-type-system.ts:47: variablesMigrated: 0, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\migrate-project-to-name-type-system.ts:57: const originalVariableCount = pou.data.variables.length +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\migrate-project-to-name-type-system.ts:58: pou.data.variables = pou.data.variables.map(removeVariableIds) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\migrate-project-to-name-type-system.ts:59: report.variablesMigrated += originalVariableCount +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\migrate-project-to-name-type-system.ts:63: const globalVariableCount = migratedProject.configuration.resource.globalVariables.length +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\migrate-project-to-name-type-system.ts:64: migratedProject.configuration.resource.globalVariables = +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\migrate-project-to-name-type-system.ts:65: migratedProject.configuration.resource.globalVariables.map(removeVariableIds) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\migrate-project-to-name-type-system.ts:66: report.variablesMigrated += globalVariableCount +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\migrate-project-to-name-type-system.ts:75: report.variablesMigrated += structureVariableCount +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\migrate-project-to-name-type-system.ts:94: pou.data.variables.forEach((variable) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\migrate-project-to-name-type-system.ts:109: migratedProject.configuration.resource.globalVariables.forEach((variable) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\migrate-project-to-name-type-system.ts:135: pou.data.variables.some((variable) => 'id' in variable && variable.id !== undefined), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\migrate-project-to-name-type-system.ts:140: const hasGlobalVariableIds = projectData.configuration.resource.globalVariables.some( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:38: type FallbackPou = PLCPou & { variablesText?: string } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:48: pous: (PLCPou & { variablesText?: string })[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:53: globalVariables: PLCVariable[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:70: debugVariables?: { global?: string[]; pous?: Record } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:152: // 3. Extract raw VAR blocks as variablesText +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:156: let variablesText = 'VAR\nEND_VAR' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:160: variablesText = remainingContent.slice(varStartIndex, lastEnd) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:204: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:211: variablesText, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:225: function parsePouFile(file: RawProjectFile): (PLCPou & { variablesText?: string }) | null { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:245: variables: (ipcPou.data.variables as PLCVariable[]) ?? [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:431: const pous: (PLCPou & { variablesText?: string })[] = [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:481: resource: { tasks: [], instances: [], globalVariables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:490: configuration.resource = { tasks: [], instances: [], globalVariables: [] } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:493: globalVariables as arrays, so post-Zod the fields are always populated. Kept as a guard +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:499: if (!configuration.resource.globalVariables) configuration.resource.globalVariables = [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\parse-project-files.ts:521: debugVariables: data.debugVariables as ParsedProjectData['projectData']['debugVariables'], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\generateCBlocksCode.ts:7: variables: PLCVariable[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\generateCBlocksCode.ts:23: * ONLY for the user's *local* variables inside `setup()` / +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\generateCBlocksCode.ts:33: * other pin already exposes. Local STRING variables inside +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\generateCBlocksCode.ts:66: // File-scope raw typedefs for the user's LOCAL variables inside +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\generateCBlocksCode.ts:71: // STRING variables should use \`strucpp::IEC_STRING\` directly +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\generateCBlocksCode.ts:115: const inputVariables = pou.variables.filter((v) => v.class === 'input') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\generateCBlocksCode.ts:116: const outputVariables = pou.variables.filter((v) => v.class === 'output') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\generateCBlocksCode.ts:121: inputVariables.forEach((variable) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\generateCBlocksCode.ts:125: outputVariables.forEach((variable) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\generateCBlocksCode.ts:134: inputVariables.forEach((variable) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\generateCBlocksCode.ts:138: outputVariables.forEach((variable) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\generateCBlocksCode.ts:156: inputVariables.forEach((variable) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\generateCBlocksCode.ts:159: outputVariables.forEach((variable) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\generateCBlocksHeader.ts:6: variables: PLCVariable[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\generateCBlocksHeader.ts:28: const inputVariables = pou.variables.filter((v) => v.class === 'input') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\generateCBlocksHeader.ts:29: const outputVariables = pou.variables.filter((v) => v.class === 'output') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\generateCBlocksHeader.ts:34: inputVariables.forEach((variable) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\generateCBlocksHeader.ts:38: outputVariables.forEach((variable) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\__tests__\generateCBlocksCode.test.ts:36: const variables: PLCVariable[] = [makeScalarVar('x', 'input', 'INT')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\__tests__\generateCBlocksCode.test.ts:38: const result = generateCBlocksCode([{ name: 'B', code, variables }]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\__tests__\generateCBlocksCode.test.ts:45: // Baseline: raw file-scope typedefs for user-local variables. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\__tests__\generateCBlocksCode.test.ts:63: const variables: PLCVariable[] = [makeScalarVar('x', 'input', 'INT')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\__tests__\generateCBlocksCode.test.ts:65: const result = generateCBlocksCode([{ name: 'B', code, variables }]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\__tests__\generateCBlocksCode.test.ts:80: const variables: PLCVariable[] = [makeScalarVar('speed', 'input', 'INT'), makeScalarVar('result', 'output', 'REAL')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\__tests__\generateCBlocksCode.test.ts:83: const result = generateCBlocksCode([{ name: 'MyBlock', code, variables }]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\__tests__\generateCBlocksCode.test.ts:113: const variables: PLCVariable[] = [makeArrayVar('data', 'input', 'INT', '0..9')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\__tests__\generateCBlocksCode.test.ts:116: const result = generateCBlocksCode([{ name: 'test', code, variables }]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\__tests__\generateCBlocksCode.test.ts:118: // Array variables use (vars->NAME) not (*(vars->NAME)) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\__tests__\generateCBlocksCode.test.ts:123: it('handles pou with no variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\__tests__\generateCBlocksCode.test.ts:126: const result = generateCBlocksCode([{ name: 'empty', code, variables: [] }]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\__tests__\generateCBlocksCode.test.ts:130: // No #define / #undef for variables (the only `#define`s in the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\__tests__\generateCBlocksCode.test.ts:143: variables: [makeScalarVar('x', 'input', 'INT')], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\__tests__\generateCBlocksCode.test.ts:148: variables: [makeScalarVar('y', 'output', 'REAL')], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\__tests__\generateCBlocksCode.test.ts:163: const variables: PLCVariable[] = [makeScalarVar('val', 'input', 'BOOL')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\__tests__\generateCBlocksCode.test.ts:165: const result = generateCBlocksCode([{ name: 'FB', code, variables }]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\__tests__\generateCBlocksCode.test.ts:172: it('filters variables by class (only input and output)', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\__tests__\generateCBlocksCode.test.ts:173: const variables: PLCVariable[] = [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\__tests__\generateCBlocksCode.test.ts:187: const result = generateCBlocksCode([{ name: 'test', code, variables }]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\__tests__\generateCBlocksHeader.test.ts:48: it('generates struct and function declarations for a pou with scalar variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\__tests__\generateCBlocksHeader.test.ts:49: const variables: PLCVariable[] = [makeScalarVar('speed', 'input', 'INT'), makeScalarVar('result', 'output', 'REAL')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\__tests__\generateCBlocksHeader.test.ts:51: const result = generateCBlocksHeader([{ name: 'MyBlock', variables }]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\__tests__\generateCBlocksHeader.test.ts:62: it('includes only input and output variables in the struct', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\__tests__\generateCBlocksHeader.test.ts:63: const variables: PLCVariable[] = [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\__tests__\generateCBlocksHeader.test.ts:76: const result = generateCBlocksHeader([{ name: 'test', variables }]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\__tests__\generateCBlocksHeader.test.ts:85: { name: 'Block1', variables: [makeScalarVar('a', 'input', 'INT')] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\__tests__\generateCBlocksHeader.test.ts:86: { name: 'Block2', variables: [makeScalarVar('b', 'output', 'REAL')] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\__tests__\generateCBlocksHeader.test.ts:97: it('handles pou with no variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\__tests__\generateCBlocksHeader.test.ts:98: const result = generateCBlocksHeader([{ name: 'Empty', variables: [] }]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\__tests__\generateCBlocksHeader.test.ts:106: it('generates pointer members for array variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\__tests__\generateCBlocksHeader.test.ts:107: const variables: PLCVariable[] = [makeArrayVar('temps', 'input', 'REAL', '0..9')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\cpp\__tests__\generateCBlocksHeader.test.ts:109: const result = generateCBlocksHeader([{ name: 'ArrBlock', variables }]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\collect-library-blocks.ts:30: // middleware/shared/ports/block-types.ts (blockVariantVariableSchema). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\collect-library-blocks.ts:41: variables: VariantVariable[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\collect-library-blocks.ts:82: const vars = variant.variables.filter((v) => v.name !== 'EN' && v.name !== 'ENO') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\preprocess-pous.ts:1: import { addCppLocalVariables } from '../../../../frontend/utils/cpp/addCppLocalVariables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\preprocess-pous.ts:4: import { addPythonLocalVariables } from '../../../../frontend/utils/python/addPythonLocalVariables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\preprocess-pous.ts:12: variables: PLCVariable[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\preprocess-pous.ts:36: variables: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\preprocess-pous.ts:38: pou.interface?.variables ?? [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\preprocess-pous.ts:57: processedProjectData = addPythonLocalVariables(projectData) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\preprocess-pous.ts:60: // Simulator: keep runtime variables but replace body with a no-op ST statement +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\preprocess-pous.ts:85: allVariables: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\preprocess-pous.ts:87: pou.interface?.variables ?? [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\preprocess-pous.ts:139: processedProjectData = addCppLocalVariables(processedProjectData) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\preprocess-pous.ts:146: variables: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\preprocess-pous.ts:148: pou.interface?.variables ?? [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\preprocess-pous.ts:155: allVariables: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\preprocess-pous.ts:157: pou.interface?.variables ?? [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\split-program-st.ts:53: interface RangeMatch { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\split-program-st.ts:110: function findGenericBlocks(lines: string[]): RangeMatch[] { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\split-program-st.ts:111: const blocks: RangeMatch[] = [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\split-program-st.ts:152: const pouRanges: RangeMatch[] = [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\split-program-st.ts:163: pouRanges.push({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\split-program-st.ts:175: const sorted = [...pouRanges].sort((a, b) => a.startLine - b.startLine) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\split-program-st.ts:181: // overlap with any POU range. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\split-program-st.ts:182: let genericBlocks: RangeMatch[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\collect-library-blocks.test.ts:25: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\collect-library-blocks.test.ts:46: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\collect-library-blocks.test.ts:69: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\collect-library-blocks.test.ts:98: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\collect-library-blocks.test.ts:121: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\collect-library-blocks.test.ts:149: variables: [{ name: 'OUT', class: 'output', type: genericType('ANY_NUM') }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\collect-library-blocks.test.ts:154: variables: [{ name: 'OUT', class: 'output', type: genericType('ANY_NUM') }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\collect-library-blocks.test.ts:156: blockNode({ name: 'MyFB', type: 'function-block', variables: [] }), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\collect-library-blocks.test.ts:171: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\collect-library-blocks.test.ts:182: variables: [{ name: 'OUT', class: 'output', type: baseType('DT') }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\preprocess-pous.test.ts:27: interface: { variables: [makeVariable('x')] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\preprocess-pous.test.ts:33: function makePythonPou(name: string, code: string, variables?: PLCVariable[]): PLCPou { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\preprocess-pous.test.ts:37: interface: { variables: variables ?? [makeVariable('a', 'input'), makeVariable('b', 'output')] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\preprocess-pous.test.ts:43: function makeCppPou(name: string, code: string, variables?: PLCVariable[]): PLCPou { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\preprocess-pous.test.ts:47: interface: { variables: variables ?? [makeVariable('x', 'input'), makeVariable('y', 'output')] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\preprocess-pous.test.ts:61: globalVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\preprocess-pous.test.ts:96: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\preprocess-pous.test.ts:137: it('adds runtime local variables to Python POUs', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\preprocess-pous.test.ts:142: const vars = projectData.pous[0].interface?.variables ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\preprocess-pous.test.ts:195: // Should still work -- interface gets created by addPythonLocalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\preprocess-pous.test.ts:244: const vars = projectData.pous[0].interface?.variables ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\xml-generator.test.ts:66: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\xml-generator.test.ts:76: globalVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\xml-generator.test.ts:112: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\PLC\__tests__\xml-generator.test.ts:131: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:92: type BitRangeMapping = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:98: type WordRangeMapping = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:103: type DwordRangeMapping = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:109: digital_inputs?: BitRangeMapping +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:110: digital_outputs?: BitRangeMapping +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:111: analog_inputs?: WordRangeMapping +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:112: analog_outputs?: WordRangeMapping +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:113: analog_real_inputs?: DwordRangeMapping +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:114: analog_real_outputs?: DwordRangeMapping +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:149: /* istanbul ignore if -- callers (buildDwordRange) only invoke this with addresses +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:158: * channel ranges can still be expressed as base + count. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:173: function buildBitRange(channels: { name: string; address: string }[]): BitRangeMapping | null { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:191: function buildWordRange(channels: { name: string; address: string }[]): WordRangeMapping | null { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:203: function buildDwordRange(channels: { name: string; address: string }[]): DwordRangeMapping | null { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:208: /* istanbul ignore if -- defensive guard, same rationale as buildBitRange */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:272: const diRange = buildBitRange(di) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:273: const doRange = buildBitRange(dout) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:274: const aiRange = buildWordRange(ai) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:275: const aoRange = buildWordRange(ao) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:276: const aiRealRange = buildDwordRange(aiReal) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:277: const aoRealRange = buildDwordRange(aoReal) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:278: if (diRange) ioMappingBlock.digital_inputs = diRange +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:279: if (doRange) ioMappingBlock.digital_outputs = doRange +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:280: if (aiRange) ioMappingBlock.analog_inputs = aiRange +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:281: if (aoRange) ioMappingBlock.analog_outputs = aoRange +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:282: if (aiRealRange) ioMappingBlock.analog_real_inputs = aiRealRange +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:283: if (aoRealRange) ioMappingBlock.analog_real_outputs = aoRealRange +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:170: it('builds bit-range mapping for digital inputs from contiguous addresses', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:192: it('handles bit ranges that wrap across a byte boundary', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:207: it('builds word-range mapping for analog inputs', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:222: it('builds dword-range mapping for REAL analog inputs (%ID)', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:239: it('builds dword-range mapping for REAL analog outputs (%QD)', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:332: it('aborts the dword-range build when an address fails to parse', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:459: it('aborts the word-range build when a word address fails to parse', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:482: // word-range failed ? analog_inputs is omitted entirely +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\migrate-project-to-name-type-system.test.ts:21: globalVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\migrate-project-to-name-type-system.test.ts:39: function makePou(name: string, variables: ReturnType[]) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\migrate-project-to-name-type-system.test.ts:45: variables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\migrate-project-to-name-type-system.test.ts:77: globalVariables: [makeVariable('gVar', { id: 'gid1' })], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\migrate-project-to-name-type-system.test.ts:102: it('returns false when structure data type variables have no id', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\migrate-project-to-name-type-system.test.ts:151: expect(report.variablesMigrated).toBe(0) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\migrate-project-to-name-type-system.test.ts:157: it('removes id fields from POU variables and counts them', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\migrate-project-to-name-type-system.test.ts:165: expect(report.variablesMigrated).toBe(2) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\migrate-project-to-name-type-system.test.ts:167: const migratedVars = migratedProject.pous[0].data.variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\migrate-project-to-name-type-system.test.ts:172: it('removes id fields from global variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\migrate-project-to-name-type-system.test.ts:179: globalVariables: [gVar], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\migrate-project-to-name-type-system.test.ts:186: expect(report.variablesMigrated).toBe(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\migrate-project-to-name-type-system.test.ts:187: expect('id' in migratedProject.configuration.resource.globalVariables[0]).toBe(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\migrate-project-to-name-type-system.test.ts:190: it('removes id fields from structure data type variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\migrate-project-to-name-type-system.test.ts:210: expect(report.variablesMigrated).toBe(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\migrate-project-to-name-type-system.test.ts:230: expect(report.variablesMigrated).toBe(0) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\migrate-project-to-name-type-system.test.ts:241: globalVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\migrate-project-to-name-type-system.test.ts:256: globalVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\migrate-project-to-name-type-system.test.ts:285: globalVariables: [makeVariable('GlobVar'), makeVariable('globvar')], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\migrate-project-to-name-type-system.test.ts:311: globalVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:19: globalVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:148: // The fallback should extract variablesText +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:149: expect(result.projectData.pous[0].variablesText).toBeDefined() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:292: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:308: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:357: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:377: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:631: expect(result.projectData.configurations.resource.globalVariables).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:651: expect(result.projectData.configurations.resource.globalVariables).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:655: // Use "configurations" with a resource that has only tasks (no instances or globalVariables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:667: expect(result.projectData.configurations.resource.globalVariables).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:682: it('reads debugVariables from project data', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:684: debugVariables: { global: ['g1'], pous: { P1: ['v1'] } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:687: expect(result.projectData.debugVariables).toEqual({ global: ['g1'], pous: { P1: ['v1'] } }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\__tests__\parse-project-files.test.ts:701: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\assets\icons\interface\Debugger.tsx:5: type IDebuggerIconProps = ComponentPropsWithoutRef<'svg'> & { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\assets\icons\interface\Debugger.tsx:20: export const DebuggerIcon = ({ className, variant = 'default', size = 'sm', ...res }: IDebuggerIconProps) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\assets\icons\interface\Debugger.tsx:29: Debugger Icon +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\assets\icons\interface\DebuggerIcon.tsx:5: type IDebuggerIconProps = ComponentPropsWithoutRef<'svg'> & { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\assets\icons\interface\DebuggerIcon.tsx:20: export const DebuggerIcon = ({ className, variant = 'default', size = 'sm', ...res }: IDebuggerIconProps) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\dimensions-modal\index.tsx:31: onRearrangeDimensions: (index: number, direction: 'up' | 'down') => void +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\dimensions-modal\index.tsx:48: onRearrangeDimensions, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\dimensions-modal\index.tsx:116: onClick: () => onRearrangeDimensions(Number(selectedInput), 'up'), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\dimensions-modal\index.tsx:121: onClick: () => onRearrangeDimensions(Number(selectedInput), 'down'), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\block-output-debug-badges.tsx:2: import { useIsDebuggerVisible } from '../../../hooks/use-debug-value' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\block-output-debug-badges.tsx:11: outputVariables: Array<{ name: string; class: string; type: { definition: string; value: string } }> +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\block-output-debug-badges.tsx:32: outputVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\block-output-debug-badges.tsx:38: const isDebuggerVisible = useIsDebuggerVisible() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\block-output-debug-badges.tsx:42: if (!isActive || !isDebuggerVisible || blockType === 'generic') { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\block-output-debug-badges.tsx:46: const outputs = outputVariables.filter((v) => v.class === 'output' || v.class === 'inOut') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\debug-value-badge.tsx:13: * Shows the current polled value for non-BOOL variables when the debugger is active. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\debug-value-badge.tsx:14: * BOOL variables are skipped since they already have dedicated color indicators. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\autocomplete\index.tsx:14: variables: PLCVariable[] | { id: string; name: string }[] | undefined +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\autocomplete\index.tsx:36: variables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\autocomplete\index.tsx:43: const variablesDivRef = useRef(null) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\autocomplete\index.tsx:60: ...(variables?.map((variable) => ({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\autocomplete\index.tsx:86: }, [variables, searchValue]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\autocomplete\index.tsx:106: * Exact case-insensitive match against the visible `variables` +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\autocomplete\index.tsx:114: const exactMatch = variables?.find((v) => v.name.toLowerCase() === trimmed) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\autocomplete\index.tsx:155: variables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\autocomplete\index.tsx:221: if (variablesDivRef.current) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\autocomplete\index.tsx:222: const selectedElement = variablesDivRef.current.children[selectedVariable.positionInArray] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\autocomplete\index.tsx:250: {variables && variables.length > 0 && ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\autocomplete\index.tsx:253:
+C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\autocomplete\index.tsx:254: {variables.map((variable) => ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\autocomplete\index.tsx:296: 'rounded-b-lg': !newBlock.canCreate && variables && variables.length > 0, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\autocomplete\index.tsx:297: 'rounded-lg': !variables || variables.length === 0, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\autocomplete\index.tsx:322: 'rounded-b-lg': variables && variables.length > 0, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\autocomplete\index.tsx:323: 'rounded-lg': !variables || variables.length === 0, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\diff\fbd-nodes.tsx:13: | { name?: string; type?: string; variables?: Array<{ name: string; class: string }> } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\diff\fbd-nodes.tsx:17: const blockVars = variant?.variables ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\diff\ladder-nodes.tsx:58: | { name?: string; type?: string; variables?: Array<{ name: string; class: string }> } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\diff\ladder-nodes.tsx:62: const blockVars = variant?.variables ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:7: import { checkVariableName } from '../../../../store/slices/project/validation/variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:27: import { getFBDPouVariablesRungNodeAndEdges } from './utils/utils' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:53: editorActions: { updateModelVariables, updateModelFBD }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:67: variables: blockVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:71: const inputConnectors = blockVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:74: const outputConnectors = blockVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:85: const { pou, rung, node, variables, edges } = getFBDPouVariablesRungNodeAndEdges(pouName, pous, fbdFlows, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:142: let variable = variables.selected +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:143: const variableIndex = variable ? variables.all.indexOf(variable) : -1 +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:155: variables: pouData?.interface?.variables ?? [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:174: updateModelVariables({ display: 'table', selectedRow: -1 }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:245: variables: pouData2?.interface?.variables ?? [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:352: const { rung, node, variables } = getFBDPouVariablesRungNodeAndEdges(pouName, pous, fbdFlows, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:393: const { name, number } = checkVariableName(variables.all, (data.variant as BlockVariant).name.toUpperCase()) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:408: * Update wrongVariable state when the table of variables is updated +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:421: const variable = variables.selected +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:459: const { rung, node, variables } = getFBDPouVariablesRungNodeAndEdges(pouName, pous, fbdFlows, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:475: variables.all.find( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:493: let variableToLink = variables.selected +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:513: variables: pouData?.interface?.variables ?? [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:553: const { rung, node, pou } = getFBDPouVariablesRungNodeAndEdges(pouName, pous, fbdFlows, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:568: const newNodeVariables = (libPou.interface?.variables ?? []).map((variable) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:607: const hasOut = newNodeVariables.some((v) => v.name === 'OUT') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:609: newNodeVariables.push({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:629: variant: { name: libPou.name, type: blockVariant.type, variables: newNodeVariables }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:634: variable: variables.selected ?? { name: '' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:641: const originalNodeInputs = (node.data.variant as BlockVariant).variables.filter( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:644: const originalNodeSources = (node.data.variant as BlockVariant).variables.filter( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:648: const updatedInputVariables = newNode.data.variant.variables.filter( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:651: const updatedOutputVariables = newNode.data.variant.variables.filter( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:667: // Find the handle name in the original node's output variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:672: const updatedHandle = updatedOutputVariables.find((v) => v.name === originalNodeSources[outputIndex].name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:682: const updatedHandleId = updatedOutputVariables.find((v) => v.id === origId) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:695: // Find the handle name in the original node's input variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:700: const updatedHandle = updatedInputVariables.find((v) => v.name === originalNodeInputs[inputIndex].name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:710: const updatedHandleId = updatedInputVariables.find((v) => v.id === origIdIn) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\block.tsx:813: outputVariables={(data.variant as BlockVariant).variables} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\buildNodes.tsx:44: let variantVariables = [...((variant as BlockVariant)?.variables ?? [])] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\buildNodes.tsx:45: const outIndex = variantVariables.findIndex((v) => v.name === 'OUT') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\buildNodes.tsx:47: const [outVar] = variantVariables.splice(outIndex, 1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\buildNodes.tsx:48: variantVariables = [outVar, ...variantVariables] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\buildNodes.tsx:50: const newVariant = variant ? { ...(variant as BlockVariant), variables: variantVariables } : DEFAULT_BLOCK_TYPE +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\comment.tsx:8: import { getFBDPouVariablesRungNodeAndEdges } from './utils' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\comment.tsx:51: const { node: commentaryBlock } = getFBDPouVariablesRungNodeAndEdges(pouName, pous, fbdFlows, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\comment.tsx:101: const { node: commentaryBlock } = getFBDPouVariablesRungNodeAndEdges(pouName, pous, fbdFlows, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\connection.tsx:17: import { getFBDPouVariablesRungNodeAndEdges } from './utils/utils' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\connection.tsx:69: const { rung, node: connectionNode } = getFBDPouVariablesRungNodeAndEdges(pouName, pous, fbdFlows, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\connection.tsx:102: } = getFBDPouVariablesRungNodeAndEdges(pouName, pous, fbdFlows, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\handle.tsx:14: isDebuggerVisible?: boolean +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\handle.tsx:24: isDebuggerVisible, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\handle.tsx:35: style={{ ...style, ...(isDebuggerVisible ? { pointerEvents: 'none' } : {}) }} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable-visual.tsx:19: debuggerColor?: string +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable-visual.tsx:33: debuggerColor, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable-visual.tsx:42: ...(debuggerColor +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable-visual.tsx:44: borderColor: debuggerColor, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable-visual.tsx:45: boxShadow: `0 0 0 2px ${debuggerColor}33 inset`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable-visual.tsx:53: 'border-transparent ring-2 ring-brand': selected && !debuggerColor, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable.tsx:5: import { useDebugger } from '../../../../../middleware/shared/providers' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable.tsx:7: import { useDebugValue, useIsDebuggerVisible } from '../../../../hooks/use-debug-value' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable.tsx:39: import { getFBDPouVariablesRungNodeAndEdges } from './utils/utils' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable.tsx:53: const debugger_ = useDebugger() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable.tsx:54: const isDebuggerVisible = useIsDebuggerVisible() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable.tsx:128: const variable = primaryConnection.node?.data.variant.variables.find( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable.tsx:160: const variable = connection.node?.data.variant.variables.find( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable.tsx:219: * incompatible with a connection". Re-runs when the project variables or +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable.tsx:280: const { pou } = getFBDPouVariablesRungNodeAndEdges(pouName, pous, fbdFlows, { nodeId: id }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable.tsx:282: const variable = (pou.interface?.variables ?? []).find( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable.tsx:288: const debuggerColor = (() => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable.tsx:289: if (!isDebuggerVisible || !data.variable.name || !isAVariable) return undefined +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable.tsx:302: if (data.variable.name) await forceDebugVariable(debugger_, compositeKey, debugIndex, new Uint8Array([1]), true) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable.tsx:309: if (data.variable.name) await forceDebugVariable(debugger_, compositeKey, debugIndex, new Uint8Array([0]), false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable.tsx:316: if (data.variable.name) await releaseDebugVariable(debugger_, compositeKey, debugIndex) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable.tsx:389: await forceDebugVariable(debugger_, compositeKey, debugIndex, valueBuffer, forcedValueForState, varType) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable.tsx:408: if (!isDebuggerVisible || !isAVariable) return +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable.tsx:424: const { pou, rung, node } = getFBDPouVariablesRungNodeAndEdges(pouName, pous, fbdFlows, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable.tsx:434: const variable: PLCVariable | { name: string } = (pou.interface?.variables ?? []).find( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable.tsx:437: resolveArrayVariableByName(pou.interface?.variables ?? [], variableNameToSubmit) || { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable.tsx:483: ...(debuggerColor +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable.tsx:485: borderColor: debuggerColor, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable.tsx:486: boxShadow: `0 0 0 2px ${debuggerColor}33 inset`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable.tsx:489: ...(isDebuggerVisible +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable.tsx:500: 'border-transparent ring-2 ring-brand': selected && !debuggerColor, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable.tsx:505: onClick={isDebuggerVisible ? handleClick : undefined} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable.tsx:506: onContextMenu={isDebuggerVisible ? handleClick : undefined} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable.tsx:537: disabled={isDebuggerVisible} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable.tsx:538: readOnly={isDebuggerVisible} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable.tsx:567: {isDebuggerVisible && isAVariable && ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\variable.tsx:575: {isDebuggerVisible && contextMenuPosition && ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\autocomplete\index.tsx:21: import { getFBDPouVariablesRungNodeAndEdges } from '../utils/utils' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\autocomplete\index.tsx:45: return getFBDPouVariablesRungNodeAndEdges(pouName, pous, fbdFlows, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\autocomplete\index.tsx:65: const variableType = (connectedNode?.data.variant as BlockVariant | undefined)?.variables?.find( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\autocomplete\index.tsx:73: // Variable boxes: LSP-backed candidates (variables + instance/struct +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\autocomplete\index.tsx:102: const displayVariables = isVariableBox +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\autocomplete\index.tsx:109: const { rung: freshRung, node: variableNode } = getFBDPouVariablesRungNodeAndEdges(pouName, pous, fbdFlows, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\autocomplete\index.tsx:137: const { rung: freshRung, node } = getFBDPouVariablesRungNodeAndEdges(pouName, pous, fbdFlows, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\autocomplete\index.tsx:255: variables={displayVariables} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\utils\constants.tsx:12: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\utils\utils.ts:20: export const getFBDPouVariablesRungNodeAndEdges = ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\utils\utils.ts:28: variables: { all: PLCVariable[]; selected: PLCVariable | undefined } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\utils\utils.ts:39: const variables: PLCVariable[] = pou?.interface?.variables ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\utils\utils.ts:40: let variable = variables.find((variable) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\utils\utils.ts:76: const resolved = resolveArrayVariableByName(variables, varName) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\utils\utils.ts:97: variables: { all: variables, selected: variable }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\utils\utils.ts:110: const inputConnectors = variant.variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\utils\utils.ts:113: const outputConnectors = variant.variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\utils\utils.ts:186: const existingEN = variant.variables.find((variable) => variable.name === 'EN') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\utils\utils.ts:187: const existingENO = variant.variables.find((variable) => variable.name === 'ENO') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\utils\utils.ts:188: const otherVariables = variant.variables.filter((variable) => variable.name !== 'EN' && variable.name !== 'ENO') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\utils\utils.ts:201: variant.variables = [EN, ENO, ...otherVariables] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\fbd\utils\utils.ts:203: variant.variables = variant.variables.filter((variable) => variable.name !== 'EN' && variable.name !== 'ENO') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:9: import { checkVariableName } from '../../../../store/slices/project/validation/variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:23: import { getLadderPouVariablesRungNodeAndEdges } from './utils' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:36: LadderBlockConnectedVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:63: editorActions: { updateModelVariables }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:76: variables: blockVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:80: const inputConnectors = blockVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:83: const outputConnectors = blockVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:131: const variables = (userPou.interface?.variables ?? []).map((variable) => ({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:143: variables.push({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:156: variables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:177: const { pou, rung, node, variables, edges } = getLadderPouVariablesRungNodeAndEdges(pouName, pous, ladderFlows, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:192: let variable = variables.selected +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:193: const variableIndex = variable ? variables.all.indexOf(variable) : -1 +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:206: variables: currentPou?.interface?.variables ?? [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:225: updateModelVariables({ display: 'table', selectedRow: -1 }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:280: (libraryBlock as { variables?: BlockVariant['variables'] })?.variables ?? [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:320: variables: currentPou2?.interface?.variables ?? [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:425: const { variables, rung, node } = getLadderPouVariablesRungNodeAndEdges(pouName, pous, ladderFlows, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:431: if (Array.isArray(data.connectedVariables)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:432: for (const cv of data.connectedVariables) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:439: }, [data.connectedVariables]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:464: const { name, number } = checkVariableName(variables.all, (data.variant as BlockVariant).name.toUpperCase()) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:480: * Update wrongVariable state when the table of variables is updated +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:489: variables: freshVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:492: } = getLadderPouVariablesRungNodeAndEdges(pouName, pous, ladderFlows, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:501: const variable = freshVariables.selected +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:562: variables.all.find( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:580: let variableToLink = variables.selected +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:601: variables: currentPou?.interface?.variables ?? [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:637: const { variables, rung, node, edges } = getLadderPouVariablesRungNodeAndEdges(pouName, pous, ladderFlows, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:653: const newNodeVariables = (libPou.interface?.variables ?? []).map((variable) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:693: newNodeVariables.push({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:716: variables: [...newNodeVariables], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:721: const connectedVariables: LadderBlockConnectedVariables = ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:723: ).connectedVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:725: if (newNodeVariables.some((newVar) => newVar.name === connectedVariable.handleId)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:730: const matchId = newNodeVariables.find((newVar) => newVar.id === connectedVariable.handleTableId) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:742: connectedVariables: connectedVariables ?? [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:743: variable: variables.selected ?? { name: '' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:760: newNodeVariables as BlockVariant['variables'], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\block.tsx:918: outputVariables={(data.variant as BlockVariant).variables} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\buildNodes.tsx:33: LadderBlockConnectedVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\buildNodes.tsx:62: const original = [...((variant as BlockVariant)?.variables ?? [])] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\buildNodes.tsx:64: const variantVariables = +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\buildNodes.tsx:66: const newVariant = variant ? { ...(variant as BlockVariant), variables: variantVariables } : DEFAULT_BLOCK_TYPE +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\buildNodes.tsx:96: connectedVariables: [] as LadderBlockConnectedVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\coil-visual.tsx:10: debuggerFillColor?: string +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\coil-visual.tsx:22: debuggerFillColor, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\coil-visual.tsx:40: {coil.svg(wrongVariable, debuggerFillColor)} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\coil.tsx:4: import { useDebugger } from '../../../../../middleware/shared/providers' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\coil.tsx:6: import { useDebugValue, useIsDebuggerVisible } from '../../../../hooks/use-debug-value' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\coil.tsx:13: import { VariablesBlockAutoComplete } from './autocomplete' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\coil.tsx:15: import { getLadderPouVariablesRungNodeAndEdges } from './utils' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\coil.tsx:32: const debugger_ = useDebugger() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\coil.tsx:33: const isDebuggerVisible = useIsDebuggerVisible() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\coil.tsx:90: * can't see. Re-runs when the project variables change or the coil's own +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\coil.tsx:104: const debuggerFillColor = (() => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\coil.tsx:105: if (!isDebuggerVisible || !data.variable.name || wrongVariable) return undefined +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\coil.tsx:122: if (data.variable.name) await forceDebugVariable(debugger_, compositeKey, debugIndex, new Uint8Array([1]), true) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\coil.tsx:129: if (data.variable.name) await forceDebugVariable(debugger_, compositeKey, debugIndex, new Uint8Array([0]), false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\coil.tsx:136: if (data.variable.name) await releaseDebugVariable(debugger_, compositeKey, debugIndex) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\coil.tsx:140: if (!isDebuggerVisible) return +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\coil.tsx:152: const { rung, node } = getLadderPouVariablesRungNodeAndEdges(pouName, pous, ladderFlows, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\coil.tsx:194: onClick={isDebuggerVisible ? handleClick : undefined} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\coil.tsx:196: {coil.svg(wrongVariable, debuggerFillColor)} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\coil.tsx:210: disabled={isDebuggerVisible} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\coil.tsx:211: readOnly={isDebuggerVisible} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\coil.tsx:214: const { node, rung } = getLadderPouVariablesRungNodeAndEdges(pouName, pous, ladderFlows, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\coil.tsx:230: const { node, rung } = getLadderPouVariablesRungNodeAndEdges(pouName, pous, ladderFlows, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\coil.tsx:261: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\contact.tsx:106: if (!isDebuggerVisible || !data.variable.name || wrongVariable) return undefined +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\contact.tsx:123: if (data.variable.name) await forceDebugVariable(debugger_, compositeKey, debugIndex, new Uint8Array([1]), true) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\contact.tsx:130: if (data.variable.name) await forceDebugVariable(debugger_, compositeKey, debugIndex, new Uint8Array([0]), false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\contact.tsx:137: if (data.variable.name) await releaseDebugVariable(debugger_, compositeKey, debugIndex) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\contact.tsx:141: if (!isDebuggerVisible) return +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\contact.tsx:153: const { rung, node } = getLadderPouVariablesRungNodeAndEdges(pouName, pous, ladderFlows, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\contact.tsx:195: onClick={isDebuggerVisible ? handleClick : undefined} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\contact.tsx:197: {contact.svg(wrongVariable, debuggerStrokeColor)} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\contact.tsx:211: disabled={isDebuggerVisible} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\contact.tsx:212: readOnly={isDebuggerVisible} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\contact.tsx:215: const { node, rung } = getLadderPouVariablesRungNodeAndEdges(pouName, pous, ladderFlows, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\contact.tsx:231: const { node, rung } = getLadderPouVariablesRungNodeAndEdges(pouName, pous, ladderFlows, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\contact.tsx:262: ).connectedVariables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\variable.tsx:84: ? (relatedBlock.data as BlockNodeData).connectedVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\variable.tsx:86: const connectedVariables: LadderBlockConnectedVariables = [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\variable.tsx:92: handleTableId: (relatedBlock.data as BlockNodeData).variant.variables.find( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\variable.tsx:108: connectedVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\variable.tsx:168: const { pou, rung, node } = getLadderPouVariablesRungNodeAndEdges(pouName, pous, ladderFlows, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\variable.tsx:199: let variable: PLCVariable | { name: string } | undefined = (pou.interface?.variables ?? []).find( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\variable.tsx:241: const { pou } = getLadderPouVariablesRungNodeAndEdges(pouName, pous, ladderFlows, { nodeId: id }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\variable.tsx:243: const variable = (pou.interface?.variables ?? []).find( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\variable.tsx:253: if (data.variable.name) await forceDebugVariable(debugger_, compositeKey, debugIndex, new Uint8Array([1]), true) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\variable.tsx:260: if (data.variable.name) await forceDebugVariable(debugger_, compositeKey, debugIndex, new Uint8Array([0]), false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\variable.tsx:267: if (data.variable.name) await releaseDebugVariable(debugger_, compositeKey, debugIndex) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\variable.tsx:340: await forceDebugVariable(debugger_, compositeKey, debugIndex, valueBuffer, forcedValueForState, variableType) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\variable.tsx:359: if (!isDebuggerVisible || !isAVariable) return +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\variable.tsx:373: onClick={isDebuggerVisible ? handleClick : undefined} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\variable.tsx:403: disabled={isDebuggerVisible} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\variable.tsx:404: readOnly={isDebuggerVisible} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\variable.tsx:421: & { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\autocomplete\index.tsx:38: blockType: VariablesBlockAutoCompleteProps['blockType'], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\autocomplete\index.tsx:51: const VariablesBlockAutoComplete = forwardRef( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\autocomplete\index.tsx:53: { block, blockType = 'other', isOpen, setIsOpen, keyPressed, valueToSearch }: VariablesBlockAutoCompleteProps, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\autocomplete\index.tsx:68: // LSP-backed candidates (variables + instance/struct members in scope), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\autocomplete\index.tsx:87: const { rung, node: variableNode } = getLadderPouVariablesRungNodeAndEdges(pouName, pous, ladderFlows, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\autocomplete\index.tsx:112: const existingConnected = Array.isArray((relatedBlock.data as BlockNodeData).connectedVariables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\autocomplete\index.tsx:113: ? (relatedBlock.data as BlockNodeData).connectedVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\autocomplete\index.tsx:115: const connectedVariables: LadderBlockConnectedVariables = [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\autocomplete\index.tsx:122: handleTableId: (relatedBlock.data as BlockNodeData).variant.variables.find( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\autocomplete\index.tsx:139: connectedVariables: connectedVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\autocomplete\index.tsx:150: const { rung, node: variableNode } = getLadderPouVariablesRungNodeAndEdges(pouName, pous, ladderFlows, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\autocomplete\index.tsx:178: const { rung, node } = getLadderPouVariablesRungNodeAndEdges(pouName, pous, ladderFlows, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\autocomplete\index.tsx:254: variables={candidates.map((c) => ({ id: c.insertText, name: c.insertText }))} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\autocomplete\index.tsx:261: export { VariablesBlockAutoComplete } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\constants.tsx:31: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\constants.tsx:48: svg: (wrongVariable, debuggerColor) => ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\constants.tsx:55: parenthesesColor={debuggerColor} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\constants.tsx:60: svg: (wrongVariable, debuggerColor) => ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\constants.tsx:67: parenthesesColor={debuggerColor} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\constants.tsx:72: svg: (wrongVariable, debuggerColor) => ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\constants.tsx:79: parenthesesColor={debuggerColor} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\constants.tsx:84: svg: (wrongVariable, debuggerColor) => ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\constants.tsx:91: parenthesesColor={debuggerColor} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\constants.tsx:96: svg: (wrongVariable, debuggerColor) => ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\constants.tsx:103: parenthesesColor={debuggerColor} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\constants.tsx:108: svg: (wrongVariable, debuggerColor) => ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\constants.tsx:115: parenthesesColor={debuggerColor} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\constants.tsx:131: svg: (wrongVariable, debuggerColor): ReactNode => ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\constants.tsx:138: strokeColor={debuggerColor} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\constants.tsx:143: svg: (wrongVariable, debuggerColor): ReactNode => ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\constants.tsx:150: strokeColor={debuggerColor} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\constants.tsx:155: svg: (wrongVariable, debuggerColor): ReactNode => ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\constants.tsx:162: strokeColor={debuggerColor} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\constants.tsx:167: svg: (wrongVariable, debuggerColor): ReactNode => ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\constants.tsx:174: strokeColor={debuggerColor} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\types.ts:55: variables: { id?: string; name: string; class: string; type: { definition: string; value: string } }[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\types.ts:59: export type LadderBlockConnectedVariables = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\types.ts:70: connectedVariables: LadderBlockConnectedVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\types.ts:92: svg: (wrongVariable: boolean, debuggerColor?: string) => ReactNode +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\types.ts:104: svg: (wrongVariable: boolean, debuggerColor?: string) => ReactNode +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\types.ts:153: variableType: BlockVariant['variables'][0] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\types.ts:163: variableType: BlockVariant['variables'][0] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\utils.ts:20: export const getLadderPouVariablesRungNodeAndEdges = ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\utils.ts:28: variables: { all: PLCVariable[]; selected: PLCVariable | undefined } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\utils.ts:43: const variables: PLCVariable[] = pou?.interface?.variables ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\utils.ts:44: let variable = variables.find((variable) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\utils.ts:74: const resolved = resolveArrayVariableByName(variables, varName) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\utils.ts:87: variables: { all: variables, selected: variable }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\utils.ts:93: export const getVariableByName = (variables: PLCVariable[], name: string): PLCVariable | undefined => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\utils.ts:94: const exact = variables.find((variable) => variable.name === name && variable.type.definition !== 'derived') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\utils.ts:97: return resolveArrayVariableByName(variables, name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\utils.ts:109: expectedType: BlockVariant['variables'][0] | string, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\utils.ts:124: const inputConnectors = variant.variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\utils.ts:127: const outputConnectors = variant.variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\utils.ts:199: const inputConnectors = variantLib.variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\utils.ts:205: const outputConnectors = variantLib.variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\utils.ts:218: const existingEN = variantLib.variables.find((v) => v.name === 'EN') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\utils.ts:219: const existingENO = variantLib.variables.find((v) => v.name === 'ENO') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\utils.ts:220: const others = variantLib.variables.filter((v) => v.name !== 'EN' && v.name !== 'ENO') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\utils.ts:222: let newVariables = others +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\utils.ts:234: newVariables = [EN, ENO, ...others] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\ladder\utils\utils.ts:238: variant: { ...variantLib, variables: newVariables }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\types\block.ts:2: export { blockVariantSchema, blockVariantVariableSchema } from '../../../../../middleware/shared/ports/block-types' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\utils\index.ts:10: export const getVariableByName = (variables: PLCVariable[], name: string): PLCVariable | undefined => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\utils\index.ts:11: const exact = variables.find((variable) => variable.name === name && variable.type.definition !== 'derived') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\utils\index.ts:14: return resolveArrayVariableByName(variables, name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\utils\index.ts:18: const inputVariables = blockVariant.variables.filter( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\utils\index.ts:22: const outputVariables = blockVariant.variables.filter( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\utils\index.ts:27: ${inputVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\utils\index.ts:30: `${variable.name}: ${variable.type.value}${index < inputVariables.length - 1 ? '\n' : ''}`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\utils\index.ts:35: ${outputVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\utils\index.ts:38: `${variable.name}: ${variable.type.value}${index < outputVariables.length - 1 ? '\n' : ''}`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\graphical-editor\utils\index.ts:47: expectedType: BlockVariant['variables'][0] | string, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\retro-icons\index.tsx:39: export const RetroDebugger = (p: RetroIconProps) => +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[start]\new-project\steps\third-step.tsx:14: /** TODO: Need to be implemented - Sequential Functional Chart and Functional Block Diagram */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[start]\new-project\steps\third-step.tsx:17: 'Sequential Functional Chart': +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\ai-settings-panel\AcuExhaustionModal.tsx:5: * Format the `rate_limit_exceeded` reset timestamp into a locale-aware +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\ai-settings-panel\__tests__\AcuExhaustionModal.test.tsx:56: message: 'paused', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\ai-settings-panel\__tests__\AcuExhaustionModal.test.tsx:57: subscriptionStatus: 'paused', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\ai-settings-panel\__tests__\AcuExhaustionModal.test.tsx:153: // The reset line renders a locale-formatted timestamp; assert the prefix +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\create-element\index.tsx:14: workspace: { isDebuggerVisible }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\create-element\index.tsx:45: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\create-element\index.tsx:50: disabled={isDebuggerVisible} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\create-element\index.tsx:52: 'cursor-not-allowed opacity-50': isDebuggerVisible, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\create-element\element-card\index.tsx:70: /** TODO: Need to be implemented - Sequential Functional Chart and Functional Block Diagram */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\create-element\element-card\index.tsx:77: 'Sequential Functional Chart': +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:176: // Sync alias-bound variables whenever the target changes. Producers +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:178: // entire I/O sources and the variables bound to their aliases may +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:388: openModal('debugger-message', { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:403: // when closing the modal (DebuggerMessageModal calls onResponse with last button index on close) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:404: openModal('debugger-message', { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\components\pin-mapping-table.tsx:88: // Phase 2 — cascade rename onto bound variables BEFORE +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\components\pin-mapping-table.tsx:90: // sees variables pointing at the new alias and refreshes +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\components\pin-mapping-table.tsx:102: // variables bound to the affected addresses so the table +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\io-table-layout.tsx:148: // VPP-active slot. Refresh variables bound to those aliases. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\io-table-layout.tsx:187: // Phase 2 — cascade rename onto bound variables BEFORE writing +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\io-table-layout.tsx:188: // so the subsequent `syncVariableAliases()` sees variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\io-table-layout.tsx:200: // Refresh variables against any allocator-driven address shifts. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:322: // In stackable mode, keep the selection inside the populated range. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:472: // re-allocated. Sync variables that were bound to those aliases. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:513: * populated range. The user can then change it via the dropdown. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:542: // Build old-1based-slot -> new-1based-slot for the moved range. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:676: // Phase 2 — cascade rename onto bound variables BEFORE writing +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:678: // call sees variables already pointing at the new alias name and +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:688: // Refresh variables bound to the (now-renamed) alias against +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\ethercat-device-editor.tsx:151: // variables bound to those aliases so the table reflects the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\advanced-tab.tsx:44: Cycle Time (microseconds) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\advanced-tab.tsx:61: EtherCAT bus cycle time in microseconds (100 - 100000) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\device-scan-table.tsx:23: return 'bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\global-settings-tab.tsx:30: // temporarily empty or out-of-range values) render without writing +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\global-settings-tab.tsx:32: // in-range values propagate to the store on change; onBlur clamps any +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\global-settings-tab.tsx:33: // remaining bad draft back into range. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\global-settings-tab.tsx:154: Cycle Time (microseconds) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\global-settings-tab.tsx:179: EtherCAT bus cycle time in microseconds (100 - 100000) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\sdo-parameters-table.tsx:21: * Get numeric range for a data type. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\sdo-parameters-table.tsx:23: function getDataTypeRange(dataType: string, bitLength: number): { min: number; max: number } | null { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\sdo-parameters-table.tsx:69: * Value cell with local state and range validation. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\sdo-parameters-table.tsx:72: * then validates against the type's range. Invalid input is NOT silently +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\sdo-parameters-table.tsx:73: * clamped: the cell shows a red border + tooltip with the valid range so +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\sdo-parameters-table.tsx:92: const range = getDataTypeRange(entry.dataType, entry.bitLength) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\sdo-parameters-table.tsx:100: if (range && (num < range.min || num > range.max)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\sdo-parameters-table.tsx:103: message: `${num} out of range for ${entry.dataType} (allowed: ${range.min} .. ${range.max})`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\sdo-parameters-table.tsx:107: }, [localValue, entry.dataType, range]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\sdo-parameters-table.tsx:131: const isNumeric = range !== null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:77: // Slave ID validation ranges per transport type +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\diff-viewer\graphical-diff-viewer.tsx:93: Variables ({entries.length}) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\diff-viewer\graphical-diff-viewer.tsx:97: Variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\diff-viewer\graphical-diff-viewer.tsx:289: {/* Variables render BEFORE rungs in history mode, AFTER in merge mode +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\diff-viewer\graphical-diff-viewer.tsx:395: {/* In merge mode, variables show collapsed AFTER the rungs so the user's focus stays on the diagrams. */} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\fbd\block\index.tsx:6: assembleVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\fbd\block\index.tsx:8: classifyBlockVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\fbd\block\index.tsx:10: rebuildVariablesForInputCount, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\fbd\block\index.tsx:12: } from '@root/frontend/utils/PLC/extensible-block-variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\fbd\block\index.tsx:21: import { getFBDPouVariablesRungNodeAndEdges } from '../../../../../../../_atoms/graphical-editor/fbd/utils/utils' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\fbd\block\index.tsx:68: editorActions: { updateModelVariables }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\fbd\block\index.tsx:98: blockVariant?.variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\fbd\block\index.tsx:136: const variables = (pou.interface?.variables ?? []).map((variable) => ({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\fbd\block\index.tsx:144: variables.push({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\fbd\block\index.tsx:157: variables: variables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\fbd\block\index.tsx:183: const formInputs: string = newNodeDataVariant.variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\fbd\block\index.tsx:220: const newInput = buildNextExtensibleInput(blockVariant.variables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\fbd\block\index.tsx:221: const classified = classifyBlockVariables(blockVariant.variables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\fbd\block\index.tsx:223: const blockVariables = assembleVariables(classified) as BlockVariant['variables'] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\fbd\block\index.tsx:225: const { height } = getBlockSize({ ...blockVariant, variables: blockVariables } as BlockVariant, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\fbd\block\index.tsx:237: variables: blockVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\fbd\block\index.tsx:244: const result = removeLastExtensibleInput(blockVariant.variables, 2) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\fbd\block\index.tsx:253: const blockVariables = result as BlockVariant['variables'] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\fbd\block\index.tsx:256: { ...blockVariant, variables: blockVariables }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\fbd\block\index.tsx:270: variables: blockVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\fbd\block\index.tsx:278: const minInputs = getMinInputCount(blockVariant.variables, 2) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\fbd\block\index.tsx:283: const blockVariables = rebuildVariablesForInputCount(blockVariant.variables, value) as BlockVariant['variables'] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\fbd\block\index.tsx:286: { ...blockVariant, variables: blockVariables }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\fbd\block\index.tsx:300: variables: blockVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\fbd\block\index.tsx:365: const { rung, edges, variables } = getFBDPouVariablesRungNodeAndEdges(pouName, pous, fbdFlows, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\fbd\block\index.tsx:370: if (variables.selected && variables.all) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\fbd\block\index.tsx:373: rowId: variables.all.indexOf(variables.selected), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\fbd\block\index.tsx:380: parseInt(editor.variable.selectedRow) === variables.all.indexOf(variables.selected) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\fbd\block\index.tsx:382: updateModelVariables({ display: 'table', selectedRow: -1 }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\fbd\block\index.tsx:393: rowId: variables.all.indexOf(variables.selected), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\fbd\block\index.tsx:397: newNode.data = { ...newNode.data, variable: variables.selected } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:6: assembleVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:8: classifyBlockVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:10: rebuildVariablesForInputCount, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:12: } from '@root/frontend/utils/PLC/extensible-block-variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:26: import { getLadderPouVariablesRungNodeAndEdges } from '../../../../../../../_atoms/graphical-editor/ladder/utils/utils' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:67: editorActions: { updateModelVariables }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:100: LadderBlockVariant?.variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:138: const variables = (pou.interface?.variables ?? []).map((variable) => ({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:146: variables.push({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:159: variables: variables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:185: const formInputs: string = newNodeDataVariant.variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:222: const newInput = buildNextExtensibleInput(LadderBlockVariant.variables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:223: const classified = classifyBlockVariables(LadderBlockVariant.variables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:225: const blockVariables = assembleVariables(classified) as LadderBlockVariant['variables'] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:228: { ...LadderBlockVariant, variables: blockVariables }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:242: variables: blockVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:249: const result = removeLastExtensibleInput(LadderBlockVariant.variables, 2) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:258: const blockVariables = result as LadderBlockVariant['variables'] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:261: { ...LadderBlockVariant, variables: blockVariables }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:275: variables: blockVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:283: const minInputs = getMinInputCount(LadderBlockVariant.variables, 2) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:288: const blockVariables = rebuildVariablesForInputCount( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:289: LadderBlockVariant.variables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:291: ) as LadderBlockVariant['variables'] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:294: { ...LadderBlockVariant, variables: blockVariables }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:308: variables: blockVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:375: const { rung, edges, variables } = getLadderPouVariablesRungNodeAndEdges(pouName, pous, ladderFlows, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:380: if (variables.selected && variables.all) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:383: rowId: variables.all.indexOf(variables.selected), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:390: parseInt(editor.variable.selectedRow) === variables.all.indexOf(variables.selected) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:392: updateModelVariables({ display: 'table', selectedRow: -1 }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:403: rowId: variables.all.indexOf(variables.selected), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:407: newNode.data = { ...newNode.data, variable: variables.selected } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\block\index.tsx:424: LadderBlockVariant?.variables ?? [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\coil\index.tsx:6: import { getLadderPouVariablesRungNodeAndEdges } from '../../../../../../../_atoms/graphical-editor/ladder/utils/utils' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\coil\index.tsx:45: const { rung } = getLadderPouVariablesRungNodeAndEdges(pouName, pous, ladderFlows, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\contact\index.tsx:6: import { getLadderPouVariablesRungNodeAndEdges } from '../../../../../../../_atoms/graphical-editor/ladder/utils/utils' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\elements\ladder\contact\index.tsx:45: const { rung } = getLadderPouVariablesRungNodeAndEdges(pouName, pous, ladderFlows, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\FBD\index.tsx:25: const isDebuggerVisible = useOpenPLCStore((state) => state.workspace.isDebuggerVisible) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\FBD\index.tsx:45: const originalVariables = originalPou.interface?.variables ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\FBD\index.tsx:46: const originalInOut = originalVariables.filter((variable) => +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\FBD\index.tsx:50: const currentVariables = variant.variables.filter( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\FBD\index.tsx:62: const outVariable = variant.variables.find((v) => v.name === 'OUT') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\FBD\index.tsx:71: const currentMap = new Map(currentVariables.map((variable) => [formatVariable(variable), true])) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\FBD\index.tsx:73: originalInOut?.length !== currentVariables.length || +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\FBD\index.tsx:103: if (!isDebuggerVisible) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\FBD\index.tsx:111: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\ladder\index.tsx:56: workspace: { isDebuggerVisible }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\ladder\index.tsx:64: variables: pou.interface?.variables ?? [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\ladder\index.tsx:66: globalVariables: openPLCStoreBase.getState().project.data.configurations.resource.globalVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\ladder\index.tsx:112: if (!isDebuggerVisible) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\ladder\index.tsx:120: if (isDebuggerVisible) return +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\ladder\index.tsx:128: if (isDebuggerVisible) return +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\ladder\index.tsx:147: if (isDebuggerVisible) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\ladder\index.tsx:225: const originalVariables = originalPou.interface?.variables ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\ladder\index.tsx:226: const originalInOut = originalVariables.filter((variable) => +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\ladder\index.tsx:230: const currentVariables = variant.variables.filter( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\ladder\index.tsx:243: const outVariable = variant.variables.find((v) => v.name === 'OUT') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\ladder\index.tsx:252: const currentMap = new Map(currentVariables.map((variable) => [formatVariable(variable), true])) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\ladder\index.tsx:254: originalInOut?.length !== currentVariables.length || +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\graphical\ladder\index.tsx:286: isDebuggerActive={isDebuggerVisible} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\library-manager\system-libraries-tab.tsx:57: openModal('debugger-message', { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\library-manager\system-libraries-tab.tsx:80: openModal('debugger-message', { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\ai-diff-review.ts:27: range: new monaco.Range(line, 1, line, 1), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:28: tableGlobalVariablesCompletion, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:29: tableVariablesCompletion, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:57: variables: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:147: isDebuggerVisible, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:156: resource: { globalVariables }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:205: const pouVariables = pou?.interface?.variables ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:270: const fullRange = model.getFullModelRange() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:271: editor.executeEdits('ai-diff-undo-hunk', [{ range: fullRange, text: newBody }]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:335: // Keep the Python LSP's per-POU preamble (IEC variables ? Pyright +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:336: // globals) in sync with the variables table. Re-pushes the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:345: updatePythonLspContext(name, pouVariables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:346: }, [capabilities.hasPythonLSP, language, name, pouVariables]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:433: // Update readOnly when debugger visibility changes (editor-only) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:435: editorRef.current?.updateOptions({ readOnly: isDebuggerVisible }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:436: }, [isDebuggerVisible]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:463: // Cursor jumps tagged for the variables panel belong to the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:464: // variables-code-editor, not the body. Ignore them here so a +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:467: if (target.target === 'variables') return +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:479: // Clamp to the model's valid line range. `getLineMaxColumn` and +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:480: // `Range` both throw `BugIndicatingError: Illegal value for +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:489: `[monaco] cursor target line ${target.lineNumber} out of range (model has ${model.getLineCount()} lines); clamped to ${safeLine}`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:493: const range = new monacoInst.Range(safeLine, 1, safeLine, lineLength) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:494: ed.setSelection(range) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:495: ed.revealRangeInCenter(range) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:500: // Debug variable inline values (editor-only debugger feature) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:526: if (!isDebuggerVisible || !editorRef.current || !monacoRef.current || (language !== 'st' && language !== 'il')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:582: }, [isActive, isDebuggerVisible, debugVarKeySet, language, name, fbInstanceContext, editorMounted, modelVersion]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:589: range: new monaco.Range(line, startCol, line, endCol), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:606: const variablesSuggestions = useCallback( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:607: (range: monaco.IRange) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:608: const suggestions = tableVariablesCompletion({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:609: range, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:610: variables: pouVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:616: [pouVariables], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:619: const globalVariablesSuggestions = useCallback( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:620: (range: monaco.IRange) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:621: const suggestions = tableGlobalVariablesCompletion({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:622: range, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:623: variables: globalVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:629: [globalVariables], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:633: (range: monaco.IRange) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:635: range, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:647: const keywordsSuggestions = useCallback((range: monaco.IRange) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:649: range, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:674: const range = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:681: ...variablesSuggestions(range).suggestions, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:682: ...globalVariablesSuggestions(range).suggestions, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:683: ...librarySuggestions(range).suggestions, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:684: ...keywordsSuggestions(range).suggestions, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:691: }, [pouVariables, globalVariables, sliceLibraries, language]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:697: const parseCppVariables = (code: string, range: monaco.IRange): monaco.languages.CompletionItem[] => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:698: const variables = new Set() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:709: variables.add(varName) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:720: variables.add(paramMatch[1]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:726: return Array.from(variables).map((varName) => ({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:731: range, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:743: const range = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:750: const stdLibSuggestions = cppStandardLibraryCompletion({ range }).suggestions +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:751: const snippetSuggestions = cppSnippetsCompletion({ range }).suggestions +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:755: const arduinoSuggestions = offerArduinoApi ? arduinoApiCompletion({ range }).suggestions : [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:758: const variableSuggestions = parseCppVariables(code, range) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:759: const tableVariableSuggestions = tableVariablesCompletion({ range, variables: pouVariables }).suggestions +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:765: ...variableSuggestions, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:766: ...tableVariableSuggestions, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:779: }, [language, deviceBoard, pouVariables]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:919: if (editor.cursorPosition && editor.cursorPosition.target !== 'variables') { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:931: `[monaco-mount] cursor target line ${targetLine} out of range (model has ${model.getLineCount()} lines); clamped to ${safeLine}`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:935: const range = new monacoInst.Range(safeLine, 1, safeLine, lineLength) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:936: editorInstance.setSelection(range) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:937: editorInstance.revealRangeInCenter(range) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:943: // Hand the LSP the POU's variables-table state so it can build +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:951: variables: pou.interface?.variables ?? [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:1019: range: new monacoInstance.Range( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:1048: const fullRange = model.getFullModelRange() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:1049: editorInstance.executeEdits('ai-tool-update', [{ range: fullRange, text: body }]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:1106: # - All variables are shared with the runtime through shared memory. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:1155: * - Block input and output variables declared in the variable table +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:1209: const firstMatchRange = matches[0].range +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:1210: editorInst.setSelection(firstMatchRange) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:1211: editorInst.revealRangeInCenter(firstMatchRange) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:1222: if (isDebuggerVisible) return +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:1232: // LSP dropdown still auto-opens (fast, deterministic, great for variables and +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:1247: readOnly: isDebuggerVisible, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:1263: // Pinned for cross-platform consistency with the variables-code-editor. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:1277: // Monaco panel sits below the variables table, and that table +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:1282: // the editor container and the variables table above it. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:1327: variables: (foundPou.interface?.variables ?? []).map((variable) => ({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:1370: const currentVars = currentPou.interface?.variables ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:1372: variables: currentVars, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\index.tsx:1374: globalVariables: globalVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:15: export const cppStandardLibraryCompletion = ({ range }: { range: monaco.IRange }) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:68: { name: '...', type: 'variadic', description: 'Pointers to variables to store input' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:79: { name: '...', type: 'variadic', description: 'Pointers to variables to store input' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:90: { name: '...', type: 'variadic', description: 'Pointers to variables to store input' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:562: params: [{ name: 'x', type: 'double', description: 'Value in range [-1, 1]' }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:569: params: [{ name: 'x', type: 'double', description: 'Value in range [-1, 1]' }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:702: signature: 'unsigned int sleep(unsigned int seconds)', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:703: description: 'Sleep for specified number of seconds', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:704: returnValue: '0 if slept for full duration, remaining seconds if interrupted', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:705: params: [{ name: 'seconds', type: 'unsigned int', description: 'Number of seconds to sleep' }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:709: signature: 'int usleep(useconds_t usec)', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:710: description: 'Sleep for specified number of microseconds', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:712: params: [{ name: 'usec', type: 'useconds_t', description: 'Number of microseconds to sleep' }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:844: returnValue: 'Current time as seconds since Epoch, -1 on error', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:858: returnValue: 'Difference in seconds between time1 and time0', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:953: range, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:968: export const arduinoApiCompletion = ({ range }: { range: monaco.IRange }) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:1024: description: 'Returns milliseconds since program started', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:1025: returnValue: 'Number of milliseconds', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:1031: description: 'Returns microseconds since program started', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:1032: returnValue: 'Number of microseconds', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:1038: description: 'Pause the program for specified milliseconds', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:1040: params: [{ name: 'ms', type: 'unsigned long', description: 'Milliseconds to pause' }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:1043: name: 'delayMicroseconds', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:1044: signature: 'void delayMicroseconds(unsigned int us)', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:1045: description: 'Pause the program for specified microseconds', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:1047: params: [{ name: 'us', type: 'unsigned int', description: 'Microseconds to pause' }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:1052: description: 'Re-map a number from one range to another', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:1056: { name: 'fromLow', type: 'long', description: 'Lower bound of input range' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:1057: { name: 'fromHigh', type: 'long', description: 'Upper bound of input range' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:1058: { name: 'toLow', type: 'long', description: 'Lower bound of output range' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:1059: { name: 'toHigh', type: 'long', description: 'Upper bound of output range' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:1065: description: 'Constrain a number to be within a range', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:1229: returnValue: 'Pulse duration in microseconds', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:1627: name: 'Servo.writeMicroseconds', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:1628: signature: 'void Servo.writeMicroseconds(int us)', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:1631: params: [{ name: 'us', type: 'int', description: 'Pulse width in microseconds' }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:1670: range, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:1690: const { allFunctions: stdFunctions } = cppStandardLibraryCompletion({ range: new monaco.Range(0, 0, 0, 0) }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:1691: const { allFunctions: arduinoFunctions } = arduinoApiCompletion({ range: new monaco.Range(0, 0, 0, 0) }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:1694: const textUntilPosition = model.getValueInRange({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:1747: export const cppSnippetsCompletion = ({ range }: { range: monaco.IRange }) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:1797: range, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\index.ts:236: 'range', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\index.ts:261: export const keywordsCompletion = ({ language, range }: { language: 'st' | 'il' | 'python'; range: monaco.IRange }) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\index.ts:269: range, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\index.ts:277: export const tableVariablesCompletion = ({ range, variables }: { range: monaco.IRange; variables: PLCVariable[] }) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\index.ts:278: const suggestions = variables.map((variable) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\index.ts:284: range, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\index.ts:293: export const tableGlobalVariablesCompletion = ({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\index.ts:294: range, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\index.ts:295: variables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\index.ts:297: range: monaco.IRange +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\index.ts:298: variables: PLCVariable[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\index.ts:300: const suggestions = variables.map((variable) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\index.ts:306: range, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\index.ts:316: range, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\index.ts:321: range: monaco.IRange +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\index.ts:341: range, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\index.ts:370: const variables = pou.interface?.variables ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\index.ts:377: variables?: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\index.ts:386: variables: variables.map((variable) => ({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\index.ts:401: range, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\index.ts:410: export const pythonBuiltinsCompletion = ({ range }: { range: monaco.IRange }) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\index.ts:464: 'range', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\index.ts:488: range, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\configs\languages\python\python.snippets.ts:49: label: 'forrange', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\configs\languages\python\python.snippets.ts:50: insertText: ['for ${1:i} in range(${2:10}):', '\t${3:pass}'].join('\n'), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\configs\languages\python\python.snippets.ts:51: documentation: 'FOR loop with range', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\configs\languages\python\python.ts:140: 'range', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\configs\languages\st\st.register.ts:15: * `updateLocalVariablesInTokenizer` / `updateDataTypeVariablesInTokenizer` +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\configs\themes\openplc\openplc.ts:17: // variables / parameters / functions / types / namespaces / +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\configs\themes\openplc\openplc.ts:19: // colours; a semantic-token rule wins for the range it covers. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\configs\themes\openplc\openplc.ts:36: darkString: 'CE9178', // yellow-orange +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\configs\themes\openplc\openplc.ts:40: darkVariable: '9CDCFE', // light cyan — variables/parameters/properties +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\configs\themes\openplc\openplc.ts:48: lightVariable: '001080', // dark navy — variables/parameters/properties +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\configs\themes\openplc\openplc.ts:73: { token: 'variable', foreground: COLORS.lightVariable }, // user variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\configs\themes\openplc\openplc.ts:117: { token: 'variable', foreground: COLORS.darkVariable }, // user variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\drag-and-drop\st.ts:8: variables?: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\drag-and-drop\st.ts:16: if (!pou.variables) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\drag-and-drop\st.ts:20: const inputVariables = pou.variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\drag-and-drop\st.ts:27: return `${variableName ? variableName : pou.name} (\n ${inputVariables.join(',\n ')}\n);` +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\python-lsp\index.ts:18: * - Bookkeep `pouName ? modelUri` so the variables-table watcher +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\python-lsp\index.ts:19: * can hand `notifyVariablesChange()` the right URI when the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\python-lsp\index.ts:86: * preamble from `variables`, opens the document, and wires +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\python-lsp\index.ts:92: ctx: { pouName: string; variables: PLCVariable[] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\python-lsp\index.ts:108: service.attachPou(uri, ctx.pouName, ctx.variables, model.getValue()) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\python-lsp\index.ts:118: * The variables table changed: regenerate the preamble for the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\python-lsp\index.ts:123: export function updatePythonLspContext(pouName: string, variables: PLCVariable[]): void { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\python-lsp\index.ts:129: service.notifyVariablesChange(uri, variables, model.getValue()) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\package-manager\catalog-browser.tsx:100: openModal('debugger-message', { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\package-manager\catalog-browser.tsx:125: openModal('debugger-message', { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\package-manager\index.tsx:74: openModal('debugger-message', { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\package-manager\index.tsx:96: openModal('debugger-message', { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\resource-editor\index.tsx:1: import { GlobalVariablesEditor } from '../../../../_organisms/global-variables-editor' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\resource-editor\index.tsx:8: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\search-in-project\index.tsx:216: const pouVariables = pou.interface?.variables ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\search-in-project\index.tsx:217: const variableMatches = pouVariables.some((variable) => +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\search-in-project\index.tsx:250: const pouVariables = pou.interface?.variables ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\search-in-project\index.tsx:268: variable: pouVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\search-in-project\index.tsx:312: const resourceGlobalVar = data.configurations.resource.globalVariables.filter((variable) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\address-mapping-reference.tsx:237: PLC Address Range +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\index.tsx:466: Update frequency for OPC-UA variables (10-10000ms) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\index.tsx:488: The namespace URI for OpenPLC variables in the OPC-UA address space +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\address-space-tab.tsx:11: useProjectVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\address-space-tab.tsx:13: } from '../hooks/use-project-variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\address-space-tab.tsx:14: import { SelectedVariablesList } from './selected-variables-list' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\address-space-tab.tsx:32: // Get all project variables for the tree +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\address-space-tab.tsx:33: const projectVariables = useProjectVariables() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\address-space-tab.tsx:58: const handleVariableSelect = useCallback( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\address-space-tab.tsx:145: const treeNode = findTreeNodeById(projectVariables, `${node.pouName}-${node.variablePath}`) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\address-space-tab.tsx:152: [projectVariables], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\address-space-tab.tsx:164: const treeNode = findTreeNodeById(projectVariables, nodeKey) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\address-space-tab.tsx:185: [config.addressSpace.nodes, serverName, removeOpcUaNode, onConfigChange, projectVariables], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\address-space-tab.tsx:193: Select PLC variables to expose via OPC-UA. Variable indices are resolved automatically during project +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\address-space-tab.tsx:215: {/* Left Panel - Available Variables */} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\address-space-tab.tsx:220: Available PLC Variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\address-space-tab.tsx:222:

Select variables to expose

+C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\address-space-tab.tsx:231: placeholder='Filter variables...' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\address-space-tab.tsx:239: nodes={projectVariables} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\address-space-tab.tsx:241: onSelect={handleVariableSelect} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\address-space-tab.tsx:247: {/* Right Panel - Selected Variables */} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\address-space-tab.tsx:257: {/* Selected Variables List */} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\address-space-tab.tsx:259: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\selected-variables-list.tsx:31: No variables selected. Select variables from the left panel to expose them via OPC-UA. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:30: { value: 'viewer', label: 'Viewer', description: 'Read-only access to all variables' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\users-tab.tsx:186: • Engineer: Full administrative access to all variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\variable-config-modal.tsx:10: import { isComplexType, type VariableTreeNode } from '../hooks/use-project-variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\variable-tree.tsx:5: import type { VariableTreeNode } from '../hooks/use-project-variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\variable-tree.tsx:217: No program variables found. Create a program with variables first. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:3: findFunctionBlockVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:4: findStructureVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:30: variableType?: string // IEC type for variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:114: const structVariables = findStructureVariables(typeName, dataTypes) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:115: if (structVariables) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:121: structVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:130: const fbVariables = findFunctionBlockVariables(typeName, pous, systemLibraries) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:131: if (fbVariables) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:137: fbVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:157: structVariables: PouVariable[], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:165: const children = structVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:193: isSelectable: true, // Selectable - will expand to leaf variables during index resolution +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:212: fbVariables: PouVariable[], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:221: const children = fbVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:261: isSelectable: true, // Selectable - will expand to leaf variables during index resolution +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:357: isSelectable: true, // Selectable - will expand to leaf variables during index resolution +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:403: const children = (pou.interface?.variables ?? []) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:419: * Build a tree node for global variables. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:421: const buildGlobalVariablesNode = ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:422: globalVariables: PLCVariable[], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:427: const children = globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:432: id: 'global-variables', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:433: name: 'GVL (Global Variables)', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:443: * Hook to extract variables from the project for OPC-UA address space configuration. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:444: * Returns a hierarchical tree structure of all selectable variables. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:446: * Complex types (structures, FBs, arrays) are expanded to their leaf variables during index resolution. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:448: export const useProjectVariables = (): VariableTreeNode[] => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:464: const globalVars = projectData.configurations.resource.globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:467: buildGlobalVariablesNode( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:477: }, [projectData.pous, projectData.dataTypes, projectData.configurations.resource.globalVariables, libraries.system]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\search\index.tsx:200: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\search\display\tree-view.tsx:274: pous.some((pou) => (pou.interface?.variables ?? []).length > 0) || configurations !== null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\source-control\commit-details.tsx:37: const formattedDate = new Date(commit.timestamp).toLocaleString(undefined, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\source-control\commit-item.tsx:10: function formatRelativeTime(timestamp: string): string { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\source-control\commit-item.tsx:11: const diff = Date.now() - new Date(timestamp).getTime() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\source-control\commit-item.tsx:37: {formatRelativeTime(commit.timestamp)} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\breadcrumbs\index.tsx:39: workspace: { isDebuggerVisible, fbDebugInstances, fbSelectedInstance }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\breadcrumbs\index.tsx:92: if (!isFunctionBlock || !isDebuggerVisible) return [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\breadcrumbs\index.tsx:94: }, [isFunctionBlock, isDebuggerVisible, fbDebugInstances, fbTypeKey]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\breadcrumbs\index.tsx:98: if (!isFunctionBlock || !isDebuggerVisible) return undefined +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\breadcrumbs\index.tsx:100: }, [isFunctionBlock, isDebuggerVisible, fbSelectedInstance, fbTypeKey]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\breadcrumbs\index.tsx:111: const showInstanceDropdown = isFunctionBlock && isDebuggerVisible && fbInstances.length > 0 +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\charts\line-chart.tsx:2: import Chart from 'react-apexcharts' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\charts\line-chart.tsx:4: type LineChartProps = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\charts\line-chart.tsx:7: range: number +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\charts\line-chart.tsx:15: const getNiceTickInterval = (rangeSeconds: number): number => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\charts\line-chart.tsx:16: const candidate = rangeSeconds / 5 +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\charts\line-chart.tsx:24: const formatElapsedLabel = (elapsedSeconds: number): string => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\charts\line-chart.tsx:25: if (elapsedSeconds < 60) return `${Math.round(elapsedSeconds)}s` +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\charts\line-chart.tsx:26: if (elapsedSeconds < 3600) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\charts\line-chart.tsx:27: const minutes = Math.floor(elapsedSeconds / 60) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\charts\line-chart.tsx:28: const seconds = Math.round(elapsedSeconds % 60) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\charts\line-chart.tsx:29: return seconds > 0 ? `${minutes}m${seconds}s` : `${minutes}m` +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\charts\line-chart.tsx:31: const hours = Math.floor(elapsedSeconds / 3600) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\charts\line-chart.tsx:32: const minutes = Math.round((elapsedSeconds % 3600) / 60) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\charts\line-chart.tsx:36: const LineChart = ({ data, isBool = false, range, now, startTime, label }: LineChartProps) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\charts\line-chart.tsx:37: const chartId = useId() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\charts\line-chart.tsx:39: const elapsedSeconds = useMemo(() => (now - startTime) / 1000, [now, startTime]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\charts\line-chart.tsx:41: const chartOptions = useMemo(() => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\charts\line-chart.tsx:42: const tickInterval = getNiceTickInterval(range) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\charts\line-chart.tsx:43: const xMin = elapsedSeconds - range +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\charts\line-chart.tsx:44: const xMax = elapsedSeconds +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\charts\line-chart.tsx:47: chart: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\charts\line-chart.tsx:48: id: chartId, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\charts\line-chart.tsx:59: tickAmount: Math.max(2, Math.ceil(range / tickInterval)), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\charts\line-chart.tsx:93: }, [chartId, isBool, range, elapsedSeconds]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\charts\line-chart.tsx:95: const chartSeries = useMemo( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\charts\line-chart.tsx:111: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\charts\line-chart.tsx:116: export { LineChart } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\array\table\index.tsx:7: import { arrayValidation } from '../../../../../store/slices/project/validation/variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\enumerated\table\index.tsx:7: import { enumeratedValidation } from '../../../../../store/slices/project/validation/variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\index.tsx:23: projectActions: { updateDatatype, rearrangeStructureVariables }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\index.tsx:64: const writeVariables = (newVariables: PLCStructureVariable[]) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\index.tsx:67: updateDatatype(editor.meta.name, { ...current, variable: newVariables }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\index.tsx:73: const structureVariables = tableData.filter((variable) => variable.name || variable.type) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\index.tsx:80: while (structureVariables.some((variable) => variable.name === newName)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\index.tsx:90: ? structureVariables[structureVariables.length - 1]?.name || 'structureVar' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\index.tsx:91: : structureVariables[selectedRow]?.name || 'structureVar' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\index.tsx:95: if (structureVariables.some((variable) => variable.name === '')) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\index.tsx:106: ? structureVariables[structureVariables.length - 1] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\index.tsx:107: : structureVariables[selectedRow] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\index.tsx:110: writeVariables([ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\index.tsx:111: ...structureVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\index.tsx:119: selectedRow: structureVariables.length, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\index.tsx:131: writeVariables([...structureVariables, newVariable]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\index.tsx:133: selectedRow: structureVariables.length, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\index.tsx:136: writeVariables([ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\index.tsx:137: ...structureVariables.slice(0, selectedRow + 1), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\index.tsx:139: ...structureVariables.slice(selectedRow + 1), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\index.tsx:150: const structureVariables = tableData.filter((variable) => variable.name || variable.type) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\index.tsx:153: if (selectedRow === ROWS_NOT_SELECTED || selectedRow >= structureVariables.length) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\index.tsx:157: const updatedVariables = [...structureVariables.slice(0, selectedRow), ...structureVariables.slice(selectedRow + 1)] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\index.tsx:159: writeVariables(updatedVariables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\index.tsx:162: if (newSelectedRow < 0 && updatedVariables.length > 0) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\index.tsx:164: } else if (updatedVariables.length === 0) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\index.tsx:173: const handleRearrangeStructureVariables = (index: number, row?: number) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\index.tsx:176: rearrangeStructureVariables({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\index.tsx:192:
+C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\index.tsx:195: aria-label='Variables editor table actions container' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\index.tsx:214: onClick: () => handleRearrangeStructureVariables(-1), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\index.tsx:222: onClick: () => handleRearrangeStructureVariables(1), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\table\editable-cell.tsx:30: const validateVariableName = (name: string, existingVariables: string[], currentName: string) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\table\editable-cell.tsx:35: if (name !== currentName && existingVariables.includes(name)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\table\elements\array-modal.tsx:6: import { arrayValidation } from '../../../../../../store/slices/project/validation/variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\table\elements\array-modal.tsx:102: const handleRearrangeDimensions = (index: number, direction: 'up' | 'down') => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\table\elements\array-modal.tsx:163: const updatedVariables: PLCStructureVariable[] = structure.variable.map((variable) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\table\elements\array-modal.tsx:188: variable: updatedVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\structure\table\elements\array-modal.tsx:212: onRearrangeDimensions={handleRearrangeDimensions} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\ethercat-stats\index.tsx:1: import { RangeCell, StatsTable, type StatsTableColumn } from '@root/frontend/components/_molecules/stats-table' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\ethercat-stats\index.tsx:32: render: (m) => , +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\ethercat-stats\index.tsx:38: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\ethercat-stats\index.tsx:45: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\ethercat-stats\index.tsx:102: description='Times in microseconds. Each cell shows a moving average with min / max below.' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\global-variables-table\editable-cell.tsx:294: // Alias staleness checks. See the local variables-table cell +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\global-variables-table\editable-cell.tsx:295: // (`_molecules/variables-table/editable-cell.tsx`) for the longer +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\global-variables-table\index.tsx:69: type PLCVariablesTableProps = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\global-variables-table\index.tsx:75: const GlobalVariablesTable = ({ tableData, selectedRow, handleRowClick }: PLCVariablesTableProps) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\global-variables-table\index.tsx:100: tableContext='Variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\global-variables-table\index.tsx:105: export { GlobalVariablesTable } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\global-variables-table\selectable-cell.tsx:9: import { DebuggerIcon } from '../../../assets/icons/interface/Debugger' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\global-variables-table\selectable-cell.tsx:438: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\global-variables-table\elements\array-modal.tsx:5: import { arrayValidation } from '../../../../store/slices/workspace/utils/variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\global-variables-table\elements\array-modal.tsx:34: resource: { globalVariables }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\global-variables-table\elements\array-modal.tsx:82: const variable = globalVariables.find((variable) => variable.name === variableName) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\global-variables-table\elements\array-modal.tsx:92: }, [variableName, globalVariables]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\global-variables-table\elements\array-modal.tsx:104: const handleRearrangeDimensions = (index: number, direction: 'up' | 'down') => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\global-variables-table\elements\array-modal.tsx:197: onRearrangeDimensions={handleRearrangeDimensions} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:21: useDebugForcedVariablesMap, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:22: useIsDebuggerVisible, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:28: import { getFunctionBlockVariablesToCleanup } from '../../../../utils/graphical/get-function-block-variables-to-cleanup' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:43: isDebuggerActive?: boolean +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:48: export const FBDBody = ({ rung, nodeDivergences = [], isDebuggerActive = false }: FBDProps) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:55: editorActions: { updateModelVariables }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:63: const isDebuggerVisible = useIsDebuggerVisible() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:65: const debugForcedVariables = useDebugForcedVariablesMap() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:107: if (!isDebuggerVisible) return undefined +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:118: const variable = (pouRef.interface?.variables ?? []).find( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:125: if (debugForcedVariables.has(compositeKey)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:126: return debugForcedVariables.get(compositeKey) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:139: variant?: { name: string; type: string; variables: Array<{ name: string; type: { value: string } }> } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:149: const outputVariable = blockData.variant?.variables.find((v) => v.name === sourceHandle) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:186: if (!isDebuggerVisible) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:249: isDebuggerVisible, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:251: debugForcedVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:253: pouRef?.interface?.variables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:258: if (isDebuggerActive) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:268: }, [rungLocal.nodes, isDebuggerActive]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:387: const variables = (pou.interface?.variables ?? []).map((variable) => ({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:396: variables.push({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:410: variables: variables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:463: const allVariables = pouRef.interface?.variables ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:466: const variablesToDelete = getFunctionBlockVariablesToCleanup(nodes, allRungs, allVariables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:468: variablesToDelete.forEach((variableName) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:469: const variableIndex = allVariables.findIndex((v) => v.name.toLowerCase() === variableName.toLowerCase()) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:483: updateModelVariables({ display: 'table', selectedRow: -1 }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:750: nodesDraggable: !isDebuggerActive, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:751: nodesConnectable: !isDebuggerActive, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:754: onDelete: isDebuggerActive +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:759: onConnect: isDebuggerActive +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:764: onNodeDoubleClick: isDebuggerActive +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:770: onDragEnter: isDebuggerActive ? undefined : onDragEnterViewport, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:771: onDragLeave: isDebuggerActive ? undefined : onDragLeaveViewport, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:772: onDragOver: isDebuggerActive ? undefined : onDragOver, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:773: onDrop: isDebuggerActive ? undefined : onDrop, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:779: onNodeDragStart: isDebuggerActive ? undefined : onNodeDragStart, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\fbd\index.tsx:780: onNodeDragStop: isDebuggerActive ? undefined : onNodeDragStop, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:8: import { useDebugBoolValuesMap, useIsDebuggerVisible } from '../../../../../hooks/use-debug-value' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:14: import { getFunctionBlockVariablesToCleanup } from '../../../../../utils/graphical/get-function-block-variables-to-cleanup' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:15: import { syncNodesWithVariables } from '../../../../../utils/graphical/sync-nodes-with-variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:68: isDebuggerActive?: boolean +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:73: export const RungBody = ({ rung, className, nodeDivergences = [], isDebuggerActive = false }: RungBodyProps) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:80: editorActions: { updateModelVariables }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:87: const isDebuggerVisible = useIsDebuggerVisible() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:150: if (!isDebuggerVisible) return undefined +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:230: if (!isDebuggerVisible) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:277: }, [rungLocal.edges, rungLocal.nodes, isDebuggerVisible, debugVariableValues, pouName, project, getCompositeKey]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:280: const baseNodes = !isDebuggerVisible +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:338: if (isDebuggerActive) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:351: isDebuggerVisible, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:352: isDebuggerActive, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:467: const variables = (pou.interface?.variables ?? []).map((variable) => ({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:475: variables.push({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:489: variables: variables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:528: syncNodesWithVariables(pouRef.interface?.variables ?? [], ladderFlows, ladderFlowActions.updateNode, pouName) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:553: * If the editor is a graphical editor and the variable display is set to table, update the model variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:556: * !IMPORTANT: This function must be used inside of components, because the functions deleteVariable and updateModelVariables are just available at the useOpenPLCStore hook +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:565: let variables: PLCVariable[] = [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:566: if (pouRef) variables = [...(pouRef.interface?.variables ?? [])] as PLCVariable[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:570: const variablesToCleanup = getFunctionBlockVariablesToCleanup(blockNodes, allRungs, variables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:572: variablesToCleanup.forEach((variableName) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:582: const variableIndex = variables.findIndex((variable) => variable.id === variableData?.id) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:590: variables.splice(variableIndex, 1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:597: updateModelVariables({ display: 'table', selectedRow: -1 }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:603: syncNodesWithVariables(pouRef.interface?.variables ?? [], ladderFlows, ladderFlowActions.updateNode, pouName) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:661: syncNodesWithVariables(pouRef.interface?.variables ?? [], ladderFlows, ladderFlowActions.updateNode, pouName) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:728: if (isDebuggerActive) return +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:754: [rung, rungLocal, setReactFlowPanelExtent, reactFlowPanelExtent, dragging, isDebuggerActive], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:763: if (isDebuggerActive) return +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:795: [rung, rungLocal, setReactFlowPanelExtent, reactFlowPanelExtent, dragging, isDebuggerActive], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:804: if (isDebuggerActive) return +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:832: [rung, rungLocal, isDebuggerActive], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:841: if (isDebuggerActive) return +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:875: isDebuggerActive, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:905: nodesDraggable: !isDebuggerActive, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:906: nodesConnectable: !isDebuggerActive, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:916: onNodeClick: isDebuggerActive ? () => {} : undefined, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:917: onNodesDelete: isDebuggerActive +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:922: onNodeDragStart: isDebuggerActive +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:927: onNodeDrag: isDebuggerActive +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:932: onNodeDragStop: isDebuggerActive +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\body.tsx:937: onNodeDoubleClick: isDebuggerActive +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\ladder-utils\elements\diagram\index.ts:692: const variablesNodes = updateVariableBlockPosition({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\ladder-utils\elements\diagram\index.ts:697: return { nodes: variablesNodes.nodes, edges: variablesNodes.edges } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\ladder-utils\elements\drag-n-drop\handlers.ts:280: // Clamp to valid range: parallel collapse may have removed OPEN/CLOSE nodes, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\ladder-utils\elements\handle-branch\index.ts:132: export function canPlaceElementOnHandle(handleVariableType: BlockVariant['variables'][0]): boolean { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\ladder-utils\elements\handle-branch\index.ts:153: * For input branches: outer-spine elements are arranged right-to-left ending at the block handle. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\ladder-utils\elements\handle-branch\index.ts:154: * For output branches: outer-spine elements are arranged left-to-right starting from the block handle. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\ladder-utils\elements\handle-branch\index.ts:1139: newVariables: BlockVariant['variables'], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\ladder-utils\elements\handle-branch\index.ts:1154: const newVariable = newVariables.find((v) => v.name === branch.handleId) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\ladder-utils\elements\handle-branch\index.ts:1272: newVariables: BlockVariant['variables'], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\ladder-utils\elements\handle-branch\index.ts:1275: return reconcileBranches(rung, oldBlockId, newBlockId, newVariables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\ladder-utils\elements\placeholder\index.ts:116: // drag-drop in series with them. Also allow bottom placeholder for depth logic. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\ladder-utils\elements\placeholder\index.ts:301: const variableType = blockData.variant?.variables?.find((v) => v.name === handleId) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\ladder-utils\elements\placeholder\index.ts:339: const variableType = blockData.variant?.variables?.find((v) => v.name === handleId) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\ladder-utils\elements\utils\index.ts:70: * Walks the rung's node list skipping placeholders, variables and branch +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\ladder-utils\elements\utils\__tests__\get-previous-element.test.ts:49: it('skips placeholders and variables when resolving the predecessor', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\ladder-utils\elements\variable-block\index.ts:36: Array.isArray(blockElement.data.connectedVariables) ? blockElement.data.connectedVariables : [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\ladder-utils\elements\variable-block\index.ts:41: let variableType: BlockVariant['variables'][0] = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\ladder-utils\elements\variable-block\index.ts:49: blockVariant.variables.forEach((variable) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\ladder-utils\elements\variable-block\index.ts:78: Array.isArray(blockElement.data.connectedVariables) ? blockElement.data.connectedVariables : [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\ladder-utils\elements\variable-block\index.ts:83: let variableType: BlockVariant['variables'][0] = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\graphical-editor\ladder\rung\ladder-utils\elements\variable-block\index.ts:91: blockVariant.variables.forEach((variable) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\plugin-stats-panel\index.tsx:35: * when a plugin opts into RangeCell). Used both on the device-board +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\project-tree\index.tsx:263: workspace: { selectedProjectTreeLeaf, isDebuggerVisible }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\project-tree\index.tsx:384: onDoubleClick={() => !isDebuggerVisible && setIsEditing(true)} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\project-tree\index.tsx:391: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\project-tree\index.tsx:393: disabled={isDebuggerVisible} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\project-tree\index.tsx:398: 'cursor-not-allowed': isDebuggerVisible, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\project-tree\index.tsx:508: workspace: { selectedProjectTreeLeaf, isDebuggerVisible }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\project-tree\index.tsx:800: onDoubleClick={() => !isDebuggerVisible && setIsEditing(true)} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\project-tree\index.tsx:807: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\project-tree\index.tsx:809: disabled={isDebuggerVisible} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\project-tree\index.tsx:814: 'cursor-not-allowed': isDebuggerVisible, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\scan-cycle-stats\index.tsx:1: import { RangeCell, StatsTable, type StatsTableColumn } from '@root/frontend/components/_molecules/stats-table' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\scan-cycle-stats\index.tsx:25: render: (task) => , +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\scan-cycle-stats\index.tsx:30: render: (task) => , +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\scan-cycle-stats\index.tsx:36: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\scan-cycle-stats\index.tsx:64: description='Times in microseconds. Each cell shows a moving average with min / max below.' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\stats-table\format-helpers.ts:12: export const formatRange = (min: number | null | undefined, max: number | null | undefined) => +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\stats-table\index.tsx:40: * uniformly. Custom-rendered cells (e.g. `RangeCell` for avg/min/max +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\stats-table\index.tsx:79: export { formatNumber, formatRange } from './format-helpers' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\stats-table\index.tsx:80: export { RangeCell } from './range-cell' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\stats-table\range-cell.tsx:1: import { formatNumber, formatRange } from './format-helpers' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\stats-table\range-cell.tsx:3: interface RangeCellProps { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\stats-table\range-cell.tsx:13: * scannable while the min/max range stays a glance away. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\stats-table\range-cell.tsx:15: export const RangeCell = ({ avg, min, max }: RangeCellProps) => ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\stats-table\range-cell.tsx:18: {formatRange(min, max)} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\stats-table\__tests__\stats-table.test.tsx:3: import { formatNumber, formatRange, RangeCell, StatsTable, type StatsTableColumn } from '..' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\stats-table\__tests__\stats-table.test.tsx:22: { key: 'time', header: 'Time', render: (r) => }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\stats-table\__tests__\stats-table.test.tsx:31: description='units in microseconds' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\stats-table\__tests__\stats-table.test.tsx:38: expect(screen.getByText('units in microseconds')).toBeTruthy() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\stats-table\__tests__\stats-table.test.tsx:44: expect(screen.queryByText(/units in microseconds/)).toBeNull() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\stats-table\__tests__\stats-table.test.tsx:100: describe('RangeCell', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\stats-table\__tests__\stats-table.test.tsx:102: render() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\stats-table\__tests__\stats-table.test.tsx:108: render() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\stats-table\__tests__\stats-table.test.tsx:113: render() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\stats-table\__tests__\stats-table.test.tsx:115: // one for the range. But avg=42 is rendered, so only one — appears. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\stats-table\__tests__\stats-table.test.tsx:120: render() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\stats-table\__tests__\stats-table.test.tsx:121: // Both the avg and the range collapse to —. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\stats-table\__tests__\stats-table.test.tsx:138: it('formatRange joins min and max with a slash', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\stats-table\__tests__\stats-table.test.tsx:139: expect(formatRange(1, 5)).toBe('1 / 5') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\stats-table\__tests__\stats-table.test.tsx:140: expect(formatRange(0, 0)).toBe('0 / 0') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\stats-table\__tests__\stats-table.test.tsx:143: it('formatRange returns dash if either side is null', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\stats-table\__tests__\stats-table.test.tsx:144: expect(formatRange(null, 5)).toBe('—') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\stats-table\__tests__\stats-table.test.tsx:145: expect(formatRange(1, null)).toBe('—') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\stats-table\__tests__\stats-table.test.tsx:146: expect(formatRange(null, null)).toBe('—') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\stats-table\__tests__\stats-table.test.tsx:149: it('formatRange returns dash if either side is undefined', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\stats-table\__tests__\stats-table.test.tsx:150: expect(formatRange(undefined, 5)).toBe('—') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\stats-table\__tests__\stats-table.test.tsx:151: expect(formatRange(1, undefined)).toBe('—') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-panel\index.tsx:29: variables?: Variable[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-panel\index.tsx:36: debugForcedVariables?: Map +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-panel\index.tsx:39: isDebuggerVisible?: boolean +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-panel\index.tsx:100: const VariablesPanel = ({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-panel\index.tsx:101: variables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-panel\index.tsx:108: debugForcedVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-panel\index.tsx:111: isDebuggerVisible, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-panel\index.tsx:168: return debugForcedVariables?.has(compositeKey) ?? false +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-panel\index.tsx:170: [debugForcedVariables], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-panel\index.tsx:175: return debugForcedVariables?.get(compositeKey) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-panel\index.tsx:177: [debugForcedVariables], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-panel\index.tsx:182: if (!isDebuggerVisible || node.isComplex) return false +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-panel\index.tsx:188: [isDebuggerVisible, debugVariableIndexes], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-panel\index.tsx:374: if (!variables || variables.length === 0) return null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-panel\index.tsx:378: {variables.map((variable) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-panel\index.tsx:455:

Variables

+C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-panel\index.tsx:460: {isDebuggerVisible && contextMenuState && ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-panel\index.tsx:552: export { VariablesPanel } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\editable-cell.tsx:56: workspace: { isDebuggerVisible }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\editable-cell.tsx:66: const globalVariables = configurations.resource.globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\editable-cell.tsx:71: return globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\editable-cell.tsx:72: .filter((gv) => gv.name) // Only include variables with names +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\editable-cell.tsx:78: }, [globalVariables]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\editable-cell.tsx:81: if (isDebuggerVisible) return false +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\editable-cell.tsx:100: const isEditable = useCallback(isCellEditable, [id, variable, isDebuggerVisible]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\editable-cell.tsx:108: const handleExternalVariableSelection = (selectedName: string) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\editable-cell.tsx:109: const matchingGlobalVar = globalVariables.find((gv) => gv.name.toLowerCase() === selectedName.toLowerCase()) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\editable-cell.tsx:166: const matchingGlobalVar = globalVariables.find((gv) => gv.name.toLowerCase() === newName.toLowerCase()) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\editable-cell.tsx:283: handleExternalVariableSelection(value) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\editable-cell.tsx:332: workspace: { isDebuggerVisible }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\editable-cell.tsx:340: if (isDebuggerVisible) return false +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\editable-cell.tsx:359: const isEditable = useCallback(isCellEditable, [id, variable, isDebuggerVisible]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\editable-cell.tsx:440: workspace: { isDebuggerVisible }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\editable-cell.tsx:462: if (isDebuggerVisible) return false +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\editable-cell.tsx:472: const isEditable = useCallback(isCellEditable, [id, variable, isDebuggerVisible]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\editable-cell.tsx:610: workspace: { isDebuggerVisible }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\editable-cell.tsx:626: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\editable-cell.tsx:629: 'pointer-events-none': !selected || isDebuggerVisible, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\editable-cell.tsx:630: 'cursor-not-allowed': isDebuggerVisible, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\index.tsx:116: type PLCVariablesTableProps = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\index.tsx:125: const VariablesTable = ({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\index.tsx:132: }: PLCVariablesTableProps) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\index.tsx:176: tableContext='Variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\index.tsx:184: export { VariablesTable } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\selectable-cell.tsx:9: import { DebuggerIcon } from '../../../assets/icons/interface/Debugger' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\selectable-cell.tsx:13: import { syncNodesWithVariables, syncNodesWithVariablesFBD } from '../../../utils/graphical/sync-nodes-with-variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\selectable-cell.tsx:58: workspace: { isDebuggerVisible }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\selectable-cell.tsx:187: const newVars = pou?.interface?.variables ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\selectable-cell.tsx:190: syncNodesWithVariablesFBD(newVars, freshFBDFlows, updateFBDNode, editor.meta.name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\selectable-cell.tsx:194: syncNodesWithVariables(newVars, freshLadderFlows, updateNode, editor.meta.name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\selectable-cell.tsx:283: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\selectable-cell.tsx:286: 'pointer-events-none': !selected || isDebuggerVisible, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\selectable-cell.tsx:288: 'cursor-not-allowed': isDebuggerVisible, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\selectable-cell.tsx:446: workspace: { isDebuggerVisible }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\selectable-cell.tsx:485: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1128: placeholder={editorVariables.classFilter} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1156: {editorVariables.display === 'table' && ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1158: aria-label='Variables editor table actions container' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1166: disabled: isDebuggerVisible, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1173: disabled: isDebuggerVisible || parseInt(editorVariables.selectedRow) === ROWS_NOT_SELECTED, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1179: onClick: () => handleRearrangeVariables(-1), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1181: isDebuggerVisible || +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1182: parseInt(editorVariables.selectedRow) === ROWS_NOT_SELECTED || +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1183: parseInt(editorVariables.selectedRow) === 0, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1189: onClick: () => handleRearrangeVariables(1), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1191: isDebuggerVisible || +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1192: parseInt(editorVariables.selectedRow) === ROWS_NOT_SELECTED || +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1193: parseInt(editorVariables.selectedRow) === tableData.length - 1, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1203: aria-label='Variables visualization switch container' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1205: 'absolute right-0': editorVariables.display === 'code', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1209: aria-label='Variables table visualization' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1214: currentVisible={editorVariables.display === 'table'} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1216: editorVariables.display === 'table' ? 'fill-brand' : 'fill-neutral-100 dark:fill-neutral-900', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1221: aria-label='Variables code visualization' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1226: currentVisible={editorVariables.display === 'code'} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1228: editorVariables.display === 'code' ? 'fill-brand' : 'fill-neutral-100 dark:fill-neutral-900', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1237: {editorVariables.display === 'table' && ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1239: aria-label='Variables editor table actions container' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1253: disabled: parseInt(editorVariables.selectedRow) === ROWS_NOT_SELECTED, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1259: onClick: () => handleRearrangeVariables(-1), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1261: parseInt(editorVariables.selectedRow) === ROWS_NOT_SELECTED || +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1262: parseInt(editorVariables.selectedRow) === 0, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1268: onClick: () => handleRearrangeVariables(1), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1270: parseInt(editorVariables.selectedRow) === ROWS_NOT_SELECTED || +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1271: parseInt(editorVariables.selectedRow) === tableData.length - 1, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1281: aria-label='Variables visualization switch container' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1283: 'absolute right-0 top-0': editorVariables.display === 'code', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1287: aria-label='Variables table visualization' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1292: currentVisible={editorVariables.display === 'table'} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1294: editorVariables.display === 'table' ? 'fill-brand' : 'fill-neutral-100 dark:fill-neutral-900', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1300: aria-label='Variables code visualization' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1305: currentVisible={editorVariables.display === 'code'} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1307: editorVariables.display === 'code' ? 'fill-brand' : 'fill-neutral-100 dark:fill-neutral-900', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1314: {editorVariables.display === 'table' && ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1316: aria-label='Variables editor table container' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\variables-editor\index.tsx:1320: => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:57: useOpenPLCStore.getState().modalActions.openModal('debugger-ip-input', { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:93: const debuggerPort = useDebugger() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:100: const [isDebuggerProcessing, setIsDebuggerProcessing] = useState(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:107: const isDebuggerVisible = useOpenPLCStore((state) => state.workspace.isDebuggerVisible) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:119: if (workspace.isDebuggerVisible) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:139: if (isDebuggerVisible) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:144: }, [isSimulatorBoard, isDebuggerVisible, simulator, addLog]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:207: const response = await showDebuggerMessage( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:501: const response = await showDebuggerMessage( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:504: 'The PLC is currently stopped. The debugger requires the PLC to be running. Would you like to start the PLC now?', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:508: consoleActions.addLog({ id: crypto.randomUUID(), level: 'info', message: 'Debugger session cancelled.' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:509: setIsDebuggerProcessing(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:516: await showDebuggerMessage( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:522: setIsDebuggerProcessing(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:531: const md5Result = await debuggerPort.readProgramMd5(projectPath, boardTarget) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:533: await showDebuggerMessage('error', 'MD5 Extraction Failed', md5Result.error ?? 'Could not extract MD5', ['OK']) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:534: setIsDebuggerProcessing(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:541: const preConnectResult = await debuggerPort.connect(debugConfig) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:543: await showDebuggerMessage( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:549: setIsDebuggerProcessing(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:553: const verifyResult = await debuggerPort.verifyMd5(md5Result.md5, debugConfig) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:555: await debuggerPort.disconnect() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:556: await showDebuggerMessage( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:562: setIsDebuggerProcessing(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:567: consoleActions.addLog({ id: crypto.randomUUID(), level: 'info', message: 'MD5 verified. Starting debugger...' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:579: setIsDebuggerProcessing(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:582: await debuggerPort.disconnect() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:589: const response = await showDebuggerMessage( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:627: setIsDebuggerProcessing(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:630: setIsDebuggerProcessing(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:634: await debuggerPort.disconnect() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:640: setIsDebuggerProcessing(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:660: await showDebuggerMessage( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:714: await showDebuggerMessage('warning', outcome.title, outcome.body, ['OK']) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:724: const choice = await showDebuggerMessage('question', outcome.title, outcome.body, buttons) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:734: const result = await showDebuggerIpInput(field.title, field.message, previous ?? field.defaultValue ?? '') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:750: // Debugger click — full orchestration for non-simulator targets +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:753: const handleDebuggerClick = useCallback(async () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:755: // (compile + load firmware + connect), so the Debugger button +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:763: if (workspace.isDebuggerVisible) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:768: if (isDebuggerProcessing) return +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:769: setIsDebuggerProcessing(true) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:773: // debugger so the on-disk project matches what the user sees +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:781: setIsDebuggerProcessing(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:792: setIsDebuggerProcessing(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:807: setIsDebuggerProcessing(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:821: message: `Debugger init error: ${getErrorMessage(error)}`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:823: setIsDebuggerProcessing(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:826: debuggerPort, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:835: isDebuggerProcessing, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:912: disabled={isSimulatorBoard ? isCompiling || isDebuggerProcessing : connectionStatus !== 'connected'} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:915: ? isCompiling || isDebuggerProcessing +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:926: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:927: void handleDebuggerClick()} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:929: disabled={isDebuggerProcessing || isSimulatorBoard} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:930: isActive={isDebuggerVisible} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\default.tsx:931: className={cn((isDebuggerProcessing || isSimulatorBoard) && disabledButtonClass)} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\ladder-toolbox.tsx:3: import { getFunctionBlockVariablesToCleanup } from '../../../utils/graphical/get-function-block-variables-to-cleanup' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\ladder-toolbox.tsx:15: editorActions: { updateModelVariables }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\ladder-toolbox.tsx:84: const allVariables = pou.interface?.variables || [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\ladder-toolbox.tsx:86: const variablesToDelete = getFunctionBlockVariablesToCleanup(allNodesToRemove, allRungs, allVariables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\ladder-toolbox.tsx:88: variablesToDelete.forEach((variableName) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\ladder-toolbox.tsx:89: const variableIndex = allVariables.findIndex((v) => v.name.toLowerCase() === variableName.toLowerCase()) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\workspace-activity-bar\ladder-toolbox.tsx:103: updateModelVariables({ display: 'table', selectedRow: -1 }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_templates\app-layout.tsx:15: import { DebuggerMessageModal } from '../_organisms/modals/debugger-message-modal' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_templates\app-layout.tsx:136: {modals?.['debugger-message']?.open === true && } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\data\sources\POU.tsx:34: value: 'Sequential Functional Chart', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-debug-value.ts:10: export interface DebugVariableState { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-debug-value.ts:21: /** Subscribe only to the global debugger-visible flag. */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-debug-value.ts:22: export function useIsDebuggerVisible(): boolean { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-debug-value.ts:23: return useOpenPLCStore(useCallback((s) => s.workspace.isDebuggerVisible, [])) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-debug-value.ts:46: return useOpenPLCStore(useCallback((s) => s.workspace.debugForcedVariables.has(compositeKey), [compositeKey])) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-debug-value.ts:51: return useOpenPLCStore(useCallback((s) => s.workspace.debugForcedVariables.get(compositeKey), [compositeKey])) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-debug-value.ts:68: export function useDebugValue(compositeKey: string): DebugVariableState { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-debug-value.ts:72: isForced: s.workspace.debugForcedVariables.has(compositeKey), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-debug-value.ts:73: forcedValue: s.workspace.debugForcedVariables.get(compositeKey), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-debug-value.ts:88: /** Non-BOOL values Map — for display panels that need non-BOOL values (charts, monaco, sidebar). */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-debug-value.ts:94: export function useDebugForcedVariablesMap(): Map { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-debug-value.ts:95: return useOpenPLCStore(useCallback((s) => s.workspace.debugForcedVariables, [])) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-device-configuration.ts:164: // Phase 2 — cascade rename onto bound variables BEFORE +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-device-configuration.ts:165: // writing the new alias so the downstream sync sees variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-navigate-to-compile-error.ts:20: * variables panel into code (text) mode, and place the cursor at +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-navigate-to-compile-error.ts:58: const updateModelVariablesForName = useOpenPLCStore((s) => s.editorActions.updateModelVariablesForName) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-navigate-to-compile-error.ts:117: // Var-block errors: switch the variables panel to text mode and +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-navigate-to-compile-error.ts:118: // route the cursor through it. The `target: 'variables'` tag +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-navigate-to-compile-error.ts:123: updateModelVariablesForName(pou.name, { display: 'code' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-navigate-to-compile-error.ts:129: target: 'variables', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-navigate-to-compile-error.ts:145: updateModelVariablesForName, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-pou-snapshot.ts:7: * Captures the current POU state (variables, body, globalVariables, and +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-pou-snapshot.ts:27: variables: JSON.parse(JSON.stringify(pou.interface?.variables ?? [])), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-pou-snapshot.ts:31: globalVariables: JSON.parse(JSON.stringify(project.data.configurations.resource.globalVariables)), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-pou-snapshot.ts:34: [project.data.pous, project.data.configurations.resource.globalVariables, ladderFlows, fbdFlows, pushToHistory], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-runtime-polling.ts:7: // Unified polling interval for both status and logs (in milliseconds). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\use-target-capabilities.ts:6: * target (location-cell dropdown, board picker, debugger selector) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugPolling.ts:4: * When the debugger is visible, polls variable values from the runtime +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugPolling.ts:5: * via DebuggerPort.getVariablesList() at a board-aware interval. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugPolling.ts:7: * Platform-agnostic — the DebuggerPort adapter handles the actual transport +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugPolling.ts:11: * - Polls ONLY variables that are actively needed (watched, forced, graphed, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugPolling.ts:31: import { useCapabilities, useDebugger } from '../../middleware/shared/providers' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugPolling.ts:128: const debuggerPort = useDebugger() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugPolling.ts:130: const isDebuggerVisible = useOpenPLCStore((state) => state.workspace.isDebuggerVisible) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugPolling.ts:144: const debugForcedVariables = useOpenPLCStore(useCallback((s) => s.workspace.debugForcedVariables, [])) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugPolling.ts:151: const lastResponseTimestampRef = useRef(0) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugPolling.ts:160: // Full leaf index?metadata map — computed once when debugger starts. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugPolling.ts:179: }, [pous, editorName, debugForcedVariables, debugExpandedNodes, debugGraphList, fbSelectedInstance]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugPolling.ts:202: * Poll one batch of variables from the runtime. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugPolling.ts:204: const pollVariables = useCallback(async () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugPolling.ts:223: // Clamp offset to valid range +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugPolling.ts:232: // Request variables from runtime via debugger port +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugPolling.ts:233: let result = await debuggerPort.getVariablesList(batch) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugPolling.ts:245: result = await debuggerPort.getVariablesList(batch) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugPolling.ts:253: lastResponseTimestampRef.current = Date.now() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugPolling.ts:278: // related variables visibly desync as the round-robin sweeps. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugPolling.ts:314: // (round-robin offset += positionsConsumed below) so variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugPolling.ts:334: // Out-of-range falls back to the raw integer. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugPolling.ts:382: }, [debuggerPort, getAllLeaves, workspaceActions, consoleActions]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugPolling.ts:385: const pollRef = useRef(pollVariables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugPolling.ts:386: pollRef.current = pollVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugPolling.ts:394: // Set up polling interval when debugger becomes visible. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugPolling.ts:396: if (isDebuggerVisible) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugPolling.ts:400: lastResponseTimestampRef.current = 0 +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugPolling.ts:436: if (lastResponseTimestampRef.current > 0 && Date.now() - lastResponseTimestampRef.current > 2000) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugPolling.ts:452: // Clean up when debugger is hidden (session ended) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugPolling.ts:470: isDebuggerVisible, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugSession.ts:6: * DebuggerPort. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugSession.ts:9: * DebuggerPort and SimulatorPort provided by the PlatformProvider. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugSession.ts:16: import { useDebugger, useSimulator } from '../../middleware/shared/providers' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugSession.ts:24: } from '../utils/debugger-session' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugSession.ts:32: * connects via the debugger port, stores all artifacts in workspace, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugSession.ts:33: * and activates the debugger UI. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugSession.ts:43: /** Force or release a variable via the debugger port. */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugSession.ts:51: const debuggerPort = useDebugger() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugSession.ts:70: logActions.addLog({ id: crypto.randomUUID(), level: 'info', message: 'Connecting debugger...' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugSession.ts:73: const debugFileResult = await debuggerPort.readDebugFile(projectPath, boardTarget) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugSession.ts:151: // Connect debugger via port +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugSession.ts:152: const connectResult = await debuggerPort.connect(debugConfig) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugSession.ts:154: const error = `Debugger connection failed: ${connectResult.error ?? 'Unknown error'}` +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugSession.ts:173: wsActions.setDebuggerTargetIp(debugConfig.connectionParams.ipAddress) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugSession.ts:182: // before `setDebuggerVisible(true)`, which is what triggers the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugSession.ts:186: wsActions.setDebuggerVisible(true) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugSession.ts:190: message: `Debugger connected. Found ${indexMap.size} debug variables.`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugSession.ts:195: const error = `Debugger error: ${err instanceof Error ? err.message : String(err)}` +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugSession.ts:200: [debuggerPort, deviceDefinitions, projectData, projectMeta], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugSession.ts:209: // Disconnect debugger +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugSession.ts:210: await debuggerPort.disconnect() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugSession.ts:215: }, [simulator, debuggerPort, workspaceActions]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugSession.ts:232: const result = await debuggerPort.setVariable(index, force, valueBuffer) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\useDebugSession.ts:249: [debuggerPort, consoleActions], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\__tests__\use-navigate-to-compile-error.test.tsx:24: const updateModelVariablesForName = jest.fn() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\__tests__\use-navigate-to-compile-error.test.tsx:48: updateModelVariablesForName, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\__tests__\use-navigate-to-compile-error.test.tsx:96: expect(updateModelVariablesForName).not.toHaveBeenCalled() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\__tests__\use-navigate-to-compile-error.test.tsx:111: it('switches the variables view to code mode and routes the cursor for var-block errors', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\__tests__\use-navigate-to-compile-error.test.tsx:115: expect(updateModelVariablesForName).toHaveBeenCalledWith('MANUAL_OVERRIDE', { display: 'code' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\__tests__\use-navigate-to-compile-error.test.tsx:120: target: 'variables', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\__tests__\use-navigate-to-compile-error.test.tsx:132: expect(updateModelVariablesForName).not.toHaveBeenCalled() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\hooks\__tests__\use-navigate-to-compile-error.test.tsx:150: expect(updateModelVariablesForName).not.toHaveBeenCalled() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\locales\en\index.ts:16: export { default as variables } from './variables.json' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:10: useDebugger, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:35: import { VariablesPanel } from '../components/_molecules/variables-panel' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:38: import { Debugger } from '../components/_organisms/debugger' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:44: import { VariablesEditor } from '../components/_organisms/variables-editor' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:50: useDebugForcedVariablesMap, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:52: useIsDebuggerVisible, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:63: const debuggerPort = useDebugger() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:137: const isDebuggerVisible = useIsDebuggerVisible() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:140: const debugForcedVariables = useDebugForcedVariablesMap() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:154: // Build debug variables from POUs with debug=true +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:155: const allDebugVariables = useMemo( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:158: const variables = pou.interface?.variables ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:159: return variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:210: const debugVariables = useMemo(() => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:212: allDebugVariables.forEach((v) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:216: return allDebugVariables.map((v) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:225: }, [allDebugVariables]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:229: const watchedCompositeKeys = new Set(allDebugVariables.map((v) => v.compositeKey)) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:230: const forcedKeys = Array.from(debugForcedVariables.keys()) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:233: }, [allDebugVariables, debugForcedVariables, debugVariableTree]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:235: // Force variable handler via DebuggerPort +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:248: if (!debuggerPort.isConnected()) return +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:251: await releaseDebugVariable(debuggerPort, compositeKey, variableIndex) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:257: await forceDebugVariable(debuggerPort, compositeKey, variableIndex, buffer, value ?? true, variableType) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:260: [debugVariableIndexes, debuggerPort], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:274: const [isVariablesPanelCollapsed, setIsVariablesPanelCollapsed] = useState(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:341: if (isDebuggerVisible) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:346: }, [isDebuggerVisible]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:502: 'py-0 pb-4': isVariablesPanelCollapsed, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:506: {isVariablesPanelCollapsed && ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:593: variables-panel splitter position is consistent; +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:594: inside, every POU's `VariablesEditor` and body +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:617: setIsVariablesPanelCollapsed(true) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:619: onExpand={() => setIsVariablesPanelCollapsed(false)} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:631: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:639: className={`${isVariablesPanelCollapsed && ' !hidden '} flex w-full bg-brand-light `} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:710: {isDebuggerVisible && ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:715: Debugger +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:742: {isDebuggerVisible && ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\screens\workspace-screen.tsx:749: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\debug-force-variable.ts:1: import type { DebuggerPort } from '../../middleware/shared/ports/debugger-port' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\debug-force-variable.ts:7: * the store's forced-variables Map on success. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\debug-force-variable.ts:20: debuggerPort: DebuggerPort, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\debug-force-variable.ts:43: const result = await debuggerPort.setVariable(debugIndex, true, valueBuffer) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\debug-force-variable.ts:46: const newForced = new Map(state.workspace.debugForcedVariables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\debug-force-variable.ts:48: state.workspaceActions.setDebugForcedVariables(newForced) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\debug-force-variable.ts:55: * the store's forced-variables Map on success. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\debug-force-variable.ts:58: debuggerPort: DebuggerPort, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\debug-force-variable.ts:64: const result = await debuggerPort.setVariable(debugIndex, false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\debug-force-variable.ts:67: const newForced = new Map(state.workspace.debugForcedVariables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\debug-force-variable.ts:69: state.workspaceActions.setDebugForcedVariables(newForced) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\graphical-scope.ts:8: * local `interface.variables` by a hardcoded type map. That couldn't see +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\graphical-scope.ts:12: * scope (see `st-lsp/scoped-query`), keeps the real variables/members +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\graphical-scope.ts:26: /** LSP `CompletionItemKind.Variable` — strucpp's kind for in-scope variables and instance/struct members. */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\graphical-scope.ts:29: /** Max instance/struct variables to drill into when a type-filtered search has no direct hits. */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\graphical-scope.ts:112: // BOOL). Drill one level into the matching instance/struct variables and +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:19: import { parseIecStringToVariables } from '../utils/generate-iec-string-to-variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:20: import { generateIecVariablesToString } from '../utils/generate-iec-variables-to-string' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:21: import { syncNodesWithVariables, syncNodesWithVariablesFBD } from '../utils/graphical/sync-nodes-with-variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:26: import { collectDebugVariables, sanitizePou } from '../utils/save-project' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:57: const debugVariables = collectDebugVariables(project.data.configurations.resource.globalVariables, project.data.pous) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:77: debugVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:306: * Save the entire project (all files, device config, debug variables). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:487: * Also updates project.json when debug variables may have changed. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:695: * during project open: parse file, restore body + variables, reclassify +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:696: * variables with full project context, restore graphical flow, and sync +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:697: * nodes with reclassified variables. This ensures the POU is in the exact +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:720: // Restore body, variables, and documentation +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:721: state.projectActions.applyPouSnapshot(pouName, parsed.interface?.variables ?? [], parsed.body) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:735: // Reclassify variables with full project context (same as handleOpenProjectResponse) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:739: const vars = freshPou.interface?.variables ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:740: const iecString = generateIecVariablesToString(vars) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:741: const reparsedVars = parseIecStringToVariables( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:747: freshState.projectActions.setPouVariables({ pouName, variables: reparsedVars }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:749: // Sync graphical nodes with reclassified variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:753: syncNodesWithVariables(reparsedVars, pouFlows, openPLCStoreBase.getState().ladderFlowActions.updateNode) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:755: // Reset flow updated flag (syncNodesWithVariables triggers updateNode which sets updated=true) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:760: syncNodesWithVariablesFBD(reparsedVars, pouFlows, openPLCStoreBase.getState().fbdFlowActions.updateNode) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\save-actions.ts:778: * `data.debugVariables`, etc.) are preserved verbatim from disk so +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\body-offsets.ts:15: * IEC `input` / `output` variables as Python globals so Pyright +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\converters.ts:12: * - Monaco's `IRange` uses `start{Line,Column}` + `end{Line,Column}`; +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\converters.ts:13: * LSP's `Range` uses `{start,end}.{line,character}`. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\converters.ts:42: Range as LspRange, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\converters.ts:51: // Position / Range +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\converters.ts:62: export function lspRangeToMonaco(range: LspRange, lineOffset = 0): monaco.IRange { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\converters.ts:64: startLineNumber: range.start.line + 1 - lineOffset, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\converters.ts:65: startColumn: range.start.character + 1, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\converters.ts:66: endLineNumber: range.end.line + 1 - lineOffset, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\converters.ts:67: endColumn: range.end.character + 1, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\converters.ts:71: export function monacoRangeToLsp(range: monaco.IRange, lineOffset = 0): LspRange { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\converters.ts:73: start: { line: range.startLineNumber - 1 + lineOffset, character: range.startColumn - 1 }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\converters.ts:74: end: { line: range.endLineNumber - 1 + lineOffset, character: range.endColumn - 1 }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\converters.ts:102: ...lspRangeToMonaco(diag.range, lineOffset), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\converters.ts:132: * variables, functions, properties, fields). Direct cast — the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\converters.ts:137: defaultRange: monaco.IRange, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\converters.ts:141: const range = item.textEdit +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\converters.ts:142: ? 'range' in item.textEdit +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\converters.ts:143: ? lspRangeToMonaco(item.textEdit.range, lineOffset) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\converters.ts:144: : lspRangeToMonaco(item.textEdit.insert, lineOffset) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\converters.ts:145: : defaultRange +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\converters.ts:160: range, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\converters.ts:175: defaultRange: monaco.IRange, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\converters.ts:183: suggestions: items.map((item) => lspCompletionToMonaco(item, defaultRange, monacoApi, lineOffset)), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\converters.ts:202: ...(hover.range ? { range: lspRangeToMonaco(hover.range, lineOffset) } : {}), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\converters.ts:218: range: lspRangeToMonaco(loc.range, getBodyLineOffset(loc.uri)), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\converters.ts:230: range: lspRangeToMonaco(l.range, getBodyLineOffset(l.uri)), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\converters.ts:273: range: lspRangeToMonaco(edit.range, lineOffset), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\definition-redirect.ts:11: * variables-panel preamble line, or just the POU's tab. Once +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\definition-redirect.ts:13: * switch the variables panel to code mode and place the cursor +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\definition-redirect.ts:17: * Why pull this out: the variables-panel-code-mode text is now +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\definition-redirect.ts:19: * variables-code-editor (see `synthesizeVariablesText`). That +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\definition-redirect.ts:20: * means line N in Pyright IS line N in the variables-code-editor +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\definition-redirect.ts:47: const range = loc.targetSelectionRange ?? loc.targetRange +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\definition-redirect.ts:48: return { uri: loc.targetUri, lineLsp: range.start.line, characterLsp: range.start.character } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\definition-redirect.ts:52: lineLsp: loc.range.start.line, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\definition-redirect.ts:53: characterLsp: loc.range.start.character, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\definition-redirect.ts:116: * Open the POU's tab + switch its variables panel to code mode + +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\definition-redirect.ts:117: * place the variables-code-editor cursor at the given position. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\definition-redirect.ts:121: * variables-code-editor renders in: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\definition-redirect.ts:123: * - ST POUs: the variables-code-editor shows the synthesised VAR +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\definition-redirect.ts:127: * - Python POUs (after `synthesizeVariablesText` unification): +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\definition-redirect.ts:128: * the variables-code-editor renders the same module-globals +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\definition-redirect.ts:137: editorActions: { setEditorCursor, updateModelVariablesForName }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\definition-redirect.ts:139: updateModelVariablesForName(pouName, { display: 'code' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\definition-redirect.ts:144: target: 'variables', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\definition-redirect.ts:152: * (`'body'` instead of `'variables'`) and in not toggling the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\definition-redirect.ts:153: * variables panel. Caller translates LSP?Monaco coordinates. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\diagnostics.ts:19: * diagnostics to the variables-text editor's `pouvars://` URI so +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\diagnostics.ts:21: * variables list. Python LSP doesn't have an analogue, so it +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\index.ts:25: lspRangeToMonaco, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\index.ts:31: monacoRangeToLsp, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\providers.ts:20: * - Translate the worker's inbound ranges by subtracting +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\providers.ts:66: * variables-text editor's model URI). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\providers.ts:103: * reach Monaco. Default: keep edits whose entire range sits at +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\providers.ts:128: edits.filter((e) => e.range.start.line >= offset && e.range.end.line >= offset) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\providers.ts:150: const defaultRange: monaco.IRange = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\providers.ts:160: return lspCompletionListToMonaco(result, defaultRange, monacoApi, lineOffset) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\providers.ts:265: if ('range' in result[0]) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\semantic-tokens.ts:40: * preamble, keep the rest. ST's variables-text view overrides this +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\internal\semantic-tokens-shift.ts:18: * - **Variables-text view**: `startLine = 1` (declaration line count), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\internal\semantic-tokens-shift.ts:22: * Python LSP uses only the body-view mode (no variables-text mirror). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\internal\semantic-tokens-shift.ts:47: // Re-encode in-range tokens with shifted line numbers. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\internal\symbol-helpers.ts:16: import { lspRangeToMonaco, lspSymbolKindToMonaco } from '../converters' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\internal\symbol-helpers.ts:30: * 2. Returning a Location whose range CONTAINS the cursor position +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\internal\symbol-helpers.ts:35: * A zero-width range one column off the cursor satisfies the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\internal\symbol-helpers.ts:49: range: new monacoApi.Range(position.lineNumber, offsetCol, position.lineNumber, offsetCol), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\internal\symbol-helpers.ts:66: range: link.targetSelectionRange ?? link.targetRange, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\internal\symbol-helpers.ts:74: * `DocumentSymbol` shape. Body offset shifts every range to +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\internal\symbol-helpers.ts:82: range: lspRangeToMonaco(sym.range, lineOffset), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\internal\symbol-helpers.ts:83: selectionRange: lspRangeToMonaco(sym.selectionRange, lineOffset), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\internal\symbol-helpers.ts:102: range: lspRangeToMonaco(sym.location.range, lineOffset), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\internal\symbol-helpers.ts:103: selectionRange: lspRangeToMonaco(sym.location.range, lineOffset), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:13: lspRangeToMonaco, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:18: monacoRangeToLsp, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:40: describe('position + range converters', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:48: it('round-trips a Monaco range through LSP', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:49: const mRange: monaco.IRange = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:55: const lspRange = monacoRangeToLsp(mRange) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:56: expect(lspRange).toEqual({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:60: expect(lspRangeToMonaco(lspRange)).toEqual(mRange) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:65: const baseRange = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:71: expect(lspDiagnosticToMonaco({ range: baseRange, message: 'e', severity: 1 }, monacoStub).severity).toBe(8) // Error +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:72: expect(lspDiagnosticToMonaco({ range: baseRange, message: 'w', severity: 2 }, monacoStub).severity).toBe(4) // Warning +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:73: expect(lspDiagnosticToMonaco({ range: baseRange, message: 'i', severity: 3 }, monacoStub).severity).toBe(2) // Info +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:74: expect(lspDiagnosticToMonaco({ range: baseRange, message: 'h', severity: 4 }, monacoStub).severity).toBe(1) // Hint +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:76: expect(lspDiagnosticToMonaco({ range: baseRange, message: 'd' }, monacoStub).severity).toBe(8) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:81: range: baseRange, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:94: const marker = lspDiagnosticToMonaco({ range: baseRange, message: 'x', severity: 1 }, monacoStub) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:99: const marker = lspDiagnosticToMonaco({ range: baseRange, message: 'x', severity: 1 }, monacoStub, 0, 'strucpp') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:105: const defaultRange: monaco.IRange = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:113: const result = lspCompletionToMonaco({ label: 'TIMER' }, defaultRange, monacoStub) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:115: expect(result.range).toEqual(defaultRange) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:119: const result = lspCompletionToMonaco({ label: 'TIMER', insertText: 'TIMER(IN := $0)' }, defaultRange, monacoStub) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:123: it('translates textEdit.range to Monaco range', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:128: range: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:135: defaultRange, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:138: expect(result.range).toEqual({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:150: defaultRange, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:165: defaultRange, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:180: defaultRange, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:188: const defaultRange: monaco.IRange = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:196: expect(lspCompletionListToMonaco(null, defaultRange, monacoStub).suggestions).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:200: const result = lspCompletionListToMonaco([{ label: 'A' }, { label: 'B' }], defaultRange, monacoStub) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:206: const result = lspCompletionListToMonaco({ isIncomplete: true, items: [{ label: 'A' }] }, defaultRange, monacoStub) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:212: const range = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:234: it('preserves range when present', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:235: const result = lspHoverToMonaco({ contents: 'docs', range }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:236: expect(result?.range).toEqual({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:246: const range = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:257: { uri: 'inmemory://pou/foo.st', range }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:267: { uri: 'inmemory://pou/a.st', range }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:268: { uri: 'inmemory://pou/b.st', range }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:284: it('translates range + newText', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:286: range: { start: { line: 0, character: 0 }, end: { line: 0, character: 3 } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\converters.test.ts:290: expect(edit.range).toEqual({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\definition-redirect.test.ts:12: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\definition-redirect.test.ts:22: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\definition-redirect.test.ts:50: range: { start: { line: 7, character: 3 }, end: { line: 7, character: 11 } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\definition-redirect.test.ts:55: it('prefers selectionRange over targetRange on a LocationLink', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\definition-redirect.test.ts:58: targetRange: { start: { line: 1, character: 0 }, end: { line: 1, character: 5 } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\definition-redirect.test.ts:59: targetSelectionRange: { start: { line: 2, character: 4 }, end: { line: 2, character: 9 } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\definition-redirect.test.ts:64: it('falls back to targetRange when no selectionRange is provided', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\definition-redirect.test.ts:65: // The LSP spec marks `targetSelectionRange` required on +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\definition-redirect.test.ts:71: targetRange: { start: { line: 1, character: 0 }, end: { line: 1, character: 5 } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\definition-redirect.test.ts:111: it('switches the variables panel to code mode and tags the cursor for variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\definition-redirect.test.ts:121: target: 'variables', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\definition-redirect.test.ts:134: target: 'variables', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\lsp-shared\__tests__\definition-redirect.test.ts:163: it('leaves the variables panel in table mode (no display toggle)', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\goto-definition-redirect.ts:6: * The user-facing variables panel renders IEC VAR-block syntax — +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\goto-definition-redirect.ts:15: * variables: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\goto-definition-redirect.ts:22: * `generate-iec-variables-to-string`) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\goto-definition-redirect.ts:79: // name ? IEC variables-code-editor line. Skip the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\index.ts:13: * variable declared in the variables table into the Python module +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\index.ts:20: * a synthetic `# IEC variables` block declaring every +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\index.ts:30: import { getIecVariableLineMap } from '../../utils/generate-iec-variables-to-string' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\index.ts:73: // target into the IEC variables-code editor. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\index.ts:131: // tab, switch the variables panel to code mode, and place +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\index.ts:132: // the variables-code-editor cursor at the declaration. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\index.ts:302: attachPou(uri, pouName, variables, bodyText) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\index.ts:320: const preamble = generatePythonLspPreamble(variables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\index.ts:321: const iecVariableLineMap = getIecVariableLineMap(variables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\index.ts:333: notifyVariablesChange(uri, variables, bodyText) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\index.ts:334: // Variables changed: regenerate the preamble + IEC line map +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\index.ts:339: // pure variables edit doesn't change the POU's identity or +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\index.ts:343: const preamble = generatePythonLspPreamble(variables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\index.ts:344: const iecVariableLineMap = getIecVariableLineMap(variables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\types.ts:45: * variables and pushes the augmented document (preamble + body) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\types.ts:56: attachPou(uri: string, pouName: string, variables: PLCVariable[], bodyText: string): void +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\types.ts:65: * Variables list changed: regenerate the preamble, update the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\types.ts:69: notifyVariablesChange(uri: string, variables: PLCVariable[], bodyText: string): void +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\__tests__\goto-definition-redirect.test.ts:13: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\__tests__\goto-definition-redirect.test.ts:35: * would compute for two variables `ValveState (input, BOOL)` and +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\__tests__\goto-definition-redirect.test.ts:42: * IEC VAR-block text (`generateIecVariablesToString` order): +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\__tests__\goto-definition-redirect.test.ts:78: range: { start: { line: 100, character: 0 }, end: { line: 100, character: 5 } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\__tests__\goto-definition-redirect.test.ts:93: range: { start: { line: 5, character: 0 }, end: { line: 5, character: 10 } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\__tests__\goto-definition-redirect.test.ts:107: target: 'variables', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\__tests__\goto-definition-redirect.test.ts:119: range: { start: { line: 6, character: 0 }, end: { line: 6, character: 8 } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\__tests__\goto-definition-redirect.test.ts:139: range: { start: { line: 2, character: 0 }, end: { line: 2, character: 5 } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\__tests__\goto-definition-redirect.test.ts:155: range: { start: { line: 5, character: 0 }, end: { line: 5, character: 10 } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\__tests__\goto-definition-redirect.test.ts:169: range: { start: { line: 15, character: 4 }, end: { line: 15, character: 14 } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\__tests__\goto-definition-redirect.test.ts:191: range: { start: { line: 0, character: 0 }, end: { line: 0, character: 5 } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\__tests__\goto-definition-redirect.test.ts:208: range: { start: { line: 5, character: 0 }, end: { line: 5, character: 10 } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\__tests__\goto-definition-redirect.test.ts:215: it('honours LocationLink shapes (selectionRange preferred)', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\__tests__\goto-definition-redirect.test.ts:220: targetRange: { start: { line: 0, character: 0 }, end: { line: 0, character: 5 } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\__tests__\goto-definition-redirect.test.ts:221: targetSelectionRange: { start: { line: 5, character: 0 }, end: { line: 5, character: 10 } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\__tests__\index.test.ts:180: it('records a zero offset when no IEC variables map to Python globals', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\__tests__\index.test.ts:256: describe('notifyVariablesChange', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\__tests__\index.test.ts:264: service.notifyVariablesChange(POU_URI, [makeBoolVar('a', 'input'), makeIntVar('b', 'output')], 'a = True\nb = 1\n') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\python-lsp\__tests__\index.test.ts:269: // The latest changeDocument must contain both variables. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\goto-definition-redirect.ts:10: * blocks live in the variables panel. Letting Monaco navigate +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\goto-definition-redirect.ts:26: * variables panel to code mode + place the cursor. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\goto-definition-redirect.ts:33: * range) so the caller can fall back to Monaco's default. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\goto-definition-redirect.ts:131: // variables panel into text mode with no useful position to land +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\goto-definition-redirect.ts:133: // VariablesEditor state initialises from an empty `tableData`. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\goto-definition-redirect.ts:135: // (variables in table mode, cursor at body line 1). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\goto-definition-redirect.ts:139: // Preamble target. The variables-code-editor renders only the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\goto-definition-redirect.ts:142: // translate LSP 0-indexed line ? variables editor LSP frame, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\index.ts:14: * - Provider hooks: the `pouvars://` URI rewrite (variables-text +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\index.ts:19: * errors surface in the variables editor too. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\index.ts:20: * - Semantic-tokens viewport clip for the variables-text view. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\index.ts:83: * - `pouvars://.st` (variables text view): the LSP doesn't +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\index.ts:150: // Semantic-tokens viewport: variables-text view clips to the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\index.ts:165: // Mirror VAR-block diagnostics onto the variables-text editor +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\index.ts:166: // for the same POU (if mounted). The variables editor uses a +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\index.ts:176: (d) => d.range.start.line >= POU_DECLARATION_LINE_COUNT && d.range.start.line < ctx.bodyOffset, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\monaco-model-sync.ts:85: // "null is not an object (evaluating 'getModel().getFullModelRange')". +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\types.ts:26: * URI scheme for the variables-code-editor surface. This Monaco +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\types.ts:112: /** Make a synthetic in-memory URI for a POU's variables-text view. */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\types.ts:119: * Used by the LSP providers to detect the variables-text surface and +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\types.ts:132: * variables-code-editor share a single source of truth for the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\__tests__\goto-definition-redirect.test.ts:13: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\__tests__\goto-definition-redirect.test.ts:23: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\__tests__\goto-definition-redirect.test.ts:59: range: { start: { line: 0, character: 0 }, end: { line: 0, character: 0 } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\__tests__\goto-definition-redirect.test.ts:69: range: { start: { line: 0, character: 0 }, end: { line: 0, character: 0 } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\__tests__\goto-definition-redirect.test.ts:74: it('routes a preamble-line target to the variables panel (tagged for variables)', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\__tests__\goto-definition-redirect.test.ts:80: range: { start: { line: 2, character: 3 }, end: { line: 2, character: 10 } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\__tests__\goto-definition-redirect.test.ts:88: expect(state.editor.cursorPosition!.target).toBe('variables') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\__tests__\goto-definition-redirect.test.ts:94: it('forces the variables panel into code mode for preamble targets', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\__tests__\goto-definition-redirect.test.ts:100: range: { start: { line: 1, character: 0 }, end: { line: 1, character: 0 } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\__tests__\goto-definition-redirect.test.ts:116: range: { start: { line: 7, character: 2 }, end: { line: 7, character: 8 } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\__tests__\goto-definition-redirect.test.ts:127: it('handles LocationLink (targetUri / targetSelectionRange) the same way as Location', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\__tests__\goto-definition-redirect.test.ts:133: targetRange: { start: { line: 6, character: 0 }, end: { line: 6, character: 10 } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\__tests__\goto-definition-redirect.test.ts:134: targetSelectionRange: { start: { line: 6, character: 4 }, end: { line: 6, character: 6 } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\__tests__\goto-definition-redirect.test.ts:135: originSelectionRange: { start: { line: 0, character: 0 }, end: { line: 0, character: 0 } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\__tests__\goto-definition-redirect.test.ts:141: // Uses targetSelectionRange when both are present +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\__tests__\goto-definition-redirect.test.ts:152: range: { start: { line: 6, character: 0 }, end: { line: 6, character: 0 } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\__tests__\goto-definition-redirect.test.ts:168: // variables panel in its default table mode and skip the cursor +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\__tests__\goto-definition-redirect.test.ts:175: range: { start: { line: 0, character: 0 }, end: { line: 0, character: 0 } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\__tests__\goto-definition-redirect.test.ts:184: // Variables panel stays in its default table mode. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\__tests__\graphical-redirect.test.ts:27: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\__tests__\graphical-redirect.test.ts:77: setProjectPous([pou('Chart', 'sfc', 'program')]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\__tests__\graphical-redirect.test.ts:78: expect(redirectToGraphicalPou(stubUri('Chart'))).toBe(true) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\__tests__\graphical-redirect.test.ts:79: expect(openPLCStoreBase.getState().editor.meta.name).toBe('Chart') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\__tests__\monaco-model-sync.test.ts:12: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\__tests__\monaco-model-sync.test.ts:22: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\__tests__\project-sync.test.ts:14: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\__tests__\project-sync.test.ts:24: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\__tests__\project-sync.test.ts:156: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\st-lsp\__tests__\types.test.ts:70: // for the variables-text view needs to update with it. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\services\__tests__\save-actions.test.ts:11: * (sanitizePou, collectDebugVariables, serializePouToText, etc.) are covered +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\index.ts:7: export type { EditorModel, EditorSlice, EditorState, GlobalVariablesTableType, VariablesTable } from './editor' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\console\index.ts:2: export type { ConsoleActions, ConsoleFilters, ConsoleSlice, ConsoleState, LogLevel, TimestampFormat } from './types' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\console\slice.ts:16: timestampFormat: 'full', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\console\slice.ts:58: setTimestampFormat: (format) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\console\slice.ts:61: state.filters.timestampFormat = format +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\console\types.ts:5: export type TimestampFormat = 'full' | 'time' | 'none' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\console\types.ts:10: timestampFormat: TimestampFormat +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\console\types.ts:30: setTimestampFormat: (format: TimestampFormat) => void +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\index.ts:8: GlobalVariablesTableType, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\index.ts:13: VariablesTable, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\slice.ts:33: updateModelVariables: (variables) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\slice.ts:39: if (variables.display === 'table') { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\slice.ts:44: selectedRow: variables.selectedRow?.toString() ?? prevSelectedRow, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\slice.ts:45: description: variables.description ?? prevDescription, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\slice.ts:51: code: variables.code !== undefined ? variables.code : existingCode, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\slice.ts:55: if (variables.display === 'table') { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\slice.ts:61: selectedRow: variables.selectedRow?.toString() ?? prevSelectedRow, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\slice.ts:62: classFilter: variables.classFilter ?? prevClassFilter, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\slice.ts:63: description: variables.description ?? prevDescription, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\slice.ts:69: code: variables.code !== undefined ? variables.code : existingCode, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\slice.ts:77: updateModelVariablesForName: (name, variables) => +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\slice.ts:86: if (variables.display === 'table') { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\slice.ts:92: selectedRow: variables.selectedRow?.toString() ?? prevSelectedRow, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\slice.ts:93: description: variables.description ?? prevDescription, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\slice.ts:99: code: variables.code !== undefined ? variables.code : existingCode, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\slice.ts:103: if (variables.display === 'table') { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\slice.ts:111: selectedRow: variables.selectedRow?.toString() ?? prevSelectedRow, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\slice.ts:112: classFilter: variables.classFilter ?? prevClassFilter, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\slice.ts:113: description: variables.description ?? prevDescription, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\slice.ts:119: code: variables.code !== undefined ? variables.code : existingCode, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\types.ts:2: // Variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\types.ts:5: export type VariablesTable = +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\types.ts:17: export type GlobalVariablesTableType = +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\types.ts:68: * variables-code-editor ignores positions tagged this way. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\types.ts:69: * - `variables` — targets the variables panel's text-mode +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\types.ts:76: * line inside the variables panel instead of clamping the cursor +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\types.ts:79: target?: 'body' | 'variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\types.ts:112: variable: VariablesTable +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\types.ts:122: variable: VariablesTable +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\types.ts:139: variable: GlobalVariablesTableType +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\types.ts:231: updateModelVariables: (variables: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\types.ts:238: updateModelVariablesForName: ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\types.ts:240: variables: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\utils.ts:7: * variables editor, etc.) need each instance to read ITS OWN model +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\editor\utils.ts:22: * `VariablesEditor`) used to inline this lookup independently; the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\history\types.ts:10: variables: PLCVariable[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\history\types.ts:14: globalVariables?: PLCVariable[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\ladder\slice.ts:10: import type { LadderBlockConnectedVariables } from '../../../components/_atoms/graphical-editor/ladder/utils/types' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\ladder\slice.ts:28: // Check if any block node has legacy connectedVariables (object instead of array). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\ladder\slice.ts:33: const cv = (node.data as { connectedVariables?: unknown }).connectedVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\ladder\slice.ts:44: const data = node.data as { connectedVariables?: unknown } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\ladder\slice.ts:45: if (data.connectedVariables && !Array.isArray(data.connectedVariables)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\ladder\slice.ts:46: const converted: LadderBlockConnectedVariables = Object.entries( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\ladder\slice.ts:47: data.connectedVariables as Record, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\ladder\slice.ts:53: return { ...node, data: { ...node.data, connectedVariables: converted } } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\ladder\utils\index.ts:7: LadderBlockConnectedVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\ladder\utils\index.ts:80: connectedVariables: normalizeConnectedVariables((node as BlockNode).data.connectedVariables), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\ladder\utils\index.ts:262: * Gets all function block variables that should be cleaned up after nodes are removed. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\ladder\utils\index.ts:267: * @param allVariables - All variables in the POU +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\ladder\utils\index.ts:270: export const getFunctionBlockVariablesToCleanup = ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\ladder\utils\index.ts:273: allVariables: PLCVariable[], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\ladder\utils\index.ts:275: const variablesToCheck = new Set() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\ladder\utils\index.ts:283: variablesToCheck.add(variableName) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\ladder\utils\index.ts:289: const variablesToDelete: string[] = [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\ladder\utils\index.ts:291: for (const variableName of variablesToCheck) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\ladder\utils\index.ts:292: const variable = allVariables.find((v) => v.name.toLowerCase() === variableName.toLowerCase()) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\ladder\utils\index.ts:296: variablesToDelete.push(variableName) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\ladder\utils\index.ts:301: return variablesToDelete +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\ladder\utils\index.ts:305: * Normalize connectedVariables from legacy object format to array format. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\ladder\utils\index.ts:309: function normalizeConnectedVariables(raw: unknown): LadderBlockConnectedVariables { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\ladder\utils\index.ts:310: if (Array.isArray(raw)) return raw as LadderBlockConnectedVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\library\slice.ts:48: // consumers (variables-table / global-variables-table / +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\library\slice.ts:71: // later iterate `libraries.user` (variables / global / array +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\modal\slice.ts:24: 'debugger-message', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\modal\slice.ts:25: 'debugger-ip-input', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\modal\types.ts:27: | 'debugger-message' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\modal\types.ts:28: | 'debugger-ip-input' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:19: syncVariableAliases as syncVariablesPure, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:23: import { parseIecStringToVariables } from '../../../utils/generate-iec-string-to-variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:24: import { generateIecVariablesToString } from '../../../utils/generate-iec-variables-to-string' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:30: import { createVariableValidation, updateVariableValidation } from './validation/variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:226: // Variables-text ? variables-table reconcile helpers +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:230: // reachable from outside the variables-editor itself — block drops, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:232: // When that POU's variables editor is in text mode, the in-memory +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:233: // `pou.interface.variables` array and the `editor.variable.code` +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:240: // 1. **Reconcile** (`reconcileVariablesText`) — if the editor is in +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:241: // code mode, parse the text and replace the variables array with +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:249: // 2. **Mutate** — apply the requested change to the variables array. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:250: // 3. **Regenerate** (`regenerateVariablesText`) — if the editor is +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:252: // variables so Monaco shows the new state immediately. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:262: const reconcileVariablesText = ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:274: // Only the editors that expose a per-POU variables panel +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:276: // never own a variables-text view. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:285: const currentVariables = pou?.interface?.variables ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:286: // Buffer is a verbatim serialisation of the current variables — +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:288: if (code === generateIecVariablesToString(currentVariables)) return ok() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:291: const parsed = parseIecStringToVariables( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:300: if (target?.interface) target.interface.variables = parsed +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:306: return fail(message, 'Variables table is invalid') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:310: const regenerateVariablesText = (pouName: string | undefined, getState: ProjectGetState): void => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:311: /* istanbul ignore if -- same callsite guarantees as reconcileVariablesText */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:319: const newText = generateIecVariablesToString(pou?.interface?.variables ?? []) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:320: state.editorActions.updateModelVariablesForName(pouName, { display: 'code', code: newText }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:329: configurations: { resource: { tasks: [], instances: [], globalVariables: [] } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:363: configurations: { resource: { tasks: [], instances: [], globalVariables: [] } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:420: variables: dto.data.variables ?? [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:466: clearPouVariablesText: (name) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:469: const pou = slice.project.data.pous.find((p) => p.name === name) as { variablesText?: string } | undefined +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:470: if (pou) delete pou.variablesText +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:521: applyPouSnapshot: (name, variables, body) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:528: if (pou.interface) pou.interface.variables = variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:534: // Variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:546: const reconcile = reconcileVariablesText(associatedPou, getState, setState) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:561: const sourceVariables = +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:563: ? (getState().project.data.pous.find((p) => p.name === associatedPou)?.interface?.variables ?? []) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:564: : getState().project.data.configurations.resource.globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:565: const validated = createVariableValidation(sourceVariables, data) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:571: // Resolve the target variables array (local POU or global) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:572: let variables: PLCVariable[] | undefined +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:579: variables = pou.interface.variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:581: variables = slice.project.data.configurations.resource.globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:586: const filtered = scope === 'local' ? variables.filter((v) => v.name !== 'OUT') : variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:590: pou.interface!.variables = [...filtered] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:593: variables.push(data) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:598: if (scope === 'local' && response.ok) regenerateVariablesText(associatedPou, getState) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:601: setPouVariables: ({ pouName, variables }) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:605: if (pou?.interface) pou.interface.variables = variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:610: setGlobalVariables: ({ variables }) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:613: slice.project.data.configurations.resource.globalVariables = variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:620: const reconcile = reconcileVariablesText(associatedPou, getState, setState) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:642: // Resolve the target variables array (local POU or global) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:643: let variables: PLCVariable[] | undefined +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:650: variables = pou.interface.variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:652: variables = slice.project.data.configurations.resource.globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:655: const found = getVariableBasedOnRowIdOrVariableId(variables, rowId, variableId) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:661: const validationResponse = updateVariableValidation(variables, updates, found.variable) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:667: variables[found.index] = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:668: ...variables[found.index], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:673: response.data = variables[found.index] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:676: if (scope === 'local' && response.ok) regenerateVariablesText(associatedPou, getState) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:680: const variables = +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:682: ? getState().project.data.pous.find((p) => p.name === associatedPou)?.interface?.variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:683: : getState().project.data.configurations.resource.globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:684: if (!variables) return undefined +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:686: const found = getVariableBasedOnRowIdOrVariableId(variables, rowId, variableId) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:691: const reconcile = reconcileVariablesText(associatedPou, getState, setState) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:697: const globalVars = state.project.data.configurations.resource.globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:708: pou.interface?.variables?.some( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:716: `The global variable "${variableToDelete.name}" is referenced by external variables in the following POUs: ${pouNames}. Please remove these references before deleting the global variable.`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:726: const variables = +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:728: ? slice.project.data.pous.find((p) => p.name === associatedPou)?.interface?.variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:729: : slice.project.data.configurations.resource.globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:730: if (!variables) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:736: const idx = variables.findIndex((v) => v.name.toLowerCase() === variableName.toLowerCase()) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:741: variables.splice(idx, 1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:744: const found = getVariableBasedOnRowIdOrVariableId(variables, rowId, variableId) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:749: variables.splice(found.index, 1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:752: if (scope === 'local' && response.ok) regenerateVariablesText(associatedPou, getState) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:755: rearrangeVariables: ({ scope, associatedPou, rowId, variableId, newIndex }) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:758: const variables = +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:760: ? slice.project.data.pous.find((p) => p.name === associatedPou)?.interface?.variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:761: : slice.project.data.configurations.resource.globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:762: if (!variables) return +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:764: const found = getVariableBasedOnRowIdOrVariableId(variables, rowId, variableId) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:766: const [item] = variables.splice(found.index, 1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:767: variables.splice(newIndex, 0, item) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:829: message: `Alias registry reports ${registry.duplicateAliases.length} duplicate alias name(s): ${sample}${overflow}. Each alias must be unique across all I/O channels — rename the duplicates in the IO mapping screens. Until then, variables bound to the losing entries will resolve to the winning entry's address.`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:840: /* istanbul ignore if -- PLCPouSchema requires `interface.variables` to be an +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:843: if (!pou.interface?.variables) continue +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:844: const result = syncVariablesPure(pou.interface.variables, registry) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:849: for (let i = 0; i < result.variables.length; i++) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:850: pou.interface.variables[i] = result.variables[i] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:854: const globals = slice.project.data.configurations.resource.globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:856: const result = syncVariablesPure(globals, registry) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:860: for (let i = 0; i < result.variables.length; i++) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:861: globals[i] = result.variables[i] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:875: * TCP, EtherCAT), the bound variables follow so they don't drop +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:877: * `syncVariableAliases()` then refreshes the variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:897: // bound variables should also drop their alias — the next +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:909: /* istanbul ignore if -- schema guarantees `interface.variables`; defensive */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:910: if (!pou.interface?.variables) continue +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:911: for (let i = 0; i < pou.interface.variables.length; i++) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:912: pou.interface.variables[i] = cascade(pou.interface.variables[i]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:915: const globals = slice.project.data.configurations.resource.globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:973: rearrangeStructureVariables: ({ associatedDataType, rowId, newIndex }) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1039: rearrangeTasks: ({ rowId, newIndex }) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1096: rearrangeInstances: ({ rowId, newIndex }) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1595: // bound variables BEFORE writing the new alias so the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1596: // downstream sync sees variables pointing at the new name and +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\slice.ts:1617: // Producer mutation: refresh variables that were bound to the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\types.ts:113: clearPouVariablesText: (name: string) => void +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\types.ts:115: applyPouSnapshot: (name: string, variables: PLCVariable[], body: PLCBody) => void +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\types.ts:117: // Variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\types.ts:119: setPouVariables: (args: { pouName: string; variables: PLCVariable[] }) => ProjectResponse +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\types.ts:120: setGlobalVariables: (args: { variables: PLCVariable[] }) => ProjectResponse +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\types.ts:141: rearrangeVariables: (args: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\types.ts:151: * current alias registry. Variables auto-adopt new aliases, follow +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\types.ts:170: * `newAlias` across all POU-local and global variables. Used by +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\types.ts:173: * a producer channel — the rename cascades to bound variables so +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\types.ts:178: * variables to drop their alias too; `syncVariableAliases` will +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\types.ts:187: * Returns the number of variables actually mutated. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\types.ts:196: rearrangeStructureVariables: (args: { associatedDataType?: string; rowId: number; newIndex: number }) => void +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\types.ts:204: rearrangeTasks: (args: { rowId: number; newIndex: number }) => void +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\types.ts:211: rearrangeInstances: (args: { rowId: number; newIndex: number }) => void +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\utils.ts:4: variables: PLCVariable[], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\utils.ts:9: const index = variables.findIndex((v) => v.name === variableId) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\utils.ts:11: return { variable: variables[index], index } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\utils.ts:13: if (rowId !== undefined && rowId >= 0 && rowId < variables.length) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\utils.ts:14: return { variable: variables[rowId], index: rowId } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\validation\type-change.ts:63: pous?: Array<{ name: string; interface?: { variables: PLCVariable[] } }>, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\validation\type-change.ts:70: const variables = pou.interface?.variables ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\validation\type-change.ts:71: const externalVars = variables.filter( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\validation\type-change.ts:87: (pou.interface?.variables ?? []).some( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\validation\variables.ts:27: const checkIfVariableExists = (variables: PLCVariable[], name: string) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\validation\variables.ts:28: const nameAlreadyInUse = variables.some((variable) => variable.name.toLowerCase() === name.toLowerCase()) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\validation\variables.ts:31: const checkIfGlobalVariableExists = (variables: PLCVariable[], name: string) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\validation\variables.ts:32: return variables.some((variable) => variable.name === name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\validation\variables.ts:41: * Reference-equality is enough since `variables` is the live array +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\validation\variables.ts:44: const checkIfLocationExists = (variables: PLCVariable[], location: string, exclude?: PLCVariable) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\validation\variables.ts:45: return variables.some((variable) => variable !== exclude && variable.location === location) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\validation\variables.ts:176: const checkVariableName = (variables: PLCVariable[], variableName: string) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\validation\variables.ts:182: const filteredVariables = variables.filter((variable: PLCVariable) => +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\validation\variables.ts:186: // If there is a variable with the same name, sort the variables by the number at the end and get the biggest number +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\validation\variables.ts:187: const sortedVariables = filteredVariables.sort((a, b) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\validation\variables.ts:191: // Treat variables without numbers as having number -1 for sorting purposes +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\validation\variables.ts:192: // This ensures they come before numbered variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\validation\variables.ts:202: sortedVariables.length > 0 ? extractNumberAtEnd(sortedVariables[sortedVariables.length - 1].name) : { number: -1 } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\validation\variables.ts:205: ok: filteredVariables.length > 0, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\validation\variables.ts:302: variables: PLCVariable[], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\validation\variables.ts:308: if (checkIfVariableExists(variables, variableName)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\validation\variables.ts:309: const { name: variableNameWithoutNumber, number } = checkVariableName(variables, variableName) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\validation\variables.ts:313: if (checkIfLocationExists(variables, variableLocation) && variableLocation !== '') { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\validation\variables.ts:317: // of contiguous variables, the increment would eventually land +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\validation\variables.ts:321: // check O(1) so the loop is linear in the number of variables. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\validation\variables.ts:322: const inUse = new Set(variables.map((v) => v.location)) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\validation\variables.ts:342: variables: PLCVariable[], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\validation\variables.ts:361: if (checkIfVariableExists(variables, name)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\validation\variables.ts:385: if (checkIfLocationExists(variables, location, variableToUpdate)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\validation\variables.ts:416: const updateGlobalVariableValidation = (variables: PLCVariable[], dataToBeUpdated: Partial) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\project\validation\variables.ts:430: if (checkIfGlobalVariableExists(variables, name)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:5: import { parseIecStringToVariables } from '../../../utils/generate-iec-string-to-variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:6: import { generateIecVariablesToString } from '../../../utils/generate-iec-variables-to-string' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:7: import { syncNodesWithVariables, syncNodesWithVariablesFBD } from '../../../utils/graphical/sync-nodes-with-variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:163: pouDto.data.variables = sourcePou.interface?.variables ? [...sourcePou.interface.variables] : [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:629: // Reclassify ALL POUs' variables with full context. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:645: const vars = pou.interface?.variables ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:646: const iecString = generateIecVariablesToString(vars) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:647: const reparsedVariables = parseIecStringToVariables(iecString, pous, reclassDataTypes, reclassLibraries) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:648: getState().projectActions.setPouVariables({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:650: variables: reparsedVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:654: console.error(`[Reclassify] Failed to reclassify variables for POU "${pou.name}":`, err) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:659: // Sync graphical POU nodes with reclassified variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:680: syncNodesWithVariables(freshPou.interface?.variables ?? [], pouFlow, updateLadderNode) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:692: syncNodesWithVariablesFBD(freshPou.interface?.variables ?? [], pouFlow, updateFBDNode) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:711: // Restore debug flags from debugVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:712: // Since POU variables are saved as text files, debug flags are stored separately in project.json +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:713: const debugVariables = data.projectData.debugVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:714: if (debugVariables) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:716: if (debugVariables.global && debugVariables.global.length > 0) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:717: const globalVars = getState().project.data.configurations.resource.globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:718: debugVariables.global.forEach((varName) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:731: if (debugVariables.pous) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:732: for (const [pouName, varNames] of Object.entries(debugVariables.pous)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:736: const pouVars = pou.interface?.variables ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:833: // For POUs with unparseable variables (variablesText present, variables empty), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:836: const pouWithText = pou as typeof pou & { variablesText?: string } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:837: if (pouWithText.variablesText && (!pou.interface?.variables || pou.interface.variables.length === 0)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:843: model.variable = { display: 'code', code: pouWithText.variablesText } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:855: // Various operations during load (syncNodesWithVariables, debug flag restoration, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:931: variables: JSON.parse(JSON.stringify(pou.interface?.variables ?? [])) as PLCVariable[], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:935: globalVariables: JSON.parse( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:936: JSON.stringify(state.project.data.configurations.resource.globalVariables), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:950: state.projectActions.applyPouSnapshot(pouName, snapshot.variables, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:954: if (snapshot.globalVariables) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:955: state.projectActions.setGlobalVariables({ variables: snapshot.globalVariables }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:988: variables: JSON.parse(JSON.stringify(pou.interface?.variables ?? [])) as PLCVariable[], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:992: globalVariables: JSON.parse( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:993: JSON.stringify(state.project.data.configurations.resource.globalVariables), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:1007: state.projectActions.applyPouSnapshot(pouName, snapshot.variables, { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:1011: if (snapshot.globalVariables) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\slice.ts:1012: state.projectActions.setGlobalVariables({ variables: snapshot.globalVariables }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\types.ts:60: variables: PLCVariable[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\types.ts:62: globalVariables?: PLCVariable[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\utils.ts:28: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\utils.ts:39: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\shared\utils.ts:50: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\slice.ts:37: timestampFormat: 'full', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\slice.ts:40: isDebuggerVisible: false, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\slice.ts:41: debuggerTargetIp: null, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\slice.ts:46: debugForcedVariables: new Map(), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\slice.ts:160: workspace.isDebuggerVisible = false +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\slice.ts:161: workspace.debuggerTargetIp = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\slice.ts:166: workspace.debugForcedVariables = new Map() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\slice.ts:184: timestampFormat: 'full', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\slice.ts:250: setPlcTimestampFormat: (format: 'full' | 'time' | 'none') => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\slice.ts:253: workspace.plcFilters.timestampFormat = format +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\slice.ts:258: setDebuggerVisible: (isVisible: boolean) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\slice.ts:261: workspace.isDebuggerVisible = isVisible +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\slice.ts:265: setDebuggerTargetIp: (targetIp: string | null) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\slice.ts:268: workspace.debuggerTargetIp = targetIp +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\slice.ts:304: setDebugForcedVariables: (forced: Map) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\slice.ts:307: workspace.debugForcedVariables = forced +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\slice.ts:399: workspace.isDebuggerVisible = false +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\slice.ts:400: workspace.debuggerTargetIp = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\slice.ts:405: workspace.debugForcedVariables = new Map() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\slice.ts:434: workspace.debugForcedVariables.delete(compositeKey) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\types.ts:22: timestampFormat: 'full' | 'time' | 'none' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\types.ts:83: isDebuggerVisible: boolean +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\types.ts:84: debuggerTargetIp: string | null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\types.ts:89: debugForcedVariables: Map +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\types.ts:168: setPlcTimestampFormat: (format: 'full' | 'time' | 'none') => void +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\types.ts:170: setDebuggerVisible: (isVisible: boolean) => void +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\types.ts:171: setDebuggerTargetIp: (targetIp: string | null) => void +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\types.ts:176: setDebugForcedVariables: (forced: Map) => void +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\utils\variables.ts:7: const checkIfVariableExists = (variables: PLCVariable[], name: string) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\utils\variables.ts:8: return variables.some((variable) => variable.name === name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\utils\variables.ts:10: const checkIfGlobalVariableExists = (variables: PLCGlobalVariable[], name: string) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\utils\variables.ts:11: return variables.some((variable) => variable.name === name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\utils\variables.ts:31: * It is exported to be used at array-modal.tsx file present at src/renderer/components/_molecules/variables-table/elements. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\utils\variables.ts:61: const createVariableValidation = (variables: PLCVariable[], variableName: string) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\utils\variables.ts:62: if (checkIfVariableExists(variables, variableName)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\utils\variables.ts:64: const filteredVariables = variables.filter((variable: PLCVariable) => +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\utils\variables.ts:67: const sortedVariables = filteredVariables.sort((a, b) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\utils\variables.ts:75: const biggestVariable = sortedVariables[sortedVariables.length - 1].name.match(regex) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\utils\variables.ts:77: for (let i = sortedVariables.length - 1; i >= 1; i--) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\utils\variables.ts:78: const previousVariable = sortedVariables[i].name.match(regex) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\utils\variables.ts:80: const currentVariable = sortedVariables[i - 1].name.match(regex) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\utils\variables.ts:97: const updateVariableValidation = (variables: PLCVariable[], dataToBeUpdated: Partial) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\utils\variables.ts:111: if (checkIfVariableExists(variables, name)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\utils\variables.ts:132: const createGlobalVariableValidation = (variables: PLCGlobalVariable[], variableName: string) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\utils\variables.ts:133: if (checkIfGlobalVariableExists(variables, variableName)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\utils\variables.ts:135: const filteredVariables = variables.filter((variable: PLCVariable) => +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\utils\variables.ts:138: const sortedVariables = filteredVariables.sort((a, b) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\utils\variables.ts:146: const biggestVariable = sortedVariables[sortedVariables.length - 1].name.match(regex) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\utils\variables.ts:148: for (let i = sortedVariables.length - 1; i >= 1; i--) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\utils\variables.ts:149: const previousVariable = sortedVariables[i].name.match(regex) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\utils\variables.ts:151: const currentVariable = sortedVariables[i - 1].name.match(regex) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\utils\variables.ts:164: variables: PLCGlobalVariable[], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\slices\workspace\utils\variables.ts:180: if (checkIfGlobalVariableExists(variables, name)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\ai-slice.test.ts:19: timestamp: overrides?.timestamp ?? Date.now(), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\console-slice.test.ts:5: import type { ConsoleSlice, LogLevel, TimestampFormat } from '../slices/console/types' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\console-slice.test.ts:41: timestampFormat: 'full', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\console-slice.test.ts:191: store.getState().consoleActions.setTimestampFormat('time') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\console-slice.test.ts:196: expect(store.getState().filters.timestampFormat).toBe('time') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\console-slice.test.ts:224: // setTimestampFormat +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\console-slice.test.ts:226: it('setTimestampFormat updates the timestamp format', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\console-slice.test.ts:227: const formats: TimestampFormat[] = ['full', 'time', 'none'] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\console-slice.test.ts:229: store.getState().consoleActions.setTimestampFormat(format) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\console-slice.test.ts:230: expect(store.getState().filters.timestampFormat).toBe(format) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\console-slice.test.ts:234: it('setTimestampFormat does not affect other filter properties', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\console-slice.test.ts:238: store.getState().consoleActions.setTimestampFormat('none') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\device-slice.test.ts:21: // editor + library state for its variables-text reconcile helpers. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\editor-slice.test.ts:95: describe('updateModelVariables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\editor-slice.test.ts:103: a.updateModelVariables({ display: 'table', selectedRow: 3, description: 'desc' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\editor-slice.test.ts:105: a.updateModelVariables({ display: 'table' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\editor-slice.test.ts:107: a.updateModelVariables({ display: 'code', code: 'VAR x: INT; END_VAR' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\editor-slice.test.ts:109: a.updateModelVariables({ display: 'code' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\editor-slice.test.ts:114: a.updateModelVariables({ display: 'table' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\editor-slice.test.ts:126: a.updateModelVariables({ display: 'table', selectedRow: 2, classFilter: 'Input', description: 'd' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\editor-slice.test.ts:127: a.updateModelVariables({ display: 'table' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\editor-slice.test.ts:128: a.updateModelVariables({ display: 'code', code: 'c' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\editor-slice.test.ts:129: a.updateModelVariables({ display: 'code' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\editor-slice.test.ts:131: a.updateModelVariables({ display: 'table' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\editor-slice.test.ts:142: a.updateModelVariables({ display: 'table', selectedRow: 1 }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\editor-slice.test.ts:149: store.getState().editorActions.updateModelVariables({ display: 'table', selectedRow: 1 }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\editor-slice.test.ts:154: describe('updateModelVariablesForName', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\editor-slice.test.ts:160: a.updateModelVariablesForName('Res', { display: 'table', selectedRow: 1, description: 'u' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\editor-slice.test.ts:172: a.updateModelVariablesForName('Res', { display: 'table', selectedRow: 7, description: 'd' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\editor-slice.test.ts:173: a.updateModelVariablesForName('Res', { display: 'table' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\editor-slice.test.ts:174: a.updateModelVariablesForName('Res', { display: 'code', code: 'c' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\editor-slice.test.ts:175: a.updateModelVariablesForName('Res', { display: 'code' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\editor-slice.test.ts:178: a.updateModelVariablesForName('Res', { display: 'table' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\editor-slice.test.ts:189: a.updateModelVariablesForName('P2', { display: 'table', selectedRow: 3, classFilter: 'Local', description: 'd' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\editor-slice.test.ts:190: a.updateModelVariablesForName('P2', { display: 'table' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\editor-slice.test.ts:191: a.updateModelVariablesForName('P2', { display: 'code', code: 'c' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\editor-slice.test.ts:192: a.updateModelVariablesForName('P2', { display: 'code' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\editor-slice.test.ts:193: a.updateModelVariablesForName('P2', { display: 'table' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\editor-slice.test.ts:203: a.updateModelVariablesForName('G', { display: 'table', selectedRow: 1 }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\editor-slice.test.ts:209: store.getState().editorActions.updateModelVariablesForName('X', { display: 'table' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\editor-slice.test.ts:218: a.updateModelVariablesForName('DT', { display: 'table', selectedRow: 1 }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\editor-slice.test.ts:579: // editors) and ``. Three branches: matches +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\history-slice.test.ts:12: variables: overrides?.variables ?? [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\history-slice.test.ts:25: globalVariables: overrides?.globalVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\history-slice.test.ts:73: expect(bucket.past[0].variables).toEqual(snapshot.variables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\history-slice.test.ts:226: popped!.variables.push({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\history-slice.test.ts:238: expect(remaining.variables).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\history-slice.test.ts:291: popped!.variables = [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\history-slice.test.ts:296: expect(remaining.variables).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\history-slice.test.ts:423: globalVariables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\history-slice.test.ts:444: expect(popped!.globalVariables).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\history-slice.test.ts:467: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\ladder-slice.test.ts:19: variant: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\ladder-slice.test.ts:20: connectedVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\ladder-slice.test.ts:142: // Modern data (no legacy connectedVariables) results in updated: false. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\ladder-slice.test.ts:977: // Legacy connectedVariables migration +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\ladder-slice.test.ts:979: it('addLadderFlow migrates legacy object connectedVariables to array', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\ladder-slice.test.ts:980: // Legacy format: connectedVariables is an object keyed by handle ID +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\ladder-slice.test.ts:986: connectedVariables: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\ladder-slice.test.ts:998: // A block node that already has array connectedVariables — should pass through unchanged +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\ladder-slice.test.ts:1004: connectedVariables: [{ handleId: 'h1', variable: undefined, type: 'input' }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\ladder-slice.test.ts:1027: const cv = (blockNode.data as { connectedVariables: unknown[] }).connectedVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\ladder-slice.test.ts:1035: it('addLadderFlow migrates block with already-array connectedVariables (no migration)', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\ladder-slice.test.ts:1036: // Modern format: connectedVariables is already an array +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\ladder-slice.test.ts:1042: connectedVariables: [{ handleId: 'h1', variable: undefined, type: 'input' }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\ladder-slice.test.ts:1057: it('addLadderFlow handles block with object connectedVariables missing type (defaults to input)', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\ladder-slice.test.ts:1063: connectedVariables: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\ladder-slice.test.ts:1078: const cv = (blockNode.data as { connectedVariables: Array<{ type: string }> }).connectedVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\modal-slice.test.ts:27: 'debugger-message', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\modal-slice.test.ts:28: 'debugger-ip-input', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\modal-slice.test.ts:69: store.getState().modalActions.openModal('debugger-message', { msg: 'hello' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\modal-slice.test.ts:70: store.getState().modalActions.onOpenChange('debugger-message', true) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\modal-slice.test.ts:72: const modal = store.getState().modals['debugger-message'] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\modal-slice.test.ts:78: store.getState().modalActions.openModal('debugger-message', { msg: 'hello' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\modal-slice.test.ts:79: store.getState().modalActions.onOpenChange('debugger-message', false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\modal-slice.test.ts:81: const modal = store.getState().modals['debugger-message'] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\modal-slice.test.ts:99: store.getState().modalActions.openModal('debugger-ip-input') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:20: import { generateIecVariablesToString } from '../../utils/generate-iec-variables-to-string' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:30: // editor + library (variables-text reconcile in createVariable / +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:65: interface: { variables: vars }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:274: debuggerTransports: ['websocket'], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:309: expect(project.data.configurations.resource.globalVariables).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:324: configurations: { resource: { tasks: [], instances: [], globalVariables: [] } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:379: data: { language: 'st', name: 'Main', variables: [], body: makeBody(), documentation: '' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:394: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:407: data: { language: 'st', name: 'MyFB', variables: [], body: makeBody(), documentation: '' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:416: data: { language: 'st', name: 'Main', variables: [], body: makeBody(), documentation: '' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:420: data: { language: 'st', name: 'Main', variables: [], body: makeBody(), documentation: '' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:427: it('creates POU with provided variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:431: data: { language: 'st', name: 'Main', variables: vars, body: makeBody(), documentation: '' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:433: expect(store.getState().project.data.pous[0].interface?.variables).toHaveLength(2) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:436: it('creates POU with no variables when undefined', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:441: expect(store.getState().project.data.pous[0].interface?.variables).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:511: describe('clearPouVariablesText', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:512: it('deletes variablesText from POU', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:513: const pou = makePou('Main') as PLCPou & { variablesText?: string } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:514: pou.variablesText = 'VAR x: INT; END_VAR' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:516: store.getState().projectActions.clearPouVariablesText('Main') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:517: const storedPou = store.getState().project.data.pous[0] as PLCPou & { variablesText?: string } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:518: expect(storedPou.variablesText).toBeUndefined() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:523: store.getState().projectActions.clearPouVariablesText('NonExistent') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:566: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:591: it('replaces variables and body', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:598: expect(pou.interface?.variables).toHaveLength(2) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:610: // Variables (local & global) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:621: expect(store.getState().project.data.pous[0].interface?.variables).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:632: const vars = store.getState().project.data.pous[0].interface?.variables ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:664: expect(store.getState().project.data.configurations.resource.globalVariables).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:675: const gv = store.getState().project.data.configurations.resource.globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:703: describe('setPouVariables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:704: it('replaces all variables on a POU', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:706: const result = store.getState().projectActions.setPouVariables({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:708: variables: [makeVariable('a'), makeVariable('b')], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:711: expect(store.getState().project.data.pous[0].interface?.variables).toHaveLength(2) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:715: const result = store.getState().projectActions.setPouVariables({ pouName: 'Missing', variables: [] }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:720: describe('setGlobalVariables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:721: it('replaces global variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:723: const result = store.getState().projectActions.setGlobalVariables({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:724: variables: [makeVariable('new1', 'global'), makeVariable('new2', 'global')], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:727: expect(store.getState().project.data.configurations.resource.globalVariables).toHaveLength(2) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:741: expect(store.getState().project.data.pous[0].interface?.variables[0].documentation).toBe('updated') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:752: expect(store.getState().project.data.pous[0].interface?.variables[1].name).toBe('b_renamed') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:762: expect(store.getState().project.data.configurations.resource.globalVariables[0].location).toBe('%QW0') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:797: let v = store.getState().project.data.configurations.resource.globalVariables[0] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:807: v = store.getState().project.data.configurations.resource.globalVariables[0] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:869: expect(store.getState().project.data.pous[0].interface?.variables).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:870: expect(store.getState().project.data.pous[0].interface?.variables[0].name).toBe('b') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:880: expect(store.getState().project.data.pous[0].interface?.variables).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:881: expect(store.getState().project.data.pous[0].interface?.variables[0].name).toBe('b') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:891: expect(store.getState().project.data.pous[0].interface?.variables).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:898: expect(store.getState().project.data.configurations.resource.globalVariables).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:908: expect(store.getState().project.data.pous[0].interface?.variables).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:911: it('returns fail when variables array not available', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:921: describe('rearrangeVariables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:924: store.getState().projectActions.rearrangeVariables({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:930: const vars = store.getState().project.data.pous[0].interface?.variables ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:938: store.getState().projectActions.rearrangeVariables({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:944: const vars = store.getState().project.data.pous[0].interface?.variables ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:952: store.getState().projectActions.rearrangeVariables({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:957: const gv = store.getState().project.data.configurations.resource.globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:963: store.getState().projectActions.rearrangeVariables({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:969: expect(store.getState().project.data.pous[0].interface?.variables[0].name).toBe('a') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:972: it('does nothing when variables array is not available', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:973: store.getState().projectActions.rearrangeVariables({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1091: describe('rearrangeStructureVariables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1103: store.getState().projectActions.rearrangeStructureVariables({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1116: store.getState().projectActions.rearrangeStructureVariables({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1132: store.getState().projectActions.rearrangeStructureVariables({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1243: describe('rearrangeTasks', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1248: store.getState().projectActions.rearrangeTasks({ rowId: 0, newIndex: 2 }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1256: store.getState().projectActions.rearrangeTasks({ rowId: 5, newIndex: 0 }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1262: store.getState().projectActions.rearrangeTasks({ rowId: -1, newIndex: 0 }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1347: describe('rearrangeInstances', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1352: store.getState().projectActions.rearrangeInstances({ rowId: 0, newIndex: 2 }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1360: store.getState().projectActions.rearrangeInstances({ rowId: 5, newIndex: 0 }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:1366: store.getState().projectActions.rearrangeInstances({ rowId: -1, newIndex: 0 }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2465: it('rearrangeStructureVariables when item at rowId does not exist', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2469: store.getState().projectActions.rearrangeStructureVariables({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2737: data: { name: 'TmpPou', language: 'st', body: makeBody(), variables: [], documentation: '' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2781: expect(store.getState().project.data.configurations.resource.globalVariables).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2782: expect(store.getState().project.data.configurations.resource.globalVariables[0].name).toBe('gVar2') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2792: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2902: const finalVars = store.getState().project.data.pous[0].interface!.variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2904: // The buffer is rewritten from the new variables array. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2917: // silently clobbered. The variables array stays untouched. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2941: expect(result.title).toBe('Variables table is invalid') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2942: expect(store.getState().project.data.pous[0].interface!.variables.map((v) => v.name)).toEqual(['Original']) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2945: it('reconcile is a no-op when buffer matches serialized variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2947: // serialization of the current variables — the user hasn't +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2955: const existing = store.getState().project.data.pous[0].interface!.variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:2956: const cleanText = generateIecVariablesToString(existing) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:3017: expect(store.getState().project.data.pous[0].interface!.variables.map((v) => v.name)).toEqual(['X']) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:3054: expect(pouA.interface!.variables.map((v) => v.name).sort()).toEqual(['FromBlock', 'FromText']) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:3066: expect(store.getState().project.data.pous[0].interface?.variables[0].class).toBe('input') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-slice.test.ts:3077: expect(store.getState().project.data.configurations.resource.globalVariables).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-utils.test.ts:15: const variables = [makeVariable('alpha'), makeVariable('beta'), makeVariable('gamma')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-utils.test.ts:21: const result = getVariableBasedOnRowIdOrVariableId(variables, undefined, 'beta') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-utils.test.ts:22: expect(result).toEqual({ variable: variables[1], index: 1 }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-utils.test.ts:26: const result = getVariableBasedOnRowIdOrVariableId(variables, undefined, 'nonexistent') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-utils.test.ts:31: const result = getVariableBasedOnRowIdOrVariableId(variables, 0, 'gamma') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-utils.test.ts:32: expect(result).toEqual({ variable: variables[2], index: 2 }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-utils.test.ts:39: const result = getVariableBasedOnRowIdOrVariableId(variables, 0) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-utils.test.ts:40: expect(result).toEqual({ variable: variables[0], index: 0 }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-utils.test.ts:44: const result = getVariableBasedOnRowIdOrVariableId(variables, 2) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-utils.test.ts:45: expect(result).toEqual({ variable: variables[2], index: 2 }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-utils.test.ts:49: const result = getVariableBasedOnRowIdOrVariableId(variables, -1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-utils.test.ts:54: const result = getVariableBasedOnRowIdOrVariableId(variables, 5) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-utils.test.ts:59: const result = getVariableBasedOnRowIdOrVariableId(variables, 3) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-utils.test.ts:67: const result = getVariableBasedOnRowIdOrVariableId(variables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-utils.test.ts:71: it('returns undefined when variables array is empty and rowId is 0', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-utils.test.ts:76: it('returns undefined when variables array is empty and variableId is given', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-validation-variables.test.ts:10: } from '../slices/project/validation/variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-validation-variables.test.ts:87: it('returns ok: true for valid array range "0..10"', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-validation-variables.test.ts:130: it('returns ok: false and number 0 when no variables match', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-validation-variables.test.ts:135: it('finds existing variables and returns the next number', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-validation-variables.test.ts:136: const variables = [makeVariable('Var0'), makeVariable('Var1'), makeVariable('Var2')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-validation-variables.test.ts:137: const result = checkVariableName(variables, 'Var0') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-validation-variables.test.ts:143: it('handles variables without trailing numbers', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-validation-variables.test.ts:144: const variables = [makeVariable('Var')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-validation-variables.test.ts:145: const result = checkVariableName(variables, 'Var') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-validation-variables.test.ts:150: it('sorts variables by trailing number', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-validation-variables.test.ts:151: const variables = [makeVariable('Var5'), makeVariable('Var1'), makeVariable('Var3')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-validation-variables.test.ts:152: const result = checkVariableName(variables, 'Var1') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-validation-variables.test.ts:158: it('sorts variables with mixed numbered and unnumbered names', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-validation-variables.test.ts:159: const variables = [makeVariable('Test'), makeVariable('Test2'), makeVariable('Test10')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-validation-variables.test.ts:160: const result = checkVariableName(variables, 'Test2') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-validation-variables.test.ts:168: const variables = [makeVariable('Item3'), makeVariable('Item')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-validation-variables.test.ts:169: const result = checkVariableName(variables, 'Item') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\project-validation-variables.test.ts:391: // -- Edge case: location exists but not found in variables (defensive) -- +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:320: it('duplicates a POU that has no interface variables (null branch)', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:321: // Create a POU and then manually strip its interface.variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:323: // Manually set the POU interface to have no variables (undefined) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:337: // With no source variables, the copy should have empty variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:338: expect(copyPou!.interface?.variables).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:362: return { ...p, interface: { variables: p.interface?.variables ?? [], returnType: undefined } } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:386: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:942: const snapshot1 = { variables: [], body: 'body-v1', globalVariables: [] } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:943: const snapshot2 = { variables: [], body: 'body-v2', globalVariables: [] } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:944: const snapshot3 = { variables: [], body: 'body-v3', globalVariables: [] } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:985: store.getState().snapshotActions.pushToHistory('Main', { variables: [], body: `v${i}` }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1042: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1050: // The current snapshot saved to future should have empty variables (fallback) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1053: expect(history.future[0].variables).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1058: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1062: globalVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1075: expect(pou!.interface!.variables).toEqual(snapshotWithVars.variables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1078: it('applies global variables from snapshot during undo', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1083: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1085: globalVariables: globalVars, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1090: expect(store.getState().project.data.configurations.resource.globalVariables).toEqual(globalVars) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1093: it('undo does not touch globals when snapshot has no globalVariables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1094: // Set up some global variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1098: store.getState().projectActions.setGlobalVariables({ variables: existingGlobals }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1100: // Push a snapshot without globalVariables field +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1102: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1104: // No globalVariables field +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1110: expect(store.getState().project.data.configurations.resource.globalVariables).toEqual(existingGlobals) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1147: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1166: // The snapshot saved to past should have empty variables (fallback from ?? []) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1168: expect(lastPast.variables).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1171: it('redo does not touch globals when future snapshot has no globalVariables field', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1176: store.getState().projectActions.setGlobalVariables({ variables: existingGlobals }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1178: // Directly inject a future entry without globalVariables into undoRedo +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1183: future: [{ variables: [], body: 'redo-body' }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1191: // Globals should be untouched (snapshot had no globalVariables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1192: expect(store.getState().project.data.configurations.resource.globalVariables).toEqual(existingGlobals) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1199: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1201: globalVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1204: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1206: globalVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1229: it('applies global variables from snapshot during redo', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1234: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1236: globalVariables: globalVars, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1243: store.getState().projectActions.setGlobalVariables({ variables: [] }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1244: expect(store.getState().project.data.configurations.resource.globalVariables).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1261: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1263: globalVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1298: it('redo applies global variables from future snapshot', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1308: store.getState().projectActions.setGlobalVariables({ variables: globalVars }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1312: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1314: globalVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1319: expect(store.getState().project.data.configurations.resource.globalVariables).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1321: // Redo: restores the future snapshot which has globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1323: expect(store.getState().project.data.configurations.resource.globalVariables).toEqual(globalVars) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1333: store.getState().snapshotActions.pushToHistory('Main', { variables: [], body: 'v0' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1339: store.getState().snapshotActions.pushToHistory('Main', { variables: [], body: 'v1' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1585: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1607: globalVariables: [] as ReturnType< +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1609: >['project']['data']['configurations']['resource']['globalVariables'], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1612: debugVariables: undefined as ReturnType['project']['data']['debugVariables'], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1661: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1680: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1699: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1706: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1776: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1788: it('restores debug flags for global variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1790: data.projectData.configurations.resource.globalVariables = [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1799: data.projectData.debugVariables = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1805: const globalVars = store.getState().project.data.configurations.resource.globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1809: it('restores debug flags for POU variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1811: data.projectData.debugVariables = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1820: const xVar = pou?.interface?.variables.find((v) => v.name === 'x') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1824: it('skips debug flags for non-existent global variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1826: data.projectData.debugVariables = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1833: const globalVars = store.getState().project.data.configurations.resource.globalVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1839: data.projectData.debugVariables = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1851: data.projectData.debugVariables = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1861: it('handles project with no debugVariables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1863: // No debugVariables field at all +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1871: it('handles empty debugVariables.global array', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1873: data.projectData.debugVariables = { global: [] } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1879: it('pre-creates editor model for POU with variablesText and no variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1881: // Add a POU with variablesText but empty variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1885: interface: { variables: [] as PLCVariable[] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1888: variablesText: 'VAR\n unparseable_stuff;\nEND_VAR', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1905: it('does not create code-mode model for POU with variables (non-empty)', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1907: // main has variables, so no variablesText processing should occur +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:1923: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:2027: store.getState().snapshotActions.pushToHistory('P1', { variables: [], body: 'v1' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:2028: store.getState().snapshotActions.pushToHistory('P1', { variables: [], body: 'v2' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:2044: store.getState().snapshotActions.pushToHistory('P1', { variables: [], body: 'v1' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:2045: store.getState().snapshotActions.pushToHistory('P2', { variables: [], body: 'v1' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:2046: store.getState().snapshotActions.pushToHistory('P2', { variables: [], body: 'v2' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:2063: store.getState().snapshotActions.pushToHistory('Main', { variables: [], body: 'v1' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:2064: store.getState().snapshotActions.pushToHistory('Main', { variables: [], body: 'v2' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:2065: store.getState().snapshotActions.pushToHistory('Main', { variables: [], body: 'v3' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:2077: store.getState().snapshotActions.pushToHistory('Main', { variables: [], body: 'new' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:2083: store.getState().snapshotActions.pushToHistory('P1', { variables: [], body: 'initial' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:2089: store.getState().snapshotActions.pushToHistory('P1', { variables: [], body: `v${i}` }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:2099: store.getState().snapshotActions.pushToHistory('P1', { variables: [], body: `v${i}` }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:2106: store.getState().snapshotActions.pushToHistory('P1', { variables: [], body: 'a' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:2107: store.getState().snapshotActions.pushToHistory('P1', { variables: [], body: 'b' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:2108: store.getState().snapshotActions.pushToHistory('P1', { variables: [], body: 'c' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:2122: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:2141: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:2161: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:2183: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:2211: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:2246: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:2277: store.getState().snapshotActions.pushToHistory('Main', { variables: [], body: 'v1' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:2282: store.getState().snapshotActions.pushToHistory('Main', { variables: [], body: 'v2' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:2299: store.getState().snapshotActions.pushToHistory('Main', { variables: [], body: 'v1' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-slice.test.ts:2300: store.getState().snapshotActions.pushToHistory('Main', { variables: [], body: 'v2' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\shared-utils.test.ts:22: expect(result.data.variables).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\sync-variable-aliases-action.test.ts:17: * conflicts, and updates POU + global variables atomically. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\sync-variable-aliases-action.test.ts:64: interface: { variables: vars }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\sync-variable-aliases-action.test.ts:99: globalVariables: globals, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\sync-variable-aliases-action.test.ts:143: const vars = store.getState().project.data.pous[0].interface!.variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\sync-variable-aliases-action.test.ts:161: const vars = store.getState().project.data.pous[0].interface!.variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\sync-variable-aliases-action.test.ts:179: const vars = store.getState().project.data.pous[0].interface!.variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\sync-variable-aliases-action.test.ts:207: it('syncs POU-local and global variables in the same call', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\sync-variable-aliases-action.test.ts:222: expect(store.getState().project.data.pous[0].interface!.variables[0].alias).toBe('motor') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\sync-variable-aliases-action.test.ts:223: expect(store.getState().project.data.configurations.resource.globalVariables[0].alias).toBe('valve') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\sync-variable-aliases-action.test.ts:274: expect(store.getState().project.data.pous[0].interface!.variables[0].alias).toBeUndefined() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\sync-variable-aliases-action.test.ts:282: expect(store.getState().project.data.pous[0].interface!.variables[0].alias).toBe('motor') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\sync-variable-aliases-action.test.ts:298: expect(store.getState().project.data.pous[0].interface!.variables[0].alias).toBeUndefined() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\type-change.test.ts:244: it('checks only POUs that have external variables matching the name', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\type-change.test.ts:246: { name: 'P1', interface: { variables: [makeVariable('g', { class: 'external' })] } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\type-change.test.ts:247: { name: 'P2', interface: { variables: [makeVariable('other', { class: 'local' })] } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\type-change.test.ts:269: const pous = [{ name: 'P1', interface: { variables: [makeVariable('x', { class: 'local' })] } }] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\type-change.test.ts:309: const pous = [{ name: 'P1', interface: { variables: [makeVariable('g', { class: 'external' })] } }] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:46: timestampFormat: 'full', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:48: expect(workspace.isDebuggerVisible).toBe(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:49: expect(workspace.debuggerTargetIp).toBeNull() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:54: expect(workspace.debugForcedVariables).toEqual(new Map()) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:180: const entries: RuntimeLogEntry[] = [{ id: 1, timestamp: '2024-01-01', level: 'INFO', message: 'test' }] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:195: const initial: RuntimeLogEntry[] = [{ id: 1, timestamp: 't1', level: 'INFO', message: 'a' }] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:196: const appended: RuntimeLogEntry[] = [{ id: 2, timestamp: 't2', level: 'DEBUG', message: 'b' }] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:205: timestamp: `t${i}`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:210: const extra: RuntimeLogEntry[] = [{ id: LOG_BUFFER_CAP, timestamp: 'tx', level: 'ERROR', message: 'extra' }] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:218: const initial: RuntimeLogEntry[] = [{ id: 1, timestamp: 't1', level: 'INFO', message: 'a' }] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:219: const appended: RuntimeLogEntry[] = [{ id: 2, timestamp: 't2', level: 'INFO', message: 'b' }] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:233: const v4Logs: RuntimeLogEntry[] = [{ id: 1, timestamp: 't1', level: 'INFO', message: 'a' }] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:239: const v4Logs: RuntimeLogEntry[] = [{ id: 1, timestamp: 't1', level: 'INFO', message: 'a' }] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:273: it('setPlcTimestampFormat', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:274: store.getState().workspaceActions.setPlcTimestampFormat('time') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:275: expect(store.getState().workspace.plcFilters.timestampFormat).toBe('time') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:277: store.getState().workspaceActions.setPlcTimestampFormat('none') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:278: expect(store.getState().workspace.plcFilters.timestampFormat).toBe('none') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:284: it('setDebuggerVisible', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:285: store.getState().workspaceActions.setDebuggerVisible(true) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:286: expect(store.getState().workspace.isDebuggerVisible).toBe(true) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:289: it('setDebuggerTargetIp', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:290: store.getState().workspaceActions.setDebuggerTargetIp('192.168.0.1') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:291: expect(store.getState().workspace.debuggerTargetIp).toBe('192.168.0.1') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:293: store.getState().workspaceActions.setDebuggerTargetIp(null) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:294: expect(store.getState().workspace.debuggerTargetIp).toBeNull() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:336: it('setDebugForcedVariables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:338: store.getState().workspaceActions.setDebugForcedVariables(forced) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:339: expect(store.getState().workspace.debugForcedVariables).toEqual(forced) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:443: store.getState().workspaceActions.setDebuggerVisible(true) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:444: store.getState().workspaceActions.setDebuggerTargetIp('192.168.0.1') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:448: store.getState().workspaceActions.setDebugForcedVariables(new Map([['x', true]])) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:482: expect(workspace.isDebuggerVisible).toBe(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:483: expect(workspace.debuggerTargetIp).toBeNull() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:488: expect(workspace.debugForcedVariables.size).toBe(0) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:535: store.getState().workspaceActions.setDebugForcedVariables(new Map([[key, true]])) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:549: expect(workspace.debugForcedVariables.has(key)).toBe(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:560: store.getState().workspaceActions.setDebuggerVisible(true) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:561: store.getState().workspaceActions.setDebuggerTargetIp('10.0.0.1') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:595: expect(workspace.isDebuggerVisible).toBe(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:596: expect(workspace.debuggerTargetIp).toBeNull() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:601: expect(workspace.debugForcedVariables.size).toBe(0) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-slice.test.ts:618: timestampFormat: 'full', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:8: } from '../slices/workspace/utils/variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:39: it('returns ok: true for valid range "0..10"', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:76: it('accepts single-digit range "0..1"', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:92: const variables = [makeVariable('Var')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:93: const result = createVariableValidation(variables, 'Var') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:98: const variables = [makeVariable('Var'), makeVariable('Var_1')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:99: const result = createVariableValidation(variables, 'Var') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:104: const variables = [makeVariable('Var'), makeVariable('Var_1'), makeVariable('Var_5')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:105: const result = createVariableValidation(variables, 'Var') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:111: const variables = [makeVariable('Var_1'), makeVariable('Var_2')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:112: const result = createVariableValidation(variables, 'Var_1') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:117: // Variables: Var_1, Var_3 (gap at 2) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:119: const variables = [makeVariable('Var_1'), makeVariable('Var_3')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:120: const result = createVariableValidation(variables, 'Var_1') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:125: const variables = [makeVariable('Var_3')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:126: const result = createVariableValidation(variables, 'Var_3') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:131: // Two variables that match but have no _\d+ suffix, so sort returns 0 +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:132: const variables = [makeVariable('VarA'), makeVariable('VarAB')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:133: const result = createVariableValidation(variables, 'VarA') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:150: const variables = [makeGlobalVariable('GVar')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:151: const result = createGlobalVariableValidation(variables, 'GVar') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:156: const variables = [makeGlobalVariable('GVar'), makeGlobalVariable('GVar_1')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:157: const result = createGlobalVariableValidation(variables, 'GVar') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:162: const variables = [makeGlobalVariable('GVar'), makeGlobalVariable('GVar_1'), makeGlobalVariable('GVar_5')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:163: const result = createGlobalVariableValidation(variables, 'GVar') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:169: const variables = [makeGlobalVariable('GVar_1'), makeGlobalVariable('GVar_2')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:170: const result = createGlobalVariableValidation(variables, 'GVar_1') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:175: const variables = [makeGlobalVariable('GVar_1'), makeGlobalVariable('GVar_3')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:176: const result = createGlobalVariableValidation(variables, 'GVar_1') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:181: const variables = [makeGlobalVariable('GVar_3')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:182: const result = createGlobalVariableValidation(variables, 'GVar_3') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:186: it('handles variables where sort comparisons have no _num matches', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:187: const variables = [makeGlobalVariable('GVarA'), makeGlobalVariable('GVarAB')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\store\__tests__\workspace-variables.test.ts:188: const result = createGlobalVariableValidation(variables, 'GVarA') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\ai-code-parser.ts:4: import { parseIecStringToVariables } from './generate-iec-string-to-variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\ai-code-parser.ts:9: | { kind: 'full-pou'; variables: PLCVariable[]; body: string } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\ai-code-parser.ts:47: * or a plain snippet, then extracts variables and body accordingly. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\ai-code-parser.ts:68: * Extracts variables and body, discarding the wrapper keywords. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\ai-code-parser.ts:86: let variables: PLCVariable[] = [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\ai-code-parser.ts:96: variables = parseIecStringToVariables(varSection) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\ai-code-parser.ts:109: return { kind: 'full-pou', variables, body } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\ai-code-parser.ts:114: * Extracts variables and treats the remaining text as body. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\ai-code-parser.ts:124: let variables: PLCVariable[] = [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\ai-code-parser.ts:126: variables = parseIecStringToVariables(varSection) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\ai-code-parser.ts:136: if (variables.length === 0) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\ai-code-parser.ts:140: return { kind: 'full-pou', variables, body } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\ai-code-parser.ts:146: * Merge incoming AI-generated variables with existing POU variables. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\ai-code-parser.ts:148: * - Existing variables keep their IDs, locations, debug flags. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\ai-code-parser.ts:149: * - New variables get fresh UUIDs. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\ai-code-parser.ts:150: * - Variables with the same name but different type/initial value are flagged as modified. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\ai-code-parser.ts:152: export function mergeVariables(existing: PLCVariable[], incoming: PLCVariable[]): VariableMergeResult { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\ai-code-parser.ts:173: } else if (!variablesEqual(ex, inc)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\ai-code-parser.ts:192: function variablesEqual(a: PLCVariable, b: PLCVariable): boolean { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-parser.ts:84: * across the editor — both the debugger watch panel and the OPC-UA +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-polling-filter.ts:5: * filtering to only variables that are actively needed: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-polling-filter.ts:7: * 1. Watched variables (debug === true in POU declaration) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-polling-filter.ts:8: * 2. Forced variables (currently forced, must stay polled) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-polling-filter.ts:9: * 3. Graph-listed variables (being plotted in real-time charts) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-polling-filter.ts:10: * 4. Diagram-visible variables (LD/FBD contacts, coils, variable nodes, block outputs) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-polling-filter.ts:11: * 5. Source-visible variables (ST/IL — regex-matched against source text) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-polling-filter.ts:29: debugForcedVariables: Map +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-polling-filter.ts:79: debugForcedVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-polling-filter.ts:88: // 1. Watched variables (debug === true) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-polling-filter.ts:91: const variables = pou.interface?.variables ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-polling-filter.ts:92: const watched = variables.filter((v) => v.debug === true) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-polling-filter.ts:109: // 2. Forced variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-polling-filter.ts:111: for (const compositeKey of debugForcedVariables.keys()) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-polling-filter.ts:116: // 3. Graph-listed variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-polling-filter.ts:145: // 5 & 6. Diagram-visible / Source-visible variables (cached) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-polling-filter.ts:218: * ancestor to this variable are expanded in the debugger panel +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-polling-filter.ts:326: * Collect composite keys for variables visible on a Ladder Diagram. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-polling-filter.ts:362: * Collect composite keys for variables visible on a Function Block Diagram. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-polling-filter.ts:389: * Collect composite keys for block output variables (shared by LD and FBD). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-polling-filter.ts:391: * For function-block instances: polls all sub-variables (e.g., TON0.ET, TON0.Q) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-polling-filter.ts:392: * For function calls: polls compiler-generated _TMP_ output variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-polling-filter.ts:400: variant?: { name: string; type: string; variables?: { name: string; class: string }[] } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-polling-filter.ts:411: // Poll all sub-variables of this FB instance (e.g., TON0.ET, TON0.Q) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-polling-filter.ts:415: // Poll compiler-generated _TMP_ variables for function outputs +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-polling-filter.ts:424: * Collect composite keys for variables referenced in ST/IL source text. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-polling-filter.ts:427: * Also includes FB instance sub-variables when the instance name appears +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-polling-filter.ts:439: const variables = currentPou.interface?.variables ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-polling-filter.ts:441: for (const v of variables) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-polling-filter.ts:451: // For derived-type variables (FB instances), also poll sub-variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-builder.ts:2: * Debug tree builder for the debugger UI. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-builder.ts:5: * to build DebugTreeNode structures for displaying variables in the debugger. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-builder.ts:126: * @param debugVariables - Parsed variables from debug.c +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-builder.ts:134: debugVariables: DebugVariableEntry[], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-builder.ts:138: // Handle external variables specially - they use global path +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-builder.ts:139: // For external variables, we need to adjust the traversal +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-builder.ts:141: // External variables use CONFIG0__ prefix instead of RES0__INSTANCE +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-builder.ts:142: // Create a modified variable traversal for external variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-builder.ts:147: const debugVar = debugVariables.find((dv) => dv.name === fullPath) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-builder.ts:167: // For complex external variables, use the standard traversal +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-builder.ts:174: debugVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-builder.ts:198: * External variables use CONFIG0__ prefix, local variables use RES0__INSTANCE. prefix. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-traversal.ts:5: * (function blocks, structures, arrays). Both the debugger and OPC-UA systems +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-traversal.ts:18: import { findFunctionBlockVariables, findStructureVariables, normalizeTypeString } from './pou-helpers' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-traversal.ts:57: /** Parsed debug variables from debug.c */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-traversal.ts:58: debugVariables: DebugVariableEntry[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-traversal.ts:169: const { debugVariables, projectPous, dataTypes, systemLibraries } = context +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-traversal.ts:173: const fbVariables = findFunctionBlockVariables(typeName, projectPous, systemLibraries) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-traversal.ts:175: if (!fbVariables) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-traversal.ts:177: const debugVar = findDebugVariable(debugVariables, fullPath) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-traversal.ts:190: for (const fbVar of fbVariables) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-traversal.ts:196: const result = findDebugVariableForField(debugVariables, fullPath, fbVar.name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-traversal.ts:259: const structVariables = findStructureVariables(typeName, dataTypes) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-traversal.ts:261: if (!structVariables) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-traversal.ts:262: const debugVar = findDebugVariable(debugVariables, fullPath) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-traversal.ts:275: for (const field of structVariables) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-traversal.ts:280: const debugVar = findDebugVariable(debugVariables, fieldFullPath) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-traversal.ts:324: // IEC-based indexing (the start of the declared range, not 0). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-traversal.ts:348: const debugVar = findDebugVariable(debugVariables, elementFullPath) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-traversal.ts:385: const debugVar = findDebugVariable(debugVariables, fullPath) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-traversal.ts:405: const { debugVariables, projectPous, pouName, instanceName, systemLibraries } = context +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-tree-traversal.ts:414: const debugVar = findDebugVariable(debugVariables, fullPath) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-variable-finder.ts:2: * Shared utilities for finding variables in a DebugVariableEntry[] list +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-variable-finder.ts:100: * @param debugVariables - Parsed debug variables from debug.c +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-variable-finder.ts:105: debugVariables: DebugVariableEntry[], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-variable-finder.ts:109: return debugVariables.find((dv) => dv.name.toUpperCase() === upperPath) || null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-variable-finder.ts:129: debugVariables: DebugVariableEntry[], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-variable-finder.ts:134: const match = findDebugVariable(debugVariables, path) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-variable-finder.ts:142: debugVariables: DebugVariableEntry[], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-variable-finder.ts:144: const result = findDebugVariableWithFallback(debugVariables, instanceName, fieldPath) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-variable-finder.ts:150: debugVariables: DebugVariableEntry[], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-variable-finder.ts:155: const match = findDebugVariable(debugVariables, path) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-variable-finder.ts:182: * @param debugVariables - Parsed debug variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-variable-finder.ts:189: debugVariables: DebugVariableEntry[], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-variable-finder.ts:197: const match = findDebugVariable(debugVariables, debugPath) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-variable-finder.ts:205: * @param debugVariables - Parsed debug variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-variable-finder.ts:208: export function findGlobalVariableIndex(variablePath: string, debugVariables: DebugVariableEntry[]): number | null { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debug-variable-finder.ts:210: const match = findDebugVariable(debugVariables, debugPath) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debugger-session.ts:2: * Shared debugger session helpers. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debugger-session.ts:6: * are stored in the workspace Zustand store for the debugger UI. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debugger-session.ts:93: * The map addresses variables as (arrayIdx, elemIdx) pairs; we pack those +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debugger-session.ts:125: const variables = pou.interface?.variables ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debugger-session.ts:127: variables.forEach((v: PLCVariable) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debugger-session.ts:190: * POU variables. Pure function — swallows per-variable errors to match +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debugger-session.ts:196: debugVariables: DebugVariableEntry[], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debugger-session.ts:224: const variables = pou.interface?.variables ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debugger-session.ts:225: variables.forEach((v: PLCVariable) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debugger-session.ts:227: const node = buildDebugTree(v, pou.name, instanceName, debugVariables, projectData, systemLibraries) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debugger-session.ts:238: // Add compiler-generated _TMP_ variables for painting block output edges +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debugger-session.ts:240: for (const dv of debugVariables) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debugger-session.ts:274: * derived-type variables that are function blocks. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debugger-session.ts:290: const variables = pou.interface?.variables ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\debugger-session.ts:291: variables.forEach((v: PLCVariable) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\device.ts:39: * The `debuggerTransports.length > 0` guard treats EMPTY_CAPABILITIES +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\device.ts:47: if (caps.debuggerTransports.length === 0) return false +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\device.ts:70: * Driven by the websocket debugger transport, which is v4-specific +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\device.ts:79: if (caps.debuggerTransports.includes('websocket')) return true +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\endian.ts:2: * Endianness handling for the debugger wire format. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\format-date.ts:7: padTo2Digits(date.getSeconds()), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\format-timestamp.ts:1: type TimestampFormat = 'full' | 'time' | 'none' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\format-timestamp.ts:5: const formatTimestamp = (timestamp: Date | string, format: TimestampFormat = 'full'): string => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\format-timestamp.ts:10: const date = typeof timestamp === 'string' ? new Date(timestamp) : timestamp +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\format-timestamp.ts:19: padTo2Digits(date.getSeconds()), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\format-timestamp.ts:35: export default formatTimestamp +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\format-timestamp.ts:36: export type { TimestampFormat } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\generate-iec-string-to-variables.ts:55: const dimensions = dimensionParts.map((dimensionRange) => ({ dimension: dimensionRange })) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\generate-iec-string-to-variables.ts:84: export const parseIecStringToVariables = ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\generate-iec-string-to-variables.ts:90: const variables: PLCVariable[] = [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\generate-iec-string-to-variables.ts:127: `Syntax error on line ${lineNumber}: Location ("AT") is not allowed for variables of class "${currentClass.toUpperCase()}".`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\generate-iec-string-to-variables.ts:133: `Syntax error on line ${lineNumber}: Initial Value (":=") is not allowed for variables of class "EXTERNAL".`, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\generate-iec-string-to-variables.ts:142: variables.push({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\generate-iec-string-to-variables.ts:179: variables.push({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\generate-iec-string-to-variables.ts:190: return variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\generate-iec-variables-to-string.ts:17: // variables-text view byte-identical to the per-POU `.st` file the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\generate-iec-variables-to-string.ts:26: export const generateIecVariablesToString = (variables: PLCVariable[]): string => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\generate-iec-variables-to-string.ts:27: if (!variables || variables.length === 0) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\generate-iec-variables-to-string.ts:31: const groupedVariables = variables.reduce( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\generate-iec-variables-to-string.ts:48: if (groupedVariables[groupName]) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\generate-iec-variables-to-string.ts:52: groupedVariables[groupName].forEach((v) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\generate-iec-variables-to-string.ts:87: * the IEC VAR-block text `generateIecVariablesToString` would emit +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\generate-iec-variables-to-string.ts:88: * for the same input. Walks the variables in the same grouped + +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\generate-iec-variables-to-string.ts:94: * line N" into "Monaco line M in the IEC variables-code-editor". +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\generate-iec-variables-to-string.ts:99: * Returns an empty map when `variables` is empty. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\generate-iec-variables-to-string.ts:101: export function getIecVariableLineMap(variables: PLCVariable[]): Map { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\generate-iec-variables-to-string.ts:103: if (!variables || variables.length === 0) return map +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\generate-iec-variables-to-string.ts:105: const groupedVariables = variables.reduce( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\generate-iec-variables-to-string.ts:126: const group = groupedVariables[groupName] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\generate-uuid.ts:4: let lastTimestamp = 0 +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\generate-uuid.ts:7: const timestamp = Date.now() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\generate-uuid.ts:9: if (timestamp !== lastTimestamp) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\generate-uuid.ts:11: lastTimestamp = timestamp +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\generate-uuid.ts:16: const shortenedTimestamp = timestamp.toString().slice(7, 13) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\generate-uuid.ts:18: const uniqueId = toNumber(shortenedTimestamp) + randomNumbers + counter +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\iec-types-registry.ts:7: * downstream consumer — variables-table dropdown, debugger watch panel +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\iec-types-registry.ts:22: * keys off this when decoding bytes off the debugger socket and +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\location-dropdown-options.ts:2: * Build the option groups that fill the variables-table "Location" +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\location-dropdown-options.ts:26: * layout, adds modules, etc. Variables that bind to an alias +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\location-dropdown-options.ts:28: * `location` via the registry); variables that bound to a raw +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\pou-helpers.ts:3: * Used by both the debugger and OPC-UA config generator. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\pou-helpers.ts:74: * that stay inside the compiled .stlib archive — the debugger +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\pou-helpers.ts:84: * Used by both the debugger watch panel and the OPC-UA variable +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\pou-helpers.ts:94: * Returns the variables array from the FB definition, filtered to +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\pou-helpers.ts:95: * match the debugger's variable-enumeration contract (see comment on +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\pou-helpers.ts:98: export const findFunctionBlockVariables = ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\pou-helpers.ts:118: return (systemFB.variables as PouVariable[]).filter((v) => +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\pou-helpers.ts:130: return ((customFB.interface?.variables ?? []) as PouVariable[]).filter((v) => +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\pou-helpers.ts:146: return findFunctionBlockVariables(typeName, projectPous, systemLibraries) !== null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\pou-helpers.ts:151: * Returns the variables array from the structure, or null if not found. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\pou-helpers.ts:153: export const findStructureVariables = (typeName: string, dataTypes: PLCDataType[]): PouVariable[] | null => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\pou-helpers.ts:165: return findStructureVariables(typeName, dataTypes) !== null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\pou-helpers.ts:187: * Recursively find all base-type leaf variables within a complex type (FB or structure). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\pou-helpers.ts:188: * This is the core shared logic for both debugger and OPC-UA. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\pou-helpers.ts:195: * @returns Array of leaf variables with their relative paths +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\pou-helpers.ts:197: export const findLeafVariables = ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\pou-helpers.ts:216: const fbVariables = findFunctionBlockVariables(typeName, projectPous, systemLibraries) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\pou-helpers.ts:217: if (fbVariables) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\pou-helpers.ts:218: for (const fbVar of fbVariables) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\pou-helpers.ts:229: const nestedLeaves = findLeafVariables( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\pou-helpers.ts:244: const structVariables = findStructureVariables(typeName, dataTypes) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\pou-helpers.ts:245: if (structVariables) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\pou-helpers.ts:246: for (const field of structVariables) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\pou-helpers.ts:254: const nestedLeaves = findLeafVariables( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\pou-helpers.ts:277: * Get all variables from a POU (program or function block). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\pou-helpers.ts:279: export const getPouVariables = (pou: PLCPou): PouVariable[] => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\pou-helpers.ts:281: return (pou.interface?.variables ?? []) as PouVariable[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\remote-device-options.ts:14: * etc. Variables that bind to an alias survive those shifts +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\remote-device-options.ts:16: * variables that bound to a raw address would silently break. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\sanitize-branch-name.ts:73: // Strip non-ASCII (anything outside printable ASCII range). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\save-project.ts:28: * 1. If the user edited variables in "code" display mode, capture the raw +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\save-project.ts:29: * editor text into `variablesText` so the IPC layer writes that as the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\save-project.ts:30: * authoritative variables block. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\save-project.ts:53: variablesText: editor.variable.code, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\save-project.ts:54: } as PLCPou & { variablesText?: string } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\save-project.ts:122: * Collects debug flags from all variables (global + per-POU). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\save-project.ts:123: * Returns undefined if no variables have debug enabled. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\save-project.ts:125: export function collectDebugVariables( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\save-project.ts:126: globalVariables: { name: string; debug?: boolean }[], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\save-project.ts:131: const globalDebug = globalVariables.filter((v) => v.debug === true).map((v) => v.name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\save-project.ts:138: const vars = (pou.interface?.variables ?? []).filter((v) => v.debug === true).map((v) => v.name) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\stlib-to-system-library.ts:7: * `SystemLibraryPou` entries with input/output/local variables and a +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\stlib-to-system-library.ts:108: const variables: SystemLibraryVariable[] = [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\stlib-to-system-library.ts:122: variables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\stlib-to-system-library.ts:131: const variables: SystemLibraryVariable[] = [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\stlib-to-system-library.ts:152: variables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\stlib-to-system-library.ts:177: variables: CppBlockVar[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\stlib-to-system-library.ts:182: const variables: SystemLibraryVariable[] = [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\stlib-to-system-library.ts:183: for (const v of block.variables) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\stlib-to-system-library.ts:185: variables.push({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\stlib-to-system-library.ts:195: variables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-references.ts:56: const hasExternalVar = (pou.interface?.variables ?? []).some( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-references.ts:111: connectedVariables?: Array<{ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-references.ts:127: data.connectedVariables?.forEach((conn, index) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-references.ts:175: connectedVariables?: Array<{ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-references.ts:190: data.connectedVariables?.forEach((conn, index) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-references.ts:261: ;(pou.interface?.variables ?? []).forEach((variable, varIndex) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-references.ts:300: ;(pou.interface?.variables ?? []).forEach((variable, varIndex) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-references.ts:397: connectedVariables?: Array<{ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-references.ts:403: data.connectedVariables && +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-references.ts:404: data.connectedVariables[ref.connectionIndex] && +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-references.ts:405: data.connectedVariables[ref.connectionIndex].variable +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-references.ts:407: const updatedConnectedVariables = [...data.connectedVariables] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-references.ts:408: const currentVariable = updatedConnectedVariables[ref.connectionIndex].variable as PLCVariable +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-references.ts:409: updatedConnectedVariables[ref.connectionIndex] = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-references.ts:410: ...updatedConnectedVariables[ref.connectionIndex], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-references.ts:424: connectedVariables: updatedConnectedVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-references.ts:469: connectedVariables?: Array<{ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-references.ts:475: data.connectedVariables && +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-references.ts:476: data.connectedVariables[ref.connectionIndex] && +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-references.ts:477: data.connectedVariables[ref.connectionIndex].variable +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-references.ts:479: const updatedConnectedVariables = [...data.connectedVariables] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-references.ts:480: const currentVariable = updatedConnectedVariables[ref.connectionIndex].variable as PLCVariable +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-references.ts:481: updatedConnectedVariables[ref.connectionIndex] = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-references.ts:482: ...updatedConnectedVariables[ref.connectionIndex], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-references.ts:495: connectedVariables: updatedConnectedVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-references.ts:508: variables: PLCVariable[], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-references.ts:511: const variable = variables.find((v) => v.name.toLowerCase() === normalizedName) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-sizes.ts:69: * Format a strucpp DT (int64 nanoseconds since the Unix epoch) as an +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-sizes.ts:88: `-${pad(d.getUTCHours())}:${pad(d.getUTCMinutes())}:${pad(d.getUTCSeconds())}` + +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-sizes.ts:89: `.${pad(d.getUTCMilliseconds(), 3)}${subMsTail}` +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-sizes.ts:94: * Format a strucpp DATE (int64 nanoseconds since the Unix epoch, but +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-sizes.ts:105: * Format a strucpp TOD / TIME_OF_DAY (int64 nanoseconds since +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-sizes.ts:178: export function getVariableSize(variable: PLCVariable): number { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\variable-sizes.ts:330: * parsing (`T#…`, `D#…`) and string framing, which the debugger UI +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\addCppLocalVariables.ts:18: const addCppLocalVariables = (projectData: PLCProjectData): PLCProjectData => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\addCppLocalVariables.ts:24: const variables = pou.interface?.variables ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\addCppLocalVariables.ts:27: variables: [...variables, hasBeenInitializedVar], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\addCppLocalVariables.ts:37: export { addCppLocalVariables } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\generateSTCode.ts:6: allVariables: PLCVariable[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\generateSTCode.ts:22: * works for any IEC index in the declared range. Per-element forcing +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\generateSTCode.ts:35: const { pouName, allVariables } = params +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\generateSTCode.ts:37: const inputVariables = allVariables.filter((v) => v.class === 'input') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\generateSTCode.ts:38: const outputVariables = allVariables.filter((v) => v.class === 'output') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\generateSTCode.ts:45: for (const variable of inputVariables) variableAssignments += generateVariableAssignment(variable) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\generateSTCode.ts:46: for (const variable of outputVariables) variableAssignments += generateVariableAssignment(variable) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\generateSTCode.ts:51: // class members (the program's IEC variables). No boundary copy is +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\addCppLocalVariables.test.ts:2: import { addCppLocalVariables } from '../addCppLocalVariables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\addCppLocalVariables.test.ts:16: globalVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\addCppLocalVariables.test.ts:21: describe('addCppLocalVariables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\addCppLocalVariables.test.ts:27: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\addCppLocalVariables.test.ts:32: const result = addCppLocalVariables(project) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\addCppLocalVariables.test.ts:34: expect(result.pous[0].interface!.variables).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\addCppLocalVariables.test.ts:35: const added = result.pous[0].interface!.variables[0] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\addCppLocalVariables.test.ts:42: it('preserves existing variables when adding to cpp pou', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\addCppLocalVariables.test.ts:55: interface: { variables: [existingVar] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\addCppLocalVariables.test.ts:60: const result = addCppLocalVariables(project) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\addCppLocalVariables.test.ts:62: expect(result.pous[0].interface!.variables).toHaveLength(2) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\addCppLocalVariables.test.ts:63: expect(result.pous[0].interface!.variables[0].name).toBe('myVar') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\addCppLocalVariables.test.ts:64: expect(result.pous[0].interface!.variables[1].name).toBe('hasBeenInitialized') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\addCppLocalVariables.test.ts:72: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\addCppLocalVariables.test.ts:77: const result = addCppLocalVariables(project) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\addCppLocalVariables.test.ts:79: expect(result.pous[0].interface!.variables).toHaveLength(0) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\addCppLocalVariables.test.ts:87: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\addCppLocalVariables.test.ts:92: addCppLocalVariables(project) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\addCppLocalVariables.test.ts:94: expect(project.pous[0].interface!.variables).toHaveLength(0) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\addCppLocalVariables.test.ts:106: const result = addCppLocalVariables(project) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\addCppLocalVariables.test.ts:108: expect(result.pous[0].interface!.variables).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\addCppLocalVariables.test.ts:109: expect(result.pous[0].interface!.variables[0].name).toBe('hasBeenInitialized') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\addCppLocalVariables.test.ts:117: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\addCppLocalVariables.test.ts:123: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\addCppLocalVariables.test.ts:129: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\addCppLocalVariables.test.ts:134: const result = addCppLocalVariables(project) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\addCppLocalVariables.test.ts:136: expect(result.pous[0].interface!.variables).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\addCppLocalVariables.test.ts:137: expect(result.pous[1].interface!.variables).toHaveLength(0) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\addCppLocalVariables.test.ts:138: expect(result.pous[2].interface!.variables).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\generateSTCode.test.ts:33: allVariables: [makeScalarVar('speed', 'input', 'INT'), makeScalarVar('result', 'output', 'REAL')], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\generateSTCode.test.ts:61: allVariables: [makeArrayVar('temps', 'input', 'REAL', '0..4')], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\generateSTCode.test.ts:66: // so vars->TEMPS[iec_idx] indexes correctly for any IEC range. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\generateSTCode.test.ts:78: allVariables: [makeArrayVar('arr', 'input', 'INT', '5..10')], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\generateSTCode.test.ts:86: allVariables: [makeArrayVar('outArr', 'output', 'INT', '1..10')], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\generateSTCode.test.ts:95: it('passes STRING variables by direct IECStringVar pointer — no staging, no boundary copy', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\generateSTCode.test.ts:98: allVariables: [makeScalarVar('inMsg', 'input', 'string'), makeScalarVar('outMsg', 'output', 'string')], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\generateSTCode.test.ts:123: it('handles no variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\generateSTCode.test.ts:126: allVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\generateSTCode.test.ts:134: it('handles mixed scalar, array, and string variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\generateSTCode.test.ts:137: allVariables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\generateSTCode.test.ts:156: it('filters out local variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\cpp\__tests__\generateSTCode.test.ts:168: allVariables: [makeScalarVar('x', 'input', 'INT'), localVar], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\get-function-block-variables-to-cleanup.ts:36: * Gets all function block variables that should be cleaned up after nodes are removed. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\get-function-block-variables-to-cleanup.ts:41: * @param allVariables - All variables in the POU +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\get-function-block-variables-to-cleanup.ts:44: export const getFunctionBlockVariablesToCleanup = ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\get-function-block-variables-to-cleanup.ts:47: allVariables: PLCVariable[], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\get-function-block-variables-to-cleanup.ts:49: const variablesToCheck = new Set() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\get-function-block-variables-to-cleanup.ts:57: variablesToCheck.add(variableName) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\get-function-block-variables-to-cleanup.ts:63: const variablesToDelete: string[] = [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\get-function-block-variables-to-cleanup.ts:65: for (const variableName of variablesToCheck) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\get-function-block-variables-to-cleanup.ts:66: const variable = allVariables.find((v) => v.name.toLowerCase() === variableName.toLowerCase()) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\get-function-block-variables-to-cleanup.ts:70: variablesToDelete.push(variableName) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\get-function-block-variables-to-cleanup.ts:75: return variablesToDelete +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\sync-nodes-with-variables.ts:40: export const syncNodesWithVariables = ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\sync-nodes-with-variables.ts:101: export const syncNodesWithVariablesFBD = ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\get-function-block-variables-to-cleanup.test.ts:5: getFunctionBlockVariablesToCleanup, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\get-function-block-variables-to-cleanup.test.ts:7: } from '../get-function-block-variables-to-cleanup' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\get-function-block-variables-to-cleanup.test.ts:72: describe('getFunctionBlockVariablesToCleanup', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\get-function-block-variables-to-cleanup.test.ts:73: it('returns variable names for unused function-block variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\get-function-block-variables-to-cleanup.test.ts:76: const allVariables = [makeVariable('fbVar', 'derived')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\get-function-block-variables-to-cleanup.test.ts:78: const result = getFunctionBlockVariablesToCleanup(removedNodes, allRungs, allVariables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\get-function-block-variables-to-cleanup.test.ts:82: it('does not return variables still in use in other rungs', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\get-function-block-variables-to-cleanup.test.ts:85: const allVariables = [makeVariable('fbVar', 'derived')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\get-function-block-variables-to-cleanup.test.ts:87: const result = getFunctionBlockVariablesToCleanup(removedNodes, allRungs, allVariables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\get-function-block-variables-to-cleanup.test.ts:91: it('does not return non-derived variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\get-function-block-variables-to-cleanup.test.ts:94: const allVariables = [makeVariable('fbVar', 'base-type')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\get-function-block-variables-to-cleanup.test.ts:96: const result = getFunctionBlockVariablesToCleanup(removedNodes, allRungs, allVariables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\get-function-block-variables-to-cleanup.test.ts:103: const allVariables = [makeVariable('regularFn', 'derived')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\get-function-block-variables-to-cleanup.test.ts:105: const result = getFunctionBlockVariablesToCleanup(removedNodes, allRungs, allVariables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\get-function-block-variables-to-cleanup.test.ts:117: const allVariables: PLCVariable[] = [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\get-function-block-variables-to-cleanup.test.ts:119: const result = getFunctionBlockVariablesToCleanup([node], allRungs, allVariables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\get-function-block-variables-to-cleanup.test.ts:123: it('skips variables not found in allVariables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\get-function-block-variables-to-cleanup.test.ts:126: const allVariables: PLCVariable[] = [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\get-function-block-variables-to-cleanup.test.ts:128: const result = getFunctionBlockVariablesToCleanup(removedNodes, allRungs, allVariables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\get-function-block-variables-to-cleanup.test.ts:132: it('de-duplicates variables from multiple removed nodes', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\get-function-block-variables-to-cleanup.test.ts:138: const allVariables = [makeVariable('fbVar', 'derived')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\get-function-block-variables-to-cleanup.test.ts:140: const result = getFunctionBlockVariablesToCleanup(removedNodes, allRungs, allVariables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\get-function-block-variables-to-cleanup.test.ts:147: const allVariables = [makeVariable('myfb', 'derived')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\get-function-block-variables-to-cleanup.test.ts:149: const result = getFunctionBlockVariablesToCleanup(removedNodes, allRungs, allVariables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:4: import { syncNodesWithVariables, syncNodesWithVariablesFBD } from '../sync-nodes-with-variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:28: describe('syncNodesWithVariables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:43: ] as unknown as Parameters[1] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:45: syncNodesWithVariables([variable], ladderFlows, updateNode) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:77: ] as unknown as Parameters[1] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:79: syncNodesWithVariables([variable], ladderFlows, updateNode) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:100: ] as unknown as Parameters[1] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:102: syncNodesWithVariables([variable], ladderFlows, updateNode) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:115: ] as unknown as Parameters[1] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:117: syncNodesWithVariables([makeVariable('x')], ladderFlows, updateNode) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:129: ] as unknown as Parameters[1] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:131: syncNodesWithVariables([makeVariable('other')], ladderFlows, updateNode) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:147: ] as unknown as Parameters[1] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:149: syncNodesWithVariables([variable], ladderFlows, updateNode, 'editor1') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:164: ] as unknown as Parameters[1] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:166: syncNodesWithVariables([variable], ladderFlows, updateNode) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:195: ] as unknown as Parameters[1] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:197: syncNodesWithVariables([variable], ladderFlows, updateNode) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:215: ] as unknown as Parameters[1] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:217: syncNodesWithVariables([variable], ladderFlows, updateNode) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:246: ] as unknown as Parameters[1] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:248: syncNodesWithVariables([variable], ladderFlows, updateNode) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:277: ] as unknown as Parameters[1] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:279: syncNodesWithVariables([variable], ladderFlows, updateNode) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:317: ] as unknown as Parameters[1] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:319: syncNodesWithVariables([variable], ladderFlows, updateNode) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:330: describe('syncNodesWithVariablesFBD', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:345: ] as unknown as Parameters[1] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:347: syncNodesWithVariablesFBD([variable], fbdFlows, updateNode) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:368: typeof syncNodesWithVariablesFBD +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:371: syncNodesWithVariablesFBD([makeVariable('x')], fbdFlows, updateNode) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:379: typeof syncNodesWithVariablesFBD +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:382: syncNodesWithVariablesFBD([makeVariable('other')], fbdFlows, updateNode) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:401: typeof syncNodesWithVariablesFBD +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:404: syncNodesWithVariablesFBD([variable], fbdFlows, updateNode) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:421: typeof syncNodesWithVariablesFBD +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:424: syncNodesWithVariablesFBD([newVariable], fbdFlows, updateNode) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:441: ] as unknown as Parameters[1] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:443: syncNodesWithVariablesFBD([variable], fbdFlows, updateNode, 'fbd1') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:458: typeof syncNodesWithVariablesFBD +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:461: syncNodesWithVariablesFBD([variable], fbdFlows, updateNode) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:495: typeof syncNodesWithVariablesFBD +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:498: syncNodesWithVariablesFBD([variable], fbdFlows, updateNode) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:530: typeof syncNodesWithVariablesFBD +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\graphical\__tests__\sync-nodes-with-variables.test.ts:533: syncNodesWithVariablesFBD([variable], fbdFlows, updateNode) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\generate-opcua-config.ts:128: variables: RuntimeVariable[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\generate-opcua-config.ts:326: const variables: RuntimeVariable[] = [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\generate-opcua-config.ts:335: // Top-level variables that don't resolve are still hard +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\generate-opcua-config.ts:340: variables.push(resolveVariable(node, pathToAddr, instances)) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\generate-opcua-config.ts:382: variables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\generate-opcua-config.ts:390: * Map the resolver consumes. The same lookup table the debugger's +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\generate-opcua-config.ts:440: // Map the debugger uses. One source of truth for resolution. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\generate-opcua-config.ts:463: `or variables removed from the program. Re-save the OPC-UA config ` + +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\generate-opcua-config.ts:511: // Try to resolve all variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\resolve-indices.ts:2: * OPC-UA address resolver — variables ? (arr, elem) lookups. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\resolve-indices.ts:4: * Thin wrapper over the debugger's shared infrastructure: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\resolve-indices.ts:8: * "variable path ? address" resolution. The debugger's watch +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\resolve-indices.ts:18: * If the debugger can find a variable, OPC-UA can; if it can't, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\types.ts:6: * debugger's shared types (debug-parser.ts + debug-variable-finder.ts). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\types.ts:7: * The debugger maps user variable paths to (arr, elem) addresses on +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\types.ts:14: * Mirrors the debugger's PLCInstanceMapping but adds the `task` field +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\__tests__\generate-opcua-config.test.ts:103: // (parseDebugMap + buildLeafPathMap) — covered by the debugger's own +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\__tests__\generate-opcua-config.test.ts:105: // gracefully degrade to "no variables") is exercised by the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\__tests__\generate-opcua-config.test.ts:169: config: { address_space: { variables: Array<{ datatype: string; size: number; arr: number; elem: number }> } } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\__tests__\generate-opcua-config.test.ts:171: expect(parsed[0].config.address_space.variables[0]).toMatchObject({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\__tests__\generate-opcua-config.test.ts:248: config: { address_space: { variables: Array<{ arr: number; elem: number; datatype: string }> } } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\opcua\__tests__\generate-opcua-config.test.ts:250: expect(parsed[0].config.address_space.variables[0]).toMatchObject({ arr: 0, elem: 7, datatype: 'INT' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\array-codegen-helpers.ts:2: import { parseDimensionRange } from './dimension-range' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\array-codegen-helpers.ts:39: const range = parseDimensionRange(dim.dimension) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\array-codegen-helpers.ts:40: if (!range) return 0 +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\array-codegen-helpers.ts:41: return total * (range.upper - range.lower + 1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\array-codegen-helpers.ts:85: const range = parseDimensionRange(dimensions[0].dimension) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\array-codegen-helpers.ts:86: return range ? range.lower : 0 +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\array-variable-utils.ts:2: import type { DimensionRange } from './dimension-range' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\array-variable-utils.ts:3: import { parseDimensionRange } from './dimension-range' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\array-variable-utils.ts:38: export { parseDimensionRange } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\array-variable-utils.ts:47: const range = parseDimensionRange(dimensions[i].dimension) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\array-variable-utils.ts:48: if (!range) return false +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\array-variable-utils.ts:49: return index >= range.lower && index <= range.upper +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\array-variable-utils.ts:55: * Returns null if the indices are out of range or the variable is not an array. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\array-variable-utils.ts:86: const ranges = data.dimensions.map((d) => parseDimensionRange(d.dimension)).filter((r): r is DimensionRange => !!r) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\array-variable-utils.ts:88: if (ranges.length !== data.dimensions.length) return [variable] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\array-variable-utils.ts:91: const totalElements = ranges.reduce((acc, range) => acc * (range.upper - range.lower + 1), 1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\array-variable-utils.ts:97: if (dimIndex === ranges.length) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\array-variable-utils.ts:101: const range = ranges[dimIndex] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\array-variable-utils.ts:102: for (let i = range.lower; i <= range.upper; i++) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\array-variable-utils.ts:124: * Expand all array variables in a list, replacing each array with its elements. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\array-variable-utils.ts:125: * Non-array variables pass through unchanged. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\array-variable-utils.ts:127: export const expandArrayVariables = (variables: PLCVariable[]): PLCVariable[] => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\array-variable-utils.ts:128: return variables.flatMap(expandArrayVariable) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\array-variable-utils.ts:135: export const resolveArrayVariableByName = (variables: PLCVariable[], name: string): PLCVariable | undefined => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\array-variable-utils.ts:139: const baseVariable = variables.find( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\dimension-range.ts:1: interface DimensionRange { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\dimension-range.ts:7: * Parse a dimension range string like "0..5" into lower and upper bounds. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\dimension-range.ts:9: const parseDimensionRange = (dimension: string): DimensionRange | null => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\dimension-range.ts:21: export { parseDimensionRange } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\dimension-range.ts:22: export type { DimensionRange } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\extensible-block-variables.ts:10: /** Minimal variable interface compatible with both FBD and Ladder BlockVariant variables */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\extensible-block-variables.ts:18: interface ClassifiedVariables { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\extensible-block-variables.ts:35: /** Separate block variables into EN / fixed inputs / extensible inputs / outputs */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\extensible-block-variables.ts:36: function classifyBlockVariables(variables: BlockVariable[]): ClassifiedVariables { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\extensible-block-variables.ts:37: const enVariable = variables.find((v) => v.class === 'input' && v.name === 'EN') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\extensible-block-variables.ts:38: const fixedInputs = variables.filter( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\extensible-block-variables.ts:41: const extensibleInputs = variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\extensible-block-variables.ts:44: const outputs = variables.filter((v) => v.class === 'output') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\extensible-block-variables.ts:49: /** Get the type that new extensible inputs should have (derived from existing IN variables) */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\extensible-block-variables.ts:50: function getExtensibleInputType(variables: BlockVariable[]): BlockVariable['type'] { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\extensible-block-variables.ts:51: const { extensibleInputs } = classifyBlockVariables(variables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\extensible-block-variables.ts:56: const firstInput = variables.find((v) => v.class === 'input' && v.name !== 'EN') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\extensible-block-variables.ts:61: function getExtensibleStartIndex(variables: BlockVariable[]): number { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\extensible-block-variables.ts:62: const { extensibleInputs } = classifyBlockVariables(variables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\extensible-block-variables.ts:70: function buildNextExtensibleInput(variables: BlockVariable[]): BlockVariable { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\extensible-block-variables.ts:71: const { extensibleInputs } = classifyBlockVariables(variables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\extensible-block-variables.ts:72: const type = getExtensibleInputType(variables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\extensible-block-variables.ts:88: function removeLastExtensibleInput(variables: BlockVariable[], minExtensible = 2): BlockVariable[] | null { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\extensible-block-variables.ts:89: const classified = classifyBlockVariables(variables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\extensible-block-variables.ts:93: return assembleVariables({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\extensible-block-variables.ts:103: function rebuildVariablesForInputCount(variables: BlockVariable[], targetTotalNonEN: number): BlockVariable[] { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\extensible-block-variables.ts:104: const classified = classifyBlockVariables(variables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\extensible-block-variables.ts:106: const type = getExtensibleInputType(variables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\extensible-block-variables.ts:107: const startIndex = getExtensibleStartIndex(variables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\extensible-block-variables.ts:114: return assembleVariables({ ...classified, extensibleInputs: newExtensible }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\extensible-block-variables.ts:117: /** Reassemble variables in the correct order: EN? + fixedInputs + extensibleInputs + outputs */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\extensible-block-variables.ts:118: function assembleVariables(classified: ClassifiedVariables): BlockVariable[] { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\extensible-block-variables.ts:128: function getMinInputCount(variables: BlockVariable[], minExtensible = 2): number { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\extensible-block-variables.ts:129: const { fixedInputs } = classifyBlockVariables(variables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\extensible-block-variables.ts:134: assembleVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\extensible-block-variables.ts:136: classifyBlockVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\extensible-block-variables.ts:139: rebuildVariablesForInputCount, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\extensible-block-variables.ts:142: export type { BlockVariable, ClassifiedVariables } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-signature-serializer.ts:12: * the FB's I/O variables, see the return type, etc. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-signature-serializer.ts:18: * `generateIecVariablesToString` + `getEndKeyword`) so there's a +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-signature-serializer.ts:38: import { generateIecVariablesToString } from '../generate-iec-variables-to-string' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-signature-serializer.ts:73: * Why: Monaco's ST editor only displays the body (variables go in a +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-signature-serializer.ts:81: * Computed as the line count of `${declaration}\n${variables}\n` — +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-signature-serializer.ts:89: const variables = generateIecVariablesToString(pou.interface?.variables ?? []) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-signature-serializer.ts:92: const prefix = `${declaration}\n${variables}\n` +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-signature-serializer.ts:142: const variables = generateIecVariablesToString(pou.interface?.variables ?? []) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-signature-serializer.ts:143: const prefix = `${declaration}\n${variables}\n` +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-text-parser.ts:2: import { parseIecStringToVariables } from '../generate-iec-string-to-variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-text-parser.ts:99: let variablesString = '' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-text-parser.ts:107: variablesString = remainingContent.slice(varSectionStart, lastEndVarIndex) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-text-parser.ts:112: const variables = variablesString.trim() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-text-parser.ts:113: ? parseIecStringToVariables(variablesString).map((v) => ({ ...v, debug: false })) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-text-parser.ts:141: variables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-text-parser.ts:198: let variablesString = '' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-text-parser.ts:206: variablesString = remainingContent.slice(varSectionStart, lastEndVarIndex) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-text-parser.ts:211: const variables = variablesString.trim() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-text-parser.ts:212: ? parseIecStringToVariables(variablesString).map((v) => ({ ...v, debug: false })) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-text-parser.ts:238: variables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-text-parser.ts:296: let variablesString = '' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-text-parser.ts:304: variablesString = remainingContent.slice(varSectionStart, lastEndVarIndex) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-text-parser.ts:309: const variables: PLCVariable[] = variablesString.trim() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-text-parser.ts:310: ? parseIecStringToVariables(variablesString).map((v) => ({ ...v, debug: false })) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-text-parser.ts:348: variables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-text-serializer.ts:2: import { generateIecVariablesToString } from '../generate-iec-variables-to-string' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-text-serializer.ts:5: /** PLCPou extended with optional variablesText from code-mode editing */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-text-serializer.ts:6: type SerializablePou = PLCPou & { variablesText?: string } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-text-serializer.ts:23: const buildVariables = (pou: SerializablePou): string => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-text-serializer.ts:24: if (pou.variablesText != null) return pou.variablesText +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-text-serializer.ts:25: const variables = pou.interface?.variables ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-text-serializer.ts:26: return generateIecVariablesToString(variables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-text-serializer.ts:36: result += buildVariables(pou) + '\n\n' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-text-serializer.ts:50: result += buildVariables(pou) + '\n' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\pou-text-serializer.ts:64: result += buildVariables(pou) + '\n\n' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\restamp-library-variants.ts:21: * The refresh is intentionally type-only: it matches variables by name and +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\restamp-library-variants.ts:27: type VariantVariable = BlockVariant['variables'][number] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\restamp-library-variants.ts:29: /** Index every library POU by name ? its variables, for O(1) lookup. */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\restamp-library-variants.ts:51: * @returns the number of variables actually changed (for logging/tests) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\restamp-library-variants.ts:71: // Index the library's variables by name for matching. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\restamp-library-variants.ts:72: const libVarByName = new Map(libPou.variables.map((v) => [v.name, v])) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\restamp-library-variants.ts:74: for (const variable of variant.variables) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\data-type-xml.ts:14: throw new Error(`Invalid dimension range: ${dimension.dimension}`) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\instances-xml.ts:6: const { instances, tasks, globalVariables } = configuration.resource +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\instances-xml.ts:35: globalVariables.forEach((variable) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\pou-xml.ts:16: const variables = pou.data.variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\pou-xml.ts:20: variables.forEach((variable) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\fbd-xml.ts:26: const inputVariables: BlockFbdXML['inputVariables']['variable'] = node.data.inputHandles +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\fbd-xml.ts:61: const outputVariable: BlockFbdXML['outputVariables']['variable'] = node.data.outputHandles +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\fbd-xml.ts:100: inputVariables: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\fbd-xml.ts:101: variable: inputVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\fbd-xml.ts:103: inOutVariables: '', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\fbd-xml.ts:104: outputVariables: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\ladder-xml.ts:458: const inputVariables = block.data.inputHandles.map((handle) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\ladder-xml.ts:459: // Main input connector: connections from other elements on the main rail +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\ladder-xml.ts:512: // Reuse findConnections with a handle filter to trace the branch elements, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\ladder-xml.ts:556: inputVariables: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\ladder-xml.ts:557: variable: inputVariables.filter((variable) => variable !== undefined), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\ladder-xml.ts:559: inOutVariables: '', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\ladder-xml.ts:560: outputVariables: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\fbd-xml.test.ts:286: expect(block.inputVariables.variable).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\fbd-xml.test.ts:287: expect(block.outputVariables.variable).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\fbd-xml.test.ts:288: expect(block.inOutVariables).toBe('') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\fbd-xml.test.ts:371: const conn = b2.inputVariables.variable[0].connectionPointIn.connection[0] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\fbd-xml.test.ts:426: const conn = b2.inputVariables.variable[0].connectionPointIn.connection[0] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\fbd-xml.test.ts:480: const conn = result.body.FBD.block[0].inputVariables.variable[0].connectionPointIn.connection[0] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\fbd-xml.test.ts:511: const iv = result.body.FBD.block[0].inputVariables.variable[0] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\fbd-xml.test.ts:565: const outVar = result.body.FBD.block[0].outputVariables.variable[0] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\fbd-xml.test.ts:619: const outVar = result.body.FBD.block[0].outputVariables.variable[0] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\fbd-xml.test.ts:674: const outVar = result.body.FBD.block[0].outputVariables.variable[1] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\fbd-xml.test.ts:1003: const ov = result.body.FBD.block[0].outputVariables.variable[0] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\fbd-xml.test.ts:1036: expect(result.body.FBD.block[0].inputVariables.variable).toHaveLength(0) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\fbd-xml.test.ts:1068: expect(result.body.FBD.block[0].outputVariables.variable).toHaveLength(0) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\fbd-xml.test.ts:1121: const outVar = result.body.FBD.block[0].outputVariables.variable[1] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\fbd-xml.test.ts:1153: const outVar = result.body.FBD.block[0].outputVariables.variable[1] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\ladder-xml.test.ts:335: connectedVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\ladder-xml.test.ts:393: connectedVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\ladder-xml.test.ts:483: connectedVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\ladder-xml.test.ts:520: connectedVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\ladder-xml.test.ts:550: connectedVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\ladder-xml.test.ts:581: const in1 = blockXml.inputVariables.variable.find((v: Record) => v['@formalParameter'] === 'IN1') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\ladder-xml.test.ts:608: connectedVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\ladder-xml.test.ts:617: expect(blockXml.inputVariables.variable).toHaveLength(1) // only EN +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\ladder-xml.test.ts:642: connectedVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\ladder-xml.test.ts:647: expect(result.body.LD.block[0].outputVariables.variable[0]['@formalParameter']).toBe('ADD') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\ladder-xml.test.ts:672: connectedVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\ladder-xml.test.ts:677: expect(result.body.LD.block[0].outputVariables.variable[0]['@formalParameter']).toBe('') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\ladder-xml.test.ts:702: connectedVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\ladder-xml.test.ts:732: const outVars = result.body.LD.block[0].outputVariables.variable +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\ladder-xml.test.ts:759: connectedVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\ladder-xml.test.ts:766: const outVars = result.body.LD.block[0].outputVariables.variable +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\ladder-xml.test.ts:805: connectedVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\ladder-xml.test.ts:842: connectedVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\ladder-xml.test.ts:1217: connectedVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\ladder-xml.test.ts:1271: connectedVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\ladder-xml.test.ts:1361: connectedVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\ladder-xml.test.ts:1370: expect(b.inputVariables.variable[0].connectionPointIn.connection[0]['@refLocalId']).toBe('100') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\ladder-xml.test.ts:1397: connectedVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\language\__tests__\ladder-xml.test.ts:1411: expect(b.inputVariables.variable[0].connectionPointIn.connection[0]['@refLocalId']).toBe('10') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\data-type-xml.test.ts:108: it('throws on invalid dimension range (no ..)', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\data-type-xml.test.ts:118: expect(() => codeSysParseDataTypesToXML(xml, dataTypes)).toThrow('Invalid dimension range') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\data-type-xml.test.ts:158: it('adds a struct with base-type variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\data-type-xml.test.ts:212: it('handles user-data-type variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\data-type-xml.test.ts:233: it('handles user-data-type variables without initial value', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\data-type-xml.test.ts:252: it('handles array variables inside a struct', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\data-type-xml.test.ts:281: it('handles array variables with user-data-type base inside a struct', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\data-type-xml.test.ts:309: it('handles array variables with string base inside a struct', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\data-type-xml.test.ts:336: it('handles derived variables inside a struct', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\data-type-xml.test.ts:357: it('handles derived variables without initial value', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\data-type-xml.test.ts:376: // Regression: struct creation seeds new variables with an +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\instances-xml.test.ts:12: globalVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\instances-xml.test.ts:78: describe('globalVariables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\instances-xml.test.ts:82: globalVariables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\instances-xml.test.ts:105: globalVariables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\instances-xml.test.ts:125: globalVariables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\instances-xml.test.ts:145: globalVariables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\instances-xml.test.ts:162: globalVariables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\pou-xml.test.ts:17: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\pou-xml.test.ts:25: it('returns empty interface for POU with no variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\pou-xml.test.ts:31: it('categorizes variables by class', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\pou-xml.test.ts:38: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\pou-xml.test.ts:100: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\pou-xml.test.ts:123: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\pou-xml.test.ts:145: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\pou-xml.test.ts:167: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\pou-xml.test.ts:189: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\pou-xml.test.ts:211: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\pou-xml.test.ts:242: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\pou-xml.test.ts:272: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\pou-xml.test.ts:302: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\pou-xml.test.ts:324: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\pou-xml.test.ts:347: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\pou-xml.test.ts:369: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\pou-xml.test.ts:393: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\pou-xml.test.ts:417: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\pou-xml.test.ts:441: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\pou-xml.test.ts:463: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\pou-xml.test.ts:500: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\pou-xml.test.ts:516: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\pou-xml.test.ts:532: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\pou-xml.test.ts:551: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\pou-xml.test.ts:568: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\pou-xml.test.ts:584: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\pou-xml.test.ts:606: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\pou-xml.test.ts:623: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\pou-xml.test.ts:640: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\pou-xml.test.ts:661: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\codesys\__tests__\pou-xml.test.ts:678: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\data-type-xml.ts:14: throw new Error(`Invalid dimension range: ${dimension.dimension}`) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\instances-xml.ts:9: const { instances, tasks, globalVariables } = configuration.resource +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\instances-xml.ts:38: globalVariables.forEach((variable) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\pou-xml.ts:16: const variables = pou.data.variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\pou-xml.ts:20: variables.forEach((variable) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\language\fbd-xml.ts:68: const inputVariables: BlockFbdXML['inputVariables']['variable'] = node.data.inputHandles +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\language\fbd-xml.ts:104: const outputVariable: BlockFbdXML['outputVariables']['variable'] = node.data.outputHandles +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\language\fbd-xml.ts:129: inputVariables: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\language\fbd-xml.ts:130: variable: inputVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\language\fbd-xml.ts:132: inOutVariables: '', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\language\fbd-xml.ts:133: outputVariables: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\language\ladder-xml.ts:408: const inputVariables = block.data.inputHandles.map((handle) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\language\ladder-xml.ts:409: // Main input connector: connections from other elements on the main rail +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\language\ladder-xml.ts:462: // Reuse findConnections with a handle filter to trace the branch elements, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\language\ladder-xml.ts:504: inputVariables: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\language\ladder-xml.ts:505: variable: inputVariables.filter((variable) => variable !== undefined), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\language\ladder-xml.ts:507: inOutVariables: '', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\language\ladder-xml.ts:508: outputVariables: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\language\__tests__\fbd-xml.test.ts:248: const iv = block.inputVariables.variable[0] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\language\__tests__\fbd-xml.test.ts:303: const conn = result.body.FBD.block[1].inputVariables.variable[0].connectionPointIn.connection[0] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\language\__tests__\fbd-xml.test.ts:371: const positions = result.body.FBD.block[0].inputVariables.variable[0].connectionPointIn.connection[0].position +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\language\__tests__\fbd-xml.test.ts:440: const positions = result.body.FBD.block[0].inputVariables.variable[0].connectionPointIn.connection[0].position +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\language\__tests__\fbd-xml.test.ts:497: expect(result.body.FBD.block[0].inputVariables.variable).toHaveLength(0) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\language\__tests__\fbd-xml.test.ts:780: expect(result.body.FBD.block[0].inputVariables.variable).toHaveLength(0) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\language\__tests__\ladder-xml.test.ts:362: connectedVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\language\__tests__\ladder-xml.test.ts:422: connectedVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\language\__tests__\ladder-xml.test.ts:458: connectedVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\language\__tests__\ladder-xml.test.ts:488: connectedVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\language\__tests__\ladder-xml.test.ts:518: const in1 = block.inputVariables.variable.find((v: Record) => v['@formalParameter'] === 'IN1') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\language\__tests__\ladder-xml.test.ts:546: connectedVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\language\__tests__\ladder-xml.test.ts:552: expect(block.inputVariables.variable).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\base-xml.test.ts:55: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\base-xml.test.ts:66: globalVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\data-type-xml.test.ts:107: it('throws on invalid dimension range', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\data-type-xml.test.ts:117: expect(() => oldEditorParseDataTypesToXML(xml, dataTypes)).toThrow('Invalid dimension range') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\data-type-xml.test.ts:156: it('adds a struct with base-type variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\data-type-xml.test.ts:192: it('handles user-data-type variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\data-type-xml.test.ts:213: it('handles user-data-type variables without initial value', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\data-type-xml.test.ts:226: it('handles array variables inside a struct', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\data-type-xml.test.ts:304: it('handles derived variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\data-type-xml.test.ts:325: it('handles derived variables without initial value', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\data-type-xml.test.ts:338: // Regression: struct creation seeds new variables with an +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\instances-xml.test.ts:12: globalVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\instances-xml.test.ts:57: describe('globalVariables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\instances-xml.test.ts:61: globalVariables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\instances-xml.test.ts:86: globalVariables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\instances-xml.test.ts:101: globalVariables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\instances-xml.test.ts:116: globalVariables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\instances-xml.test.ts:131: globalVariables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\instances-xml.test.ts:143: globalVariables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\instances-xml.test.ts:154: globalVariables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\instances-xml.test.ts:169: globalVariables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\pou-xml.test.ts:17: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\pou-xml.test.ts:25: it('returns empty interface for POU with no variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\pou-xml.test.ts:31: it('categorizes variables by class', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\pou-xml.test.ts:38: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\pou-xml.test.ts:100: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\pou-xml.test.ts:122: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\pou-xml.test.ts:144: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\pou-xml.test.ts:167: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\pou-xml.test.ts:189: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\pou-xml.test.ts:213: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\pou-xml.test.ts:237: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\pou-xml.test.ts:261: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\pou-xml.test.ts:283: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\pou-xml.test.ts:308: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\pou-xml.test.ts:343: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\pou-xml.test.ts:370: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\pou-xml.test.ts:386: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\pou-xml.test.ts:402: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\pou-xml.test.ts:421: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\pou-xml.test.ts:438: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\pou-xml.test.ts:451: data: { name: 'fb', language: 'st', variables: [], body: { language: 'st', value: '' }, documentation: '' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\pou-xml.test.ts:465: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\pou-xml.test.ts:481: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\pou-xml.test.ts:503: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\pou-xml.test.ts:520: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\pou-xml.test.ts:537: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\pou-xml.test.ts:558: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\pou-xml.test.ts:575: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\pou-xml.test.ts:595: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\xml-generator\old-editor\__tests__\pou-xml.test.ts:613: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\array-codegen-helpers.test.ts:61: it('returns true for array variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\array-codegen-helpers.test.ts:65: it('returns false for scalar variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\array-codegen-helpers.test.ts:69: it('returns false for user data type variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\array-codegen-helpers.test.ts:86: it('returns 0 for non-array variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\array-codegen-helpers.test.ts:101: it('returns 0 when a dimension range is invalid', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\array-codegen-helpers.test.ts:217: it('returns 0 for non-array variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\array-codegen-helpers.test.ts:250: it('returns 0 when first dimension range is invalid', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\array-codegen-helpers.test.ts:278: it('generates a strucpp-qualified pointer member for scalar variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\array-codegen-helpers.test.ts:283: it('generates a strucpp-qualified pointer member for array variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\array-variable-utils.test.ts:4: expandArrayVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\array-variable-utils.test.ts:6: parseDimensionRange, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\array-variable-utils.test.ts:48: // parseDimensionRange re-export +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\array-variable-utils.test.ts:50: describe('parseDimensionRange (re-exported from array-variable-utils)', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\array-variable-utils.test.ts:51: it('parses a valid range via the re-export', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\array-variable-utils.test.ts:52: const result = parseDimensionRange('0..5') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\array-variable-utils.test.ts:117: it('validates indices within range', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\array-variable-utils.test.ts:152: it('rejects if any dimension has an invalid range format', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\array-variable-utils.test.ts:199: it('returns null when indices are out of range', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\array-variable-utils.test.ts:251: it('returns the original variable when a dimension range is invalid', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\array-variable-utils.test.ts:279: // expandArrayVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\array-variable-utils.test.ts:281: describe('expandArrayVariables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\array-variable-utils.test.ts:284: const result = expandArrayVariables(vars) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\array-variable-utils.test.ts:292: expect(expandArrayVariables([])).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\array-variable-utils.test.ts:329: it('returns undefined when indices are out of range', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\dimension-range.test.ts:1: import { parseDimensionRange } from '../dimension-range' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\dimension-range.test.ts:3: describe('parseDimensionRange', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\dimension-range.test.ts:4: it('parses a simple range "0..5"', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\dimension-range.test.ts:5: const result = parseDimensionRange('0..5') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\dimension-range.test.ts:9: it('parses a range starting at 1', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\dimension-range.test.ts:10: const result = parseDimensionRange('1..10') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\dimension-range.test.ts:15: const result = parseDimensionRange('-3..5') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\dimension-range.test.ts:20: const result = parseDimensionRange('-10..-1') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\dimension-range.test.ts:24: it('parses a single-element range where lower equals upper', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\dimension-range.test.ts:25: const result = parseDimensionRange('5..5') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\dimension-range.test.ts:30: const result = parseDimensionRange('10..5') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\dimension-range.test.ts:35: const result = parseDimensionRange('0-5') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\dimension-range.test.ts:40: const result = parseDimensionRange('0.5') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\dimension-range.test.ts:45: const result = parseDimensionRange('0...5') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\dimension-range.test.ts:50: const result = parseDimensionRange('') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\dimension-range.test.ts:55: const result = parseDimensionRange('a..b') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\dimension-range.test.ts:60: const result = parseDimensionRange('..5') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\extensible-block-variables.test.ts:1: import type { BlockVariable, ClassifiedVariables } from '../extensible-block-variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\extensible-block-variables.test.ts:3: assembleVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\extensible-block-variables.test.ts:5: classifyBlockVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\extensible-block-variables.test.ts:8: rebuildVariablesForInputCount, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\extensible-block-variables.test.ts:10: } from '../extensible-block-variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\extensible-block-variables.test.ts:39: // classifyBlockVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\extensible-block-variables.test.ts:41: describe('classifyBlockVariables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\extensible-block-variables.test.ts:44: const classified = classifyBlockVariables(vars) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\extensible-block-variables.test.ts:54: const classified = classifyBlockVariables(vars) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\extensible-block-variables.test.ts:61: it('includes inOut variables as fixed inputs', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\extensible-block-variables.test.ts:63: const classified = classifyBlockVariables(vars) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\extensible-block-variables.test.ts:70: const classified = classifyBlockVariables(vars) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\extensible-block-variables.test.ts:76: const classified = classifyBlockVariables([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\extensible-block-variables.test.ts:171: // rebuildVariablesForInputCount +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\extensible-block-variables.test.ts:173: describe('rebuildVariablesForInputCount', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\extensible-block-variables.test.ts:176: const result = rebuildVariablesForInputCount(vars, 4) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\extensible-block-variables.test.ts:184: const result = rebuildVariablesForInputCount(vars, 0) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\extensible-block-variables.test.ts:190: // No IN variables at all, so getExtensibleStartIndex should return 1 +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\extensible-block-variables.test.ts:192: const result = rebuildVariablesForInputCount(vars, 3) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\extensible-block-variables.test.ts:205: const result = rebuildVariablesForInputCount(vars, 5) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\extensible-block-variables.test.ts:212: const result = rebuildVariablesForInputCount(vars, 4) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\extensible-block-variables.test.ts:219: // assembleVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\extensible-block-variables.test.ts:221: describe('assembleVariables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\extensible-block-variables.test.ts:223: const classified: ClassifiedVariables = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\extensible-block-variables.test.ts:229: const result = assembleVariables(classified) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\extensible-block-variables.test.ts:234: const classified: ClassifiedVariables = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\extensible-block-variables.test.ts:240: const result = assembleVariables(classified) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-signature-serializer.test.ts:14: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-signature-serializer.test.ts:25: const FB_VARIABLES: PLCPou['interface'] = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-signature-serializer.test.ts:26: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-signature-serializer.test.ts:63: interface: FB_VARIABLES, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-signature-serializer.test.ts:86: interface: FB_VARIABLES, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-signature-serializer.test.ts:108: interface: { returnType: 'INT', variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-signature-serializer.test.ts:120: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-signature-serializer.test.ts:134: describe('variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-signature-serializer.test.ts:135: it('emits VAR/END_VAR even when the POU has no variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-signature-serializer.test.ts:139: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-signature-serializer.test.ts:151: interface: FB_VARIABLES, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-signature-serializer.test.ts:171: interface: FB_VARIABLES, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-signature-serializer.test.ts:192: interface: { returnType: 'INT', variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-signature-serializer.test.ts:201: const pou = makePou({ name: 'MainProg', pouType: 'program', interface: { variables: [] } }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-signature-serializer.test.ts:207: const pou = makePou({ name: 'Foo', pouType: 'function-block', interface: { variables: [] } }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-signature-serializer.test.ts:218: interface: FB_VARIABLES, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-text-parser.test.ts:1: import * as iecStringModule from '../../generate-iec-string-to-variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-text-parser.test.ts:108: expect(result.interface?.variables.length).toBe(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-text-parser.test.ts:109: expect(result.interface?.variables[0].name).toBe('a') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-text-parser.test.ts:110: expect(result.interface?.variables[0].class).toBe('input') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-text-parser.test.ts:128: it('parses a program with no variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-text-parser.test.ts:136: expect(result.interface?.variables).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-text-parser.test.ts:154: expect(result.interface?.variables.length).toBe(2) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-text-parser.test.ts:166: expect(result.interface?.variables).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-text-parser.test.ts:266: it('handles programs with no variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-text-parser.test.ts:272: expect(result.interface?.variables).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-text-parser.test.ts:282: expect(result.interface?.variables).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-text-parser.test.ts:378: expect(result.interface?.variables.length).toBe(2) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-text-parser.test.ts:436: const spy = vi.spyOn(iecStringModule, 'parseIecStringToVariables').mockImplementation(() => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-text-parser.test.ts:460: const spy = vi.spyOn(iecStringModule, 'parseIecStringToVariables').mockImplementation(() => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-text-parser.test.ts:499: const spy = vi.spyOn(iecStringModule, 'parseIecStringToVariables').mockImplementation(() => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-text-serializer.test.ts:12: type SerializablePou = PLCPou & { variablesText?: string } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-text-serializer.test.ts:19: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-text-serializer.test.ts:54: interface: { returnType: 'INT', variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-text-serializer.test.ts:92: it('uses variablesText when provided', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-text-serializer.test.ts:93: const pou = makeStPou({ variablesText: 'VAR\n x : INT;\nEND_VAR' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-text-serializer.test.ts:98: it('generates variable declarations from interface variables when no variablesText', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-text-serializer.test.ts:101: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-text-serializer.test.ts:169: interface: { returnType: 'BOOL', variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-text-serializer.test.ts:181: it('uses variablesText when provided', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\pou-text-serializer.test.ts:184: variablesText: 'VAR\n y : BOOL;\nEND_VAR', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\restamp-library-variants.test.ts:20: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\restamp-library-variants.test.ts:42: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\restamp-library-variants.test.ts:63: expect(node.data.variant.variables.find((v) => v.name === 'OUT')!.type.value).toBe('__XWORD') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\restamp-library-variants.test.ts:73: expect(node.data.variant.variables[0].type.value).toBe('__XWORD') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\restamp-library-variants.test.ts:85: expect(node.data.variant.variables[0].type.value).toBe('ULINT') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\restamp-library-variants.test.ts:90: node.data.variant.variables[0].type.value = '__XWORD' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\restamp-library-variants.test.ts:106: expect(node.data.variant.variables[0].type.value).toBe('ULINT') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\PLC\__tests__\restamp-library-variants.test.ts:116: expect(node.data.variant.variables[0].type.value).toBe('ULINT') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\plc-constants\types.ts:40: 'sequential-function-chart', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\addPythonLocalVariables.ts:3: const createRuntimeVariables = (): PLCVariable[] => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\addPythonLocalVariables.ts:41: const addPythonLocalVariables = (projectData: PLCProjectData): PLCProjectData => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\addPythonLocalVariables.ts:46: const runtimeVariables = createRuntimeVariables() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\addPythonLocalVariables.ts:47: const variables = pou.interface?.variables ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\addPythonLocalVariables.ts:50: variables: [...variables, ...runtimeVariables], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\addPythonLocalVariables.ts:60: export { addPythonLocalVariables } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\encodeCharactersFromVariable.ts:24: * Converts an array of PLC variables into a format string for Python's struct.pack/unpack. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\encodeCharactersFromVariable.ts:25: * For scalar variables, returns the corresponding format character. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\encodeCharactersFromVariable.ts:26: * For array variables, repeats the base type's format character N times (e.g., ARRAY[0..9] OF INT -> '10h'). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\encodeCharactersFromVariable.ts:27: * @param variables Array of PLC variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\encodeCharactersFromVariable.ts:31: const encodeCharactersFromVariable = (variables: PLCVariable[]): string => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\encodeCharactersFromVariable.ts:32: if (!variables || variables.length === 0) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\encodeCharactersFromVariable.ts:36: const encodedChars = variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\generatePythonLspPreamble.ts:4: * Build a Python preamble that declares the POU's IEC variables as +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\generatePythonLspPreamble.ts:10: * `injectPythonRuntime`): `input`/`output` IEC variables are +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\generatePythonLspPreamble.ts:23: * POU has no input/output variables — keeps the caller's prepend +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\generatePythonLspPreamble.ts:42: * facing variables panel. Empty when `lineCount === 0`. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\generatePythonLspPreamble.ts:146: * Generate the LSP-only preamble for a POU's variables. Only +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\generatePythonLspPreamble.ts:147: * `input` and `output` IEC variables get a declaration — those are +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\generatePythonLspPreamble.ts:157: export function generatePythonLspPreamble(variables: PLCVariable[]): PythonLspPreamble { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\generatePythonLspPreamble.ts:158: const declarable = variables.filter((v) => v.class === 'input' || v.class === 'output') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\generatePythonLspPreamble.ts:165: '# IEC variables — auto-generated for the Pyright language server.', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\generatePythonLspPreamble.ts:174: // by one line. Variables whose type can't be mapped to Python +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\generateSTCode.ts:11: allVariables: PLCVariable[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\generateSTCode.ts:76: // Defensive fallback — non-base, non-array variables shouldn't appear +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\generateSTCode.ts:189: const { pouName, allVariables, processedPythonCode } = params +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\generateSTCode.ts:191: const inputVariables = allVariables.filter((v) => v.class === 'input') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\generateSTCode.ts:192: const outputVariables = allVariables.filter((v) => v.class === 'output') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\generateSTCode.ts:194: const cStructs = generateCStructs(inputVariables, outputVariables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\generateSTCode.ts:195: const inputCopyCode = generateInputCopyCode(inputVariables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\generateSTCode.ts:196: const outputCopyCode = generateOutputCopyCode(outputVariables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\injectPythonCode.ts:10: variables: PLCVariable[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\injectPythonCode.ts:15: const inputVariables = pou.variables.filter((v) => v.class === 'input') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\injectPythonCode.ts:16: const outputVariables = pou.variables.filter((v) => v.class === 'output') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\injectPythonCode.ts:18: const fmtIn = encodeCharactersFromVariable(inputVariables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\injectPythonCode.ts:19: const fmtOut = encodeCharactersFromVariable(outputVariables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\injectPythonCode.ts:24: inputVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\injectPythonCode.ts:25: outputVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\injectPythonRuntime.ts:7: inputVariables: PLCVariable[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\injectPythonRuntime.ts:8: outputVariables: PLCVariable[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\injectPythonRuntime.ts:13: const generateOutputInitialization = (outputVariables: PLCVariable[]): string => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\injectPythonRuntime.ts:14: if (outputVariables.length === 0) return '# No output variables to initialize' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\injectPythonRuntime.ts:16: return outputVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\injectPythonRuntime.ts:29: * Generate Python code that extracts variables from the flat unpacked tuple using index slicing. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\injectPythonRuntime.ts:32: const generateInputUnpackCode = (inputVariables: PLCVariable[]): string => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\injectPythonRuntime.ts:33: if (inputVariables.length === 0) return ' # No input variables to read' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\injectPythonRuntime.ts:35: let code = ' # Read input variables\n' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\injectPythonRuntime.ts:39: inputVariables.forEach((variable) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\injectPythonRuntime.ts:60: * Generate Python code that packs output variables into the flat struct format. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\injectPythonRuntime.ts:63: const generateOutputPackCode = (outputVariables: PLCVariable[]): string => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\injectPythonRuntime.ts:64: if (outputVariables.length === 0) return ' # No output variables to write' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\injectPythonRuntime.ts:66: let code = ' # Write output variables\n' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\injectPythonRuntime.ts:69: outputVariables.forEach((variable) => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\injectPythonRuntime.ts:90: const { fmtIn, fmtOut, inputVariables, outputVariables, originalCode, pouName } = params +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\injectPythonRuntime.ts:92: const outputInitialization = generateOutputInitialization(outputVariables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\injectPythonRuntime.ts:93: const readInputSection = generateInputUnpackCode(inputVariables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\injectPythonRuntime.ts:94: const writeOutputSection = generateOutputPackCode(outputVariables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\injectPythonRuntime.ts:109: # Initialize output variables here - if any +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\addPythonLocalVariables.test.ts:2: import { addPythonLocalVariables } from '../addPythonLocalVariables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\addPythonLocalVariables.test.ts:16: globalVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\addPythonLocalVariables.test.ts:21: describe('addPythonLocalVariables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\addPythonLocalVariables.test.ts:22: it('adds three runtime variables to python pous', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\addPythonLocalVariables.test.ts:27: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\addPythonLocalVariables.test.ts:32: const result = addPythonLocalVariables(project) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\addPythonLocalVariables.test.ts:34: const vars = result.pous[0].interface!.variables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\addPythonLocalVariables.test.ts:47: it('preserves existing variables when adding runtime variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\addPythonLocalVariables.test.ts:60: interface: { variables: [existingVar] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\addPythonLocalVariables.test.ts:65: const result = addPythonLocalVariables(project) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\addPythonLocalVariables.test.ts:67: expect(result.pous[0].interface!.variables).toHaveLength(4) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\addPythonLocalVariables.test.ts:68: expect(result.pous[0].interface!.variables[0].name).toBe('myInput') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\addPythonLocalVariables.test.ts:76: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\addPythonLocalVariables.test.ts:81: const result = addPythonLocalVariables(project) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\addPythonLocalVariables.test.ts:83: expect(result.pous[0].interface!.variables).toHaveLength(0) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\addPythonLocalVariables.test.ts:91: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\addPythonLocalVariables.test.ts:96: addPythonLocalVariables(project) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\addPythonLocalVariables.test.ts:98: expect(project.pous[0].interface!.variables).toHaveLength(0) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\addPythonLocalVariables.test.ts:110: const result = addPythonLocalVariables(project) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\addPythonLocalVariables.test.ts:112: expect(result.pous[0].interface!.variables).toHaveLength(3) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\addPythonLocalVariables.test.ts:120: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\addPythonLocalVariables.test.ts:126: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\addPythonLocalVariables.test.ts:132: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\addPythonLocalVariables.test.ts:137: const result = addPythonLocalVariables(project) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\addPythonLocalVariables.test.ts:139: expect(result.pous[0].interface!.variables).toHaveLength(3) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\addPythonLocalVariables.test.ts:140: expect(result.pous[1].interface!.variables).toHaveLength(0) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\addPythonLocalVariables.test.ts:141: expect(result.pous[2].interface!.variables).toHaveLength(3) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\encodeCharactersFromVariable.test.ts:106: it('encodes multiple variables in order', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\encodeCharactersFromVariable.test.ts:117: it('encodes array variables with repeated format chars', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\encodeCharactersFromVariable.test.ts:133: it('encodes mixed scalar and array variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\generatePythonLspPreamble.test.ts:39: it('returns empty text for an empty variables array', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\generatePythonLspPreamble.test.ts:45: it('returns empty text when no variables are input/output class', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\generatePythonLspPreamble.test.ts:162: it('skips user-data-type variables (structs / enums)', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\generatePythonLspPreamble.test.ts:181: expect(result.text).toContain('# IEC variables — auto-generated for the Pyright language server.') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\generatePythonLspPreamble.test.ts:225: it('is empty when no variables produce declaration lines', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\generatePythonLspPreamble.test.ts:241: it('skips variables whose type doesn’t map to a Python annotation (e.g. TIME)', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\generateSTCode.test.ts:42: allVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\generateSTCode.test.ts:63: allVariables: [makeScalarVar('speed', 'input', 'INT'), makeScalarVar('result', 'output', 'REAL')], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\generateSTCode.test.ts:81: allVariables: [makeStringVar('msg', 'input')], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\generateSTCode.test.ts:92: allVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\generateSTCode.test.ts:103: allVariables: [makeScalarVar('speed', 'input', 'INT')], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\generateSTCode.test.ts:117: allVariables: [makeScalarVar('result', 'output', 'REAL')], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\generateSTCode.test.ts:130: allVariables: [makeArrayVar('data', 'input', 'INT', '5..9')], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\generateSTCode.test.ts:141: allVariables: [makeArrayVar('out', 'output', 'REAL', '0..2')], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\generateSTCode.test.ts:151: allVariables: [makeStringVar('msg', 'input')], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\generateSTCode.test.ts:163: allVariables: [makeStringVar('msg', 'output')], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\generateSTCode.test.ts:175: allVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\generateSTCode.test.ts:196: allVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\generateSTCode.test.ts:217: allVariables: [makeScalarVar('x', 'input', 'INT'), localVar, makeScalarVar('y', 'output', 'INT')], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonCode.test.ts:20: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonCode.test.ts:32: { name: 'pou1', code: 'pass', type: 'function-block', variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonCode.test.ts:33: { name: 'pou2', code: 'pass', type: 'function-block', variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonCode.test.ts:41: it('generates format strings from input and output variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonCode.test.ts:42: const variables: PLCVariable[] = [makeScalarVar('speed', 'input', 'INT'), makeScalarVar('result', 'output', 'REAL')] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonCode.test.ts:44: const result = injectPythonCode([{ name: 'test', code: 'pass', type: 'function-block', variables }]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonCode.test.ts:53: it('injects runtime with empty format when no variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonCode.test.ts:54: const result = injectPythonCode([{ name: 'test', code: 'pass', type: 'function-block', variables: [] }]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonCode.test.ts:65: it('separates variables by class for format encoding', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonCode.test.ts:66: const variables: PLCVariable[] = [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonCode.test.ts:80: const result = injectPythonCode([{ name: 'test', code: 'pass', type: 'function-block', variables }]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:39: it('injects runtime wrapper around original code with no variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:43: inputVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:44: outputVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:61: it('generates input unpack code for scalar variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:65: inputVariables: [makeScalarVar('speed', 'input', 'INT'), makeScalarVar('temp', 'input', 'REAL')], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:66: outputVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:77: it('generates output pack code for scalar variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:81: inputVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:82: outputVariables: [makeScalarVar('result', 'output', 'INT'), makeScalarVar('flag', 'output', 'BOOL')], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:94: it('generates input unpack code for array variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:98: inputVariables: [makeArrayVar('data', 'input', 'INT', '0..4')], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:99: outputVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:108: it('generates output pack code for array variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:112: inputVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:113: outputVariables: [makeArrayVar('temps', 'output', 'REAL', '0..2')], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:121: it('generates input unpack code for string variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:125: inputVariables: [makeStringVar('msg', 'input')], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:126: outputVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:136: it('generates output pack code for string variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:140: inputVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:141: outputVariables: [makeStringVar('msg', 'output')], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:153: it('generates output initialization for scalar output variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:157: inputVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:158: outputVariables: [makeScalarVar('count', 'output', 'INT')], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:166: it('generates output initialization for array output variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:170: inputVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:171: outputVariables: [makeArrayVar('arr', 'output', 'INT', '0..2')], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:179: it('generates output initialization for string output variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:192: inputVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:193: outputVariables: [outputVar], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:215: inputVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:216: outputVariables: [outputVar], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:224: it('outputs comment for no output variables in initialization', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:228: inputVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:229: outputVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:234: expect(result).toContain('# No output variables to initialize') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:237: it('outputs comment for no input variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:241: inputVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:242: outputVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:247: expect(result).toContain('# No input variables to read') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:250: it('outputs comment for no output variables in write section', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:254: inputVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:255: outputVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\python\__tests__\injectPythonRuntime.test.ts:260: expect(result).toContain('# No output variables to write') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-parser.test.ts:40: it('round-trips a representative range of values', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-polling-filter.test.ts:30: function makeArrayVariable(name: string, baseType: string, range: string, debug = false): PLCVariable { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-polling-filter.test.ts:39: dimensions: [{ dimension: range }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-polling-filter.test.ts:52: interface: { variables: vars }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-polling-filter.test.ts:61: debugForcedVariables?: Map +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-polling-filter.test.ts:82: debugForcedVariables: overrides.debugForcedVariables ?? new Map(), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-polling-filter.test.ts:104: it('returns empty indexes when there are no active variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-polling-filter.test.ts:112: describe('watched variables (debug === true)', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-polling-filter.test.ts:113: it('collects watched variables from a program POU', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-polling-filter.test.ts:126: it('resolves FB watched variables through fbSelectedInstance', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-polling-filter.test.ts:156: it('skips FB watched variables when no instance is selected', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-polling-filter.test.ts:165: it('skips FB watched variables when selected key does not match any instance', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-polling-filter.test.ts:193: it('skips POUs with no variables at all', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-polling-filter.test.ts:207: describe('forced variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-polling-filter.test.ts:211: const state = makeState({ debugForcedVariables: forced, debugVariableIndexes: indexMap }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-polling-filter.test.ts:219: describe('graph-listed variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-polling-filter.test.ts:611: const state = makeState({ debugForcedVariables: forced, debugVariableIndexes: indexMap }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-polling-filter.test.ts:621: describe('source-visible variables (ST/IL)', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-polling-filter.test.ts:622: it('includes variables mentioned in source text', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-polling-filter.test.ts:638: it('includes FB sub-variables when FB instance appears in ST source text', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-polling-filter.test.ts:663: it('does not include variables not mentioned in source text', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-polling-filter.test.ts:728: describe('LD diagram-visible variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-polling-filter.test.ts:820: variant: { name: 'TON', type: 'function-block', variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-polling-filter.test.ts:911: describe('FBD diagram-visible variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-polling-filter.test.ts:1128: describe('edge cases for FB resolution and nested variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-polling-filter.test.ts:1141: // No matching instance found in the empty list -> no variables added +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-polling-filter.test.ts:1159: // No interface -> ?? [] -> no variables to scan +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-polling-filter.test.ts:1265: // Python is not ld/fbd/st/il -> no visible variables collected +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-polling-filter.test.ts:1351: it('handles null key from makeKey for ST variables in function-block POU', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-builder.test.ts:74: interface: { variables: vars }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-builder.test.ts:97: describe('base-type variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-builder.test.ts:123: describe('external variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-builder.test.ts:147: it('traverses complex external variables using shared traversal', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-builder.test.ts:165: describe('derived-type (function block) variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-builder.test.ts:218: describe('user-data-type (structure) variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-builder.test.ts:266: describe('array variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-builder.test.ts:339: it('returns path for external variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-builder.test.ts:344: it('returns INSTANCE path for local variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-traversal.test.ts:102: interface: { variables: vars }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-traversal.test.ts:117: debugVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-traversal.test.ts:132: describe('base-type variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-traversal.test.ts:136: const ctx = makeContext({ debugVariables: debugVars }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-traversal.test.ts:158: describe('external variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-traversal.test.ts:159: it('uses prefix for external base-type variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-traversal.test.ts:162: const ctx = makeContext({ debugVariables: debugVars }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-traversal.test.ts:171: describe('derived-type (function block) variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-traversal.test.ts:179: const ctx = makeContext({ debugVariables: debugVars }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-traversal.test.ts:199: const ctx = makeContext({ debugVariables: debugVars, projectPous: [customFb] }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-traversal.test.ts:210: const ctx = makeContext({ debugVariables: debugVars }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-traversal.test.ts:223: const ctx = makeContext({ debugVariables: debugVars, projectPous: [innerFb, outerFb] }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-traversal.test.ts:238: const ctx = makeContext({ debugVariables: debugVars, projectPous: [innerFb, outerFb] }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-traversal.test.ts:253: const ctx = makeContext({ debugVariables: debugVars, projectPous: [outerFb], dataTypes: [structType] }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-traversal.test.ts:271: const ctx = makeContext({ debugVariables: debugVars, projectPous: [outerFb] }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-traversal.test.ts:301: describe('user-data-type variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-traversal.test.ts:309: const ctx = makeContext({ debugVariables: debugVars, dataTypes: [structType] }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-traversal.test.ts:322: const ctx = makeContext({ debugVariables: debugVars }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-traversal.test.ts:333: const ctx = makeContext({ debugVariables: debugVars, projectPous: [customFb] }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-traversal.test.ts:350: const ctx = makeContext({ debugVariables: debugVars, dataTypes: [innerStruct, outerStruct] }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-traversal.test.ts:366: const ctx = makeContext({ debugVariables: debugVars, projectPous: [fbPou], dataTypes: [outerStruct] }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-traversal.test.ts:393: const ctx = makeContext({ debugVariables: debugVars, dataTypes: [outerStruct] }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-traversal.test.ts:419: describe('array variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-traversal.test.ts:427: const ctx = makeContext({ debugVariables: debugVars }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-traversal.test.ts:442: const ctx = makeContext({ debugVariables: debugVars, dataTypes: [structType] }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-traversal.test.ts:503: const ctx = makeContext({ debugVariables: debugVars, projectPous: [customFb] }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-traversal.test.ts:561: const ctx = makeContext({ debugVariables: debugVars, projectPous: [customFb] }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-traversal.test.ts:572: const ctx = makeContext({ debugVariables: debugVars, dataTypes: [structType] }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-traversal.test.ts:582: const ctx = makeContext({ debugVariables: debugVars }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-traversal.test.ts:614: const ctx = makeContext({ debugVariables: debugVars }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-traversal.test.ts:643: const ctx = makeContext({ debugVariables: debugVars, dataTypes: [outerStruct] }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debug-tree-traversal.test.ts:661: const ctx = makeContext({ debugVariables: debugVars }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debugger-session.test.ts:10: } from '../debugger-session' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debugger-session.test.ts:65: interface: { variables: vars }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debugger-session.test.ts:224: it('builds index map for simple base-type variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debugger-session.test.ts:254: it('handles array variables with IEC-indexed element paths', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debugger-session.test.ts:325: it('builds tree map for simple base-type variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debugger-session.test.ts:421: it('adds _TMP_ debug variables as leaf nodes', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debugger-session.test.ts:464: it('handles _TMP_ variables with type that does not end in _ENUM', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debugger-session.test.ts:495: it('builds instance map for custom FB derived variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debugger-session.test.ts:540: it('skips non-derived variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\debugger-session.test.ts:549: it('skips derived variables that do not match any custom FB POU', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\endian.test.ts:99: // Two REAL variables packed contiguously; swap only the second. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\endian.test.ts:124: // strucpp emits 8 bytes for these (i64 nanoseconds). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\format-timestamp.test.ts:1: import type { TimestampFormat } from '../format-timestamp' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\format-timestamp.test.ts:2: import formatTimestamp from '../format-timestamp' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\format-timestamp.test.ts:4: describe('formatTimestamp', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\format-timestamp.test.ts:7: expect(formatTimestamp(date, 'full')).toBe('11-03-26 14:30:05') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\format-timestamp.test.ts:12: expect(formatTimestamp(date, 'time')).toBe('09:05:07') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\format-timestamp.test.ts:17: expect(formatTimestamp(date, 'none')).toBe('') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\format-timestamp.test.ts:22: expect(formatTimestamp(date)).toBe('05-01-26 23:59:59') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\format-timestamp.test.ts:28: const expected = formatTimestamp(date, 'full') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\format-timestamp.test.ts:29: expect(formatTimestamp('2026-06-15T10:20:30', 'full')).toBe(expected) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\format-timestamp.test.ts:34: expect(formatTimestamp(date, 'full')).toBe('31-12-26 00:00:00') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\format-timestamp.test.ts:38: expect(formatTimestamp('not-a-date', 'full')).toBe('Invalid Date') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\format-timestamp.test.ts:42: expect(formatTimestamp(new Date('invalid'), 'time')).toBe('Invalid Date') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\format-timestamp.test.ts:46: expect(formatTimestamp('garbage', 'none')).toBe('') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\format-timestamp.test.ts:49: it('exports TimestampFormat type', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\format-timestamp.test.ts:51: const format: TimestampFormat = 'full' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\format-timestamp.test.ts:57: expect(formatTimestamp(date, 'full')).toBe('03-01-26 01:02:03') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\format-timestamp.test.ts:58: expect(formatTimestamp(date, 'time')).toBe('01:02:03') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\formatters-pou.test.ts:24: it('converts "Sequential Function Chart" to "sfc"', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\formatters-pou.test.ts:25: expect(ConvertToLangShortenedFormat('Sequential Function Chart')).toBe('sfc') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:3: import { parseIecStringToVariables } from '../generate-iec-string-to-variables' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:5: describe('parseIecStringToVariables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:9: expect(parseIecStringToVariables('')).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:13: expect(parseIecStringToVariables('\n\n\n')).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:18: const result = parseIecStringToVariables(input) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:43: const result = parseIecStringToVariables(input) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:50: const result = parseIecStringToVariables(input) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:60: expect(() => parseIecStringToVariables(input)).toThrow(/missing semicolon/) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:65: expect(() => parseIecStringToVariables(input)).toThrow(/missing colon/) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:70: expect(() => parseIecStringToVariables(input)).toThrow(/invalid or unsupported characters/) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:76: expect(() => parseIecStringToVariables(input)).toThrow(/unrecognized declaration format/) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:87: const result = parseIecStringToVariables(input, [], [], libraries) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:106: const result = parseIecStringToVariables(input, [], [], libraries) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:116: const result = parseIecStringToVariables(input, [], [], libraries) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:124: const result = parseIecStringToVariables(input) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:137: const result = parseIecStringToVariables(input) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:148: const result = parseIecStringToVariables(input) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:157: const result = parseIecStringToVariables(input) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:167: const result = parseIecStringToVariables(input) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:179: expect(() => parseIecStringToVariables(input)).toThrow(/Syntax error on line 2/) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:186: expect(() => parseIecStringToVariables(input)).toThrow(/Location.*not allowed.*INPUT/) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:191: expect(() => parseIecStringToVariables(input)).toThrow(/Location.*not allowed.*OUTPUT/) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:196: expect(() => parseIecStringToVariables(input)).toThrow(/Location.*not allowed.*INOUT/) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:201: expect(() => parseIecStringToVariables(input)).toThrow(/Location.*not allowed.*EXTERNAL/) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:206: expect(() => parseIecStringToVariables(input)).toThrow(/Location.*not allowed.*TEMP/) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:213: expect(() => parseIecStringToVariables(input)).toThrow(/Initial Value.*not allowed.*EXTERNAL/) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:220: const result = parseIecStringToVariables(input) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:241: const result = parseIecStringToVariables(input, pous) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:255: const result = parseIecStringToVariables(input, pous) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:269: const result = parseIecStringToVariables(input, pous) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:285: pous: [{ name: 'TON', type: 'function-block', language: 'st', variables: [], body: '', documentation: '' }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:291: const result = parseIecStringToVariables(input, [], [], libraries) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:305: pous: [{ name: 'TON', type: 'function-block', language: 'st', variables: [], body: '', documentation: '' }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:311: const result = parseIecStringToVariables(input, [], [], libraries) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:325: pous: [{ name: 'ABS', type: 'function', language: 'st', variables: [], body: '', documentation: '' }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:331: const result = parseIecStringToVariables(input, [], [], libraries) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:345: const result = parseIecStringToVariables(input, [], [], libraries) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:356: const result = parseIecStringToVariables(input, [], [], libraries) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:367: const result = parseIecStringToVariables(input, [], [], libraries) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:376: const result = parseIecStringToVariables(input) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:385: const result = parseIecStringToVariables(input) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:392: const result = parseIecStringToVariables(input) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:399: const result = parseIecStringToVariables(input) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:406: const result = parseIecStringToVariables(input) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:415: const result = parseIecStringToVariables(input, [], []) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-string-to-variables.test.ts:424: const result = parseIecStringToVariables(input) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-variables-to-string.test.ts:2: import { generateIecVariablesToString, getIecVariableLineMap } from '../generate-iec-variables-to-string' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-variables-to-string.test.ts:18: // See `generate-iec-variables-to-string.ts` for the rationale. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-variables-to-string.test.ts:20: describe('generateIecVariablesToString', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-variables-to-string.test.ts:22: expect(generateIecVariablesToString([])).toBe(' VAR\n END_VAR') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-variables-to-string.test.ts:26: expect(generateIecVariablesToString(null as unknown as PLCVariable[])).toBe(' VAR\n END_VAR') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-variables-to-string.test.ts:31: const result = generateIecVariablesToString(vars) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-variables-to-string.test.ts:51: const result = generateIecVariablesToString(vars) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-variables-to-string.test.ts:60: const result = generateIecVariablesToString(vars) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-variables-to-string.test.ts:66: const result = generateIecVariablesToString(vars) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-variables-to-string.test.ts:73: const result = generateIecVariablesToString(vars) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-variables-to-string.test.ts:80: const result = generateIecVariablesToString(vars) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-variables-to-string.test.ts:87: const result = generateIecVariablesToString(vars) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-variables-to-string.test.ts:96: const result = generateIecVariablesToString(vars) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-variables-to-string.test.ts:103: const result = generateIecVariablesToString(vars) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-variables-to-string.test.ts:118: const result = generateIecVariablesToString(vars) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-variables-to-string.test.ts:139: it('generates multiple variables within the same class block', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-variables-to-string.test.ts:144: const result = generateIecVariablesToString(vars) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-variables-to-string.test.ts:163: const result = generateIecVariablesToString(vars) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-variables-to-string.test.ts:188: const text = generateIecVariablesToString(vars) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\generate-iec-variables-to-string.test.ts:204: const text = generateIecVariablesToString(vars) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\library-tree.test.ts:18: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\location-dropdown-options.test.ts:2: * Tests for `buildLocationDropdownOptions` — the variables-table +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\plc-constants.test.ts:67: 'sequential-function-chart', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:4: findFunctionBlockVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:5: findLeafVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:6: findStructureVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:7: getPouVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:83: // findFunctionBlockVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:86: describe('findFunctionBlockVariables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:89: const vars = findFunctionBlockVariables('sr', [], SYSTEM_LIBS) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:95: expect(findFunctionBlockVariables('NonExistentFB', [], SYSTEM_LIBS)).toBeNull() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:103: variables: [{ name: 'in1', type: { definition: 'base-type', value: 'INT' }, location: '', documentation: '' }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:107: const vars = findFunctionBlockVariables('MYCUSTOMFB', [customFB], SYSTEM_LIBS) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:118: const vars = findFunctionBlockVariables('EmptyFB', [customFB], SYSTEM_LIBS) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:127: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:130: expect(findFunctionBlockVariables('MyProg', [prog], SYSTEM_LIBS)).toBeNull() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:135: // so the editor must not surface library FB locals to the debugger +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:140: const ton = findFunctionBlockVariables('TON', [], SYSTEM_LIBS) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:159: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:199: const vars = findFunctionBlockVariables('MyFB', [customFB], SYSTEM_LIBS) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:223: // findStructureVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:226: describe('findStructureVariables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:243: it('returns variables for a matching structure (case-insensitive)', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:244: const vars = findStructureVariables('mystruct', dataTypes) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:250: expect(findStructureVariables('MyEnum', dataTypes)).toBeNull() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:254: expect(findStructureVariables('UnknownType', dataTypes)).toBeNull() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:306: // findLeafVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:309: describe('findLeafVariables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:314: const leaves = findLeafVariables('BOOL', emptyPous, emptyDataTypes, SYSTEM_LIBS, 'myVar') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:319: const leaves = findLeafVariables('UnknownType', emptyPous, emptyDataTypes, SYSTEM_LIBS) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:323: it('expands a standard library FB into leaf variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:324: // SR has base-type variables (S1, R, Q1 are BOOL) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:325: const leaves = findLeafVariables('SR', emptyPous, emptyDataTypes, SYSTEM_LIBS, 'mySR') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:333: it('expands a structure type into leaf variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:344: const leaves = findLeafVariables('Point', emptyPous, dataTypes, SYSTEM_LIBS, 'p') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:364: const leaves = findLeafVariables('Outer', emptyPous, dataTypes, SYSTEM_LIBS, 'o') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:381: const leaves = findLeafVariables('Circular', emptyPous, dataTypes, SYSTEM_LIBS) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:399: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:419: const leaves = findLeafVariables('CustomFB', pous, dataTypes, SYSTEM_LIBS, 'fb') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:439: const leaves = findLeafVariables('WithEnum', emptyPous, dataTypes, SYSTEM_LIBS, 's') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:456: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:476: const leaves = findLeafVariables('NestedFB', pous, dataTypes, SYSTEM_LIBS, 'fb') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:489: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:516: const leaves = findLeafVariables('ArrayFB', pous, emptyDataTypes, SYSTEM_LIBS, 'fb') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:522: const leaves = findLeafVariables('SR', emptyPous, emptyDataTypes, SYSTEM_LIBS) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:538: const leaves = findLeafVariables('Simple', emptyPous, dataTypes, SYSTEM_LIBS) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:544: // getPouVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:547: describe('getPouVariables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:548: it('returns variables for a program POU', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:553: variables: [{ name: 'v1', type: { definition: 'base-type', value: 'INT' }, location: '', documentation: '' }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:557: const vars = getPouVariables(pou) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:562: it('returns variables for a function-block POU', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:567: variables: [{ name: 'in1', type: { definition: 'base-type', value: 'BOOL' }, location: '', documentation: '' }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:571: const vars = getPouVariables(pou) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:581: variables: [{ name: 'x', type: { definition: 'base-type', value: 'INT' }, location: '', documentation: '' }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:585: expect(getPouVariables(pou)).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\pou-helpers.test.ts:594: expect(getPouVariables(pou)).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\save-project.test.ts:3: import { collectDebugVariables, sanitizePou } from '../save-project' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\save-project.test.ts:13: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\save-project.test.ts:66: it('merges variablesText from editor when display is code and code is a non-null string', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\save-project.test.ts:74: expect((result as PLCPou & { variablesText?: string }).variablesText).toBe('VAR\n x : INT;\nEND_VAR') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\save-project.test.ts:85: expect((result as PLCPou & { variablesText?: string }).variablesText).toBe('VAR\nEND_VAR') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\save-project.test.ts:95: expect((result as PLCPou & { variablesText?: string }).variablesText).toBe('') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\save-project.test.ts:100: // collectDebugVariables +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\save-project.test.ts:103: describe('collectDebugVariables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\save-project.test.ts:104: it('returns undefined when no variables have debug enabled', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\save-project.test.ts:111: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\save-project.test.ts:124: expect(collectDebugVariables(globalVars, pous)).toBeUndefined() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\save-project.test.ts:127: it('returns undefined when variables array is empty', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\save-project.test.ts:128: expect(collectDebugVariables([], [])).toBeUndefined() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\save-project.test.ts:131: it('returns only global debug variables when only globals have debug', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\save-project.test.ts:137: const result = collectDebugVariables(globalVars, []) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\save-project.test.ts:141: it('returns only pou debug variables when only pous have debug', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\save-project.test.ts:148: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\save-project.test.ts:168: const result = collectDebugVariables(globalVars, pous) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\save-project.test.ts:172: it('returns both global and pou debug variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\save-project.test.ts:179: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\save-project.test.ts:195: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\save-project.test.ts:208: const result = collectDebugVariables(globalVars, pous) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\save-project.test.ts:220: const result = collectDebugVariables([], pous) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\save-project.test.ts:224: it('handles pous with undefined variables array in interface', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\save-project.test.ts:229: interface: { variables: undefined } as unknown as PLCPou['interface'], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\save-project.test.ts:233: const result = collectDebugVariables([], pous) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\stlib-to-system-library.test.ts:39: expect(fn.variables).toHaveLength(3) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\stlib-to-system-library.test.ts:40: expect(fn.variables[2]).toEqual({ name: 'OUT', class: 'output', type: { definition: 'base-type', value: 'INT' } }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\stlib-to-system-library.test.ts:74: expect(lib.pous[0].variables[1].type).toEqual({ definition: 'generic-type', value: 'ANY' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\stlib-to-system-library.test.ts:90: expect(lib.pous[0].variables[0]).toEqual({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\stlib-to-system-library.test.ts:115: expect(fb.variables.map((v) => v.class)).toEqual(['input', 'output', 'inOut']) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\stlib-to-system-library.test.ts:135: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\stlib-to-system-library.test.ts:155: expect(block.variables.map((v) => v.class)).toEqual(['input', 'output', 'inOut']) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\stlib-to-system-library.test.ts:173: variables: [{ name: 'x', class: 'input' }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\stlib-to-system-library.test.ts:180: expect(lib.pous[0].variables[0].type).toEqual({ definition: 'base-type', value: 'BOOL' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\stlib-to-system-library.test.ts:194: cppBlocks: [{ name: 'NoDoc', code: '', variables: [] }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-references.test.ts:34: function makePou(name: string, language: string, bodyValue: unknown, variables: PLCVariable[] = []): PLCPou { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-references.test.ts:38: interface: { variables }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-references.test.ts:135: connectedVariables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-references.test.ts:214: connectedVariables: [{ handleId: 'h1', variable: { name: 'myVar' } }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-references.test.ts:341: it('does nothing when no external variables match', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-references.test.ts:355: describe('global scope — rename external variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-references.test.ts:356: it('renames matching external variables in POUs', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-references.test.ts:600: connectedVariables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-references.test.ts:741: it('skips block-connection rename when connectedVariables is missing or index has no variable', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-references.test.ts:745: rungs: [{ id: 'r1', nodes: [makeNode('n1', 'block', { connectedVariables: [{ handleId: 'h1' }] })] }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-references.test.ts:838: connectedVariables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-references.test.ts:951: it('skips FBD block-connection rename when connectedVariables missing or no variable at index', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-references.test.ts:953: { name: 'P1', rung: { nodes: [makeNode('n1', 'block', { connectedVariables: [{ handleId: 'h1' }] })] } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-references.test.ts:990: connectedVariables: [{ handleId: 'h1', variable: { name: 'alsoOther' } }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-references.test.ts:1060: connectedVariables: [{ handleId: 'h1', variable: { name: 'alsoOther' } }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-references.test.ts:1100: it('skips external variables whose name does not match', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-references.test.ts:1113: it('handles POUs with no interface (variables fallback to empty)', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-references.test.ts:1131: it('skips external variables in global scope whose name does not match', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-references.test.ts:1153: it('handles POUs with no interface in global rename (variables fallback to empty)', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-references.test.ts:1188: connectedVariables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-references.test.ts:1274: connectedVariables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-references.test.ts:1320: const variables: PLCVariable[] = [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-references.test.ts:1326: const result = validateVariableReference('myVar', { definition: 'base-type', value: 'INT' }, variables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-references.test.ts:1333: const result = validateVariableReference('MYVAR', { definition: 'base-type', value: 'int' }, variables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-references.test.ts:1338: const result = validateVariableReference('missing', { definition: 'base-type', value: 'INT' }, variables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-references.test.ts:1345: const result = validateVariableReference('myVar', { definition: 'user-data-type', value: 'INT' }, variables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-references.test.ts:1352: const result = validateVariableReference('myVar', { definition: 'base-type', value: 'BOOL' }, variables) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-sizes.test.ts:5: getVariableSize, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-sizes.test.ts:90: // getVariableSize +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-sizes.test.ts:93: describe('getVariableSize', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-sizes.test.ts:116: expect(getVariableSize(makeBaseVar('v', typeName))).toBe(expected) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-sizes.test.ts:120: expect(getVariableSize(makeBaseVar('v', 'WSTRING'))).toBe(1 + 126 * 2) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-sizes.test.ts:124: expect(getVariableSize(makeBaseVar('v', 'TOTALLY_FAKE_TYPE'))).toBe(4) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-sizes.test.ts:128: expect(getVariableSize(makeDerivedVar('v'))).toBe(4) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-sizes.test.ts:353: // TIME parsing — STruC++ wire format is a single int64_t nanoseconds duration. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-sizes.test.ts:365: it('parses TIME with seconds only', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-sizes.test.ts:372: it('parses TIME with days, hours, minutes, seconds', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-sizes.test.ts:374: // 1 day + 2 hours + 3 minutes + 4 seconds = 93,784 s +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-sizes.test.ts:381: it('parses TIME with milliseconds', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-sizes.test.ts:388: it('parses TIME with microseconds', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-sizes.test.ts:395: it('parses TIME with nanoseconds only', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-sizes.test.ts:433: // DATE and TOD share the int64 nanoseconds wire format with TIME but +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-sizes.test.ts:434: // represent absolute timestamps (epoch / midnight reference). The +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-sizes.test.ts:446: it('parses TOD as nanoseconds-since-midnight, formatted HH:MM:SS.mmm', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-sizes.test.ts:518: describe('out-of-range truncation', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-sizes.test.ts:526: it('INT/UINT/WORD: values outside 16-bit range truncate to low 2 bytes', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-sizes.test.ts:532: it('DINT/UDINT/DWORD: values outside 32-bit range truncate to low 4 bytes', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-types.test.ts:120: it('handles INT range correctly', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-types.test.ts:126: it('handles UINT range correctly', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-types.test.ts:131: it('handles DINT range', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\utils\__tests__\variable-types.test.ts:327: it('accepts control characters within ASCII range', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:59: private debuggerModbusClient: ModbusTcpClient | ModbusRtuClient | null = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:60: private debuggerWebSocketClient: WebSocketDebugTransport | null = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:61: private debuggerTargetIp: string | null = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:62: private debuggerReconnecting: boolean = false +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:63: private debuggerConnectionType: 'tcp' | 'rtu' | 'websocket' | 'simulator' | null = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:64: private debuggerRtuPort: string | null = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:65: private debuggerRtuBaudRate: number | null = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:66: private debuggerRtuSlaveId: number | null = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:67: private debuggerJwtToken: string | null = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:110: private readonly RUNTIME_CONNECTION_TIMEOUT_MS = 5000 // 5 seconds (important-comment) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:851: // ===================== DEBUGGER ===================== +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:852: this.registerHandle('debugger:verify-md5', this.handleDebuggerVerifyMd5) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:853: this.registerHandle('debugger:read-program-st-md5', this.handleReadProgramStMd5) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:854: this.registerHandle('debugger:get-variables-list', this.handleDebuggerGetVariablesList) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:855: this.registerHandle('debugger:set-variable', this.handleDebuggerSetVariable) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:856: this.registerHandle('debugger:connect', this.handleDebuggerConnect) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:857: this.registerHandle('debugger:disconnect', this.handleDebuggerDisconnect) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1252: void this.compilerModule.compileForDebugger(args, mainProcessPort, this) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1417: handleDebuggerVerifyMd5 = async ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1452: this.debuggerModbusClient = client +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1453: this.debuggerConnectionType = 'simulator' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1460: if (!this.debuggerWebSocketClient) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1469: wsClient = this.debuggerWebSocketClient +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1476: if (!this.debuggerWebSocketClient) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1477: this.debuggerWebSocketClient = wsClient +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1478: this.debuggerTargetIp = connectionParams.ipAddress +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1479: this.debuggerJwtToken = connectionParams.jwtToken +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1480: this.debuggerConnectionType = 'websocket' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1500: this.debuggerModbusClient && +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1501: this.debuggerConnectionType === 'rtu' && +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1502: this.debuggerRtuPort === connectionParams.port +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1504: const { md5: targetMd5, targetEndian } = await this.debuggerModbusClient.getMd5Hash() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1525: this.debuggerModbusClient = client +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1526: this.debuggerConnectionType = 'rtu' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1527: this.debuggerRtuPort = connectionParams.port! +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1528: this.debuggerRtuBaudRate = connectionParams.baudRate! +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1529: this.debuggerRtuSlaveId = connectionParams.slaveId! +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1575: handleDebuggerGetVariablesList = async ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1586: // If connection type is null, the debugger was intentionally disconnected. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1588: if (this.debuggerConnectionType === null) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1589: return { success: false, error: 'Debugger not connected' } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1592: if (this.debuggerConnectionType === 'websocket') { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1593: if (!this.debuggerWebSocketClient) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1594: if (this.debuggerReconnecting) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1598: this.debuggerReconnecting = true +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1600: if (!this.debuggerTargetIp || !this.debuggerJwtToken) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1601: this.debuggerReconnecting = false +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1604: this.debuggerWebSocketClient = new WebSocketDebugTransport({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1605: host: this.debuggerTargetIp, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1607: token: this.debuggerJwtToken, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1610: await this.debuggerWebSocketClient.connect() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1611: this.debuggerReconnecting = false +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1613: this.debuggerWebSocketClient = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1614: this.debuggerReconnecting = false +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1620: const result = await this.debuggerWebSocketClient.getVariablesList(variableIndexes) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1633: if (this.debuggerWebSocketClient) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1634: this.debuggerWebSocketClient.disconnect() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1635: this.debuggerWebSocketClient = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1641: if (!this.debuggerModbusClient) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1642: if (this.debuggerReconnecting) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1646: this.debuggerReconnecting = true +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1648: if (this.debuggerConnectionType === 'simulator') { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1650: this.debuggerModbusClient = new ModbusRtuClient({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1657: } else if (this.debuggerConnectionType === 'tcp') { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1658: if (!this.debuggerTargetIp) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1659: this.debuggerReconnecting = false +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1662: this.debuggerModbusClient = new ModbusTcpClient({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1663: host: this.debuggerTargetIp, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1667: } else if (this.debuggerConnectionType === 'rtu') { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1668: if (!this.debuggerRtuPort || !this.debuggerRtuBaudRate || this.debuggerRtuSlaveId === null) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1669: this.debuggerReconnecting = false +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1672: this.debuggerModbusClient = new ModbusRtuClient({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1673: port: this.debuggerRtuPort, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1674: baudRate: this.debuggerRtuBaudRate, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1675: slaveId: this.debuggerRtuSlaveId, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1679: this.debuggerReconnecting = false +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1683: await this.debuggerModbusClient.connect() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1684: this.debuggerReconnecting = false +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1686: this.debuggerModbusClient = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1687: this.debuggerReconnecting = false +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1693: const result = await this.debuggerModbusClient.getVariablesList(variableIndexes) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1706: if (this.debuggerModbusClient) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1707: this.debuggerModbusClient.disconnect() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1708: this.debuggerModbusClient = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1714: handleDebuggerConnect = async ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1727: if (this.debuggerModbusClient) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1728: this.debuggerModbusClient.disconnect() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1729: this.debuggerModbusClient = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1733: this.debuggerModbusClient = new ModbusRtuClient({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1740: await this.debuggerModbusClient.connect() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1745: // handleDebuggerVerifyMd5) where the result feeds the swap +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1747: await this.debuggerModbusClient.getMd5Hash() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1749: if (this.debuggerModbusClient) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1750: this.debuggerModbusClient.disconnect() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1751: this.debuggerModbusClient = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1758: if (!this.debuggerWebSocketClient || this.debuggerConnectionType !== 'websocket') { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1759: if (this.debuggerWebSocketClient) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1760: this.debuggerWebSocketClient.disconnect() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1761: this.debuggerWebSocketClient = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1764: this.debuggerWebSocketClient = new WebSocketDebugTransport({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1770: await this.debuggerWebSocketClient.connect() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1773: this.debuggerTargetIp = connectionParams.ipAddress +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1774: this.debuggerJwtToken = connectionParams.jwtToken +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1776: if (this.debuggerModbusClient) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1777: this.debuggerModbusClient.disconnect() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1778: this.debuggerModbusClient = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1784: this.debuggerModbusClient = new ModbusTcpClient({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1789: await this.debuggerModbusClient.connect() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1790: this.debuggerTargetIp = connectionParams.ipAddress +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1797: this.debuggerModbusClient && +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1798: this.debuggerConnectionType === 'rtu' && +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1799: this.debuggerRtuPort === connectionParams.port && +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1800: this.debuggerRtuBaudRate === connectionParams.baudRate && +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1801: this.debuggerRtuSlaveId === connectionParams.slaveId +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1803: this.debuggerReconnecting = false +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1807: if (this.debuggerModbusClient) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1808: this.debuggerModbusClient.disconnect() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1809: this.debuggerModbusClient = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1812: this.debuggerModbusClient = new ModbusRtuClient({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1818: await this.debuggerModbusClient.connect() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1819: this.debuggerRtuPort = connectionParams.port +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1820: this.debuggerRtuBaudRate = connectionParams.baudRate +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1821: this.debuggerRtuSlaveId = connectionParams.slaveId +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1824: this.debuggerConnectionType = connectionType +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1825: this.debuggerReconnecting = false +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1829: this.debuggerModbusClient = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1830: this.debuggerWebSocketClient = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1831: this.debuggerTargetIp = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1832: this.debuggerConnectionType = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1833: this.debuggerRtuPort = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1834: this.debuggerRtuBaudRate = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1835: this.debuggerRtuSlaveId = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1836: this.debuggerJwtToken = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1841: handleDebuggerDisconnect = (_event: IpcMainInvokeEvent): Promise<{ success: boolean }> => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1842: if (this.debuggerModbusClient) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1843: this.debuggerModbusClient.disconnect() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1844: this.debuggerModbusClient = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1846: if (this.debuggerWebSocketClient) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1847: this.debuggerWebSocketClient.disconnect() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1848: this.debuggerWebSocketClient = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1850: this.debuggerTargetIp = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1851: this.debuggerConnectionType = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1852: this.debuggerRtuPort = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1853: this.debuggerRtuBaudRate = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1854: this.debuggerRtuSlaveId = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1855: this.debuggerJwtToken = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1856: this.debuggerReconnecting = false +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1860: handleDebuggerSetVariable = async ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1868: if (this.debuggerConnectionType === 'websocket') { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1869: if (!this.debuggerWebSocketClient) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1871: return { success: false, error: 'Not connected to debugger' } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1879: const result = await this.debuggerWebSocketClient.setVariable(variableIndex, force, valueBytes) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1888: if (!this.debuggerModbusClient) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1890: return { success: false, error: 'Not connected to debugger' } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\main.ts:1894: const result = await this.debuggerModbusClient.setVariable(variableIndex, force, buffer) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\renderer.ts:389: debuggerVerifyMd5: ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\renderer.ts:400: ipcRenderer.invoke('debugger:verify-md5', connectionType, connectionParams, expectedMd5), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\renderer.ts:402: debuggerReadProgramStMd5: ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\renderer.ts:406: ipcRenderer.invoke('debugger:read-program-st-md5', projectPath, boardTarget), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\renderer.ts:408: debuggerGetVariablesList: ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\renderer.ts:417: }> => ipcRenderer.invoke('debugger:get-variables-list', variableIndexes), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\renderer.ts:419: debuggerSetVariable: ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\renderer.ts:424: ipcRenderer.invoke('debugger:set-variable', variableIndex, force, valueBuffer), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\renderer.ts:426: debuggerConnect: ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\renderer.ts:436: ipcRenderer.invoke('debugger:connect', connectionType, connectionParams), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\main\modules\ipc\renderer.ts:438: debuggerDisconnect: (): Promise<{ success: boolean }> => ipcRenderer.invoke('debugger:disconnect'), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\editor-platform.ts:18: import { createEditorDebuggerAdapter } from './adapters/editor/debugger-adapter' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\editor-platform.ts:57: debugger: createEditorDebuggerAdapter(), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\compiler-adapter.ts:41: variables: unknown[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\compiler-adapter.ts:51: originalCppPous?: Array<{ name: string; code: string; variables: unknown[] }> +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\compiler-adapter.ts:60: variables: (pou.interface?.variables ?? []) as unknown[], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\compiler-adapter.ts:134: // `variables` rides through the StlibArchiveDTO as `unknown[]` +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\compiler-adapter.ts:142: interface: { variables: block.variables as PLCVariable[] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\debugger-adapter.ts:2: * Editor DebuggerPort adapter — delegates to Electron IPC bridge. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\debugger-adapter.ts:4: * Communicates with the main process debugger handlers via window.bridge.debugger* +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\debugger-adapter.ts:14: import type { DebuggerPort } from '../../shared/ports/debugger-port' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\debugger-adapter.ts:23: export function createEditorDebuggerAdapter(): DebuggerPort { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\debugger-adapter.ts:30: const result = await window.bridge.debuggerConnect(config.connectionType, config.connectionParams) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\debugger-adapter.ts:40: const result = await window.bridge.debuggerDisconnect() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\debugger-adapter.ts:51: async getVariablesList(indexes: number[]): Promise { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\debugger-adapter.ts:53: return await window.bridge.debuggerGetVariablesList(indexes) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\debugger-adapter.ts:61: return await window.bridge.debuggerSetVariable(index, force, valueBuffer) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\debugger-adapter.ts:69: return await window.bridge.debuggerVerifyMd5(config.connectionType, config.connectionParams, expectedMd5) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\debugger-adapter.ts:80: return await window.bridge.debuggerReadProgramStMd5(projectPath, boardTarget) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\project-adapter.ts:42: variables: unknown[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\project-adapter.ts:46: variablesText?: string +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\project-adapter.ts:62: configuration: { resource: { tasks: PLCTask[]; instances: PLCInstance[]; globalVariables: PLCVariable[] } } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\project-adapter.ts:65: debugVariables?: { global?: string[]; pous?: Record } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\project-adapter.ts:91: variables: ipcPou.data.variables as PLCVariable[], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\project-adapter.ts:107: variables: (portPou.interface?.variables ?? []) as unknown[], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\project-adapter.ts:163: debugVariables: content.project.data.debugVariables, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\remote-catalog-mock.ts:209: 'OpenPLC HAL support for the Facts Engineering P1AM-200 industrial controller and its Productivity1000-series I/O modules.', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\simulator-adapter.ts:11: * connectDebugger/disconnectDebugger are no-ops: the main process automatically +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\simulator-adapter.ts:12: * wires the VirtualSerialPort when debuggerConnect is called with 'simulator' type. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\simulator-adapter.ts:70: async connectDebugger(): Promise { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\simulator-adapter.ts:72: // when debuggerConnect is called with 'simulator' connection type. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\simulator-adapter.ts:75: disconnectDebugger(): void { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\simulator-adapter.ts:77: // when debuggerDisconnect is called. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\simulator-adapter.ts:85: const result = await window.bridge.debuggerReadProgramStMd5(projectPath, boardTarget) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\simulator-adapter.ts:92: async getDebugVariablesList(indexes: number[]): Promise { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\simulator-adapter.ts:93: const result = await window.bridge.debuggerGetVariablesList(indexes) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\simulator-adapter.ts:124: return window.bridge.debuggerSetVariable(index, force, valueBuffer ? new Uint8Array(valueBuffer) : undefined) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\compiler-adapter.test.ts:18: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\compiler-adapter.test.ts:36: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\compiler-adapter.test.ts:45: globalVariables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\compiler-adapter.test.ts:103: expect(result.data.variables).toHaveLength(1) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\compiler-adapter.test.ts:115: expect(result.data.variables).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\compiler-adapter.test.ts:125: expect(result.data.variables).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\compiler-adapter.test.ts:145: originalCppPous: [{ name: 'cpp_pou', code: 'void setup(){}', variables: [] }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\compiler-adapter.test.ts:149: expect(result.originalCppPous).toEqual([{ name: 'cpp_pou', code: 'void setup(){}', variables: [] }]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\compiler-adapter.test.ts:549: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\compiler-adapter.test.ts:593: cppBlocks: [{ name: 'OK', code: 'void setup(){}void loop(){}', variables: [] }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\compiler-adapter.test.ts:598: cppBlocks: [{ name: 'Leak', code: 'void setup(){}void loop(){}', variables: [] }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\compiler-adapter.test.ts:775: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\compiler-adapter.test.ts:780: resource: { tasks: [], instances: [], globalVariables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\compiler-adapter.test.ts:805: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\compiler-adapter.test.ts:810: resource: { tasks: [], instances: [], globalVariables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\compiler-adapter.test.ts:886: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\compiler-adapter.test.ts:891: resource: { tasks: [], instances: [], globalVariables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\compiler-adapter.test.ts:918: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\compiler-adapter.test.ts:923: resource: { tasks: [], instances: [], globalVariables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\compiler-adapter.test.ts:968: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\compiler-adapter.test.ts:973: resource: { tasks: [], instances: [], globalVariables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\compiler-adapter.test.ts:1003: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\compiler-adapter.test.ts:1008: resource: { tasks: [], instances: [], globalVariables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:1: import type { DebuggerPort } from '../../../shared/ports/debugger-port' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:3: import { createEditorDebuggerAdapter } from '../debugger-adapter' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:5: let adapter: DebuggerPort +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:16: debuggerConnect: jest.fn().mockResolvedValue({ success: true }), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:17: debuggerDisconnect: jest.fn().mockResolvedValue({ success: true }), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:18: debuggerGetVariablesList: jest.fn().mockResolvedValue({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:24: debuggerSetVariable: jest.fn().mockResolvedValue({ success: true }), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:25: debuggerVerifyMd5: jest.fn().mockResolvedValue({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:30: debuggerReadProgramStMd5: jest.fn().mockResolvedValue({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:40: adapter = createEditorDebuggerAdapter() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:51: expect(window.bridge.debuggerConnect).toHaveBeenCalledWith('tcp', { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:65: ;(window.bridge.debuggerConnect as jest.Mock).mockResolvedValue({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:74: ;(window.bridge.debuggerConnect as jest.Mock).mockRejectedValue(new Error('IPC failed')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:83: expect(window.bridge.debuggerConnect).toHaveBeenCalledWith('simulator', {}) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:96: expect(window.bridge.debuggerConnect).toHaveBeenCalledWith('websocket', { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:113: expect(window.bridge.debuggerConnect).toHaveBeenCalledWith('rtu', { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:130: expect(window.bridge.debuggerDisconnect).toHaveBeenCalled() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:156: ;(window.bridge.debuggerDisconnect as jest.Mock).mockRejectedValue(new Error('IPC error')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:170: // getVariablesList +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:173: describe('getVariablesList', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:175: const result = await adapter.getVariablesList([0, 1, 2, 3, 4]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:177: expect(window.bridge.debuggerGetVariablesList).toHaveBeenCalledWith([0, 1, 2, 3, 4]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:187: ;(window.bridge.debuggerGetVariablesList as jest.Mock).mockResolvedValue({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:194: const result = await adapter.getVariablesList([0, 1]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:200: ;(window.bridge.debuggerGetVariablesList as jest.Mock).mockRejectedValue(new Error('Timeout')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:201: const result = await adapter.getVariablesList([0]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:216: expect(window.bridge.debuggerSetVariable).toHaveBeenCalledWith(5, true, buffer) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:223: expect(window.bridge.debuggerSetVariable).toHaveBeenCalledWith(5, false, undefined) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:228: ;(window.bridge.debuggerSetVariable as jest.Mock).mockRejectedValue(new Error('Write failed')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:243: expect(window.bridge.debuggerVerifyMd5).toHaveBeenCalledWith( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:257: expect(window.bridge.debuggerVerifyMd5).toHaveBeenCalledWith( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:265: expect(window.bridge.debuggerVerifyMd5).toHaveBeenCalledWith('simulator', {}, 'md5-2') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:269: ;(window.bridge.debuggerVerifyMd5 as jest.Mock).mockRejectedValue(new Error('MD5 check failed')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:284: expect(window.bridge.debuggerReadProgramStMd5).toHaveBeenCalledWith('/home/user/project', 'arduino_mega') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\debugger-adapter.test.ts:292: ;(window.bridge.debuggerReadProgramStMd5 as jest.Mock).mockRejectedValue(new Error('File not found')) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\project-adapter.test.ts:15: resource: { tasks: [], instances: [], globalVariables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\project-adapter.test.ts:24: variables: [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\project-adapter.test.ts:35: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\project-adapter.test.ts:79: configuration: { resource: { tasks: [], instances: [], globalVariables: [] } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\project-adapter.test.ts:164: variables: [{ name: 'x', type: { definition: 'base-type', value: 'BOOL' }, location: '', documentation: '' }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\project-adapter.test.ts:177: interface: { returnType: 'INT', variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\project-adapter.test.ts:187: resource: { tasks: [], instances: [], globalVariables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\project-adapter.test.ts:592: interface: { returnType: 'INT', variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\project-adapter.test.ts:605: interface: { variables: [] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\project-adapter.test.ts:624: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\project-adapter.test.ts:638: variables: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\remote-catalog-mock.test.ts:4: it('returns a valid RemoteCatalog with at least one entry and a fresh ISO timestamp', async () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\simulator-adapter.test.ts:218: // connectDebugger +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\simulator-adapter.test.ts:221: describe('connectDebugger', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\simulator-adapter.test.ts:223: await expect(adapter.connectDebugger()).resolves.toBeUndefined() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\simulator-adapter.test.ts:228: // disconnectDebugger +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\simulator-adapter.test.ts:231: describe('disconnectDebugger', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\simulator-adapter.test.ts:233: expect(() => adapter.disconnectDebugger()).not.toThrow() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\simulator-adapter.test.ts:250: debuggerReadProgramStMd5: jest.fn().mockResolvedValue({ success: true, md5: 'abc123' }), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\simulator-adapter.test.ts:260: expect(window.bridge.debuggerReadProgramStMd5).toHaveBeenCalledWith('/project', 'Arduino Mega') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\simulator-adapter.test.ts:267: debuggerReadProgramStMd5: jest.fn().mockResolvedValue({ success: false, error: 'File not found' }), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\simulator-adapter.test.ts:281: debuggerReadProgramStMd5: jest.fn().mockResolvedValue({ success: false }), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\simulator-adapter.test.ts:294: // getDebugVariablesList +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\simulator-adapter.test.ts:297: describe('getDebugVariablesList', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\simulator-adapter.test.ts:301: debuggerGetVariablesList: jest.fn(), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\simulator-adapter.test.ts:306: ;(window.bridge.debuggerGetVariablesList as jest.Mock).mockResolvedValue({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\simulator-adapter.test.ts:313: const result = await adapter.getDebugVariablesList([0, 1, 2]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\simulator-adapter.test.ts:315: expect(window.bridge.debuggerGetVariablesList).toHaveBeenCalledWith([0, 1, 2]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\simulator-adapter.test.ts:325: ;(window.bridge.debuggerGetVariablesList as jest.Mock).mockResolvedValue({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\simulator-adapter.test.ts:330: const result = await adapter.getDebugVariablesList([0]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\simulator-adapter.test.ts:336: ;(window.bridge.debuggerGetVariablesList as jest.Mock).mockResolvedValue({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\simulator-adapter.test.ts:342: const result = await adapter.getDebugVariablesList([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\simulator-adapter.test.ts:361: debuggerSetVariable: jest.fn().mockResolvedValue({ success: true }), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\simulator-adapter.test.ts:368: expect(window.bridge.debuggerSetVariable).toHaveBeenCalledWith(5, true, new Uint8Array([0, 255, 16])) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\simulator-adapter.test.ts:375: expect(window.bridge.debuggerSetVariable).toHaveBeenCalledWith(5, true, new Uint8Array([0, 255, 16])) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\simulator-adapter.test.ts:381: expect(window.bridge.debuggerSetVariable).toHaveBeenCalledWith(3, false, undefined) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\adapters\editor\__tests__\simulator-adapter.test.ts:387: expect(window.bridge.debuggerSetVariable).toHaveBeenCalledWith(3, true, undefined) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\block-types.ts:3: import { BaseLibraryPouSchema, BaseLibraryVariableSchema, baseTypeSchema, genericTypeSchema } from './plc-schemas' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\block-types.ts:5: const blockVariantVariableSchema = BaseLibraryVariableSchema.extend({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\block-types.ts:21: variables: z.array(blockVariantVariableSchema), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\block-types.ts:27: export { blockVariantSchema, blockVariantVariableSchema } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\compiler-port.ts:102: * Used before connecting the debugger to verify program integrity. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\debug-spec-types.ts:45: * the debugger transport). `required` produces an error result +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\debug-spec-types.ts:82: /** Which transport `DebuggerPort.connect` will receive. */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\debugger-port.ts:2: * DebuggerPort — Abstracts the debug protocol for reading/writing PLC variables. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\debugger-port.ts:13: * - window.bridge.debuggerConnect() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\debugger-port.ts:14: * - window.bridge.debuggerDisconnect() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\debugger-port.ts:15: * - window.bridge.debuggerGetVariablesList() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\debugger-port.ts:16: * - window.bridge.debuggerSetVariable() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\debugger-port.ts:17: * - window.bridge.debuggerVerifyMd5() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\debugger-port.ts:18: * - window.bridge.debuggerReadProgramStMd5() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\debugger-port.ts:24: * - debugBridge.getVariablesList() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\debugger-port.ts:33: export interface DebuggerPort { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\debugger-port.ts:49: getVariablesList(indexes: number[]): Promise +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\debugger-port.ts:84: * Subscribe to debugger disconnection events (e.g., simulator stopped, connection lost). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\debugger-port.ts:89: /** Check if the debugger is currently connected. */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\esi-types.ts:425: /** ISO 8601 UTC timestamp when this file was loaded */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\esi-types.ts:444: /** ISO 8601 UTC timestamp when this file was loaded */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\esi-types.ts:523: /** SDO (Service Data Object) operation timeout in milliseconds */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\esi-types.ts:525: /** Init to Pre-Operational state transition timeout in milliseconds */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\esi-types.ts:527: /** Pre-Op to Safe-Op and Safe-Op to Operational transition timeout in milliseconds */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\esi-types.ts:537: /** Sync Manager watchdog time in milliseconds */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\esi-types.ts:541: /** PDI watchdog time in milliseconds */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\esi-types.ts:552: /** Base sync unit cycle time in microseconds. 0 = use master cycle time */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\esi-types.ts:556: /** SYNC0 cycle time in microseconds. 0 = use master cycle time */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\esi-types.ts:558: /** SYNC0 shift/offset time in microseconds */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\esi-types.ts:562: /** SYNC1 cycle time in microseconds. 0 = use master cycle time */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\esi-types.ts:564: /** SYNC1 shift/offset time in microseconds */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\ethercat-types.ts:105: /** Scan timeout in milliseconds (default: 5000) */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\ethercat-types.ts:118: /** Time taken to complete the scan in milliseconds */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\ethercat-types.ts:134: /** Connection test timeout in milliseconds (default: 3000) */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\ethercat-types.ts:149: /** Response time in milliseconds */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\ethercat-types.ts:190: /** Cycle time in milliseconds */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\ethercat-types.ts:298: /** Moving-average bus-exchange duration in microseconds. Time-based EWMA +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\ethercat-types.ts:301: /** Best-case bus-exchange duration in microseconds */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\ethercat-types.ts:303: /** Worst-case bus-exchange duration in microseconds */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\ethercat-types.ts:305: /** Best-case process data exchange time in microseconds (just SOEM RTT) */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\ethercat-types.ts:307: /** Maximum process data exchange time in microseconds (just SOEM RTT) */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\ethercat-types.ts:309: /** Average observed period between cycle starts (microseconds). On a +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\ethercat-types.ts:312: /** Worst-case observed cycle period in microseconds */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\ethercat-types.ts:314: /** Best-case observed cycle period in microseconds */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\ethercat-types.ts:316: /** Average wake-up scheduling delay (microseconds). How much later +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\ethercat-types.ts:319: /** Worst-case wake-up scheduling delay in microseconds */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\ethercat-types.ts:321: /** Best-case wake-up scheduling delay in microseconds */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\index.ts:24: * const { compiler, runtime, debugger } = usePlatform() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\index.ts:30: * 3. DebuggerPort — Debug protocol (variable read/write) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\index.ts:58: export type { DebuggerPort } from './debugger-port' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\index.ts:89: // Debugger +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\index.ts:93: // Debugger session +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\index.ts:137: BaseLibraryVariableSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\library-port.ts:100: variables: unknown[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\library-port.ts:117: * install timestamp) instead of full archive bodies. Cheaper than +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\library-types.ts:34: variables: SystemLibraryVariable[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\library-types.ts:111: /** ISO timestamp; empty string for bundled libs (which have no +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\open-plc-types.ts:44: variables: PLCVariable[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\open-plc-types.ts:47: variablesText?: string +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\open-plc-types.ts:54: variables: PLCVariable[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\open-plc-types.ts:57: variablesText?: string +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\open-plc-types.ts:63: variables: PLCVariable[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\open-plc-types.ts:66: variablesText?: string +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\open-plc-types.ts:86: globalVariables: PLCVariable[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\open-plc-types.ts:100: debugVariables?: Record +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\plc-schemas.ts:72: * Schema for variables used in library functions and function blocks. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\plc-schemas.ts:74: const BaseLibraryVariableSchema = z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\plc-schemas.ts:82: initialValue: z.lazy((): z.Schema => BaseLibraryVariableSchema.pick({ type: true })).optional(), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\plc-schemas.ts:93: variables: z.array(BaseLibraryVariableSchema), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\plc-schemas.ts:99: export { BaseLibraryPouSchema, BaseLibraryVariableSchema, baseTypeEnum, baseTypeSchema, genericTypeSchema } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\simulator-port.ts:24: * - simulatorService.connectDebugger() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\simulator-port.ts:25: * - simulatorService.disconnectDebugger() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\simulator-port.ts:52: * Connect the debugger to the running simulator. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\simulator-port.ts:55: * triggers debuggerConnect with 'simulator' type. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\simulator-port.ts:57: connectDebugger(): Promise +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\simulator-port.ts:60: * Disconnect the debugger from the simulator. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\simulator-port.ts:63: disconnectDebugger(): void +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\simulator-port.ts:67: * Only available when debugger is connected. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\simulator-port.ts:75: getDebugVariablesList(indexes: number[]): Promise +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:117: variables: PLCVariable[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:133: variables: PLCVariable[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:136: variablesText?: string +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:142: variables: PLCVariable[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:145: variablesText?: string +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:151: variables: PLCVariable[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:154: variablesText?: string +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:442: globalVariables: PLCVariable[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:461: debugVariables?: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:478: * conditional that hides or rearranges affordances for libraries +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:524: /** Show the debugger panel + watch list. */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:525: hasDebugger: boolean +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:547: hasDebugger: false, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:562: hasDebugger: true, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:578: import type { DebuggerTransport, TargetCapabilities } from '../utils/target-capabilities' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:580: export type { DebuggerTransport, TargetCapabilities } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:662: /** Key/value pairs (channels, resolution, range, ...) rendered as a +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:1012: timestamp: string +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:1018: // Debugger +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:1154: // Debugger Tree +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:1166: /** Debug Tree Node — represents a node in the hierarchical debugger variable tree */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:1253: * Resolved by the composition root from environment variables and persistent storage. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:1296: timestamp: number +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:1317: export type SubscriptionStatus = 'trialing' | 'active' | 'past_due' | 'paused' | 'canceled' | 'expired' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\types.ts:1423: * Set when `code === 'rate_limit_exceeded'`. ISO-8601 timestamp at which the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\version-control-port.ts:47: timestamp: string +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\version-control-port.ts:61: timestamp: string +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\version-control-port.ts:86: /** ISO-8601 creation timestamp. */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\codesys\pous\languages\fbd-diagram.ts:19: * - inVariable: an array of objects that represent the input variables of the block. Each object includes a @formalParameter and a connectionPointIn. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\codesys\pous\languages\fbd-diagram.ts:20: * - outVariable: an array of objects that represent the output variables of the block. Each object includes a formalParameter and a connectionPointOut'. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\codesys\pous\languages\fbd-diagram.ts:35: inputVariables: z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\codesys\pous\languages\fbd-diagram.ts:51: * 'inOutVariable' is an array of objects that represent the inOut variables of the block. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\codesys\pous\languages\fbd-diagram.ts:54: inOutVariables: z.string(), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\codesys\pous\languages\fbd-diagram.ts:55: outputVariables: z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\codesys\pous\languages\fbd-diagram.ts:79: const inVariableSchema = z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\codesys\pous\languages\fbd-diagram.ts:92: type InVariableFbdXML = z.infer +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\codesys\pous\languages\fbd-diagram.ts:106: const outVariableSchema = z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\codesys\pous\languages\fbd-diagram.ts:126: type OutVariableFbdXML = z.infer +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\codesys\pous\languages\fbd-diagram.ts:214: inVariable: z.array(inVariableSchema), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\codesys\pous\languages\fbd-diagram.ts:215: outVariable: z.array(outVariableSchema), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\codesys\pous\languages\fbd-diagram.ts:228: inVariableSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\codesys\pous\languages\fbd-diagram.ts:229: outVariableSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\codesys\pous\languages\ladder-diagram.ts:65: * - inVariable: an array of objects that represent the input variables of the block. Each object includes a @formalParameter and a connectionPointIn. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\codesys\pous\languages\ladder-diagram.ts:66: * - outVariable: an array of objects that represent the output variables of the block. Each object includes a formalParameter and a connectionPointOut'. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\codesys\pous\languages\ladder-diagram.ts:81: inputVariables: z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\codesys\pous\languages\ladder-diagram.ts:96: * 'inOutVariable' is an array of objects that represent the inOut variables of the block. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\codesys\pous\languages\ladder-diagram.ts:99: inOutVariables: z.string(), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\codesys\pous\languages\ladder-diagram.ts:100: outputVariables: z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\codesys\pous\languages\ladder-diagram.ts:202: const inVariableSchema = z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\codesys\pous\languages\ladder-diagram.ts:215: type InVariableLadderXML = z.infer +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\codesys\pous\languages\ladder-diagram.ts:229: const outVariableSchema = z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\codesys\pous\languages\ladder-diagram.ts:249: type OutVariableLadderXML = z.infer +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\codesys\pous\languages\ladder-diagram.ts:260: inVariable: z.array(inVariableSchema), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\codesys\pous\languages\ladder-diagram.ts:261: outVariable: z.array(outVariableSchema), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\codesys\pous\languages\ladder-diagram.ts:269: inVariableSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\codesys\pous\languages\ladder-diagram.ts:272: outVariableSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\fbd-diagram.ts:19: * - inVariable: an array of objects that represent the input variables of the block. Each object includes a @formalParameter and a connectionPointIn. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\fbd-diagram.ts:20: * - outVariable: an array of objects that represent the output variables of the block. Each object includes a formalParameter and a connectionPointOut'. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\fbd-diagram.ts:35: inputVariables: z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\fbd-diagram.ts:61: * 'inOutVariable' is an array of objects that represent the inOut variables of the block. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\fbd-diagram.ts:64: inOutVariables: z.string(), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\fbd-diagram.ts:65: outputVariables: z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\fbd-diagram.ts:92: const inVariableSchema = z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\fbd-diagram.ts:110: type InVariableFbdXML = z.infer +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\fbd-diagram.ts:126: const inOutVariableSchema = z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\fbd-diagram.ts:162: type InOutVariableFbdXML = z.infer +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\fbd-diagram.ts:176: const outVariableSchema = z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\fbd-diagram.ts:206: type OutVariableFbdXML = z.infer +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\fbd-diagram.ts:299: inVariable: z.array(inVariableSchema), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\fbd-diagram.ts:300: inOutVariable: z.array(inOutVariableSchema), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\fbd-diagram.ts:301: outVariable: z.array(outVariableSchema), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\fbd-diagram.ts:314: inOutVariableSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\fbd-diagram.ts:315: inVariableSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\fbd-diagram.ts:316: outVariableSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\ladder-diagram.ts:86: * - inVariable: an array of objects that represent the input variables of the block. Each object includes a @formalParameter and a connectionPointIn. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\ladder-diagram.ts:87: * - outVariable: an array of objects that represent the output variables of the block. Each object includes a formalParameter and a connectionPointOut'. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\ladder-diagram.ts:102: inputVariables: z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\ladder-diagram.ts:127: * 'inOutVariable' is an array of objects that represent the inOut variables of the block. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\ladder-diagram.ts:130: inOutVariables: z.string(), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\ladder-diagram.ts:131: outputVariables: z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\ladder-diagram.ts:267: const inVariableSchema = z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\ladder-diagram.ts:284: type InVariableLadderXML = z.infer +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\ladder-diagram.ts:300: const inOutVariableSchema = z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\ladder-diagram.ts:335: type InOutVariableLadderXML = z.infer +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\ladder-diagram.ts:349: const outVariableSchema = z.object({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\ladder-diagram.ts:378: type OutVariableLadderXML = z.infer +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\ladder-diagram.ts:389: inVariable: z.array(inVariableSchema), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\ladder-diagram.ts:390: inOutVariable: z.array(inOutVariableSchema), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\ladder-diagram.ts:391: outVariable: z.array(outVariableSchema), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\ladder-diagram.ts:399: inOutVariableSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\ladder-diagram.ts:400: inVariableSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\xml-types\old-editor\pous\languages\ladder-diagram.ts:403: outVariableSchema, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\__tests__\project-capabilities.test.ts:7: * a debugger button" bug. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\__tests__\project-capabilities.test.ts:42: expect(caps.hasDebugger).toBe(true) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\ports\__tests__\project-capabilities.test.ts:63: expect(caps.hasDebugger).toBe(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\providers\index.ts:8: useDebugger, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\providers\platform-context.tsx:61: export function useDebugger() { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\providers\platform-context.tsx:62: return usePlatform().debugger +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\providers\types.ts:9: import type { DebuggerPort } from '../ports/debugger-port' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\providers\types.ts:29: debugger: DebuggerPort +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\alias-registry.ts:161: * alias is the normal way to detach a channel from its variables). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\alias-registry.ts:171: * silently first-wins on duplicates and the variables bound to the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\sync-variable-aliases.ts:2: * Sync variables against the current alias registry. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\sync-variable-aliases.ts:13: * alias — this is what keeps variables coherent +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\sync-variable-aliases.ts:30: * `variables` array back to the project state. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\sync-variable-aliases.ts:53: variables: V[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\sync-variable-aliases.ts:58: variables: readonly V[], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\sync-variable-aliases.ts:64: for (const variable of variables) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\sync-variable-aliases.ts:116: return { variables: next, report } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\sync-variable-aliases.test.ts:22: it('returns variables unchanged and an empty report when none have aliases or matching addresses', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\sync-variable-aliases.test.ts:26: expect(result.variables).toEqual(vars) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\sync-variable-aliases.test.ts:38: expect(result.variables[0].alias).toBe('conveyor_motor') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\sync-variable-aliases.test.ts:39: expect(result.variables[0].location).toBe('%QX0.0') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\sync-variable-aliases.test.ts:49: expect(result.variables[0].location).toBe('%QX1.5') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\sync-variable-aliases.test.ts:50: expect(result.variables[0].alias).toBe('conveyor_motor') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\sync-variable-aliases.test.ts:60: expect(result.variables).toEqual(vars) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\sync-variable-aliases.test.ts:73: expect(result.variables[0].location).toBe('') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\sync-variable-aliases.test.ts:74: expect(result.variables[0].alias).toBe('removed_module') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\sync-variable-aliases.test.ts:80: it('handles a mix of adopted, refreshed, orphaned, and untouched variables in one pass', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\sync-variable-aliases.test.ts:92: expect(result.variables[0]).toMatchObject({ name: 'adopted', alias: 'pressure', location: '%IW1' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\sync-variable-aliases.test.ts:93: expect(result.variables[1]).toMatchObject({ name: 'refreshed', alias: 'valve_open', location: '%QX3.2' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\sync-variable-aliases.test.ts:94: // Orphaned variables retain their alias (for the UI warning) but +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\sync-variable-aliases.test.ts:97: expect(result.variables[2]).toMatchObject({ name: 'orphaned', alias: 'gone', location: '' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\sync-variable-aliases.test.ts:98: expect(result.variables[3]).toMatchObject({ name: 'untouched', location: '%MW100' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\sync-variable-aliases.test.ts:155: expect(result.variables[0]).toMatchObject({ name: 'tank_level_var', alias: 'tank_level', location: '%IW10' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\sync-variable-aliases.test.ts:156: expect(result.variables[1]).toMatchObject({ name: 'temperature', alias: 'temp', location: '%IW20' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\sync-variable-aliases.test.ts:157: expect(result.variables[2]).toMatchObject({ name: 'estop_var', alias: 'estop', location: '%IX2.3' }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\sync-variable-aliases.test.ts:163: it('preserves carry-through fields (type, class, etc.) on changed variables', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\iec-address\__tests__\sync-variable-aliases.test.ts:175: expect(result.variables[0]).toMatchObject({ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\index.ts:8: export type { DebuggerTransport, TargetCapabilities } from './types' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\presets.ts:28: debuggerTransports: ['modbus-serial'], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\presets.ts:44: debuggerTransports: ['modbus-tcp'], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\presets.ts:62: debuggerTransports: ['websocket'], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\presets.ts:81: debuggerTransports: ['modbus-serial', 'modbus-tcp'], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\resolve.ts:47: debuggerTransports: [], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\types.ts:21: * Wire protocols a target can speak to the debugger. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\types.ts:32: export type DebuggerTransport = 'modbus-serial' | 'modbus-tcp' | 'websocket' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\types.ts:73: /** Which wire protocols the target supports for the debugger. */ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\types.ts:74: debuggerTransports: DebuggerTransport[] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:16: expect(caps.debuggerTransports).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:43: expect(caps.debuggerTransports).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:54: expect(caps.debuggerTransports).toEqual(RUNTIME_V4_CAPABILITIES.debuggerTransports) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:94: expect(caps.debuggerTransports).toEqual(ARDUINO_CLI_CAPABILITIES.debuggerTransports) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:102: capabilities: { modbusTcpServer: true, modbusTcpRemote: true, debuggerTransports: ['websocket'] }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:106: expect(caps.debuggerTransports).toEqual(['websocket']) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:120: expect(SIMULATOR_CAPABILITIES.debuggerTransports).toEqual(['modbus-serial']) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:132: expect(RUNTIME_V3_CAPABILITIES.debuggerTransports).toEqual(['modbus-tcp']) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:141: expect(RUNTIME_V4_CAPABILITIES.debuggerTransports).toEqual(['websocket']) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\middleware\shared\utils\target-capabilities\__tests__\resolve.test.ts:150: expect(ARDUINO_CLI_CAPABILITIES.debuggerTransports).toEqual(['modbus-serial', 'modbus-tcp']) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\__tests__\platform-context.test.tsx:10: useDebugger, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\__tests__\platform-context.test.tsx:34: debugger: createStubPort(), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\__tests__\platform-context.test.tsx:78: it('useDebugger returns debugger port', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\__tests__\platform-context.test.tsx:79: const { result } = renderHook(() => useDebugger(), { wrapper }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\__tests__\platform-context.test.tsx:80: expect(result.current).toBe(testPorts.debugger) From 5a1c8d2e27fc9675efbab9629128f6c478fd2726 Mon Sep 17 00:00:00 2001 From: Jeykco Date: Tue, 30 Jun 2026 22:34:30 -0500 Subject: [PATCH 10/16] Update index.tsx --- .../components/_organisms/debugger/index.tsx | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/frontend/components/_organisms/debugger/index.tsx b/src/frontend/components/_organisms/debugger/index.tsx index dd0b09c51..58d75363d 100644 --- a/src/frontend/components/_organisms/debugger/index.tsx +++ b/src/frontend/components/_organisms/debugger/index.tsx @@ -18,6 +18,8 @@ type SeriesEntry = { points: Point[]; isBool: boolean; compositeKey: string } const MAX_BUFFER_SECONDS = 600 // Keep 10 minutes of data regardless of displayed range +const HOLD_SAMPLE_INTERVAL_MS = 200 + const Debugger = ({ graphList }: DebuggerData) => { const [isPaused, setIsPaused] = useState(false) const [range, setRange] = useState(10) @@ -102,6 +104,42 @@ const Debugger = ({ graphList }: DebuggerData) => { setRenderTrigger((prev) => prev + 1) }, [debugBoolValues, debugNonBoolValues, isPaused, graphList]) + useEffect(() => { + if (isPaused || graphList.length === 0) return + + const timer = window.setInterval(() => { + const now = Date.now() + const bufferCutoff = now - MAX_BUFFER_SECONDS * 1000 + const activeKeys = new Set(graphList) + const histories = historiesRef.current + + for (const [compositeKey, entry] of histories) { + if (!activeKeys.has(compositeKey)) { + histories.delete(compositeKey) + continue + } + + const lastPoint = entry.points[entry.points.length - 1] + if (!lastPoint) continue + + const lastTimestamp = lastPoint.t ?? 0 + if (now - lastTimestamp < HOLD_SAMPLE_INTERVAL_MS * 0.75) continue + + entry.points = [ + ...entry.points, + { + ...lastPoint, + t: now, + }, + ].filter((point) => point.t >= bufferCutoff) + } + + setRenderTrigger((value) => value + 1) + }, HOLD_SAMPLE_INTERVAL_MS) + + return () => window.clearInterval(timer) + }, [isPaused, graphList]) + const renderSeries = useMemo(() => { const now = Date.now() const startTime = startTimeRef.current ?? now From 3160f26bdd48b27b1608ce1d5ed3e90b90b26323 Mon Sep 17 00:00:00 2001 From: Jeykco Date: Tue, 30 Jun 2026 23:15:27 -0500 Subject: [PATCH 11/16] fix modbus --- run-jwplc-editor-dev.bat | 207 ++++++++++++++++++ .../_molecules/charts/line-chart.tsx | 2 +- .../components/_organisms/debugger/index.tsx | 76 ++++--- 3 files changed, 253 insertions(+), 32 deletions(-) create mode 100644 run-jwplc-editor-dev.bat diff --git a/run-jwplc-editor-dev.bat b/run-jwplc-editor-dev.bat new file mode 100644 index 000000000..7da7cad6a --- /dev/null +++ b/run-jwplc-editor-dev.bat @@ -0,0 +1,207 @@ +@echo off +setlocal EnableExtensions EnableDelayedExpansion + +rem ============================================================================ +rem OpenPLC Editor - JWPLC Edition DEV runner - LOCAL +rem Ubicacion: +rem openplc-editor\run-jwplc-editor-dev.bat +rem +rem Uso normal: +rem run-jwplc-editor-dev.bat +rem +rem Este .bat NO genera instalador. +rem Ejecuta el editor en modo desarrollo con: +rem npm run dev +rem +rem Opciones: +rem run-jwplc-editor-dev.bat --install +rem run-jwplc-editor-dev.bat --lint +rem +rem Notas: +rem - Para cerrar el proceso dev, usa CTRL+C en esta ventana. +rem - Al terminar o fallar, espera ESC antes de cerrar. +rem ============================================================================ + +set "EXIT_CODE=0" + +set "ROOT=%~dp0" +if "%ROOT:~-1%"=="\" set "ROOT=%ROOT:~0,-1%" + +set "RUN_INSTALL=0" +set "RUN_LINT=0" + +:parse_args +if "%~1"=="" goto args_done +if /I "%~1"=="--install" set "RUN_INSTALL=1" +if /I "%~1"=="--lint" set "RUN_LINT=1" +shift +goto parse_args +:args_done + +echo. +echo ============================================================ +echo OpenPLC Editor - JWPLC Edition DEV runner +echo ============================================================ +echo Root: "%ROOT%" +echo Install: "%RUN_INSTALL%" +echo Lint: "%RUN_LINT%" +echo. + +cd /d "%ROOT%" +if errorlevel 1 ( + echo [ERROR] No se pudo entrar a la carpeta del repo. + set "EXIT_CODE=1" + goto finish +) + +if not exist "%ROOT%\package.json" ( + echo [ERROR] No se encontro package.json. + echo Coloca este .bat en la raiz del repo openplc-editor. + set "EXIT_CODE=1" + goto finish +) + +where node >nul 2>nul +if errorlevel 1 ( + echo [WARN] Node no esta disponible en PATH. +) else ( + echo [INFO] Node inicial: + node -v +) + +where fnm >nul 2>nul +if not errorlevel 1 ( + echo. + echo [INFO] fnm detectado. Intentando activar Node 22... + for /f "tokens=*" %%I in ('fnm env --use-on-cd --shell cmd 2^>nul') do call %%I + + fnm install 22 + if errorlevel 1 ( + echo [ERROR] fnm no pudo instalar Node 22. + set "EXIT_CODE=1" + goto finish + ) + + fnm use 22 + if errorlevel 1 ( + echo [ERROR] fnm no pudo activar Node 22. + set "EXIT_CODE=1" + goto finish + ) +) + +where node >nul 2>nul +if errorlevel 1 ( + echo [ERROR] Node.js no esta disponible. Instala Node 22 o fnm. + set "EXIT_CODE=1" + goto finish +) + +for /f "tokens=1 delims=." %%M in ('node -p "process.versions.node"') do set "NODE_MAJOR=%%M" + +echo. +echo [INFO] Node final: +node -v +echo [INFO] npm: +call npm.cmd -v + +if not "%NODE_MAJOR%"=="22" ( + echo. + echo [ERROR] Este repo debe ejecutarse con Node 22.x. + echo Node actual major: %NODE_MAJOR% + echo. + echo Sugerencia: + echo winget install Schniz.fnm + echo fnm install 22 + echo fnm use 22 + set "EXIT_CODE=1" + goto finish +) + +if "%RUN_INSTALL%"=="1" ( + echo. + echo [1/4] Instalando dependencias... + if exist "%ROOT%\package-lock.json" ( + call npm.cmd ci + ) else ( + call npm.cmd install + ) + if errorlevel 1 ( + echo [ERROR] Fallo la instalacion de dependencias. + set "EXIT_CODE=1" + goto finish + ) +) else ( + echo. + echo [1/4] Instalacion omitida. Usa --install si cambiaste dependencias o node_modules no existe. +) + +if not exist "%ROOT%\node_modules" ( + echo. + echo [ERROR] No existe node_modules. + echo Ejecuta: + echo run-jwplc-editor-dev.bat --install + set "EXIT_CODE=1" + goto finish +) + +if "%RUN_LINT%"=="1" ( + echo. + echo [2/4] Ejecutando lint... + call npm.cmd run lint + if errorlevel 1 ( + echo [ERROR] Fallo lint. + set "EXIT_CODE=1" + goto finish + ) +) else ( + echo. + echo [2/4] Lint omitido. +) + +echo. +echo [3/4] Ejecutando OpenPLC Editor en modo desarrollo... +echo. +echo IMPORTANTE: +echo - Este modo NO genera instalador. +echo - Para detenerlo, presiona CTRL+C en esta ventana. +echo - Si editas frontend, webpack suele refrescar. +echo - Si editas proceso main/backend, electronmon deberia reiniciar. +echo. + +call npm.cmd run dev +if errorlevel 1 ( + echo. + echo [ERROR] npm run dev termino con error. + set "EXIT_CODE=1" + goto finish +) + +echo. +echo [4/4] Proceso dev finalizado. +goto finish + +:finish +echo. +echo ============================================================ +if "%EXIT_CODE%"=="0" ( + echo DEV runner finalizado correctamente +) else ( + echo DEV runner finalizado con errores +) +echo ============================================================ +echo. +echo Presiona ESC para cerrar esta ventana... + +call :waitEsc + +endlocal & exit /b %EXIT_CODE% + +:waitEsc +powershell -NoProfile -ExecutionPolicy Bypass -Command "$Host.UI.RawUI.FlushInputBuffer(); do { $key = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown') } until ($key.VirtualKeyCode -eq 27)" +if errorlevel 1 ( + echo. + echo No se pudo capturar ESC con PowerShell. Presiona cualquier tecla para cerrar... + pause >nul +) +exit /b 0 diff --git a/src/frontend/components/_molecules/charts/line-chart.tsx b/src/frontend/components/_molecules/charts/line-chart.tsx index 8100f3534..8b82cd697 100644 --- a/src/frontend/components/_molecules/charts/line-chart.tsx +++ b/src/frontend/components/_molecules/charts/line-chart.tsx @@ -46,7 +46,7 @@ const LineChart = ({ data, isBool = false, range, now, startTime, label }: LineC return { chart: { id: chartId, - animations: { enabled: true, easing: 'linear' as const, dynamicAnimation: { speed: 500 } }, + animations: { enabled: false }, toolbar: { show: false }, zoom: { enabled: false }, background: 'transparent', diff --git a/src/frontend/components/_organisms/debugger/index.tsx b/src/frontend/components/_organisms/debugger/index.tsx index 58d75363d..33a9f46ad 100644 --- a/src/frontend/components/_organisms/debugger/index.tsx +++ b/src/frontend/components/_organisms/debugger/index.tsx @@ -17,8 +17,7 @@ type Point = { t: number; y: number } type SeriesEntry = { points: Point[]; isBool: boolean; compositeKey: string } const MAX_BUFFER_SECONDS = 600 // Keep 10 minutes of data regardless of displayed range - -const HOLD_SAMPLE_INTERVAL_MS = 200 +const DEBUGGER_RENDER_INTERVAL_MS = 100 const Debugger = ({ graphList }: DebuggerData) => { const [isPaused, setIsPaused] = useState(false) @@ -108,34 +107,8 @@ const Debugger = ({ graphList }: DebuggerData) => { if (isPaused || graphList.length === 0) return const timer = window.setInterval(() => { - const now = Date.now() - const bufferCutoff = now - MAX_BUFFER_SECONDS * 1000 - const activeKeys = new Set(graphList) - const histories = historiesRef.current - - for (const [compositeKey, entry] of histories) { - if (!activeKeys.has(compositeKey)) { - histories.delete(compositeKey) - continue - } - - const lastPoint = entry.points[entry.points.length - 1] - if (!lastPoint) continue - - const lastTimestamp = lastPoint.t ?? 0 - if (now - lastTimestamp < HOLD_SAMPLE_INTERVAL_MS * 0.75) continue - - entry.points = [ - ...entry.points, - { - ...lastPoint, - t: now, - }, - ].filter((point) => point.t >= bufferCutoff) - } - setRenderTrigger((value) => value + 1) - }, HOLD_SAMPLE_INTERVAL_MS) + }, DEBUGGER_RENDER_INTERVAL_MS) return () => window.clearInterval(timer) }, [isPaused, graphList]) @@ -144,13 +117,54 @@ const Debugger = ({ graphList }: DebuggerData) => { const now = Date.now() const startTime = startTimeRef.current ?? now const cutoff = now - range * 1000 + return { now, startTime, series: graphList.map((compositeKey) => { const entry = historiesRef.current.get(compositeKey) - const points = entry ? entry.points.filter((p) => p.t >= cutoff) : [] - return { name: compositeKey, points, isBool: entry?.isBool ?? false } + + if (!entry || entry.points.length === 0) { + return { name: compositeKey, points: [], isBool: entry?.isBool ?? false } + } + + const allPoints = entry.points + const visiblePoints = allPoints.filter((p) => p.t >= cutoff) + + let lastBeforeCutoff: Point | undefined + + for (let i = allPoints.length - 1; i >= 0; i--) { + if (allPoints[i].t < cutoff) { + lastBeforeCutoff = allPoints[i] + break + } + } + + let points = visiblePoints + + if (lastBeforeCutoff && (points.length === 0 || points[0].t > cutoff)) { + points = [ + { + t: cutoff, + y: lastBeforeCutoff.y, + }, + ...points, + ] + } + + const lastPoint = points[points.length - 1] + + if (lastPoint && now > lastPoint.t) { + points = [ + ...points, + { + t: now, + y: lastPoint.y, + }, + ] + } + + return { name: compositeKey, points, isBool: entry.isBool } }), } }, [graphList, range, renderTrigger]) From 89b0b4b8ee3789021e753c27cd6b866c4209623f Mon Sep 17 00:00:00 2001 From: Jeykco Date: Wed, 1 Jul 2026 01:16:01 -0500 Subject: [PATCH 12/16] Ethernet fix --- jwplc-vpp-field-renderer-search.txt | 703 ++++++++++++++++++ resources/sources/Baremetal/ModbusSlave.cpp | 131 +++- resources/sources/Baremetal/ModbusSlave.h | 9 +- src/backend/shared/hardware/debug-spec.ts | 23 +- .../vendor-screen/layouts/form-layout.tsx | 112 ++- .../shared/ports/debug-spec-types.ts | 1 + 6 files changed, 954 insertions(+), 25 deletions(-) create mode 100644 jwplc-vpp-field-renderer-search.txt diff --git a/jwplc-vpp-field-renderer-search.txt b/jwplc-vpp-field-renderer-search.txt new file mode 100644 index 000000000..f6d896395 --- /dev/null +++ b/jwplc-vpp-field-renderer-search.txt @@ -0,0 +1,703 @@ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2175: let vendorScreenData: Record = {} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2178: const deviceConfig = JSON.parse(deviceConfigRaw) as { vendorScreenData?: Record } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2179: vendorScreenData = deviceConfig.vendorScreenData ?? {} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2233: const finalConfig = generateVendorPluginConfig(configTemplate, vendorScreenData, modules, devicePins) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2390: * injects them into `vendorScreenData` under a synthetic +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2398: vendorScreenData: Record, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2438: vendorScreenData as Parameters[0], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2487: vendorScreenData, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2741: const vendorScreenData = deviceConfig.vendorScreenData ?? {} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2743: modbus_rtu: vendorScreenData['modbus_rtu'] as VppModbusScreenState['modbus_rtu'], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2744: modbus_tcp: vendorScreenData['modbus_tcp'] as VppModbusScreenState['modbus_tcp'], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2760: let effectiveVendorScreenData = vendorScreenData +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2762: const moduleConfigEntries = await this.buildVppArduinoModuleConfig(boardTarget, vendorScreenData ?? {}) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2764: effectiveVendorScreenData = { ...(vendorScreenData ?? {}), 'module-config': { entries: moduleConfigEntries } } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\editor\compiler\compiler-module.ts:2793: vendorScreenData: effectiveVendorScreenData, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:215: * sourced from `DeviceConfiguration.vendorScreenData` under +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:223: * `DeviceConfiguration.vendorScreenData`. The platform adapter +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:225: * and forwards the `vendorScreenData` field as-is. Threaded into +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:236: vendorScreenData?: Record +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:355: vendorScreenData, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\pipeline.ts:713: const vppConfigH = targetCapabilities.vppIo ? generateVppConfigContent({ vendorScreenData }) : undefined +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-defines.ts:72: * `DeviceConfiguration.vendorScreenData` under the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-vpp-config.ts:15: * - One `#define` per leaf value in `vendorScreenData`. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-vpp-config.ts:37: /** `DeviceConfiguration.vendorScreenData` from the project model. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-vpp-config.ts:42: vendorScreenData: Record | undefined +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-vpp-config.ts:50: * `vendorScreenData` — every leaf walked through `walk()` becomes +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-vpp-config.ts:54: const { vendorScreenData } = input +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-vpp-config.ts:68: if (vendorScreenData) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-vpp-config.ts:73: const keys = Object.keys(vendorScreenData).sort() +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\generate-vpp-config.ts:76: walk(vendorScreenData[key], prefix, lines) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:5: * The screen is declared in `packages/com.openplc.arduino/screens/modbus.json` +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:7: * `DeviceConfiguration.vendorScreenData` under keys `modbus_rtu` and +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:22: * for fishing `modbus_rtu` and `modbus_tcp` out of `vendorScreenData`. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:27: * field IDs declared in `screens/modbus.json` — keep in sync if the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:44: tcp_wifi_password?: string +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:56: * colon-separated form the screen's `mac-address` field validates; any +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:82: // Modbus screen (`packages/com.openplc.arduino/screens/modbus.json`). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\steps\modbus-defines.ts:168: if (tcp.tcp_wifi_password) lines.push(`#define MBTCP_PWD "${tcp.tcp_wifi_password}"`) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:14: it('emits a minimal include-guarded header when vendorScreenData is undefined', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:15: const out = generateVppConfigContent({ vendorScreenData: undefined }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:24: it('emits a minimal include-guarded header when vendorScreenData is an empty object', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:25: const out = generateVppConfigContent({ vendorScreenData: {} }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:32: vendorScreenData: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:43: const out = generateVppConfigContent({ vendorScreenData: { net: { dhcp: false, https: true } } }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:50: vendorScreenData: { 'module-config': { pin_modes: [0, 1, 0, 1] } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:57: const out = generateVppConfigContent({ vendorScreenData: { 'module-config': { slots: [] } } }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:64: vendorScreenData: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:82: vendorScreenData: { 'module-config': { entries: [] } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:90: vendorScreenData: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:106: vendorScreenData: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:118: vendorScreenData: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:128: vendorScreenData: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:137: vendorScreenData: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:148: vendorScreenData: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:159: vendorScreenData: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:171: vendorScreenData: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:186: it('end-to-end: serializes an Opta-shaped vendorScreenData faithfully', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\generate-vpp-config.test.ts:190: vendorScreenData: { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\compile\__tests__\modbus-defines.test.ts:150: tcp_wifi_password: 'super-secret', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\debug-spec.ts:56: * `DeviceConfiguration.vendorScreenData` — the editor passes it +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:71: { label: 'RTU', channel: 'rtu', enabledWhen: { $ref: 'screens.modbus_rtu.enabled' }, params: {} }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:72: { label: 'TCP', channel: 'tcp', enabledWhen: { $ref: 'screens.modbus_tcp.enabled' }, params: {} }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:84: channels: [{ label: 'RTU', channel: 'rtu', enabledWhen: { $ref: 'screens.modbus_rtu.enabled' }, params: {} }], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:97: { label: 'RTU', channel: 'rtu', enabledWhen: { $ref: 'screens.modbus_rtu.enabled' }, params: {} }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:98: { label: 'TCP', channel: 'tcp', enabledWhen: { $ref: 'screens.modbus_tcp.enabled' }, params: {} }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:123: { label: 'RTU', channel: 'rtu', enabledWhen: { $ref: 'screens.modbus_rtu.enabled' }, params: {} }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:124: { label: 'TCP', channel: 'tcp', enabledWhen: { $ref: 'screens.modbus_tcp.enabled' }, params: {} }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:143: { label: 'RTU', channel: 'rtu', enabledWhen: { $ref: 'screens.modbus_rtu.enabled' }, params: {} }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:144: { label: 'TCP', channel: 'tcp', enabledWhen: { $ref: 'screens.modbus_tcp.enabled' }, params: {} }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:191: baudRate: { $ref: 'screens.modbus_rtu.rtu_baud_rate' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:218: params: { baudRate: { $ref: 'screens.modbus_rtu.rtu_baud_rate', default: '115200' } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:237: baudRate: { $ref: 'screens.modbus_rtu.rtu_baud_rate', as: 'number' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:238: slaveId: { $ref: 'screens.modbus_rtu.rtu_slave_id', as: 'number' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:263: params: { ipAddress: { $ref: 'screens.modbus_tcp.ip_address' } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:299: params: { baudRate: { $ref: 'screens.modbus_rtu.rtu_baud_rate', as: 'number' } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:349: params: { slaveId: { $ref: 'screens.modbus_rtu.rtu_slave_id', as: 'string' } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:382: params: { ipAddress: { $ref: 'screens.modbus_tcp.ip_address' } }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\hardware\__tests__\debug-spec.test.ts:385: when: { $ref: 'screens.modbus_tcp.enable_dhcp' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:446: type: z.enum(['password', 'certificate']), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\open-plc.ts:448: passwordHash: z.string().nullable(), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\devices\configuration.ts:8: // compile pipeline read. Always mirrors vendorScreenDataByBoard[deviceBoard]. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\devices\configuration.ts:9: vendorScreenData: z.record(z.string(), z.unknown()).optional(), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\devices\configuration.ts:13: // (flat vendorScreenData only) are migrated on load. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\types\PLC\devices\configuration.ts:14: vendorScreenDataByBoard: z.record(z.string(), z.record(z.string(), z.unknown())).optional(), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:71: type VendorScreenData = Record +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:223: function buildSlots(vendorScreenData: VendorScreenData, modules: VppModuleDefinition[]): PluginSlot[] { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:224: const moduleConfig = (vendorScreenData['module-configuration'] as ModuleConfiguration | undefined) ?? {} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:225: const ioMapping = (vendorScreenData['io-mapping'] as IoMapping | undefined) ?? {} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:311: * 1-based slot, so the caller can inject them into `vendorScreenData` +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:321: vendorScreenData: VendorScreenData, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:324: const moduleConfig = (vendorScreenData['module-configuration'] as ModuleConfiguration | undefined) ?? {} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:463: vendorScreenData: VendorScreenData, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:472: for (const [key, value] of Object.entries(vendorScreenData)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:480: result.slots = buildSlots(vendorScreenData, modules) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\generate-vendor-plugin-config.ts:492: export type { PluginSlot, PluginSlotIoMapping, VendorScreenData, VppModuleDefinition } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:4: type VendorScreenData, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:140: const data: VendorScreenData = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:152: const data: VendorScreenData = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:171: const data: VendorScreenData = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:193: const data: VendorScreenData = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:208: const data: VendorScreenData = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:223: const data: VendorScreenData = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:247: const data: VendorScreenData = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:269: const data: VendorScreenData = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:302: const data: VendorScreenData = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:340: const data: VendorScreenData = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:354: const data: VendorScreenData = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:363: const data: VendorScreenData = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:382: const data: VendorScreenData = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:394: const data: VendorScreenData = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:409: const data: VendorScreenData = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:428: const data: VendorScreenData = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:446: const data: VendorScreenData = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:454: it('falls through gracefully when vendorScreenData is empty', () => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:470: const data: VendorScreenData = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:495: const data: VendorScreenData = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:520: const data: VendorScreenData = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:546: const data: VendorScreenData = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:558: const data: VendorScreenData = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:573: const data: VendorScreenData = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:590: const data: VendorScreenData = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:615: const data: VendorScreenData = { 'module-configuration': { slots: ['bad-screen'] } } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:629: const data: VendorScreenData = { 'module-configuration': { slots: ['null-def'] } } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:659: const data: VendorScreenData = { 'module-configuration': { slots: ['short'] } } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:666: const data: VendorScreenData = { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:753: } as unknown as VendorScreenData +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:765: } as unknown as VendorScreenData +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:776: } as unknown as VendorScreenData +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\backend\shared\utils\vpp\__tests__\generate-vendor-plugin-config.test.ts:781: expect(buildModuleConfigEntries({} as VendorScreenData, modules)).toEqual([]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\generic-table-inputs\generic-select-cell.tsx:6: import { Select, SelectContent, SelectItem, SelectTrigger } from '../select' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\generic-table-inputs\generic-select-cell.tsx:44: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\select\index.tsx:9: type ISelectTriggerProps = ComponentPropsWithoutRef & { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\select\index.tsx:13: const SelectTrigger = forwardRef, ISelectTriggerProps>( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\select\index.tsx:33: * otherwise jumps focus to the first SelectItem whose label +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\select\index.tsx:115: type ISelectItemProps = ComponentPropsWithoutRef & { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\select\index.tsx:119: const SelectItem = forwardRef, ISelectItemProps>( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_atoms\select\index.tsx:149: export { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[start]\new-project\steps\third-step.tsx:9: import { Select, SelectContent, SelectItem, SelectTrigger } from '../../../../_atoms/select' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[start]\new-project\steps\third-step.tsx:82: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\create-element\element-card\index.tsx:10: import { Select, SelectContent, SelectItem, SelectTrigger } from '../../../../_atoms/select' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\create-element\element-card\index.tsx:313: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\create-element\element-card\index.tsx:438: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\create-element\element-card\index.tsx:573: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\create-element\element-card\index.tsx:708: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:18: import { Select, SelectContent, SelectItem, SelectTrigger } from '../../../../../_atoms/select' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:192: // currently-focused SelectItem unmounts — which happens every +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:482: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:550: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:571:
+C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:573: id='runtime-ip-address-label' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\board.tsx:635: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\index.tsx:12: * `configuration.vendorScreenData[screenId]`. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\components\pin-mapping-table.tsx:65: state.deviceDefinitions.configuration.vendorScreenData?.['io-mapping'] as +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\form-layout.tsx:2: import { Select, SelectContent, SelectItem, SelectTrigger } from '@root/frontend/components/_atoms/select' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\form-layout.tsx:22: // Honored by text-like inputs (text, password, ip-address, mac-address). +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\form-layout.tsx:34: // Shared input styling for every branch (text, number, password, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\form-layout.tsx:35: // ip-address, mac-address). Keeping it in one place avoids style drift +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\form-layout.tsx:36: // when new field types land. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\form-layout.tsx:78: const vendorScreenData = useOpenPLCStore((s) => s.deviceDefinitions.configuration.vendorScreenData) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\form-layout.tsx:79: const setVendorScreenData = useOpenPLCStore((s) => s.deviceActions.setVendorScreenData) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\form-layout.tsx:88: ? (vendorScreenData?.[persistenceKey] as Record | undefined) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\form-layout.tsx:97: setVendorScreenData(persistenceKey, { ...storedValues, [id]: value }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\form-layout.tsx:114: {field.type === 'boolean' ? ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\form-layout.tsx:135: {field.type === 'number' ? ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\form-layout.tsx:150: ) : field.type === 'select' ? ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\form-layout.tsx:152: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\form-layout.tsx:182: ) : field.type === 'password' ? ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\form-layout.tsx:184: type='password' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\form-layout.tsx:190: autoComplete='new-password' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\form-layout.tsx:193: ) : field.type === 'ip-address' ? ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\form-layout.tsx:204: ) : field.type === 'mac-address' ? ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\io-table-layout.tsx:33: const vsd = state.deviceDefinitions.configuration.vendorScreenData +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\io-table-layout.tsx:51: const setVendorScreenData = useOpenPLCStore((s) => s.deviceActions.setVendorScreenData) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\io-table-layout.tsx:55: s.deviceDefinitions.configuration.vendorScreenData?.['module-configuration'] as +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\io-table-layout.tsx:146: setVendorScreenData(persistenceKey, { entries: newEntries }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\io-table-layout.tsx:199: setVendorScreenData(persistenceKey, { entries: updated }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:8: import { Select, SelectContent, SelectItem, SelectTrigger } from '@root/frontend/components/_atoms/select' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:261: const vendorScreenData = useOpenPLCStore((s) => s.deviceDefinitions.configuration.vendorScreenData) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:262: const setVendorScreenData = useOpenPLCStore((s) => s.deviceActions.setVendorScreenData) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:265: const moduleConfig = (vendorScreenData?.[persistenceKey] as ModuleConfigState | undefined) ?? {} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:416: const vsd = state.deviceDefinitions.configuration.vendorScreenData +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:470: setVendorScreenData('io-mapping', { entries: newEntries }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:481: setVendorScreenData(persistenceKey, next) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:564: const vsd = useOpenPLCStore.getState().deviceDefinitions.configuration.vendorScreenData +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:567: setVendorScreenData('io-mapping', { entries: shifted }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:614: const vsd = useOpenPLCStore.getState().deviceDefinitions.configuration.vendorScreenData +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:619: setVendorScreenData('io-mapping', { entries: shifted }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:640: const vsd = state.deviceDefinitions.configuration.vendorScreenData +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:687: setVendorScreenData('io-mapping', { entries }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:709: const vsd = state.deviceDefinitions.configuration.vendorScreenData +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:718: setVendorScreenData('module-configuration', { ...moduleConfig, slotsConfig: nextSlotsConfig }) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:753: const entries = (vendorScreenData?.['io-mapping'] as { entries?: IoMappingEntry[] } | undefined)?.entries ?? [] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:1032: {field.type === 'boolean' ? ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:1056: {field.type === 'number' ? ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:1073: ) : field.type === 'select' ? ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\configuration\vendor-screen\layouts\module-slots-layout.tsx:1075: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\ethercat-device-editor.tsx:67: const vendorScreenData = useOpenPLCStore((s) => s.deviceDefinitions.configuration.vendorScreenData) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\ethercat-device-editor.tsx:116: vendorScreenData?.['io-mapping'] as +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\ethercat-device-editor.tsx:131: }, [project.data.remoteDevices, vendorScreenData]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\index.tsx:43: vendorScreenData: ReturnType< +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\index.tsx:45: >['deviceDefinitions']['configuration']['vendorScreenData'], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\index.tsx:51: vendorScreenData?.['io-mapping'] as +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\index.tsx:116: const vendorScreenData = useOpenPLCStore((s) => s.deviceDefinitions.configuration.vendorScreenData) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\index.tsx:422: const usedAddresses = buildClaimedAddressSet(project.data.remoteDevices, vendorScreenData) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\index.tsx:504: vendorScreenData, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\index.tsx:519: const usedAddresses = buildClaimedAddressSet(project.data.remoteDevices, vendorScreenData) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\index.tsx:549: [configuredDevices, syncDevicesToStore, deviceName, project.data.remoteDevices, vendorScreenData, esi], +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\global-settings-tab.tsx:4: import { Select, SelectContent, SelectItem, SelectTrigger } from '@root/frontend/components/_atoms/select' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\ethercat\components\global-settings-tab.tsx:91: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:15: import { Select, SelectContent, SelectItem, SelectTrigger } from '../../../../../_atoms/select' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:244: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:303: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:775: const selectTriggerStyles = +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:781: const selectItemStyles = cn( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:800: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:803: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:807: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:856: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:859: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:863: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:871: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:874: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:878: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:886: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:889: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:893: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:901: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:904: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\device\remote-device\index.tsx:908: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:1528: signature: 'int WiFi.begin(const char *ssid, const char *password)', +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\monaco\completion\cpp.completion.ts:1533: { name: 'password', type: 'const char *', description: 'Network password' }, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\index.tsx:11: import { Select, SelectContent, SelectItem, SelectTrigger } from '../../../../../_atoms/select' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\modbus-server\index.tsx:335: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\index.tsx:9: import { Select, SelectContent, SelectItem, SelectTrigger } from '../../../../../_atoms/select' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\index.tsx:349: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\certificates-tab.tsx:8: import { Select, SelectContent, SelectItem, SelectTrigger } from '../../../../../../_atoms/select' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\certificates-tab.tsx:156: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\certificates-tab.tsx:173: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\security-profile-modal.tsx:9: import { Select, SelectContent, SelectItem, SelectTrigger } from '../../../../../../_atoms/select' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\security-profile-modal.tsx:226: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\security-profile-modal.tsx:258: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\security-profile-modal.tsx:330: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:10: import { Select, SelectContent, SelectItem, SelectTrigger } from '../../../../../../_atoms/select' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:13: type AuthType = 'password' | 'certificate' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:42: * Hash a password using PBKDF2-HMAC-SHA256. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:46: const hashPassword = async (password: string): Promise => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:50: // Import password as key material +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:51: const passwordKey = await crypto.subtle.importKey('raw', new TextEncoder().encode(password), 'PBKDF2', false, [ +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:63: passwordKey, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:87: const [authType, setAuthType] = useState('password') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:89: const [password, setPassword] = useState('') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:90: const [confirmPassword, setConfirmPassword] = useState('') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:91: const [showPassword, setShowPassword] = useState(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:100: setPassword('') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:101: setConfirmPassword('') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:102: setShowPassword(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:107: setAuthType('password') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:109: setPassword('') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:110: setConfirmPassword('') +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:111: setShowPassword(false) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:126: // pattern the password-mismatch label uses. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:128: // The mismatch and "passwords-not-yet-confirmed" gates live in their +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:131: // typed in confirmPassword; missing confirmPassword silently +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:135: if (authType !== 'password') return null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:147: const passwordError = useMemo(() => { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:148: if (authType !== 'password') return null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:149: // Editing path: an empty password means "keep existing" — not an error. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:150: if (isEditing && !password) return null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:151: if (!password) return 'Password is required' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:152: if (password.length < 4) return 'Password must be at least 4 characters' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:154: }, [authType, password, isEditing]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:168: // Password mismatch handling has two flavours: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:169: // - `passwordsMismatchVisible`: drives the inline red label under the +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:170: // Confirm Password input. Only true once the user has typed something +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:171: // in confirmPassword, so the error doesn't flicker while they're still +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:173: // - `passwordsOk`: gates the Save button. Requires both fields to be +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:174: // filled AND match when a password is being set (new user, or editing +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:175: // user with non-empty password). Empty confirmPassword keeps Save +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:178: const isSettingPassword = authType === 'password' && (!isEditing || password.length > 0) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:179: const passwordsMismatchVisible = isSettingPassword && confirmPassword.length > 0 && password !== confirmPassword +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:180: const passwordsOk = !isSettingPassword || (confirmPassword.length > 0 && password === confirmPassword) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:182: const isValid = !usernameError && !passwordError && !certificateError && passwordsOk +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:188: let passwordHash: string | null = null +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:190: if (authType === 'password' && password) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:191: passwordHash = await hashPassword(password) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:192: } else if (authType === 'password' && isEditing && existingUser?.passwordHash) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:193: // Keep existing password hash if not changing +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:194: passwordHash = existingUser.passwordHash +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:200: username: authType === 'password' ? username.trim() : null, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:201: passwordHash: authType === 'password' ? passwordHash : null, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:208: }, [isValid, authType, username, password, certificateId, role, existingUser, isEditing, onSave, onClose]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:222: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:239: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:254: {/* Password Authentication Section */} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:255: {authType === 'password' && ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:258: Password Authentication +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:277: {/* Password */} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:280: {isEditing ? 'New Password (leave blank to keep current)' : 'Password'} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:284: type={showPassword ? 'text' : 'password'} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:285: value={password} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:286: onChange={(e) => setPassword(e.target.value)} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:292: onClick={() => setShowPassword(!showPassword)} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:293: disabled={!password} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:296: password +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:301: !password +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:302: ? 'Enter a password to toggle visibility' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:303: : showPassword +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:304: ? 'Hide password' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:305: : 'Show password' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:308: {showPassword ? ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:315: {passwordError && ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:316: {passwordError} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:320: {/* Confirm Password */} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:322: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:324: type={showPassword ? 'text' : 'password'} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:325: value={confirmPassword} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:326: onChange={(e) => setConfirmPassword(e.target.value)} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:330: {passwordsMismatchVisible && ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:331: Passwords do not match +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:352: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\user-modal.tsx:392: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\users-tab.tsx:22: if (user.type === 'password') { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\users-tab.tsx:42: // Check if we have any password users when username auth is enabled +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\users-tab.tsx:43: const passwordUserCount = useMemo(() => config.users.filter((u) => u.type === 'password').length, [config.users]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\users-tab.tsx:47: () => config.users.filter((u) => u.type === 'password' && u.username).map((u) => u.username as string), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\users-tab.tsx:101: {usernameAuthEnabled && passwordUserCount === 0 && ( +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\users-tab.tsx:104: Warning: Username authentication is enabled but no password users exist. Add at least one user for clients +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\users-tab.tsx:123: No users configured. Add users for password or certificate authentication. +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\users-tab.tsx:145: {user.type === 'password' ? 'Password' : 'Certificate'} +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\variable-config-modal.tsx:8: import { Select, SelectContent, SelectItem, SelectTrigger } from '../../../../../../_atoms/select' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\variable-config-modal.tsx:137: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\variable-config-modal.tsx:154: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\variable-config-modal.tsx:162: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\variable-config-modal.tsx:446: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\variable-config-modal.tsx:463: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\variable-config-modal.tsx:474: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\variable-config-modal.tsx:493: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\variable-config-modal.tsx:510: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\variable-config-modal.tsx:521: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\variable-config-modal.tsx:540: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\variable-config-modal.tsx:557: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\components\variable-config-modal.tsx:568: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:167: const fieldTypeName = field.type.value +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:169: const fieldType = field.type as { definition: string; value: string; data?: ArrayData } +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\opcua-server\hooks\use-project-variables.ts:174: field.type.definition, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\s7comm-server\index.tsx:10: import { Select, SelectContent, SelectItem, SelectTrigger } from '../../../../../_atoms/select' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\s7comm-server\index.tsx:238: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\server\s7comm-server\index.tsx:571: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\vendor-screen\index.tsx:8: * Stable serialisation of the slice of `vendorScreenData` this screen +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\vendor-screen\index.tsx:14: function serializeOwnedSlice(vendorScreenData: Record | undefined, ownedKeys: string[]): string { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\vendor-screen\index.tsx:17: if (vendorScreenData && Object.prototype.hasOwnProperty.call(vendorScreenData, k)) { +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\vendor-screen\index.tsx:18: slice[k] = vendorScreenData[k] +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\vendor-screen\index.tsx:29: const vendorScreenData = useOpenPLCStore((s) => s.deviceDefinitions.configuration.vendorScreenData) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\vendor-screen\index.tsx:52: cleanState: serializeOwnedSlice(vendorScreenData, ownedKeys), +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\vendor-screen\index.tsx:55: // vendorScreenData would reset cleanState on every keystroke, +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\vendor-screen\index.tsx:65: const current = serializeOwnedSlice(vendorScreenData, ownedKeys) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_features\[workspace]\editor\vendor-screen\index.tsx:71: }, [screenName, ownedKeys, vendorScreenData, getFile, updateFile]) +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\array\header\base-type.tsx:2: import { Select, SelectContent, SelectItem, SelectTrigger } from '../../../../_atoms/select' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\array\header\base-type.tsx:12: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\enumerated\index.tsx:9: import { Select, SelectContent, SelectItem, SelectTrigger } from '../../../_atoms/select' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\enumerated\index.tsx:208: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\enumerated\index.tsx:215: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\data-types\enumerated\index.tsx:224: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\global-variables-table\selectable-cell.tsx:16: import { Select, SelectContent, SelectItem, SelectTrigger } from '../../_atoms/select' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\global-variables-table\selectable-cell.tsx:392: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\instances-table\selectable-cell.tsx:8: import { Select, SelectContent, SelectItem, SelectTrigger } from '../../_atoms/select' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\instances-table\selectable-cell.tsx:43: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\instances-table\selectable-cell.tsx:104: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\select-field\index.tsx:2: import { Select, SelectContent, SelectItem, SelectTrigger } from '../../_atoms/select' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\select-field\index.tsx:31: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\task-table\selectable-cell.tsx:6: import { Select, SelectContent, SelectItem, SelectTrigger } from '../../_atoms/select' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\task-table\selectable-cell.tsx:30: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\selectable-cell.tsx:16: import { Select, SelectContent, SelectItem, SelectTrigger } from '../../_atoms/select' +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_molecules\variables-table\selectable-cell.tsx:486: +C:\Users\jeykc\Documentos\GitHub\openplc-editor\src\frontend\components\_organisms\modals\debugger-ip-input-modal.tsx:57: