====== Development Environment ======
Overview of the project structure and important paths for WvdS FPC RAD Studio.
**Tilde (~)** represents the repository root (e.g. ''%WORKSPACE%/WvdS.FPC''). All paths use forward slashes.
===== Project Structure =====
~/
├── sources/ # SSOT - version controlled (SVN)
│ ├── common/ # Shared Units/Libs (FPC + pas2js)
│ │ ├── core/ # Base units (no UI)
│ │ ├── ui/ # UI Framework
│ │ │ ├── controls/ # Base controls
│ │ │ ├── components/ # Composite components
│ │ │ ├── runtime/ # PXAML Runtime
│ │ │ └── targets/ # Renderers (tui/gui/web)
│ │ └── web/ # Host Bridges (pas2js only)
│ │ ├── nodejs/ # Node.js APIs
│ │ └── vscode/ # VSCode Extension APIs
│ ├── extensions/ # VSIX Packs
│ ├── applications/ # Products/Demos
│ ├── tools/ # wvds-build, pxamlc
│ └── packages/ # IDE Packages
│
├── binaries/ # Build Outputs - NOT version controlled
│ ├── out/ # Build outputs
│ ├── cache/ # Compiler caches
│ ├── dist/ # Release artifacts (.vsix)
│ └── logs/ # Build reports, debug logs
│
└── assets/ # Static assets
===== Project Paths =====
^ Variable ^ Path ^ Description ^
| ''~'' | Repository root | ''%WORKSPACE%/WvdS.FPC'' |
| ''~/sources'' | Source code | Single Source of Truth |
| ''~/sources/common'' | Shared code | FPC + pas2js compatible |
| ''~/sources/extensions'' | VSIX Extensions | VSCode packages |
| ''~/sources/applications'' | Applications | RAD Suite, Demos |
| ''~/binaries'' | Build output | Disposable, regenerable |
| ''~/binaries/dist'' | Release | .vsix, installers |
| ''~/binaries/logs'' | Logs | Build reports, debug logs |
| ''~/assets'' | Assets | Icons, templates |
===== Environment Variables =====
These variables are **placeholders** and must be adapted to the local development environment. Absolute paths should be avoided in configuration files.
^ Variable ^ Default Value ^ Description ^
| ''%LAZARUS%'' | Lazarus installation | e.g. ''C:\Lazarus'' or ''/opt/lazarus'' |
| ''%PROGRAMFILES%'' | Program Files | Windows: ''C:\Program Files'' |
| ''%USERPROFILE%'' | User directory | Windows: ''C:\Users\{name}'', Linux: ''~'' |
| ''%WORKSPACE%'' | Working directory | User-defined, e.g. ''E:\Workspace'' |
===== Compiler and Toolchain =====
^ Variable ^ Relative Path ^ Description ^
| FPC | ''%LAZARUS%/fpc/3.3.1/bin'' | Free Pascal Compiler |
| FPC-SRC | ''%LAZARUS%/fpc/3.3.1/source'' | FPC Source code |
| PAS2JS | ''%LAZARUS%/fpc/3.3.1/bin/pas2js.exe'' | Pascal to JavaScript |
| P2J-RTL | ''%LAZARUS%/fpc/pas2js-windows-2.2.0/packages/rtl'' | pas2js RTL |
| P2J-NODE | ''%LAZARUS%/fpc/pas2js-windows-2.2.0/packages/nodejs'' | Node.js Bindings |
| P2J-VSCODE | ''%LAZARUS%/fpc/pas2js-windows-2.2.0/packages/vscode'' | VSCode Bindings |
===== External References =====
These paths are **optional** and only relevant for developers who want to study reference implementations.
^ Variable ^ Relative Path ^ Description ^
| DXVCL | ''%WORKSPACE%/3rd/DevExpress/VCL'' | DevExpress VCL (Delphi) |
| DXNET | ''%PROGRAMFILES%/DevExpress 25.1/Components/Sources'' | DevExpress .NET |
| NODEJS-SRC | ''%WORKSPACE%/3rd/node-main'' | Node.js Source code |
| VSCODE-SRC | ''%WORKSPACE%/3rd/vscode-main'' | VSCode Source code |
===== Documentation =====
^ Variable ^ Relative Path ^ Description ^
| DOKUWIKI | ''%DOKUWIKI_DATA%/pages/de/int/vsce/fpc'' | DokuWiki Pages |
| SKILLS | ''%WORKSPACE%/WvdS.Rihtlinien'' | Skill definitions |
===== SSOT Rules =====
**Single Source of Truth** - These rules are binding!
- **''~/sources/''** is the only source for version-controlled code
- **''~/binaries/''** is completely disposable and regenerable
- **Never** duplicate runtime code in ''~/sources/extensions/''
- **Never** commit generated files to ''~/sources/''
===== Build Output Structure =====
~/binaries/out/{app}/{target}/{mode}/
├── gen/ # Generated code (ui.generated.pas)
├── bin/ # Executables / JS Bundle
├── assets/ # PXAML, Images, Themes
├── build-plan.json # Build configuration
└── build-report.md # Build log
^ Target ^ Compiler ^ Output ^
| ''tui'' | FPC | Native Console (Windows/Linux) |
| ''gui'' | FPC | Native Desktop (LCL/WinAPI) |
| ''web'' | pas2js | JavaScript Bundle |
^ Mode ^ Description ^
| ''debug'' | Debug symbols, no optimization |
| ''release'' | Optimized, stripped symbols |
| ''profile'' | Release + Profiling |
===== Extension Structure =====
~/sources/extensions/wvds.vscode.{name}/
├── pas/
│ ├── extension_main.pas # Entry Point (REQUIRED)
│ ├── {Feature}.Models.pas # Data structures
│ ├── {Feature}.Service.pas # Business logic
│ └── {Feature}.Dialog.pas # UI (optional)
│
├── dist/
│ ├── extension_main.js # Compiled JS
│ └── extension_main.js.map # Source Map
│
├── templates/ # WebView Templates
├── images/ # Icons
├── package.json # VSCode Manifest
├── build.cfg # Build configuration
└── README.md # Documentation
===== See Also =====
* [[.:architektur|Architecture Overview]]
* [[.:build-pipeline|Build Pipeline]]
* [[.:extension-entwicklung|Extension Development]]