chore: bump up all non-major npm dependencies

This commit is contained in:
renovate[bot]
2026-10-09 04:13:40 +00:00
committed by GitHub
parent bf473eeb6c
commit bbfb566300
45 changed files with 5571 additions and 5758 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
# syntax=docker/dockerfile:1.7
# syntax=docker/dockerfile:1.28
FROM node:22-bookworm-slim AS assets
WORKDIR /app
+1 -1
View File
@@ -1103,7 +1103,7 @@ jobs:
- 1025:1025
- 8025:8025
manticore:
image: manticoresearch/manticore:29.0.2
image: manticoresearch/manticore:29.9.0
env:
'searchd.listen': 'http:9308'
'searchd.network_timeout': '30'
+2 -2
View File
@@ -111,7 +111,7 @@ jobs:
xcode-version: 26.2
- uses: ruby/setup-ruby@v1
with:
ruby-version: '3.3'
ruby-version: '3.4'
- name: Install Swiftformat
run: brew install swiftformat
- name: Cap sync
@@ -187,7 +187,7 @@ jobs:
run: yarn workspace @affine/android cap sync
- uses: actions/setup-python@v7
with:
python-version: '3.13'
python-version: '3.14'
- name: Auth gcloud
id: auth
uses: google-github-actions/auth@v2
+1 -1
View File
@@ -1,4 +1,4 @@
# syntax=docker/dockerfile:1.7
# syntax=docker/dockerfile:1.28
# Adds a start script to the published AFFiNE image. Nothing is compiled here.
FROM ghcr.io/toeverything/affine:stable
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -18,4 +18,4 @@ npmPublishAccess: public
npmRegistryServer: "https://registry.npmjs.org"
yarnPath: .yarn/releases/yarn-4.18.0.cjs
yarnPath: .yarn/releases/yarn-4.18.1.cjs
Generated
+927 -1287
View File
File diff suppressed because it is too large Load Diff
+17 -17
View File
@@ -14,7 +14,7 @@ resolver = "3"
edition = "2024"
[workspace.dependencies]
aes-gcm = "0.10"
aes-gcm = "0.11"
affine_common = { path = "./packages/common/native" }
affine_doc_loader = "0.1.9"
affine_importer = "0.1.2"
@@ -22,21 +22,21 @@ resolver = "3"
affine_preview = { version = "0.1.0", default-features = false }
anyhow = "1"
assert-json-diff = "2.0"
base64 = "0.22.1"
base64 = "0.23.0"
base64-simd = "0.8"
block2 = "0.6"
bytes = "1"
chrono = "0.4"
core-foundation = "0.10"
coreaudio-rs = "0.12"
cpal = "0.15"
criterion = { version = "0.5", features = ["html_reports"] }
coreaudio-rs = "0.14"
cpal = "0.18"
criterion = { version = "0.8", features = ["html_reports"] }
criterion2 = { version = "3", default-features = false }
crossbeam-channel = "0.5"
dispatch2 = "0.3"
doc_extractor = "0.1.1"
dotenvy = "0.15"
file-format = { version = "0.28", features = ["reader"] }
file-format = { version = "0.29", features = ["reader"] }
futures-util = "0.3"
hex = "0.4"
hkdf = "0.13"
@@ -48,12 +48,12 @@ resolver = "3"
"png",
"webp",
] }
infer = { version = "0.19.0" }
infer = { version = "0.22.0" }
libc = "0.2"
little_exif = "0.6.23"
llm_adapter = { version = "0.2", default-features = false }
llm_runtime = { version = "0.2", default-features = false }
lru = "0.16"
lru = "0.18"
matroska = "0.30"
memory-indexer = "0.4.0"
mimalloc = "0.1"
@@ -74,34 +74,34 @@ resolver = "3"
onenote_parser = { git = "https://github.com/msiemens/onenote.rs", rev = "fa4d7a044324af3bfe68727704a9789a08b36a3c", package = "onenote_parser", features = [
"onepkg",
] }
p256 = { version = "0.13", features = ["ecdsa", "pem"] }
rand = "0.9"
p256 = { version = "0.14", features = ["ecdsa", "pem"] }
rand = "0.10"
rayon = "1.10"
redis = { version = "1.6", features = ["tokio-comp", "tokio-rustls-comp"] }
rubato = "0.16"
safefetch = "0.1.0"
schemars = "1.2"
screencapturekit = "0.3"
screencapturekit = "0.4"
serde = "1"
serde_json = "1"
sha2 = "0.11"
sha3 = "0.12"
sqlx = { version = "0.8", default-features = false, features = [
sqlx = { version = "0.9", default-features = false, features = [
"chrono",
"macros",
"migrate",
"runtime-tokio",
"sqlite",
] }
symphonia = { version = "0.5", features = ["all", "opt-simd"] }
symphonia = { version = "0.6", features = ["all", "opt-simd"] }
thiserror = "2"
tiktoken-rs = "0.7"
tiktoken-rs = "0.12"
tokio = "1.45"
typed-path = "0.12.3"
uniffi = "0.29"
uniffi = "0.32"
url = { version = "2.5" }
uuid = "1.8"
v_htmlescape = "0.15"
v_htmlescape = "0.17"
windows = { version = "0.62", features = [
"Win32_Devices_FunctionDiscovery",
"Win32_Foundation",
@@ -114,7 +114,7 @@ resolver = "3"
"Win32_System_Variant",
"Win32_UI_Shell_PropertiesSystem",
] }
windows-core = { version = "0.62" }
windows-core = { version = "0.100" }
y-octo = "0.1.1"
zeroize = "1.9"
zip = "8.6"
+1 -1
View File
@@ -297,7 +297,7 @@
],
"version": "0.27.5",
"devDependencies": {
"@vanilla-extract/vite-plugin": "~5.1.5",
"@vanilla-extract/vite-plugin": "~5.2.0",
"msw": "^2.13.2",
"vitest": "^4.1.11"
}
@@ -30,7 +30,7 @@
},
"devDependencies": {
"@vitest/browser-playwright": "^4.1.11",
"playwright": "=1.58.2",
"playwright": "=1.64.0",
"vitest": "^4.1.11"
},
"exports": {
+1 -1
View File
@@ -22,7 +22,7 @@
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.13",
"@preact/signals-core": "^1.8.0",
"katex": "^0.18.0",
"katex": "^0.19.0",
"lit": "^3.2.0",
"remark-math": "^6.0.0"
},
+1 -1
View File
@@ -19,7 +19,7 @@
"@blocksuite/sync": "workspace:*",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
"@lottiefiles/dotlottie-wc": "^0.9.4",
"@lottiefiles/dotlottie-wc": "^0.10.0",
"@preact/signals-core": "^1.8.0",
"@toeverything/theme": "^1.1.23",
"@types/lodash-es": "^4.17.12",
@@ -26,7 +26,7 @@
},
"devDependencies": {
"@vitest/browser-playwright": "^4.1.11",
"playwright": "=1.58.2",
"playwright": "=1.64.0",
"vitest": "^4.1.11"
},
"exports": {
+1 -1
View File
@@ -20,7 +20,7 @@
"@blocksuite/std": "workspace:*",
"@blocksuite/store": "workspace:*",
"@preact/signals-core": "^1.8.0",
"katex": "^0.18.0",
"katex": "^0.19.0",
"lit": "^3.2.0",
"remark-math": "^6.0.0",
"shiki": "^3.19.0",
+2 -2
View File
@@ -38,7 +38,7 @@
"micromark-extension-gfm-table": "^2.1.0",
"micromark-extension-gfm-task-list-item": "^2.1.0",
"micromark-util-combine-extensions": "^2.0.0",
"pdfmake": "^0.2.20",
"pdfmake": "^0.3.0",
"quick-lru": "^7.3.0",
"rehype-parse": "^9.0.0",
"rehype-stringify": "^10.0.0",
@@ -73,7 +73,7 @@
"!dist/__tests__"
],
"devDependencies": {
"@types/pdfmake": "^0.2.12",
"@types/pdfmake": "^0.3.0",
"vitest": "^4.1.11"
},
"version": "0.27.5"
+1 -1
View File
@@ -34,7 +34,7 @@
},
"devDependencies": {
"@vitest/browser-playwright": "^4.1.11",
"playwright": "=1.58.2",
"playwright": "=1.64.0",
"vitest": "^4.1.11"
},
"exports": {
+2 -2
View File
@@ -34,9 +34,9 @@
"!dist/__tests__"
],
"devDependencies": {
"@vanilla-extract/vite-plugin": "~5.1.5",
"@vanilla-extract/vite-plugin": "~5.2.0",
"@vitest/browser-playwright": "^4.1.11",
"playwright": "=1.58.2",
"playwright": "=1.64.0",
"vite": "^7.3.6",
"vite-plugin-wasm": "^3.5.0",
"vitest": "^4.1.11"
+2 -2
View File
@@ -19,7 +19,7 @@
"@shoelace-style/shoelace": "2.20.1",
"@toeverything/pdf-viewer": "^0.1.1",
"@toeverything/pdfium": "^0.1.1",
"katex": "^0.18.0",
"katex": "^0.19.0",
"lit": "^3.2.0",
"lz-string": "^1.5.0",
"rxjs": "^7.8.2",
@@ -32,7 +32,7 @@
"devDependencies": {
"@tweakpane/core": "^2.0.4",
"@types/micromatch": "^4.0.9",
"@vanilla-extract/vite-plugin": "~5.1.5",
"@vanilla-extract/vite-plugin": "~5.2.0",
"magic-string": "^0.30.21",
"vite": "^7.3.6",
"vite-plugin-istanbul": "^7.2.1",
+6 -6
View File
@@ -98,17 +98,17 @@
"@capacitor/cli": "^8.4.2",
"@faker-js/faker": "^10.5.0",
"@istanbuljs/schema": "^0.1.3",
"@playwright/test": "=1.58.2",
"@playwright/test": "=1.64.0",
"@taplo/cli": "^0.7.0",
"@toeverything/infra": "workspace:*",
"@types/node": "^22.0.0",
"@typescript/native": "npm:typescript@7.0.2",
"@vanilla-extract/vite-plugin": "~5.1.5",
"@vanilla-extract/vite-plugin": "~5.2.0",
"@vitest/browser": "^4.1.11",
"@vitest/coverage-istanbul": "^4.1.11",
"@vitest/ui": "^4.1.11",
"electron": "^39.0.0",
"eslint": "9.39.2",
"eslint": "9.39.5",
"eslint-plugin-import-x": "^4.16.1",
"eslint-plugin-lit": "^2.2.1",
"eslint-plugin-react": "^7.37.5",
@@ -119,16 +119,16 @@
"husky": "^9.1.7",
"lint-staged": "^16.0.0",
"msw": "^2.13.2",
"oxfmt": "0.63.0",
"oxfmt": "0.72.0",
"oxlint": "1.78.0",
"oxlint-tsgolint": "7.0.2001",
"oxlint-tsgolint": "7.0.2003",
"semver": "^7.7.3",
"typescript": "npm:@typescript/typescript6@6.0.2",
"unplugin-swc": "^1.5.9",
"vite": "^7.3.6",
"vitest": "^4.1.11"
},
"packageManager": "yarn@4.18.0",
"packageManager": "yarn@4.18.1",
"resolutions": {
"array-buffer-byte-length": "npm:@nolyfill/array-buffer-byte-length@^1",
"array-includes": "npm:@nolyfill/array-includes@^1",
+4 -4
View File
@@ -15,8 +15,8 @@ affine_core = "0.0.5"
affine_doc_loader = { workspace = true }
anyhow = { workspace = true }
argon2 = "0.6"
assetpack-core = "0.1.0"
assetpack-transform-precomp2 = "0.1.0"
assetpack-core = "0.4.0"
assetpack-transform-precomp2 = "0.4.0"
base64 = { workspace = true }
chrono = { workspace = true }
crc32fast = "1.5.2"
@@ -32,9 +32,9 @@ homedir = { workspace = true }
image = { workspace = true }
infer = { workspace = true }
instant-xml = "0.7.5"
jsonschema = "0.47"
jsonschema = "0.58"
jsonwebtoken = { version = "10", features = ["aws_lc_rs"] }
libwebp-sys = "0.9.6"
libwebp-sys = "0.14.0"
little_exif = { workspace = true }
llm_adapter = { workspace = true, features = ["schema", "ureq-client"] }
llm_runtime = { workspace = true, features = ["schema", "ureq-client"] }
+1 -1
View File
@@ -33,7 +33,7 @@
"build:debug": "napi build --no-const-enum"
},
"devDependencies": {
"@napi-rs/cli": "3.5.0",
"@napi-rs/cli": "3.10.8",
"tiktoken": "^1.0.17"
}
}
@@ -15,7 +15,7 @@ services:
start_period: 5s
manticore:
image: manticoresearch/manticore:29.0.2
image: manticoresearch/manticore:29.9.0
environment:
searchd.listen: 'http:9308'
searchd.network_timeout: '30'
@@ -15,7 +15,7 @@ services:
start_period: 5s
opensearch:
image: opensearchproject/opensearch:2.19.1
image: opensearchproject/opensearch:2.19.6
environment:
discovery.type: single-node
DISABLE_INSTALL_DEMO_CONFIG: 'true'
@@ -46,7 +46,7 @@ services:
- '8666:8666'
proxy-init:
image: curlimages/curl:8.12.1
image: curlimages/curl:8.22.0
depends_on:
opensearch:
condition: service_healthy
+2 -2
View File
@@ -85,7 +85,7 @@
"graphql": "^16.13.2",
"graphql-scalars": "^1.24.0",
"graphql-upload": "^17.0.0",
"htmlrewriter": "^0.0.12",
"htmlrewriter": "^0.0.13",
"http-errors": "^2.0.0",
"ioredis": "^5.11.1",
"is-mobile": "^5.0.0",
@@ -101,7 +101,7 @@
"piscina": "^5.1.4",
"prisma": "^6.6.0",
"react": "^19.2.1",
"react-dom": "19.2.1",
"react-dom": "19.3.0",
"reflect-metadata": "^0.2.2",
"rxjs": "^7.8.2",
"semver": "^7.7.4",
+1 -1
View File
@@ -16,7 +16,7 @@
"@graphql-codegen/typescript": "^5.0.9",
"@graphql-codegen/typescript-operations": "^5.0.9",
"@types/lodash-es": "^4.17.12",
"oxfmt": "0.63.0",
"oxfmt": "0.72.0",
"vitest": "^4.1.11"
},
"scripts": {
+1 -1
View File
@@ -43,7 +43,7 @@
"embla-carousel-react": "^8.5.1",
"input-otp": "^1.4.1",
"lodash-es": "^4.17.23",
"lucide-react": "^0.508.0",
"lucide-react": "^0.577.0",
"next-themes": "^0.4.4",
"react": "^19.2.1",
"react-day-picker": "^9.4.3",
@@ -9,7 +9,7 @@ buildscript {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:8.13.0'
classpath 'com.android.tools.build:gradle:8.13.2'
}
}
@@ -1,45 +1,45 @@
[versions]
android-gradle-plugin = "8.13.2"
androidx-activity-compose = "1.13.0"
androidx-appcompat = "1.7.1"
androidx-browser = "1.9.0"
androidx-compose-bom = "2025.05.00"
androidx-appcompat = "1.8.0"
androidx-browser = "1.10.0"
androidx-compose-bom = "2025.12.01"
androidx-coordinatorlayout = "1.3.0"
androidx-core-ktx = "1.17.0"
androidx-core-ktx = "1.19.1"
androidx-core-splashscreen = "1.2.0"
androidx-datastore-preferences = "1.2.0-alpha02"
androidx-datastore-preferences = "1.2.1"
androidx-espresso-core = "3.7.0"
androidx-junit = "1.3.0"
androidx-lifecycle-compose = "2.9.0"
androidx-lifecycle-compose = "2.11.0"
androidx-material3 = "1.3.1"
androidx-navigation = "2.9.0"
apollo = "4.4.2"
apollo-kotlin-adapters = "0.0.6"
androidx-navigation = "2.10.2"
apollo = "4.4.3"
apollo-kotlin-adapters = "0.8.0"
# @keep
compileSdk = "36"
firebase-bom = "33.13.0"
firebase-crashlytics = "3.0.3"
google-services = "4.4.4"
gradle-versions = "0.52.0"
hilt = "2.56.2"
hilt-ext = "1.2.0"
jna = "5.17.0"
firebase-bom = "33.16.0"
firebase-crashlytics = "3.0.8"
google-services = "4.5.0"
gradle-versions = "0.65.0"
hilt = "2.60.1"
hilt-ext = "1.4.0"
jna = "5.19.1"
junit = "4.13.2"
kotlin = "2.2.20"
kotlinx-coroutines = "1.10.2"
kotlinx-datetime = "0.6.2"
kotlinx-serialization-json = "1.8.1"
ksp = "2.2.20-2.0.4"
kotlin = "2.4.21"
kotlinx-coroutines = "1.11.0"
kotlinx-datetime = "0.8.0-0.6.x-compat"
kotlinx-serialization-json = "1.11.0"
ksp = "2.3.12"
# @keep
minSdk = "24"
mozilla-rust-android = "0.9.6"
okhttp-bom = "5.0.0-alpha.14"
richtext = "1.0.0-alpha02"
mozilla-rust-android = "0.10.0"
okhttp-bom = "5.5.0"
richtext = "1.0.0-alpha05"
# @keep
targetSdk = "36"
timber = "5.0.1"
version-catalog-update = "1.0.0"
webkit = "1.16.0"
version-catalog-update = "1.1.1"
webkit = "1.17.1"
[libraries]
android-gradle-plugin = { module = "com.android.tools.build:gradle", version.ref = "android-gradle-plugin" }
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.6-all.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
+1 -1
View File
@@ -21,7 +21,7 @@ end
target 'AFFiNE' do
capacitor_pods
# Add your Pods here
pod 'CryptoSwift', '~> 1.8.3'
pod 'CryptoSwift', '~> 1.10.0'
end
post_install do |installer|
+2 -2
View File
@@ -51,7 +51,7 @@
"clsx": "^2.1.1",
"dayjs": "^1.11.13",
"emojibase-data": "^16.0.3",
"foxact": "^0.2.49",
"foxact": "^0.3.0",
"jotai": "^2.10.3",
"lit": "^3.2.1",
"lodash-es": "^4.17.23",
@@ -60,7 +60,7 @@
"nanoid": "^5.1.6",
"next-themes": "^0.4.4",
"react": "^19.2.1",
"react-dom": "19.2.1",
"react-dom": "19.3.0",
"react-paginate": "^8.3.0",
"react-router-dom": "^7.18.4",
"react-transition-state": "^2.2.0",
+5 -5
View File
@@ -32,7 +32,7 @@
"@emotion/css": "^11.13.5",
"@floating-ui/dom": "^1.6.13",
"@juggle/resize-observer": "^3.4.0",
"@lottiefiles/dotlottie-wc": "^0.9.4",
"@lottiefiles/dotlottie-wc": "^0.10.0",
"@marsidev/react-turnstile": "^1.1.0",
"@myriaddreamin/typst-ts-renderer": "^0.7.0-rc2",
"@myriaddreamin/typst-ts-web-compiler": "^0.7.0-rc2",
@@ -60,7 +60,7 @@
"eventemitter2": "^6.4.9",
"file-type": "^21.0.0",
"filesize": "^10.1.6",
"foxact": "^0.2.49",
"foxact": "^0.3.0",
"fuse.js": "^7.0.0",
"graphemer": "^1.4.0",
"graphql": "^16.9.0",
@@ -69,8 +69,8 @@
"image-blob-reduce": "^4.1.0",
"is-svg": "^6.1.0",
"jotai": "^2.10.3",
"jotai-scope": "^0.7.2",
"katex": "^0.18.0",
"jotai-scope": "^0.12.0",
"katex": "^0.19.0",
"lit": "^3.2.1",
"lodash-es": "^4.17.23",
"lottie-react": "^2.4.0",
@@ -98,7 +98,7 @@
},
"devDependencies": {
"@blocksuite/affine-ext-loader": "workspace:*",
"@playwright/test": "=1.58.2",
"@playwright/test": "=1.64.0",
"@testing-library/dom": "^10.4.0",
"@testing-library/react": "^16.1.0",
"@types/bytes": "^3.1.5",
+1 -1
View File
@@ -32,7 +32,7 @@ sqlx = { workspace = true, default-features = false, features = [
thiserror = { workspace = true }
tokio = { workspace = true, features = ["full"] }
y-octo = { workspace = true }
zstd = "0.13"
zstd = "0.14"
[target.'cfg(any(target_os = "ios", target_os = "android"))'.dependencies]
uniffi = { workspace = true }
+1 -1
View File
@@ -25,7 +25,7 @@
]
},
"devDependencies": {
"@napi-rs/cli": "3.5.0",
"@napi-rs/cli": "3.10.8",
"@napi-rs/whisper": "^0.0.4",
"@types/node": "^22.0.0",
"ava": "^7.0.0",
+1 -1
View File
@@ -7,7 +7,7 @@
},
"devDependencies": {
"@affine-test/kit": "workspace:*",
"@playwright/test": "=1.58.2"
"@playwright/test": "=1.64.0"
},
"version": "0.27.5"
}
+1 -1
View File
@@ -7,7 +7,7 @@
},
"devDependencies": {
"@affine-test/kit": "workspace:*",
"@playwright/test": "=1.58.2"
"@playwright/test": "=1.64.0"
},
"version": "0.27.5"
}
+1 -1
View File
@@ -7,7 +7,7 @@
},
"devDependencies": {
"@affine-test/kit": "workspace:*",
"@playwright/test": "=1.58.2"
"@playwright/test": "=1.64.0"
},
"version": "0.27.5"
}
+2 -2
View File
@@ -8,10 +8,10 @@
"devDependencies": {
"@affine-test/kit": "workspace:*",
"@affine/electron-api": "workspace:*",
"@playwright/test": "=1.58.2",
"@playwright/test": "=1.64.0",
"@types/fs-extra": "^11.0.4",
"fs-extra": "^11.2.0",
"playwright": "=1.58.2"
"playwright": "=1.64.0"
},
"version": "0.27.5"
}
+1 -1
View File
@@ -7,7 +7,7 @@
},
"devDependencies": {
"@affine-test/kit": "workspace:*",
"@playwright/test": "=1.58.2"
"@playwright/test": "=1.64.0"
},
"version": "0.27.5"
}
+1 -1
View File
@@ -7,7 +7,7 @@
},
"devDependencies": {
"@affine-test/kit": "workspace:*",
"@playwright/test": "=1.58.2"
"@playwright/test": "=1.64.0"
},
"version": "0.27.5"
}
+1 -1
View File
@@ -9,7 +9,7 @@
"@affine-test/kit": "workspace:*",
"@blocksuite/affine": "workspace:*",
"@blocksuite/integration-test": "workspace:*",
"@playwright/test": "=1.58.2",
"@playwright/test": "=1.64.0",
"@toeverything/theme": "^1.1.23",
"json-stable-stringify": "^1.2.1"
},
+1 -1
View File
@@ -14,7 +14,7 @@
"@affine-tools/utils": "workspace:*",
"@blocksuite/affine": "workspace:*",
"@node-rs/argon2": "^2.2.1",
"@playwright/test": "=1.58.2",
"@playwright/test": "=1.64.0",
"@toeverything/infra": "workspace:*",
"express": "^5.1.0",
"http-proxy-middleware": "^3.0.5"
+1 -1
View File
@@ -32,7 +32,7 @@
"jsonc-parser": "^3.3.1",
"lodash-es": "^4.17.23",
"mime-types": "^3.0.0",
"oxfmt": "0.63.0",
"oxfmt": "0.72.0",
"postcss": "^8.5.18",
"postcss-loader": "^8.2.1",
"postcss-selector-parser": "^7.1.3",
+1 -1
View File
@@ -17,7 +17,7 @@
"@types/node": "^22.0.0",
"chalk": "^5.3.0",
"lodash-es": "^4.17.23",
"oxfmt": "0.63.0",
"oxfmt": "0.72.0",
"typescript": "npm:@typescript/typescript6@6.0.2"
}
}
+4367 -4194
View File
File diff suppressed because it is too large Load Diff