Files
2026-04-14 16:39:11 -07:00

124 lines
3.4 KiB
JavaScript

// Copyright 2026 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
// @ts-check
const PROD_ONLY =
process.argv.includes('--production') || process.argv.includes('--strict');
/** @type {import('knip').KnipConfig} */
const config = {
tags: ['-@knipignore', ...(PROD_ONLY ? ['-@testexport'] : [])],
treatConfigHintsAsErrors: true,
ignoreExportsUsedInFile: PROD_ONLY
? true
: {
type: true,
interface: true,
enum: true,
member: true,
},
exclude: ['types'],
ignoreIssues: {
'ts/axo/**/*.{ts,tsx}': ['namespaceMembers'],
},
workspaces: {
'.': {
entry: [
// Main
'app/config.main.ts!',
// Preload
'ts/windows/about/preload.preload.ts!',
'ts/windows/calldiagnostic/preload.preload.ts!',
'ts/windows/debuglog/preload.preload.ts!',
'ts/windows/loading/preload.preload.ts!',
'ts/windows/permissions/preload.preload.ts!',
'ts/windows/screenShare/preload.preload.ts!',
'ts/windows/sticker-creator/preload.preload.ts!',
// DOM
'ts/windows/about/app.dom.tsx!',
'ts/windows/calldiagnostic/app.dom.tsx!',
'ts/windows/debuglog/app.dom.tsx!',
'ts/windows/loading/start.dom.ts!',
'ts/windows/permissions/app.dom.tsx!',
'ts/windows/screenShare/app.dom.tsx!',
// Others
'codemods/**/*.mjs',
'scripts/**/*.mjs',
],
project: [
// Production
'ts/**/*.{ts,tsx}!',
'!ts/**/*.stories.{ts,tsx}!',
'!ts/storybook/**/*.{ts,tsx}!',
'!ts/test-electron/**/*.{ts,tsx}!',
'!ts/test-helpers/**/*.{ts,tsx}!',
'!ts/test-mock/**/*.{ts,tsx}!',
'!ts/test-node/**/*.{ts,tsx}!',
'!ts/util/lint/**/*.{ts,tsx}!',
'app/**/*.{ts,tsx}!',
// Development
'ts/**/*.d.ts',
'ts/util/lint/**/*.{ts,tsx}',
'test/**/*.mjs',
'scripts/**/*.mjs',
'codemods/**/*.mjs',
// exclude workspaces
'!danger/**/*.mjs',
],
ignoreDependencies: [
'buffer', // same name as builtin
'url', // same name as builtin
'danger', // turn into real workspace
],
ignoreFiles: [
'ts/components/Profiler.dom.tsx',
...(PROD_ONLY ? ['ts/axo/AxoAvatar.dom.tsx'] : []),
],
ignoreBinaries: PROD_ONLY ? ['electron'] : [],
storybook: {
entry: [
'.storybook/main.ts',
'.storybook/preview.tsx',
'.storybook/test-runner.ts',
'ts/**/*.stories.{ts,tsx}',
],
},
mocha: {
entry: [
'.mocharc.json',
'ts/test-electron/**/*.{ts,tsx}',
'ts/test-helpers/**/*.{ts,tsx}',
'ts/test-mock/**/*.{ts,tsx}',
'ts/test-node/**/*.{ts,tsx}',
],
},
oxlint: {
entry: ['.oxlintrc.json', '.oxlint/plugins.mjs'],
project: ['.oxlint/rules/**/*.mjs'],
},
danger: {
entry: ['dangerfile.mjs'],
project: ['danger/**/*.mjs'],
},
},
danger: {
project: ['danger-exports.mjs', 'rules/**/*.mjs'],
},
'packages/mute-state-change': {
ignoreBinaries: ['xcrun'],
ignoreDependencies: ['node-addon-api'],
},
'sticker-creator': {
project: [
'src/**/*.{ts,tsx}!',
'src/util/protos.js!',
'!src/**/*.test.{ts,tsx}!',
],
},
},
};
export default config;