mirror of
https://github.com/johannesjo/super-productivity.git
synced 2026-07-17 16:37:43 +00:00
* feat(eml): add EML file parsing and task creation on drop Currently a simple skeleton, needs more work, but should be a good POC before refining. Fixes #518 * fix(main-header): correct email message formatting and handle EML upload errors while this commit looks bad, its a first commit before refining this solution and sending the final PR. Fixes #518 * refactor(eml): move eml-parser to util and tighten isFileEml check * feat(eml): on eml hover error parse error to log and show a snack message * bugfix(eml-typecheck): tighten type for 'sender' to not have bugs * refactor(eml-drop): updated file locations for each file drop * bugfix(eml-drop): use stable npm package for parsing eml files * bugfix(eml-drop): remove relevant "dev" flag * refactor(eml-drop): drop empty emails with a snack instead of throwing * test(eml-drop): add isFileEml and parseEml unit tests Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * rafactor(eml-service): refactor code to be consistent as written in issue number 3 * bugfix(eml-drop): remove file name when geting an error as written in 1. inside the pr * docs: update task creation instructions to include .eml file support * refactor(eml-parser): update import statement for PostalMime to dynamic import * refactor(eml-drop): enhance file drop handling and improve error logging * test(eml-drop): add unit tests for EmlDropDirective and EmlDropService * feat(tasks): save eml body to task notes and harden eml parsing - capture the parsed plain-text email body into task notes (text/plain only, never HTML, to avoid injecting untrusted markup into markdown notes) - pass the File/Blob straight to postal-mime so it applies the message's own charset/transfer-encoding instead of forcing UTF-8 via file.text() - use relative import paths to match repo convention - document why the drop handler relies on the global dragover preventDefault - update wiki wording + tests for the new add() signature and notes behavior * fix(tasks): harden eml-to-task against untrusted subject/size Follow-up to the eml-drop feature from a multi-agent review: - suppress short-syntax on imported email subjects: email content is untrusted external input, but TaskService.add() dispatches addTask which ShortSyntaxEffects parses for #tag/@date/+project/URL tokens — stripping them from the intended literal "sender: subject" title and mutating tags/scheduling/attachments. Thread isIgnoreShortSyntax through add() (matching the existing plugin-bridge pattern) and set it here. - guard against oversized .eml files (postal-mime parses synchronously on the main thread and the body syncs to every device) with a 10MB cap + EML_TOO_LARGE snack. - trim sender/subject so whitespace-only headers don't bypass the empty check or block the address fallback. - drop the stale "add attachment" TODO. * fix(tasks): log bounded eml parse reason, not the raw error The source is untrusted email content and the log history is exportable (rule #9). Log only e.message (postal-mime's throw messages are structural, so no email content leaks) instead of the raw error object + stack. --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> Co-authored-by: Johannes Millan <johannes.millan@gmail.com>
367 lines
23 KiB
JSON
367 lines
23 KiB
JSON
{
|
|
"name": "superProductivity",
|
|
"version": "18.13.1",
|
|
"description": "ToDo list and Time Tracking",
|
|
"keywords": [
|
|
"ToDo",
|
|
"Task Management",
|
|
"Jira",
|
|
"GitHub",
|
|
"Time Tracking"
|
|
],
|
|
"homepage": "https://super-productivity.com",
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "git://github.com/super-productivity/super-productivity.git"
|
|
},
|
|
"license": "MIT",
|
|
"author": "Johannes Millan <contact@super-productivity.com> (http://super-productivity.com)",
|
|
"main": "./electron/main.js",
|
|
"scripts": {
|
|
"env": "node ./tools/load-env.js",
|
|
"assemble:android:prod": "cd android && ./gradlew assembleRelease && cd ..",
|
|
"assemble:android:stage": "cd android && ./gradlew assembleDebug && cd ..",
|
|
"prebuild": "npm run env && node ./tools/git-version.js && npm run build:packages",
|
|
"postinstall": "patch-package",
|
|
"prepare": "husky && ts-patch install && npm run env && npm run sync-core:build && npm run sync-providers:build && npm run shared-schema:build && npm run plugin-api:build",
|
|
"build": "npm run buildAllElectron:noTests:prod",
|
|
"build:packages": "node ./packages/build-packages.js",
|
|
"buildAllElectron:noTests:prod": "npm run lint && npm run buildFrontend:prod:es6 && npm run electron:build",
|
|
"buildAllElectron:prod": "npm run env && npm run preCheck && npm run buildFrontend:prod:es6 && npm run electron:build",
|
|
"buildAllElectron:stage": "npm run preCheck && npm run buildFrontend:stage:es6 && npm run electron:build",
|
|
"buildFrontend:dev": "npm run env && ng build --configuration development",
|
|
"buildFrontend:prod:es6": "npm run prebuild && cross-env BROWSERSLIST_ENV='modern' ng build --configuration production && npm run removeWOFF1",
|
|
"buildFrontend:prod:watch": "npm run prebuild && ng build --configuration production --watch",
|
|
"buildFrontend:prodWeb": "npm run prebuild && ng build --configuration productionWeb",
|
|
"buildFrontend:stage:es6": "npm run prebuild && cross-env BROWSERSLIST_ENV='modern' ng build --configuration stage && npm run removeWOFF1",
|
|
"buildFrontend:stageWeb": "npm run prebuild && ng build --configuration stageWeb",
|
|
"buildFrontend:stageWeb:unminified": "npm run prebuild && ng build --configuration stageWeb --optimization=false --aot=false",
|
|
"dist": "npm run buildAllElectron:prod && electron-builder",
|
|
"dist:android": "npm run buildFrontend:stageWeb:unminified && npm run sync:android && npm run assemble:android:stage && echo 'Staging Android APK generated at android/app/build/outputs/apk/debug/'",
|
|
"dist:android:prod": "npm run buildFrontend:prodWeb && npm run sync:android && npm run assemble:android:prod && echo 'Production Android APK generated at android/app/build/outputs/apk/release/'",
|
|
"dist:linuxAndWin": "npm run buildAllElectron:prod && electron-builder --linux --win",
|
|
"dist:mac:dl": "cp tools/mac-profiles/dl.provisionprofile embedded.provisionprofile && electron-builder --mac",
|
|
"dist:mac:mas": "cp tools/mac-profiles/mas.provisionprofile embedded.provisionprofile; electron-builder --mac mas --config=build/electron-builder.mas.yaml",
|
|
"dist:mac:mas:buildOnly": "electron-builder --config=build/electron-builder.mas.yaml",
|
|
"dist:mac:mas:dev": "cp tools/mac-profiles/mas-dev.provisionprofile embedded.provisionprofile; electron-builder --mac mas-dev --config=build/electron-builder.mas-dev.yaml",
|
|
"dist:mac:mas:x64": "cp tools/mac-profiles/mas.provisionprofile embedded.provisionprofile; electron-builder --mac mas --config=build/electron-builder.mas.yaml --x64",
|
|
"dist:only": "electron-builder",
|
|
"dist:win": "npm run buildAllElectron:noTests:prod && electron-builder --win",
|
|
"dist:win:appx": "npm run buildAllElectron:prod && electron-builder --win --config=build/electron-builder.appx.yaml",
|
|
"dist:win:only": "electron-builder --win",
|
|
"dist:win:store": "git pull && npm run && copy electron-builder.win-store.yaml electron-builder.yaml && npm run dist:win && git checkout electron-builder.yaml || git checkout electron-builder.yaml",
|
|
"droid": "npm run buildFrontend:stageWeb:unminified && npx cap sync android",
|
|
"buildFrontend:e2e": "npm run plugins:build && npm run env && ng build",
|
|
"serveFrontend:e2e:prod": "npx http-server .tmp/angular-dist/browser -p 4242 -c-1 --proxy http://localhost:4242?",
|
|
"e2e": "npm run e2e:all -- --grep-invert \"@supersync|@webdav\"",
|
|
"e2e:all": "npx playwright test --config e2e/playwright.config.ts --reporter=line",
|
|
"e2e:ci": "npm run e2e",
|
|
"e2e:ui": "npx playwright test --config e2e/playwright.config.ts --ui",
|
|
"e2e:file": "npx playwright test --config e2e/playwright.config.ts --reporter=list",
|
|
"e2e:debug": "npx playwright test --config e2e/playwright.config.ts --debug",
|
|
"e2e:headed": "npx playwright test --config e2e/playwright.config.ts --headed",
|
|
"e2e:show-report": "npx playwright show-report .tmp/e2e-test-results/playwright-report",
|
|
"e2e:report": "PLAYWRIGHT_HTML_REPORT=1 npx playwright test --config e2e/playwright.config.ts",
|
|
"e2e:webdav": "sh -c 'docker compose up -d webdav && ./scripts/wait-for-webdav.sh && E2E_REQUIRE_WEBDAV=true npm run e2e:all -- --grep @webdav \"$@\"; EXIT_CODE=$?; docker compose down; exit $EXIT_CODE' --",
|
|
"e2e:webdav:file": "sh -c 'docker compose up -d webdav && ./scripts/wait-for-webdav.sh && E2E_REQUIRE_WEBDAV=true E2E_VERBOSE=true npx playwright test --config e2e/playwright.config.ts --reporter=list \"$@\"; EXIT_CODE=$?; docker compose down; exit $EXIT_CODE' --",
|
|
"e2e:supersync": "sh -c 'docker compose -f docker-compose.yaml -f docker-compose.supersync.yaml up -d --build supersync && ./scripts/wait-for-supersync.sh && E2E_REQUIRE_SUPERSYNC=true npm run e2e:all -- --grep @supersync --workers=3 \"$@\"; EXIT_CODE=$?; docker compose -f docker-compose.yaml -f docker-compose.supersync.yaml down supersync; exit $EXIT_CODE' --",
|
|
"e2e:supersync:file": "sh -c 'docker compose -f docker-compose.yaml -f docker-compose.supersync.yaml up -d --build supersync && ./scripts/wait-for-supersync.sh && E2E_REQUIRE_SUPERSYNC=true E2E_VERBOSE=true npx playwright test --config e2e/playwright.config.ts --reporter=list --workers=3 \"$@\"; EXIT_CODE=$?; docker compose -f docker-compose.yaml -f docker-compose.supersync.yaml down supersync; exit $EXIT_CODE' --",
|
|
"supersync:up": "docker compose -f docker-compose.yaml -f docker-compose.supersync.yaml up -d --build supersync && ./scripts/wait-for-supersync.sh",
|
|
"supersync:down": "docker compose -f docker-compose.yaml -f docker-compose.supersync.yaml down supersync",
|
|
"e2e:docker": "docker compose -f docker-compose.e2e.yaml up -d app && ./scripts/wait-for-app.sh && E2E_BASE_URL=http://localhost:${APP_PORT:-4242} npm run e2e; EXIT_CODE=$?; docker compose -f docker-compose.e2e.yaml down; exit $EXIT_CODE",
|
|
"e2e:docker:webdav": "docker compose -f docker-compose.e2e.yaml up -d app webdav && ./scripts/wait-for-app.sh && ./scripts/wait-for-webdav.sh && E2E_REQUIRE_WEBDAV=true E2E_BASE_URL=http://localhost:${APP_PORT:-4242} npm run e2e:all -- --grep @webdav; EXIT_CODE=$?; docker compose -f docker-compose.e2e.yaml down; exit $EXIT_CODE",
|
|
"e2e:docker:all": "docker compose -f docker-compose.e2e.yaml -f docker-compose.yaml -f docker-compose.supersync.yaml up -d app webdav db supersync && ./scripts/wait-for-app.sh && ./scripts/wait-for-webdav.sh && ./scripts/wait-for-supersync.sh && E2E_REQUIRE_WEBDAV=true E2E_REQUIRE_SUPERSYNC=true E2E_BASE_URL=http://localhost:${APP_PORT:-4242} npm run e2e:all -- --workers=6; EXIT_CODE=$?; docker compose -f docker-compose.e2e.yaml -f docker-compose.yaml -f docker-compose.supersync.yaml down; exit $EXIT_CODE",
|
|
"screenshots": "npm run screenshots:capture && npm run screenshots:build",
|
|
"screenshots:capture": "npx playwright test --config e2e/playwright.store-screenshots.config.ts",
|
|
"screenshots:capture:desktop": "npx playwright test --config e2e/playwright.store-screenshots.config.ts --project=desktopMaster",
|
|
"screenshots:capture:mobile": "npx playwright test --config e2e/playwright.store-screenshots.config.ts --project=iphone69 --project=ipad13 --project=androidPhone --project=android7Tablet --project=android10Tablet",
|
|
"screenshots:build": "TS_NODE_COMPILER_OPTIONS='{\"module\":\"commonjs\",\"moduleResolution\":\"node\"}' npx ts-node --transpile-only e2e/store-screenshots/build-store-assets.ts",
|
|
"screenshots:build:flathub": "SP_SCREENSHOTS_STORE=flathub npm run screenshots:build",
|
|
"screenshots:capture:electron": "npm run electron:build && SCREENSHOT_MODE=electron npx playwright test --config e2e/playwright.store-screenshots.electron.config.ts",
|
|
"screenshots:capture:flathub": "SP_SCREENSHOT_BG_DISABLE=1 npm run screenshots:capture:electron",
|
|
"screenshots:electron": "npm run screenshots:capture:electron && npm run screenshots:build",
|
|
"screenshots:flathub": "npm run screenshots:capture:flathub && npm run screenshots:build:flathub",
|
|
"video": "npm run video:capture && npm run video:build && npm run video:open",
|
|
"video:capture": "npx playwright test --config e2e/playwright.store-video.config.ts",
|
|
"video:build": "TS_NODE_COMPILER_OPTIONS='{\"module\":\"commonjs\",\"moduleResolution\":\"node\"}' npx ts-node --transpile-only e2e/store-video/build-video.ts",
|
|
"video:open": "TS_NODE_COMPILER_OPTIONS='{\"module\":\"commonjs\",\"moduleResolution\":\"node\"}' npx ts-node --transpile-only e2e/store-video/open-video.ts",
|
|
"video:full": "cross-env REEL_VARIANT=full npm run video",
|
|
"video:ms-store": "cross-env REEL_VARIANT=ms-store npm run video",
|
|
"video:shorts": "cross-env REEL_VARIANT=shorts npm run video",
|
|
"video:keyboard": "cross-env REEL_VARIANT=keyboard npm run video",
|
|
"video:mobile": "cross-env REEL_VARIANT=mobile npm run video",
|
|
"electron": "NODE_ENV=PROD electron .",
|
|
"electron:build": "node ./tools/build-wayland-idle-helper.js && tsc -p electron/tsconfig.electron.json && node electron/scripts/bundle-preload.js",
|
|
"electron:verify-asar": "node tools/verify-electron-requires.js .tmp/app-builds/linux-unpacked/resources/app.asar",
|
|
"electron:watch": "tsc -p electron/tsconfig.electron.json --watch",
|
|
"electronBuilderOnly": "electron-builder",
|
|
"empty": "echo 'EMPTY YEAH'",
|
|
"install:android": "adb install -r android/app/build/outputs/apk/fdroid/debug/app-fdroid-debug.apk && echo 'Staging APK installed successfully.'",
|
|
"install:android:prod": "adb install -r android/app/build/outputs/apk/fdroid/release/app-fdroid-release.apk && echo 'Production APK installed successfully.'",
|
|
"int": "node ./tools/extract-i18n-single.js",
|
|
"int:clean": "ngx-translate-extract --input ./src --output ./src/assets/i18n/*.json --clean --sort --format namespaced-json --marker _",
|
|
"int:find": "ngx-translate-extract --input ./src --output ./src/assets/i18n/*.json --sort --format namespaced-json --marker _",
|
|
"int:test": "node ./tools/test-lng-files.js",
|
|
"int:unused": "node ./tools/find-unused-translations.js",
|
|
"int:watch": "node ./tools/extract-i18n-watch.js",
|
|
"lint": "npm run lint:ts && npm run lint:scss && npm run test:lint-rules",
|
|
"test:lint-rules": "node eslint-local-rules/run-specs.js",
|
|
"lint:ts": "ng lint",
|
|
"lint:scss": "stylelint \"**/*.scss\" -- --custom-formatter @csstools/stylelint-formatter-github",
|
|
"localInstall": "sudo echo 'Starting local install' && rm -Rf ./.tmp/angular-dist/ && rm -Rf ./.tmp/app-builds/ && npm run buildAllElectron:stage && electron-builder --linux deb && sudo dpkg -i .tmp/app-builds/superProductivity*.deb",
|
|
"localInstall:mac": "sudo echo 'Starting local install MAC. Don`t forget APPLEID & APPLEIDPASS !!' && npm run buildAllElectron:noTests:prod && sudo echo '' && electron-builder && sudo cp -rf .tmp/app-builds/mac/superProductivity.app/ /Applications/superProductivity.app",
|
|
"localInstall:prod": "sudo echo 'Starting local install PROD' && rm -Rf ./.tmp/angular-dist/ && rm -Rf ./.tmp/app-builds/ && npm run buildAllElectron:prod && electron-builder --linux deb && sudo dpkg -i .tmp/app-builds/superProductivity*.deb",
|
|
"localInstall:quick": "sudo echo 'Starting local install QUICK' && rm -Rf ./.tmp/angular-dist/ && rm -Rf ./.tmp/app-builds/ && npm run buildFrontend:stage:es6 && npm run electron:build && electron-builder --linux deb && sudo dpkg -i .tmp/app-builds/superProductivity*.deb",
|
|
"localInstall:test:snap": "sudo echo 'Starting local install SNAP QUICK' && rm -Rf ./.tmp/angular-dist/ && rm -Rf ./.tmp/app-builds/ && npm run buildFrontend:stage:es6 && npm run electron:build && electron-builder --linux snap && sudo snap install --dangerous .tmp/app-builds/superProductivity*.snap",
|
|
"ng": "ng",
|
|
"pack": "electron-builder --dir",
|
|
"preCheck": "npm run lint && npm run test & npm run int:test && npm run e2e",
|
|
"release": "npm run dist",
|
|
"removeWOFF1": "node ./tools/remove-woff.js",
|
|
"serveProd": "node ./tools/load-env.js --ensure && ng serve --configuration production",
|
|
"start": "npm run electron:build && cross-env NODE_ENV=DEV electron .",
|
|
"serve": "node ./tools/load-env.js --ensure && ng serve",
|
|
"startFrontend": "npm run env && ng serve",
|
|
"startFrontend:e2e": "npm run env && ng serve --port=4242",
|
|
"startFrontend:prod": "npm run env && ng serve --configuration production",
|
|
"startFrontend:stage": "npm run env && ng serve --configuration stage",
|
|
"generate:ios-icon": "node tools/generate-ios-icon.js",
|
|
"sync:android": "npx cap sync android",
|
|
"sync:ios": "npx cap sync ios",
|
|
"dist:ios:prod": "npm run buildFrontend:prodWeb && npm run sync:ios",
|
|
"stats": "ng build --configuration production --source-map --stats-json && npx esbuild-visualizer --metadata .tmp/angular-dist/stats.json && xdg-open stats.html",
|
|
"test": "npm run packages:test && npm run release-notes:test && cross-env TZ='Europe/Berlin' ng test --watch=false && npm run test:tz:ci",
|
|
"test:once": "cross-env TZ='Europe/Berlin' ng test --watch=false",
|
|
"test:watch": "cross-env TZ='Europe/Berlin' ng test --browsers ChromeHeadless",
|
|
"test:tz:ci": "npm run test:tz:la",
|
|
"test:tz:la": "cross-env TZ='America/Los_Angeles' ng test --watch=false --include='**/*.spec.ts'",
|
|
"test:tz:tokyo": "cross-env TZ='Asia/Tokyo' ng test --watch=false --include='**/*.spec.ts'",
|
|
"test:tz:sydney": "cross-env TZ='Australia/Sydney' ng test --watch=false --include='**/*.spec.ts'",
|
|
"test:tz:utc": "cross-env TZ='UTC' ng test --watch=false --include='**/*.spec.ts'",
|
|
"test:tz:all": "npm run test && npm run test:tz:la && npm run test:tz:tokyo && npm run test:tz:sydney && npm run test:tz:utc",
|
|
"test:date-utils": "cross-env TZ='Europe/Berlin' ng test --watch=false --include='src/app/util/**/format-*.spec.ts' --include='src/app/util/**/date-*.spec.ts'",
|
|
"test:date-utils:tz": "npm run test:date-utils && cross-env TZ='America/Los_Angeles' npm run test:date-utils && cross-env TZ='Asia/Tokyo' npm run test:date-utils",
|
|
"version": "npm run prebuild && node ./tools/bump-android-version.js && git add -A",
|
|
"version:ai:codex": "cross-env SP_RELEASE_NOTES_AI=codex npm version",
|
|
"version:ai:claude": "cross-env SP_RELEASE_NOTES_AI=claude npm version",
|
|
"prettier": "pretty-quick",
|
|
"prettier:file": "prettier --write",
|
|
"lint:file": "ng lint --lint-file-patterns",
|
|
"test:file": "cross-env TZ='Europe/Berlin' ng test --watch=false --include",
|
|
"test:electron": "node --test electron/*.test.cjs",
|
|
"test:fast": "cross-env TZ='Europe/Berlin' NODE_OPTIONS='--max-old-space-size=4096' ng test --watch=false --no-code-coverage --source-map=false",
|
|
"test:fast:watch": "cross-env TZ='Europe/Berlin' NODE_OPTIONS='--max-old-space-size=4096' ng test --browsers ChromeHeadless --no-code-coverage --source-map=false",
|
|
"test:shard:features": "cross-env TZ='Europe/Berlin' ng test --watch=false --include='src/app/features/**/*.spec.ts'",
|
|
"test:shard:ui": "cross-env TZ='Europe/Berlin' ng test --watch=false --include='src/app/ui/**/*.spec.ts'",
|
|
"test:shard:core": "cross-env TZ='Europe/Berlin' ng test --watch=false --include='src/app/core/**/*.spec.ts'",
|
|
"test:shard:util": "cross-env TZ='Europe/Berlin' ng test --watch=false --include='src/app/util/**/*.spec.ts'",
|
|
"checkFile": "node tools/check-file.js",
|
|
"release-notes:generate": "node ./tools/release-notes.js generate",
|
|
"release-notes:generate:codex": "cross-env SP_RELEASE_NOTES_AI=codex node ./tools/release-notes.js generate",
|
|
"release-notes:generate:claude": "cross-env SP_RELEASE_NOTES_AI=claude node ./tools/release-notes.js generate",
|
|
"release-notes:prepare-play-store": "node ./tools/release-notes.js prepare-play-store",
|
|
"release-notes:test": "node --test tools/release-notes.test.js tools/prepare-appstore-release-notes.test.js tools/android-dev-version-code.test.js",
|
|
"clean:translations": "node ./tools/clean-translations.js",
|
|
"plugin-api:build": "cd packages/plugin-api && npm run build",
|
|
"packages:test": "npm run sync-core:test && npm run sync-providers:test",
|
|
"sync-core:build": "cd packages/sync-core && npm run build",
|
|
"sync-core:test": "cd packages/sync-core && npm test",
|
|
"sync-providers:build": "cd packages/sync-providers && npm run build",
|
|
"sync-providers:test": "cd packages/sync-providers && npm test",
|
|
"shared-schema:build": "cd packages/shared-schema && npm run build",
|
|
"plugin-api:build:watch": "cd packages/plugin-api && npm run build:watch",
|
|
"vite-plugin:build": "cd packages/vite-plugin && npm run build",
|
|
"plugins:build": "npm run plugin-api:build && npm run vite-plugin:build && cd packages/plugin-dev && npm run build:all",
|
|
"plugins:build:silent": "npm run vite-plugin:build && cd packages/plugin-dev && npm run build:all:silent"
|
|
},
|
|
"resolutions": {
|
|
"sass": "1.32.6",
|
|
"@ctrl/tinycolor": "4.1.0"
|
|
},
|
|
"dependencies": {
|
|
"@capacitor/browser": "^8.0.3",
|
|
"@capacitor/ios": "^8.4.1",
|
|
"@capacitor/keyboard": "8.0.5",
|
|
"@capacitor/status-bar": "^8.0.2",
|
|
"@material-symbols/font-400": "^0.45.5",
|
|
"@noble/ciphers": "^2.2.0",
|
|
"capacitor-plugin-safe-area": "^5.0.0",
|
|
"electron-dl": "^3.5.2",
|
|
"electron-localshortcut": "^3.2.1",
|
|
"electron-log": "^5.4.3",
|
|
"electron-window-state": "^5.0.3",
|
|
"hash-wasm": "^4.12.0",
|
|
"https-proxy-agent": "^7.0.0",
|
|
"node-fetch": "^2.7.0",
|
|
"postal-mime": "^2.7.4",
|
|
"uuidv7": "^1.2.1"
|
|
},
|
|
"devDependencies": {
|
|
"@angular-devkit/build-angular": "^21.2.17",
|
|
"@angular-eslint/builder": "^21.3.1",
|
|
"@angular-eslint/eslint-plugin": "^21.3.1",
|
|
"@angular-eslint/eslint-plugin-template": "^21.3.1",
|
|
"@angular-eslint/schematics": "^21.3.1",
|
|
"@angular-eslint/template-parser": "^21.3.1",
|
|
"@angular/animations": "^21.2.17",
|
|
"@angular/cdk": "^21.2.9",
|
|
"@angular/cli": "^21.2.17",
|
|
"@angular/common": "^21.2.17",
|
|
"@angular/compiler": "^21.2.17",
|
|
"@angular/compiler-cli": "^21.2.17",
|
|
"@angular/core": "^21.2.17",
|
|
"@angular/forms": "^21.2.17",
|
|
"@angular/language-service": "^21.2.17",
|
|
"@angular/material": "^21.2.9",
|
|
"@angular/platform-browser": "^21.2.17",
|
|
"@angular/platform-browser-dynamic": "^21.2.17",
|
|
"@angular/platform-server": "^21.2.17",
|
|
"@angular/router": "^21.2.17",
|
|
"@angular/service-worker": "^21.2.17",
|
|
"@capacitor/android": "^8.4.1",
|
|
"@capacitor/app": "^8.1.0",
|
|
"@capacitor/cli": "^8.4.1",
|
|
"@capacitor/core": "^8.4.1",
|
|
"@capacitor/filesystem": "^8.1.2",
|
|
"@capacitor/local-notifications": "^8.2.0",
|
|
"@capacitor/share": "^8.0.1",
|
|
"@capawesome/capacitor-android-dark-mode-support": "^8.0.1",
|
|
"@capawesome/capacitor-background-task": "^8.0.2",
|
|
"@csstools/stylelint-formatter-github": "^2.0.0",
|
|
"@dotenv-run/cli": "^1.3.6",
|
|
"@electron/notarize": "^3.1.1",
|
|
"@eslint/js": "^9.39.2",
|
|
"@fontsource/open-sans": "^5.2.7",
|
|
"@nextcloud/cdav-library": "^1.5.3",
|
|
"@ngrx/effects": "^21.1.1",
|
|
"@ngrx/entity": "^21.1.1",
|
|
"@ngrx/schematics": "^21.1.1",
|
|
"@ngrx/store": "21.1.1",
|
|
"@ngrx/store-devtools": "^21.1.1",
|
|
"@ngx-formly/core": "^7.1.0",
|
|
"@ngx-formly/material": "^7.1.0",
|
|
"@ngx-translate/core": "^17.0.0",
|
|
"@ngx-translate/http-loader": "^17.0.0",
|
|
"@playwright/test": "^1.59.1",
|
|
"@schematics/angular": "^21.2.17",
|
|
"@types/electron": "^1.6.12",
|
|
"@types/electron-localshortcut": "^3.1.3",
|
|
"@types/file-saver": "^2.0.7",
|
|
"@types/jasmine": "^6.0.0",
|
|
"@types/jasminewd2": "~2.0.13",
|
|
"@types/node": "^22.19.17",
|
|
"@types/node-fetch": "^2.6.13",
|
|
"@types/object-path": "^0.11.4",
|
|
"@typescript-eslint/types": "^8.59.1",
|
|
"@typescript-eslint/utils": "^8.59.1",
|
|
"angular-eslint": "^21.3.1",
|
|
"angular-material-css-vars": "^10.0.0",
|
|
"baseline-browser-mapping": "^2.10.24",
|
|
"canvas-confetti": "^1.9.4",
|
|
"chai": "^6.2.2",
|
|
"chart.js": "^4.5.1",
|
|
"chrono-node": "^2.9.0",
|
|
"clipboard": "^2.0.11",
|
|
"core-js": "^3.49.0",
|
|
"cross-env": "^10.1.0",
|
|
"detect-it": "^4.0.1",
|
|
"dotenv": "^17.4.2",
|
|
"electron": "41.4.0",
|
|
"electron-builder": "^26.8.1",
|
|
"eslint": "^9.39.2",
|
|
"eslint-config-prettier": "^10.1.8",
|
|
"eslint-plugin-import": "^2.32.0",
|
|
"eslint-plugin-jsdoc": "63.0.10",
|
|
"eslint-plugin-local-rules": "^3.0.2",
|
|
"eslint-plugin-prefer-arrow": "1.2.3",
|
|
"eslint-plugin-prettier": "^5.5.5",
|
|
"fake-indexeddb": "^6.2.5",
|
|
"fflate": "^0.8.2",
|
|
"file-saver": "^2.0.5",
|
|
"fs-extra": "^11.3.4",
|
|
"glob": "^13.0.6",
|
|
"http-server": "^14.1.1",
|
|
"husky": "^9.1.7",
|
|
"ical.js": "^2.2.1",
|
|
"idb": "^8.0.3",
|
|
"jasmine-core": "^6.2.0",
|
|
"jasmine-marbles": "^0.9.2",
|
|
"jasmine-spec-reporter": "~7.0.0",
|
|
"karma": "~6.4.4",
|
|
"karma-chrome-launcher": "~3.2.0",
|
|
"karma-cli": "^2.0.0",
|
|
"karma-coverage-istanbul-reporter": "~3.0.3",
|
|
"karma-jasmine": "~5.1.0",
|
|
"karma-jasmine-html-reporter": "^2.2.0",
|
|
"karma-spec-reporter": "^0.0.36",
|
|
"marked": "^18.0.5",
|
|
"nanoid": "^5.1.11",
|
|
"new-github-issue-url": "^1.1.0",
|
|
"ng2-charts": "^10.0.0",
|
|
"ngx-markdown": "^21.2.0",
|
|
"patch-package": "^8.0.0",
|
|
"playwright": "^1.59.1",
|
|
"prettier": "^3.8.3",
|
|
"pretty-quick": "^4.2.2",
|
|
"query-string": "^7.1.3",
|
|
"rxjs": "^7.8.2",
|
|
"shepherd.js": "^11.2.0",
|
|
"sql.js": "^1.14.1",
|
|
"stacktrace-js": "^2.0.2",
|
|
"start-server-and-test": "^2.1.3",
|
|
"stylelint": "^17.9.1",
|
|
"stylelint-config-recommended-scss": "^17.0.1",
|
|
"ts-node": "~10.9.2",
|
|
"ts-patch": "^3.3.0",
|
|
"tslib": "^2.8.1",
|
|
"typescript": "~5.9.3",
|
|
"typescript-eslint": "^8.59.1",
|
|
"typia": "^12.0.2"
|
|
},
|
|
"overrides": {
|
|
"app-builder-lib": {
|
|
"minimatch": "10.2.5"
|
|
},
|
|
"@electron/asar": {
|
|
"minimatch": "3.1.5"
|
|
},
|
|
"@angular-devkit/build-angular": {
|
|
"http-proxy-middleware": "3.0.7"
|
|
},
|
|
"webpack-dev-server": {
|
|
"http-proxy-middleware": "2.0.10"
|
|
},
|
|
"@angular/build": {
|
|
"undici": "7.28.0"
|
|
},
|
|
"node-gyp": {
|
|
"undici": "6.27.0"
|
|
},
|
|
"sockjs": {
|
|
"uuid": "11.1.1"
|
|
},
|
|
"@babel/core": "7.29.7",
|
|
"ws": "8.21.0"
|
|
},
|
|
"optionalDependencies": {
|
|
"@lmdb/lmdb-darwin-x64": "^3.5.4",
|
|
"@lmdb/lmdb-linux-x64": "^3.5.4",
|
|
"@lmdb/lmdb-win32-x64": "^3.5.4",
|
|
"@rollup/rollup-darwin-x64": "4.60.2",
|
|
"@rollup/rollup-linux-x64-gnu": "4.60.2",
|
|
"@rollup/rollup-win32-x64-msvc": "4.60.2"
|
|
},
|
|
"workspaces": [
|
|
"packages/*"
|
|
],
|
|
"publish": [
|
|
{
|
|
"provider": "github",
|
|
"repo": "super-productivity",
|
|
"owner": "johannesjo"
|
|
}
|
|
],
|
|
"volta": {
|
|
"node": "22.18.0"
|
|
}
|
|
}
|