{ "name": "TTRPGPlayer", "version": "1.0.28", "description": "TTRPG Player — редактор и проигрыватель НРИ", "main": "dist/main/index.cjs", "scripts": { "dev": "node scripts/dev.mjs", "build": "node scripts/build.mjs --production", "build:dev": "node scripts/build.mjs", "build:obfuscate": "node scripts/build.mjs --production --obfuscate", "lint": "eslint . --max-warnings 0", "typecheck": "tsc -p tsconfig.eslint.json --noEmit", "test": "tsx --test app/renderer/shared/ui/controls.tooltip.test.ts app/renderer/shared/ui/secondaryWindows.stability.test.ts app/renderer/npcs/tiptapEditorSafe.test.ts app/renderer/editor/state/projectState.race.test.ts app/renderer/editor/fileDrop.test.ts app/shared/graph/sceneListOrder.test.ts app/renderer/editor/graph/sceneCardById.test.ts app/renderer/editor/i18n/editorMessages.locale.test.ts app/renderer/editor/help/helpLinkify.test.ts app/renderer/editor/sceneDescriptionHtml.test.ts app/shared/graph/storylineExportImport.test.ts app/shared/foundry/foundryGraph.test.ts app/shared/ipc/contracts.mediaRemoval.test.ts app/shared/effectEraserHitTest.test.ts app/shared/fieldEffectEraser.test.ts app/renderer/control/controlApp.effectsPanel.test.ts app/renderer/control/controlApp.audioPerf.networkRegression.test.ts app/renderer/control/controlApp.brushPerf.networkRegression.test.ts app/renderer/shared/useAssetImageUrl.cache.test.ts app/main/sessionIpc.phase6.networkRegression.test.ts app/renderer/shared/sceneOverlay/sceneOverlayHost.test.ts app/renderer/shared/effects/PxiEffectsOverlay.pointer.test.ts app/renderer/shared/traps/trapActivation.test.ts app/main/windows/createWindows.editorClose.test.ts app/main/safeConsole.test.ts app/main/windows/bootWindow.test.ts app/main/effects/effectsStore.test.ts app/main/effects/sceneDarknessStore.test.ts app/main/sceneTraps/sceneTrapsStore.test.ts app/main/project/assetPrune.test.ts app/main/project/optimizeImageImport.test.ts app/main/project/scenePreviewThumbnail.test.ts app/main/project/fsRetry.test.ts app/main/project/zipRead.test.ts app/main/project/replaceFileAtomic.test.ts app/main/project/zipStore.legacyContract.test.ts app/shared/package.build.test.ts app/shared/license/canonicalJson.test.ts app/shared/license/productKey.test.ts app/shared/license/licenseService.networkRegression.test.ts app/shared/video/videoPlaybackPerf.networkRegression.test.ts app/shared/video/videoPlaybackLoop.networkRegression.test.ts app/main/license/verifyLicenseToken.test.ts app/main/license/machineFingerprint.test.ts app/shared/types/appPlayers.test.ts app/shared/types/npcDisposition.test.ts app/shared/types/sceneGrid.test.ts app/shared/types/sceneGridSnap.test.ts app/main/tokens/tokenGridSnapSessionStore.test.ts app/shared/players/playerTeams.test.ts app/shared/players/launchPlayersSelection.test.ts app/main/players/playersStore.test.ts app/main/players/sceneNpcTokensSessionStore.test.ts app/main/players/scenePlayerTokensSessionStore.test.ts app/shared/ipc/contracts.players.test.ts && node --test scripts/build-env.test.mjs scripts/obfuscate-main.test.mjs scripts/release-mac-prep.test.mjs scripts/release-native-prep.test.mjs scripts/verify-packaged-sharp.test.mjs app/main/project/sharpRuntime.test.mjs", "format": "prettier . --check", "format:write": "prettier . --write", "postinstall": "patch-package", "release:info": "node scripts/print-release-info.mjs", "pack": "npm run build && node scripts/release-win-prep.mjs && electron-builder && node scripts/verify-packaged-sharp.mjs", "pack:dir": "npm run build && node scripts/release-win-prep.mjs && electron-builder --dir && node scripts/verify-packaged-sharp.mjs", "pack:mac": "npm run build && node scripts/release-mac-prep.mjs && electron-builder --mac && node scripts/verify-packaged-sharp.mjs", "pack:win": "npm run build && node scripts/release-win-prep.mjs && electron-builder --win && node scripts/verify-packaged-sharp.mjs", "pack:linux": "node scripts/release-linux-pack.mjs", "release": "powershell -ExecutionPolicy Bypass -File scripts/ttrpg-release/release.ps1", "release:all": "powershell -ExecutionPolicy Bypass -File scripts/ttrpg-release/release-all.ps1", "prepare:release": "powershell -ExecutionPolicy Bypass -File scripts/ttrpg-release/prepare-release.ps1", "publish:updates": "powershell -ExecutionPolicy Bypass -File scripts/ttrpg-release/publish.ps1", "test:e2e": "playwright test", "test:e2e:build": "npm run build && playwright test" }, "keywords": [], "author": "", "license": "ISC", "type": "module", "dependencies": { "@fontsource/inter": "^5.2.8", "@tiptap/extension-placeholder": "^3.27.4", "@tiptap/react": "^3.27.4", "@tiptap/starter-kit": "^3.27.4", "classic-level": "^3.0.0", "electron-updater": "^6.6.2", "ffmpeg-static": "^5.3.0", "pixi.js": "^8.18.1", "react": "^19.2.5", "react-dom": "^19.2.5", "reactflow": "^11.11.4", "sharp": "^0.34.5" }, "devDependencies": { "@eslint/js": "^9.39.4", "@playwright/test": "^1.62.0", "@resvg/resvg-js": "^2.6.2", "@rollup/plugin-strip": "^3.0.4", "@types/node": "^25.6.0", "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", "@types/yauzl": "^2.10.3", "@types/yazl": "^3.3.1", "@vitejs/plugin-react": "^6.0.1", "babel-plugin-react-compiler": "^1.0.0", "electron": "^41.2.0", "electron-builder": "^26.8.1", "esbuild": "^0.28.0", "eslint": "^9.39.4", "eslint-config-prettier": "^10.1.8", "eslint-import-resolver-typescript": "^4.4.4", "eslint-plugin-import": "^2.32.0", "eslint-plugin-jsx-a11y": "^6.10.2", "eslint-plugin-prettier": "^5.5.5", "eslint-plugin-react": "^7.37.5", "eslint-plugin-react-hooks": "^7.0.1", "eslint-plugin-unicorn": "^64.0.0", "javascript-obfuscator": "^4.2.2", "patch-package": "^8.0.1", "prettier": "^3.8.3", "to-ico": "^1.1.2", "tsx": "^4.21.0", "typescript": "^6.0.2", "typescript-eslint": "^8.58.2", "vite": "^8.0.8", "yauzl": "^3.3.0", "yazl": "^3.3.1" }, "build": { "appId": "com.ttrpgplayer.app", "productName": "TTRPGPlayer", "copyright": "Copyright © TTRPGPlayer", "directories": { "output": "release", "buildResources": "build" }, "extraResources": [ { "from": "build/icon.ico", "to": "branding/icon.ico" } ], "files": [ "dist/**/*", "package.json" ], "asar": true, "npmRebuild": false, "asarUnpack": [ "dist/preload/**", "dist/renderer/app-pack-icon.png", "dist/renderer/app-window-icon.png", "node_modules/sharp/**", "node_modules/@img/**", "node_modules/ffmpeg-static/**", "node_modules/classic-level/**", "node_modules/abstract-level/**", "node_modules/level-supports/**", "node_modules/level-transcoder/**", "node_modules/module-error/**", "node_modules/buffer/**", "node_modules/napi-macros/**" ], "toolsets": { "appimage": "1.0.2" }, "mac": { "category": "public.app-category.games", "artifactName": "${productName}-${arch}.${ext}", "target": [ { "target": "dmg", "arch": [ "x64", "arm64" ] }, { "target": "zip", "arch": [ "x64", "arm64" ] } ], "icon": "build/icon.png" }, "win": { "target": [ { "target": "nsis", "arch": [ "x64" ] }, { "target": "zip", "arch": [ "x64" ] } ], "icon": "build/icon.ico" }, "linux": { "target": [ { "target": "AppImage", "arch": [ "x64", "arm64" ] } ], "category": "Game", "maintainer": "TTRPGPlayer", "synopsis": "TTRPG Player — tabletop RPG editor and player", "icon": "build/icon.png" }, "appImage": { "artifactName": "${productName}-${arch}.${ext}" }, "dmg": { "artifactName": "${productName}-${arch}.${ext}" }, "nsis": { "oneClick": false, "allowToChangeInstallationDirectory": true, "deleteAppDataOnUninstall": false, "artifactName": "${productName}-Setup.${ext}" }, "publish": { "provider": "generic", "url": "https://updates.ttrpgplayer.ru/" } } }