lsa-planer
LSA-Planer Professional – Planungssoftware für Lichtsignalanlagen nach RiLSA 2015 und § 45 StVO. EUPL-1.2.
/ package.json
| 1 | { |
| 2 | "name": "lsa-planer-professional", |
| 3 | "version": "5.43.2", |
| 4 | "description": "Professionelle Lichtsignalanlagen-Planungssoftware nach RiLSA 2015 und §45 StVO", |
| 5 | "author": { |
| 6 | "name": "Olaf Willerding", |
| 7 | "email": "olaf@olaf-willerding.de", |
| 8 | "url": "https://www.olaf-willerding.de" |
| 9 | }, |
| 10 | "license": "EUPL-1.2", |
| 11 | "private": true, |
| 12 | "main": "build/electron/main.js", |
| 13 | "keywords": [ |
| 14 | "LSA", |
| 15 | "RiLSA", |
| 16 | "StVO", |
| 17 | "Verkehrsplanung", |
| 18 | "Lichtsignalanlage", |
| 19 | "Signalzeitenplan" |
| 20 | ], |
| 21 | "scripts": { |
| 22 | "prepare": "node -e \"const f=require('node:fs'),k=require('node:child_process');if(!f.existsSync('.git'))process.exit(0);try{k.execFileSync('git',['config','core.hooksPath','.githooks'])}catch{console.log('Hinweis: Der pre-commit-Haken wurde nicht eingerichtet. Von Hand: git config core.hooksPath .githooks')}\"", |
| 23 | "dev": "vite", |
| 24 | "dev:electron": "npm run build:electron && vite build && electron .", |
| 25 | "build:renderer": "vite build", |
| 26 | "build:electron": "tsc -p tsconfig.electron.json && npm run build:preload", |
| 27 | "build:preload": "esbuild electron/preload.ts --bundle --platform=node --target=node20 --format=cjs --external:electron --outfile=build/electron/preload.js --log-level=warning", |
| 28 | "build": "npm run typecheck && npm run build:electron && npm run build:renderer && npm run lizenztexte", |
| 29 | "start": "npm run build && electron .", |
| 30 | "typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.electron.json --noEmit", |
| 31 | "lint": "eslint . --max-warnings 0", |
| 32 | "lint:fix": "eslint . --fix", |
| 33 | "format": "prettier --write .", |
| 34 | "format:check": "prettier --check .", |
| 35 | "test": "vitest run", |
| 36 | "test:watch": "vitest", |
| 37 | "test:coverage": "vitest run --coverage", |
| 38 | "e2e": "npm run build && playwright test", |
| 39 | "e2e:nurtest": "playwright test", |
| 40 | "gate:schnell": "npm run format:check && npm run typecheck && npm run lint && npm run test:coverage", |
| 41 | "gate": "npm run gate:schnell && npm run e2e", |
| 42 | "clean": "node scripts/clean.mjs", |
| 43 | "lizenztexte": "node scripts/lizenztexte.mjs", |
| 44 | "pruefsummen": "node scripts/pruefsummen.mjs", |
| 45 | "dist": "npm run build && electron-builder && npm run pruefsummen", |
| 46 | "dist:win": "npm run build && electron-builder --win && npm run pruefsummen", |
| 47 | "dist:mac": "npm run build && electron-builder --mac && npm run pruefsummen", |
| 48 | "dist:linux": "npm run build && electron-builder --linux && npm run pruefsummen" |
| 49 | }, |
| 50 | "comment:license": "EUPL-1.2 ist der SPDX-Bezeichner der Open-Source-Lizenz fuer die Europaeische Union v. 1.2; der Wortlaut steht in LICENSE (englisch) und LICENSE.de.txt (deutsch), beide amtlich und gleichermassen verbindlich. \"private\": true steht daneben nicht im Widerspruch dazu: Es sperrt allein npm publish. Dieses Erzeugnis wird als Installationspaket weitergegeben, nicht ueber die npm-Registratur - der Schalter verhindert die versehentliche Veroeffentlichung dort und sagt nichts ueber die Rechte am Werk.", |
| 51 | "comment:prepare": "prepare laeuft bei jedem npm install und richtet den Haken .githooks/pre-commit ein - core.hooksPath steht in .git/config und wird von git clone nicht mitgefuehrt. Es bricht nie ab: ohne .git-Verzeichnis (Tarball, Bauumgebung ohne Arbeitskopie) endet es sofort, und schlaegt git fehl, bleibt es bei einem Hinweis. Die Pruefung auf .git haelt es zugleich davon ab, in einer fremden Arbeitskopie deren core.hooksPath zu setzen. Kein Werkzeug dafuer aufnehmen: Das Projekt hat null Laufzeitabhaengigkeiten.", |
| 52 | "comment:dependencies": "jspdf und jspdf-autotable werden von Vite in den Renderer gebuendelt. Sie stehen deshalb unter devDependencies - das Installationspaket enthaelt kein node_modules. Was daraus tatsaechlich im Auslieferungsstand landet, verzeichnet docs/fremdbestandteile.md.", |
| 53 | "comment:extraFiles": "extraFiles und nicht extraResources: electron-builder legt LICENSE.electron.txt und LICENSES.chromium.html von sich aus NEBEN die Programmdatei, nicht nach resources/. Die vier Dateien hier gehoeren dazu und nicht an eine zweite Stelle. LICENSE und LICENSE.de.txt sind die Lizenz des Werks selbst - bis 5.14.0 lag sie dem Paket NICHT bei (gemessen am gebauten Stand: null Treffer auf die Kopfzeile beider Sprachfassungen im app.asar, im Setup und in jeder Datei des Installationsverzeichnisses), waehrend Artikel 5 der EUPL bei jeder Verbreitung eine Kopie beim Werk verlangt. Sie behalten den Namen aus dem Quellbaum: Jede fremde Beilage nennt ihren Bestandteil im Namen, die eigene nennt keinen - daran unterscheidet man sie, und ein zweiter Name fuer dasselbe Schriftstueck waere eine zweite Stelle, an der etwas auseinanderlaeuft. Keine Lizenzseite im Installer, also kein build.nsis.license: electron-builder erzeugt daraus MUI_PAGE_LICENSE, in NSIS eine Zustimmungsschranke mit der Schaltflaeche Annehmen. Die EUPL ist eine Lizenz fuer Weitergabe und Bearbeitung und keine Nutzungsbedingung; eine erzwungene Zustimmung waere eine Aussage ueber die Rechtslage, die dieses Programm nicht treffen soll. Bewacht wird beides von tests/tools/eigeneLizenzImPaket.test.ts. DRITTANBIETER-LIZENZEN.txt ist erzeugt - scripts/lizenztexte.mjs sammelt die Texte der gebuendelten Bibliotheken aus node_modules ein und laeuft als letzter Schritt von npm run build, also vor jedem electron-builder-Lauf. FREMDBESTANDTEILE.md ist docs/fremdbestandteile.md woertlich: Wer das Installationspaket bekommt, soll auch lesen koennen, was darin steckt.", |
| 54 | "devDependencies": { |
| 55 | "@eslint/js": "^10.0.1", |
| 56 | "@playwright/test": "^1.62.1", |
| 57 | "@types/node": "^22.10.2", |
| 58 | "@vitest/coverage-v8": "^2.1.8", |
| 59 | "electron": "^44.3.0", |
| 60 | "electron-builder": "^26.15.3", |
| 61 | "esbuild": "0.25.12", |
| 62 | "eslint": "^10.9.1", |
| 63 | "globals": "^17.12.0", |
| 64 | "jsdom": "^25.0.1", |
| 65 | "jspdf": "^2.5.2", |
| 66 | "jspdf-autotable": "^3.8.4", |
| 67 | "prettier": "^3.9.6", |
| 68 | "typescript": "^5.7.2", |
| 69 | "typescript-eslint": "^8.69.0", |
| 70 | "vite": "^6.0.5", |
| 71 | "vitest": "^2.1.8" |
| 72 | }, |
| 73 | "build": { |
| 74 | "appId": "de.lsaplaner.professional", |
| 75 | "productName": "LSA-Planer Professional", |
| 76 | "copyright": "Copyright © 2026 Olaf Willerding", |
| 77 | "directories": { |
| 78 | "output": "release", |
| 79 | "buildResources": "assets" |
| 80 | }, |
| 81 | "files": [ |
| 82 | "build/**/*", |
| 83 | "!build/**/*.map", |
| 84 | "assets/icon.*", |
| 85 | "package.json" |
| 86 | ], |
| 87 | "extraFiles": [ |
| 88 | { |
| 89 | "from": "LICENSE", |
| 90 | "to": "LICENSE" |
| 91 | }, |
| 92 | { |
| 93 | "from": "LICENSE.de.txt", |
| 94 | "to": "LICENSE.de.txt" |
| 95 | }, |
| 96 | { |
| 97 | "from": "QUELLCODE.txt", |
| 98 | "to": "QUELLCODE.txt" |
| 99 | }, |
| 100 | { |
| 101 | "from": "LIESMICH.txt", |
| 102 | "to": "LIESMICH.txt" |
| 103 | }, |
| 104 | { |
| 105 | "from": "build/DRITTANBIETER-LIZENZEN.txt", |
| 106 | "to": "DRITTANBIETER-LIZENZEN.txt" |
| 107 | }, |
| 108 | { |
| 109 | "from": "docs/fremdbestandteile.md", |
| 110 | "to": "FREMDBESTANDTEILE.md" |
| 111 | } |
| 112 | ], |
| 113 | "extraMetadata": { |
| 114 | "main": "build/electron/main.js" |
| 115 | }, |
| 116 | "win": { |
| 117 | "target": [ |
| 118 | "nsis", |
| 119 | "portable" |
| 120 | ], |
| 121 | "icon": "assets/icon.ico" |
| 122 | }, |
| 123 | "mac": { |
| 124 | "category": "public.app-category.productivity", |
| 125 | "icon": "assets/icon.png", |
| 126 | "target": "dmg" |
| 127 | }, |
| 128 | "linux": { |
| 129 | "target": "AppImage", |
| 130 | "icon": "assets/icon.png", |
| 131 | "category": "Science" |
| 132 | }, |
| 133 | "nsis": { |
| 134 | "oneClick": false, |
| 135 | "allowToChangeInstallationDirectory": true, |
| 136 | "createDesktopShortcut": true, |
| 137 | "createStartMenuShortcut": true, |
| 138 | "shortcutName": "LSA-Planer Professional", |
| 139 | "installerIcon": "assets/icon.ico", |
| 140 | "uninstallerIcon": "assets/icon.ico", |
| 141 | "installerHeaderIcon": "assets/icon.ico" |
| 142 | } |
| 143 | } |
| 144 | } |