/* Copyright 2026 Element Creations Ltd. SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ import { type KnipConfig } from "knip"; // Specify this as knip loads config files which may conditionally load plugins process.env.GITHUB_ACTIONS = "1"; export default { workspaces: { "packages/shared-components": { entry: ["src/index.ts!", "scripts/**"], project: [ "**/*.{js,cjs,mjs,jsx,ts,cts,mts,tsx,mdx,pcss}!", "!scripts/**!", "!src/test/**!", "!src/**/test-*!", "!src/**/*-{mock,mocks,snapshot,actions}.*!", ], }, "packages/playwright-common": { entry: ["src/fixtures/index.ts!", "src/testcontainers/index.ts!"], project: [ "**/*.{js,cjs,mjs,jsx,ts,cts,mts,tsx,pcss}!", "!src/flaky-reporter.ts!", "!src/stale-screenshot-reporter.ts!", ], ignoreDependencies: [ // Used in playwright-screenshots.sh "wait-on", ], ignoreBinaries: ["awk", "printf"], }, "packages/module-api": {}, "apps/web": { entry: [ "src/serviceworker/index.ts!", "src/workers/*.worker.ts!", "src/utils/exportUtils/exportJS.js!", "src/vector/localstorage-fix.ts!", "scripts/**", "playwright/**", "test/**", "res/decoder-ring/**", "res/jitsi_external_api.min.js", "res/themes/*/css/*.pcss!", "I18nWebpackPlugin.ts!", "module_system/**!", // Keep for now "src/hooks/useLocalStorageState.ts!", "src/hooks/useIsReleaseAnnouncementOpen.ts!", "src/components/structures/ReleaseAnnouncement.tsx!", "src/utils/arrays.ts!", "src/utils/EventPresentationContextProvider.tsx!", // This is just an awful side-effect import "src/stores/LifecycleStore.ts!", ], project: [ "**/*.{js,cjs,mjs,jsx,ts,cts,mts,tsx,pcss}!", "!scripts/**!", "!src/test/**!", "!recorder-worklet-loader.cjs!", "!src/**/*-{mock,mocks,snapshot,actions}.*!", ], ignoreDependencies: [ // False positive "sw.js", // Used by webpack "process", "util", // Embedded into webapp "@element-hq/element-call-embedded", // Used by matrix-js-sdk, which means we have to include them as a // dependency so that // we can run `tsc` (since we import the typescript // source of js-sdk, rather than the transpiled and annotated JS like you // would with a normal library). "@types/sdp-transform", ], }, "apps/desktop": { entry: ["src/preload.cts!", "electron-builder.ts!", "scripts/**", "hak/**"], project: ["**/*.{js,ts,pcss}"], ignoreDependencies: [ // Brought in via hak scripts "matrix-seshat", ], ignoreBinaries: [ // Used to build seshat (optional) "rustc", // Used by the fetch-package script (optional) "gpg", // Used for the macOS universal builds "lipo", ], }, "modules": { project: ["**/*.{js,cjs,mjs,jsx,ts,cts,mts,tsx,pcss}!", "!playwright/**!"], }, "modules/*": { entry: ["src/index.ts{x,}!"], project: ["**/*.{js,cjs,mjs,jsx,ts,cts,mts,tsx,pcss}!", "!src/tests/**!", "!e2e/**!"], }, ".": { entry: ["scripts/**", "docs/**"], }, }, ignoreDependencies: [ // Used by multiple packages, raises a false positive for some reason "events", // Used as a workaround for api-extractor not supporting typescript 7.0 "@typescript/old", ], ignoreExportsUsedInFile: true, ignoreBinaries: [ // Optional for coverage:diff development script "diff-cover", ], compilers: { pcss: (text: string) => [...text.matchAll(/@import\s+(?:url\()?["']([^"']+)["']\)?[^;]*;/g)] .map(([, specifier]) => `import "${specifier}";`) .join("\n"), }, nx: { config: ["{nx,package,project}.json", "{apps,packages,modules}/**/{package,project}.json"], }, playwright: { config: ["playwright.config.ts", "playwright-merge.config.ts"], }, tags: ["-knipignore"], treatConfigHintsAsErrors: true, treatTagHintsAsErrors: true, } satisfies KnipConfig;