Showing preview only (3,253K chars total). Download the full file or copy to clipboard to get everything.
Repository: webpro-nl/knip
Branch: main
Commit: 47210491cea2
Files: 3658
Total size: 2.4 MB
Directory structure:
gitextract_6vmhc_sa/
├── .agents/
│ ├── MODULE_GRAPH.md
│ └── PLUGINS.md
├── .gitattributes
├── .github/
│ ├── CODE_OF_CONDUCT.md
│ ├── CONTRIBUTING.md
│ ├── DEVELOPMENT.md
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── 01-bug_report.yaml
│ │ ├── 02-regression.yaml
│ │ ├── 03-feature_request.yaml
│ │ ├── 04-documentation.yaml
│ │ ├── 05-everything-else.yaml
│ │ └── config.yml
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── copilot-instructions.md
│ └── workflows/
│ ├── ci-bun.yml
│ ├── ci-ts-latest.yml
│ ├── ci-ts-next.yml
│ ├── ci.yml
│ ├── integration.yml
│ ├── markdown-link-check.json
│ ├── markdown-link-check.yml
│ └── patches/
│ ├── .gitkeep
│ ├── TypeScript.patch
│ ├── argos.patch
│ ├── create-typescript-app.patch
│ └── npmx.dev.patch
├── .gitignore
├── .idea/
│ └── runConfigurations/
│ ├── Debug_Bun_test.xml
│ └── Debug_Node_test.xml
├── .oxfmtrc.json
├── .oxlintrc.json
├── .prettierignore
├── .release-it.json
├── .vscode/
│ ├── extensions.json
│ ├── launch.json
│ └── settings.json
├── AGENTS.md
├── knip.json
├── license
├── package.json
├── packages/
│ ├── create-config/
│ │ ├── README.md
│ │ ├── index.js
│ │ └── package.json
│ ├── docs/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── astro.config.ts
│ │ ├── mock/
│ │ │ └── contributors.json
│ │ ├── package.json
│ │ ├── public/
│ │ │ ├── fonts/
│ │ │ │ ├── SourceSansPro-Regular.otf
│ │ │ │ └── fonts.conf
│ │ │ ├── manifest.json
│ │ │ ├── robots.txt
│ │ │ └── screenshots/
│ │ │ ├── fix.webm
│ │ │ └── watch-fix.webm
│ │ ├── remark/
│ │ │ ├── fixInternalLinks.ts
│ │ │ └── transformDirectives.ts
│ │ ├── scripts/
│ │ │ ├── generate-plugin-docs.ts
│ │ │ ├── get-monthly-sponsorships-github.ts
│ │ │ ├── get-monthly-sponsorships-opencollective.ts
│ │ │ └── get-monthly-sponsorships.ts
│ │ ├── src/
│ │ │ ├── assets/
│ │ │ │ └── testimonials.json
│ │ │ ├── components/
│ │ │ │ ├── Contributors.astro
│ │ │ │ ├── EmojiBlastButton.astro
│ │ │ │ ├── Footer.astro
│ │ │ │ ├── Head.astro
│ │ │ │ ├── Post.astro
│ │ │ │ ├── Posts.astro
│ │ │ │ ├── Projects.astro
│ │ │ │ ├── Sponsors.astro
│ │ │ │ └── SponsorsChart.astro
│ │ │ ├── content/
│ │ │ │ └── docs/
│ │ │ │ ├── blog/
│ │ │ │ │ ├── brief-history.md
│ │ │ │ │ ├── for-editors-and-agents.md
│ │ │ │ │ ├── knip-v3.mdx
│ │ │ │ │ ├── knip-v4.mdx
│ │ │ │ │ ├── knip-v5.mdx
│ │ │ │ │ ├── knip-v6.md
│ │ │ │ │ ├── migration-to-v1.md
│ │ │ │ │ ├── release-notes-v2.md
│ │ │ │ │ ├── slim-down-to-speed-up.md
│ │ │ │ │ ├── state-of-knip.md
│ │ │ │ │ └── two-years.mdx
│ │ │ │ ├── explanations/
│ │ │ │ │ ├── comparison-and-migration.md
│ │ │ │ │ ├── entry-files.md
│ │ │ │ │ ├── plugins.md
│ │ │ │ │ └── why-use-knip.md
│ │ │ │ ├── features/
│ │ │ │ │ ├── auto-fix.mdx
│ │ │ │ │ ├── compilers.md
│ │ │ │ │ ├── integrated-monorepos.md
│ │ │ │ │ ├── monorepos-and-workspaces.md
│ │ │ │ │ ├── production-mode.md
│ │ │ │ │ ├── reporters.md
│ │ │ │ │ ├── rules-and-filters.md
│ │ │ │ │ ├── script-parser.md
│ │ │ │ │ └── source-mapping.md
│ │ │ │ ├── guides/
│ │ │ │ │ ├── configuring-project-files.md
│ │ │ │ │ ├── contributing.md
│ │ │ │ │ ├── handling-issues.mdx
│ │ │ │ │ ├── issue-reproduction.md
│ │ │ │ │ ├── namespace-imports.md
│ │ │ │ │ ├── performance.md
│ │ │ │ │ ├── troubleshooting.md
│ │ │ │ │ ├── using-knip-in-ci.md
│ │ │ │ │ └── working-with-commonjs.md
│ │ │ │ ├── index.mdx
│ │ │ │ ├── overview/
│ │ │ │ │ ├── configuration.md
│ │ │ │ │ ├── features.md
│ │ │ │ │ ├── getting-started.mdx
│ │ │ │ │ └── screenshots-videos.md
│ │ │ │ ├── playground.mdx
│ │ │ │ ├── reference/
│ │ │ │ │ ├── cli.md
│ │ │ │ │ ├── configuration-hints.md
│ │ │ │ │ ├── configuration.md
│ │ │ │ │ ├── dynamic-configuration.mdx
│ │ │ │ │ ├── faq.md
│ │ │ │ │ ├── integrations.md
│ │ │ │ │ ├── issue-types.md
│ │ │ │ │ ├── jsdoc-tsdoc-tags.md
│ │ │ │ │ ├── known-issues.md
│ │ │ │ │ ├── plugins/
│ │ │ │ │ │ └── .gitkeep
│ │ │ │ │ ├── plugins.md
│ │ │ │ │ └── related-tooling.md
│ │ │ │ ├── sponsors.mdx
│ │ │ │ ├── typescript/
│ │ │ │ │ ├── unused-dependencies.md
│ │ │ │ │ └── unused-exports.md
│ │ │ │ └── writing-a-plugin/
│ │ │ │ ├── argument-parsing.md
│ │ │ │ ├── index.md
│ │ │ │ └── inputs.md
│ │ │ ├── content.config.ts
│ │ │ ├── fonts/
│ │ │ │ └── font-face.css
│ │ │ ├── pages/
│ │ │ │ ├── og/
│ │ │ │ │ └── [...route].ts
│ │ │ │ └── sitemap.txt.ts
│ │ │ ├── styles/
│ │ │ │ ├── cards.css
│ │ │ │ ├── content.css
│ │ │ │ ├── custom.css
│ │ │ │ ├── expressive-code.css
│ │ │ │ ├── hero.css
│ │ │ │ ├── links.css
│ │ │ │ ├── sponsors.css
│ │ │ │ ├── theme-dark.css
│ │ │ │ └── theme-light.css
│ │ │ └── util/
│ │ │ └── post.ts
│ │ └── tsconfig.json
│ ├── knip/
│ │ ├── .gitignore
│ │ ├── .release-it.json
│ │ ├── README.md
│ │ ├── bin/
│ │ │ ├── knip-bun.js
│ │ │ └── knip.js
│ │ ├── fixtures/
│ │ │ ├── barrel-namespace-chain/
│ │ │ │ ├── consumer.ts
│ │ │ │ ├── fn-consumer.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── lib.ts
│ │ │ │ ├── opaque-consumer.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── protocol.ts
│ │ │ │ ├── server.ts
│ │ │ │ └── utils.ts
│ │ │ ├── binaries/
│ │ │ │ ├── dir/
│ │ │ │ │ └── index.js
│ │ │ │ ├── main.ts
│ │ │ │ ├── require.js
│ │ │ │ └── script.js
│ │ │ ├── catalog-named/
│ │ │ │ ├── index.js
│ │ │ │ ├── package.json
│ │ │ │ └── pnpm-workspace.yaml
│ │ │ ├── catalog-named-empty/
│ │ │ │ ├── index.js
│ │ │ │ ├── package.json
│ │ │ │ └── pnpm-workspace.yaml
│ │ │ ├── catalog-named-package-json/
│ │ │ │ ├── index.js
│ │ │ │ └── package.json
│ │ │ ├── catalog-named-package-json-root/
│ │ │ │ ├── index.js
│ │ │ │ └── package.json
│ │ │ ├── catalog-pnpm/
│ │ │ │ ├── package.json
│ │ │ │ ├── packages/
│ │ │ │ │ └── app/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── package.json
│ │ │ │ └── pnpm-workspace.yaml
│ │ │ ├── catalog-yarn/
│ │ │ │ ├── .yarnrc.yml
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ └── app/
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── cli/
│ │ │ │ ├── index.js
│ │ │ │ └── package.json
│ │ │ ├── cli-preprocessor/
│ │ │ │ ├── index.js
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── cli-reporter/
│ │ │ │ ├── index.js
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── commonjs/
│ │ │ │ ├── dir/
│ │ │ │ │ ├── exports.js
│ │ │ │ │ ├── mod.js
│ │ │ │ │ ├── mod1.js
│ │ │ │ │ ├── mod2.js
│ │ │ │ │ └── mod3.js
│ │ │ │ ├── index.js
│ │ │ │ ├── odd.js
│ │ │ │ ├── package.json
│ │ │ │ └── ts-ext.ts
│ │ │ ├── commonjs-tsconfig/
│ │ │ │ ├── dir/
│ │ │ │ │ ├── exports.js
│ │ │ │ │ ├── module1.ts
│ │ │ │ │ ├── module2.ts
│ │ │ │ │ ├── module3.js
│ │ │ │ │ ├── script1.js
│ │ │ │ │ ├── script2.js
│ │ │ │ │ └── script3.js
│ │ │ │ ├── index.js
│ │ │ │ ├── main.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── ts-ext.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── compact-reporter/
│ │ │ │ ├── knip.json
│ │ │ │ └── package.json
│ │ │ ├── compilers/
│ │ │ │ ├── Component.vue
│ │ │ │ ├── component.tsx
│ │ │ │ ├── enum.ts
│ │ │ │ ├── grid.css
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.ts
│ │ │ │ ├── module.mdx
│ │ │ │ ├── package.json
│ │ │ │ ├── readme.md
│ │ │ │ ├── styles.css
│ │ │ │ ├── tsconfig.json
│ │ │ │ ├── unused.css
│ │ │ │ └── unused.md
│ │ │ ├── compilers-manual/
│ │ │ │ ├── component.tsx
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.ts
│ │ │ │ ├── module.mdx
│ │ │ │ ├── package.json
│ │ │ │ ├── styles.scss
│ │ │ │ └── tsconfig.json
│ │ │ ├── compilers-prisma/
│ │ │ │ ├── package.json
│ │ │ │ └── prisma/
│ │ │ │ └── schema.prisma
│ │ │ ├── compilers-scss/
│ │ │ │ ├── _grid.scss
│ │ │ │ ├── _partial.scss
│ │ │ │ ├── buttons.scss
│ │ │ │ ├── cards.sass
│ │ │ │ ├── components.scss
│ │ │ │ ├── indented.sass
│ │ │ │ ├── index.ts
│ │ │ │ ├── legacy.scss
│ │ │ │ ├── mixins.scss
│ │ │ │ ├── package.json
│ │ │ │ ├── styles.scss
│ │ │ │ ├── theme.scss
│ │ │ │ ├── unused.scss
│ │ │ │ ├── utils.scss
│ │ │ │ └── variables.scss
│ │ │ ├── compilers-tailwind/
│ │ │ │ ├── components.css
│ │ │ │ ├── index.ts
│ │ │ │ ├── local-js-plugin.js
│ │ │ │ ├── local-ts-plugin.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── styles.css
│ │ │ │ └── unused.css
│ │ │ ├── config-js-async/
│ │ │ │ ├── dangling.js
│ │ │ │ ├── index.js
│ │ │ │ ├── knip.config.js
│ │ │ │ ├── my-namespace.js
│ │ │ │ └── package.json
│ │ │ ├── config-js-flat/
│ │ │ │ ├── dangling.js
│ │ │ │ ├── index.js
│ │ │ │ ├── knip.js
│ │ │ │ ├── my-namespace.js
│ │ │ │ └── package.json
│ │ │ ├── config-json/
│ │ │ │ ├── dangling.js
│ │ │ │ ├── index.js
│ │ │ │ ├── knip.json
│ │ │ │ ├── my-namespace.js
│ │ │ │ └── package.json
│ │ │ ├── config-mjs-async/
│ │ │ │ ├── dangling.js
│ │ │ │ ├── index.js
│ │ │ │ ├── knip.mjs
│ │ │ │ ├── my-namespace.js
│ │ │ │ └── package.json
│ │ │ ├── config-mjs-flat/
│ │ │ │ ├── dangling.js
│ │ │ │ ├── index.js
│ │ │ │ ├── knip.mjs
│ │ │ │ ├── my-namespace.js
│ │ │ │ └── package.json
│ │ │ ├── config-package-json/
│ │ │ │ ├── dangling.js
│ │ │ │ ├── index.js
│ │ │ │ ├── my-namespace.js
│ │ │ │ └── package.json
│ │ │ ├── config-ts-async/
│ │ │ │ ├── dangling.js
│ │ │ │ ├── index.js
│ │ │ │ ├── knip.ts
│ │ │ │ ├── my-namespace.js
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── config-ts-flat/
│ │ │ │ ├── dangling.js
│ │ │ │ ├── index.js
│ │ │ │ ├── knip.config.ts
│ │ │ │ ├── my-namespace.js
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── config-ts-function/
│ │ │ │ ├── dangling.js
│ │ │ │ ├── index.js
│ │ │ │ ├── knip.ts
│ │ │ │ ├── my-namespace.js
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── config-yaml/
│ │ │ │ ├── dangling.js
│ │ │ │ ├── index.js
│ │ │ │ ├── knip.yaml
│ │ │ │ ├── my-namespace.js
│ │ │ │ └── package.json
│ │ │ ├── configuration-hints/
│ │ │ │ ├── knip.json
│ │ │ │ ├── lib/
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── package.json
│ │ │ │ └── src/
│ │ │ │ └── entry.js
│ │ │ ├── configuration-hints-plugin/
│ │ │ │ ├── create-typescript-app.config.js
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── svgo.config.mjs
│ │ │ ├── configuration-hints-plugin-override/
│ │ │ │ ├── create-typescript-app.config.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ ├── svgo.config.js
│ │ │ │ └── yarn.config.cjs
│ │ │ ├── configuration-hints2/
│ │ │ │ ├── knip.json
│ │ │ │ ├── lib/
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── package.json
│ │ │ │ └── src/
│ │ │ │ └── entry.js
│ │ │ ├── cross-workspace-inputs/
│ │ │ │ ├── .github/
│ │ │ │ │ └── workflows/
│ │ │ │ │ └── test.yml
│ │ │ │ ├── components/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── vitest.components.config.ts
│ │ │ │ ├── e2e/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── playwright.e2e.config.ts
│ │ │ │ │ └── tests/
│ │ │ │ │ └── feature.ts
│ │ │ │ ├── knip.json
│ │ │ │ └── package.json
│ │ │ ├── custom-paths-workspaces/
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── lib/
│ │ │ │ │ ├── fn.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── my-module.ts
│ │ │ │ ├── package.json
│ │ │ │ └── ws/
│ │ │ │ ├── index.ts
│ │ │ │ ├── lib/
│ │ │ │ │ └── main.ts
│ │ │ │ ├── package.json
│ │ │ │ └── util/
│ │ │ │ └── lang.ts
│ │ │ ├── definitely-typed/
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── dependencies/
│ │ │ │ ├── entry.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── my-module.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── tsconfig.json
│ │ │ │ └── unused-module.ts
│ │ │ ├── dependencies-types/
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── dts/
│ │ │ │ ├── assets.d.ts
│ │ │ │ ├── block.html
│ │ │ │ ├── index.ts
│ │ │ │ ├── module-augmentation.ts
│ │ │ │ ├── normal.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── svg.d.ts
│ │ │ │ ├── tsconfig.json
│ │ │ │ └── types.d.ts
│ │ │ ├── dts-baseurl-implicit-relative/
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ ├── components/
│ │ │ │ │ │ ├── Button.d.ts
│ │ │ │ │ │ └── Button.jsx
│ │ │ │ │ ├── dir/
│ │ │ │ │ │ └── subdir/
│ │ │ │ │ │ ├── index.d.ts
│ │ │ │ │ │ └── index.js
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── utils/
│ │ │ │ │ ├── fn.d.ts
│ │ │ │ │ ├── fn.js
│ │ │ │ │ ├── obj.cjs
│ │ │ │ │ ├── obj.d.cts
│ │ │ │ │ ├── str.d.mts
│ │ │ │ │ └── str.mjs
│ │ │ │ └── tsconfig.json
│ │ │ ├── dts-compiled/
│ │ │ │ ├── knip.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ ├── App.tsx
│ │ │ │ │ ├── ExampleQuery.graphql
│ │ │ │ │ ├── ExampleQuery.graphql.d.ts
│ │ │ │ │ ├── UnusedQuery.graphql
│ │ │ │ │ ├── UnusedQuery.graphql.d.ts
│ │ │ │ │ ├── main.tsx
│ │ │ │ │ └── types.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── duplicate-dependencies/
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.json
│ │ │ │ └── package.json
│ │ │ ├── duplicate-exports-alias/
│ │ │ │ ├── helpers.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── reexported.ts
│ │ │ │ └── specifier-default.ts
│ │ │ ├── empty-main/
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.json
│ │ │ │ └── package.json
│ │ │ ├── entry-exports-enum-members/
│ │ │ │ ├── fruit.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── main.ts
│ │ │ │ ├── package.json
│ │ │ │ └── tree.ts
│ │ │ ├── entry-exports-namespace/
│ │ │ │ ├── index.ts
│ │ │ │ ├── main.ts
│ │ │ │ ├── mid.ts
│ │ │ │ ├── ns.ts
│ │ │ │ └── package.json
│ │ │ ├── entry-files/
│ │ │ │ ├── cli.js
│ │ │ │ ├── export-index.js
│ │ │ │ ├── local-default.js
│ │ │ │ ├── local-import.js
│ │ │ │ ├── local-node.js
│ │ │ │ ├── local-require.js
│ │ │ │ ├── main.js
│ │ │ │ └── package.json
│ │ │ ├── entry-js/
│ │ │ │ ├── dangling.js
│ │ │ │ ├── index.js
│ │ │ │ ├── my-module.ts
│ │ │ │ ├── my-namespace.ts
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── enum-members/
│ │ │ │ ├── index.ts
│ │ │ │ ├── members.ts
│ │ │ │ └── package.json
│ │ │ ├── enum-members-enumerated/
│ │ │ │ ├── directions.ts
│ │ │ │ ├── fruits.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── export-default-type/
│ │ │ │ ├── class.js
│ │ │ │ ├── const.js
│ │ │ │ ├── function.js
│ │ │ │ ├── index.js
│ │ │ │ ├── let.js
│ │ │ │ ├── package.json
│ │ │ │ └── var.js
│ │ │ ├── export-spread/
│ │ │ │ ├── array.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── object.ts
│ │ │ │ └── package.json
│ │ │ ├── exports/
│ │ │ │ ├── default-arrow-function.ts
│ │ │ │ ├── default-class.ts
│ │ │ │ ├── default-function.ts
│ │ │ │ ├── default-generator-function.ts
│ │ │ │ ├── default-named-class.ts
│ │ │ │ ├── default-named-function.ts
│ │ │ │ ├── default-named-generator-function.ts
│ │ │ │ ├── default.ts
│ │ │ │ ├── dynamic-import.ts
│ │ │ │ ├── export-is.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── my-mix.ts
│ │ │ │ ├── my-module.ts
│ │ │ │ ├── my-namespace.ts
│ │ │ │ ├── named-exports.ts
│ │ │ │ ├── odd.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── tsconfig.json
│ │ │ │ └── types.ts
│ │ │ ├── exports-default-interface/
│ │ │ │ ├── enum.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── interface.ts
│ │ │ │ ├── package.json
│ │ │ │ └── type.ts
│ │ │ ├── exports-special-characters/
│ │ │ │ ├── exports.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── exports-value-refs/
│ │ │ │ ├── index.ts
│ │ │ │ ├── package.json
│ │ │ │ └── refs.ts
│ │ │ ├── exports-value-refs-default/
│ │ │ │ ├── index.ts
│ │ │ │ ├── package.json
│ │ │ │ └── refs.ts
│ │ │ ├── extensions-css-ts/
│ │ │ │ ├── index.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── styles1.css.ts
│ │ │ │ ├── styles1a.css.ts
│ │ │ │ ├── styles2.css.ts
│ │ │ │ ├── styles2a.css.ts
│ │ │ │ ├── styles3.css.ts
│ │ │ │ └── styles3a.css.ts
│ │ │ ├── fix/
│ │ │ │ ├── .prettierrc
│ │ │ │ ├── access.js
│ │ │ │ ├── default-x.mjs
│ │ │ │ ├── default.mjs
│ │ │ │ ├── exports.js
│ │ │ │ ├── ignored.ts
│ │ │ │ ├── index.mjs
│ │ │ │ ├── knip.ts
│ │ │ │ ├── mod.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── reexported.ts
│ │ │ │ └── reexports.mjs
│ │ │ ├── fix-members/
│ │ │ │ ├── class.ts
│ │ │ │ ├── enums.ts
│ │ │ │ ├── index.js
│ │ │ │ ├── namespaces.ts
│ │ │ │ └── package.json
│ │ │ ├── fix-workspaces/
│ │ │ │ ├── exports.ts
│ │ │ │ ├── ignored.ts
│ │ │ │ ├── index.js
│ │ │ │ ├── knip.ts
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ ├── ignored/
│ │ │ │ │ ├── exports.ts
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── package.json
│ │ │ │ └── lib/
│ │ │ │ ├── exports.ts
│ │ │ │ ├── ignored.ts
│ │ │ │ ├── index.js
│ │ │ │ └── package.json
│ │ │ ├── git-branch-file/
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── gitignore/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ └── a/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── index.ts
│ │ │ │ ├── libs/
│ │ │ │ │ ├── .gitignore
│ │ │ │ │ └── util/
│ │ │ │ │ └── type/
│ │ │ │ │ └── .gitignore
│ │ │ │ └── package.json
│ │ │ ├── glob/
│ │ │ │ ├── .gitignore
│ │ │ │ └── a/
│ │ │ │ ├── .gitignore
│ │ │ │ └── b/
│ │ │ │ ├── .gitignore
│ │ │ │ └── c/
│ │ │ │ └── .gitignore
│ │ │ ├── glob-worktree/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── mock-git-dir/
│ │ │ │ │ └── info/
│ │ │ │ │ └── exclude
│ │ │ │ └── root/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── dot-git
│ │ │ │ └── subdir/
│ │ │ │ └── .gitignore
│ │ │ ├── ignore-dependencies-binaries/
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.ts
│ │ │ │ └── package.json
│ │ │ ├── ignore-dependencies-binaries-json/
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── ignore-dependencies-eslint/
│ │ │ │ ├── .eslintrc.js
│ │ │ │ ├── knip.json
│ │ │ │ └── package.json
│ │ │ ├── ignore-exports-used-in-file/
│ │ │ │ ├── computed-access.ts
│ │ │ │ ├── control-flow.ts
│ │ │ │ ├── expressions.ts
│ │ │ │ ├── imported.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── jsx.tsx
│ │ │ │ ├── knip.json
│ │ │ │ ├── loops.ts
│ │ │ │ ├── more.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── tagged-template.ts
│ │ │ │ ├── tsconfig.json
│ │ │ │ └── type-assertions.ts
│ │ │ ├── ignore-exports-used-in-file-alias-exclude/
│ │ │ │ ├── exports.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── more.ts
│ │ │ │ └── package.json
│ │ │ ├── ignore-exports-used-in-file-false/
│ │ │ │ ├── imported.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── ignore-exports-used-in-file-id-chars/
│ │ │ │ ├── imported.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.json
│ │ │ │ └── package.json
│ │ │ ├── ignore-exports-used-in-file-id-underscores/
│ │ │ │ ├── imported.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── namespace.ts
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── ignore-exports-used-in-file-re-export/
│ │ │ │ ├── component.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── interface.ts
│ │ │ │ ├── knip.json
│ │ │ │ └── package.json
│ │ │ ├── ignore-exports-used-in-file-shorthand/
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── src/
│ │ │ │ ├── antecedents.js
│ │ │ │ ├── fn.js
│ │ │ │ ├── index.js
│ │ │ │ └── slice.js
│ │ │ ├── ignore-exports-used-in-file-some/
│ │ │ │ ├── imported.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── ignore-exports-used-in-file-typeof-class/
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── src/
│ │ │ │ ├── api.ts
│ │ │ │ └── index.ts
│ │ │ ├── ignore-files/
│ │ │ │ ├── apples/
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── rooted.js
│ │ │ │ │ ├── unused.js
│ │ │ │ │ └── used.js
│ │ │ │ ├── bananas/
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── rooted.js
│ │ │ │ │ ├── unused.js
│ │ │ │ │ └── used.js
│ │ │ │ ├── index.js
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ ├── rooted.js
│ │ │ │ ├── unused.js
│ │ │ │ └── used.js
│ │ │ ├── ignore-issues/
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── src/
│ │ │ │ ├── generated/
│ │ │ │ │ └── types.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── model.generated.ts
│ │ │ │ └── regular.ts
│ │ │ ├── ignore-members/
│ │ │ │ ├── MyClass.ts
│ │ │ │ ├── enums.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.ts
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── ignore-negated/
│ │ │ │ ├── index.js
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── src/
│ │ │ │ └── modules/
│ │ │ │ ├── A/
│ │ │ │ │ └── unusedFileA.js
│ │ │ │ └── B/
│ │ │ │ └── unusedFileB.js
│ │ │ ├── ignore-patterns/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── scripts/
│ │ │ │ └── build.ts
│ │ │ ├── ignore-patterns-monorepo/
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ └── lib/
│ │ │ │ ├── index.ts
│ │ │ │ ├── output/
│ │ │ │ │ └── generated.ts
│ │ │ │ └── package.json
│ │ │ ├── ignore-unresolved/
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.ts
│ │ │ │ └── package.json
│ │ │ ├── ignore-unresolved2/
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ └── client/
│ │ │ │ ├── package.json
│ │ │ │ └── src/
│ │ │ │ └── index.ts
│ │ │ ├── import-equals/
│ │ │ │ ├── index.ts
│ │ │ │ ├── local.ts
│ │ │ │ ├── my-module.ts
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── import-errors/
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── import-meta-glob/
│ │ │ │ ├── animals/
│ │ │ │ │ ├── cat.ts
│ │ │ │ │ ├── dog.ts
│ │ │ │ │ └── horse.ts
│ │ │ │ ├── flowers/
│ │ │ │ │ ├── rose.astro
│ │ │ │ │ └── tulip.astro
│ │ │ │ ├── index.ts
│ │ │ │ ├── package.json
│ │ │ │ └── shapes/
│ │ │ │ ├── circle.vue
│ │ │ │ └── square.vue
│ │ │ ├── import-named-default-id/
│ │ │ │ ├── index.ts
│ │ │ │ ├── package.json
│ │ │ │ └── utils.ts
│ │ │ ├── import-star-iteration/
│ │ │ │ ├── fruit.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── tsconfig.json
│ │ │ │ └── vegetables.ts
│ │ │ ├── imports/
│ │ │ │ ├── aliased-binding.ts
│ │ │ │ ├── await-import-call.ts
│ │ │ │ ├── await-import.ts
│ │ │ │ ├── catch.ts
│ │ │ │ ├── default-and-named-binding.ts
│ │ │ │ ├── default-identifier.ts
│ │ │ │ ├── default-prop-access.ts
│ │ │ │ ├── dir/
│ │ │ │ │ ├── import-b.ts
│ │ │ │ │ ├── import-f.ts
│ │ │ │ │ └── mod.ts
│ │ │ │ ├── empty-named-bindings.ts
│ │ │ │ ├── import-a.ts
│ │ │ │ ├── import-c.ts
│ │ │ │ ├── import-d.ts
│ │ │ │ ├── import-e.ts
│ │ │ │ ├── import-g.ts
│ │ │ │ ├── import-meta-resolve.js
│ │ │ │ ├── index.ts
│ │ │ │ ├── named-object-binding.ts
│ │ │ │ ├── no-substitution-tpl-literal.ts
│ │ │ │ ├── object-bindings.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── promise-like.ts
│ │ │ │ ├── prop-access.ts
│ │ │ │ ├── side-effects-call.ts
│ │ │ │ ├── side-effects.ts
│ │ │ │ ├── string-literal.ts
│ │ │ │ ├── top-level-await-import.ts
│ │ │ │ ├── top-level-side-effects-call.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── imports-destructure-spread/
│ │ │ │ ├── index.js
│ │ │ │ ├── package.json
│ │ │ │ └── trees.js
│ │ │ ├── imports-dynamic-access/
│ │ │ │ ├── fruits.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── imports-namespace/
│ │ │ │ ├── index.ts
│ │ │ │ ├── namespace.ts
│ │ │ │ ├── namespace10.ts
│ │ │ │ ├── namespace2.ts
│ │ │ │ ├── namespace3-opaque.ts
│ │ │ │ ├── namespace3.ts
│ │ │ │ ├── namespace4.ts
│ │ │ │ ├── namespace5-opaque.ts
│ │ │ │ ├── namespace5.ts
│ │ │ │ ├── namespace6-opaque.ts
│ │ │ │ ├── namespace6.ts
│ │ │ │ ├── namespace7.ts
│ │ │ │ ├── namespace8.ts
│ │ │ │ ├── namespace9.ts
│ │ │ │ ├── package.json
│ │ │ │ └── re-exported-module.ts
│ │ │ ├── imports-namespace-jsx/
│ │ │ │ ├── components.tsx
│ │ │ │ ├── index.tsx
│ │ │ │ └── package.json
│ │ │ ├── imports-namespace-with-nsexports/
│ │ │ │ ├── index.ts
│ │ │ │ ├── namespace.ts
│ │ │ │ ├── namespace2.ts
│ │ │ │ ├── namespace3.ts
│ │ │ │ ├── namespace4.ts
│ │ │ │ ├── namespace5.ts
│ │ │ │ ├── namespace6.ts
│ │ │ │ ├── package.json
│ │ │ │ └── re-exported-module.ts
│ │ │ ├── imports-opaque/
│ │ │ │ ├── arrow.ts
│ │ │ │ ├── assignment.ts
│ │ │ │ ├── awaited-arrow.ts
│ │ │ │ ├── awaited-assignment.ts
│ │ │ │ ├── awaited-fn-arg.ts
│ │ │ │ ├── awaited-return.ts
│ │ │ │ ├── direct.ts
│ │ │ │ ├── fn-arg.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── obj-spread.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── return.ts
│ │ │ │ ├── tsconfig.json
│ │ │ │ └── variable.ts
│ │ │ ├── imports-prop-access-call/
│ │ │ │ ├── exists.js
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── imports-self/
│ │ │ │ ├── exports.js
│ │ │ │ ├── index.js
│ │ │ │ └── package.json
│ │ │ ├── imports-typeof/
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── include-entry-exports/
│ │ │ │ ├── cli.js
│ │ │ │ ├── index.ts
│ │ │ │ ├── main.ts
│ │ │ │ ├── mod.ts
│ │ │ │ └── package.json
│ │ │ ├── include-entry-exports-scripts/
│ │ │ │ ├── knip.json
│ │ │ │ ├── next.config.js
│ │ │ │ ├── package.json
│ │ │ │ └── src/
│ │ │ │ ├── pages/
│ │ │ │ │ └── index.js
│ │ │ │ ├── script1.ts
│ │ │ │ ├── script2.ts
│ │ │ │ └── script3.ts
│ │ │ ├── include-entry-reexports/
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ ├── app/
│ │ │ │ │ ├── index.mjs
│ │ │ │ │ └── package.json
│ │ │ │ └── shared/
│ │ │ │ ├── index.mjs
│ │ │ │ ├── module-a.mjs
│ │ │ │ ├── module-b.mjs
│ │ │ │ └── package.json
│ │ │ ├── include-libs/
│ │ │ │ ├── components.ts
│ │ │ │ ├── index.tsx
│ │ │ │ ├── loadable.ts
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── js-only/
│ │ │ │ ├── dangling.js
│ │ │ │ ├── index.js
│ │ │ │ ├── my-namespace.js
│ │ │ │ └── package.json
│ │ │ ├── jsdoc/
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── jsdoc-exports/
│ │ │ │ ├── index.ts
│ │ │ │ ├── module.test.js
│ │ │ │ ├── module.ts
│ │ │ │ └── package.json
│ │ │ ├── jsx/
│ │ │ │ ├── App.tsx
│ │ │ │ ├── Component.tsx
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── load-cjs/
│ │ │ │ ├── index.js
│ │ │ │ └── package.json
│ │ │ ├── load-esm/
│ │ │ │ ├── index.js
│ │ │ │ └── package.json
│ │ │ ├── load-esm-ts/
│ │ │ │ ├── index.ts
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── load-json5/
│ │ │ │ └── config.json5
│ │ │ ├── module-block/
│ │ │ │ ├── index.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── tsconfig.json
│ │ │ │ └── types.ts
│ │ │ ├── module-register/
│ │ │ │ ├── ignored-loader.js
│ │ │ │ ├── index.ts
│ │ │ │ ├── loader.js
│ │ │ │ └── package.json
│ │ │ ├── module-resolution-baseurl-implicit-relative/
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ ├── dir/
│ │ │ │ │ │ └── main.ts
│ │ │ │ │ ├── hello/
│ │ │ │ │ │ └── world.ts
│ │ │ │ │ └── index.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── module-resolution-non-std/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ ├── globals.css
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── styles/
│ │ │ │ │ │ ├── aliased.css
│ │ │ │ │ │ └── base.css
│ │ │ │ │ └── unused.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── module-resolution-non-std-absolute/
│ │ │ │ ├── package.json
│ │ │ │ ├── tsconfig.json
│ │ │ │ ├── x-other/
│ │ │ │ │ ├── absolute.css
│ │ │ │ │ └── package.json
│ │ │ │ └── x-self/
│ │ │ │ ├── absolute.css
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── module-resolution-non-std-implicit/
│ │ │ │ ├── package.json
│ │ │ │ └── src/
│ │ │ │ ├── dir/
│ │ │ │ │ └── main.ts
│ │ │ │ ├── global.css
│ │ │ │ ├── index.ts
│ │ │ │ └── styles/
│ │ │ │ └── base.css
│ │ │ ├── module-resolution-tsconfig-paths/
│ │ │ │ ├── aliased-dir/
│ │ │ │ │ └── a.ts
│ │ │ │ ├── components/
│ │ │ │ │ ├── IndexComponent/
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ └── MyComponent.tsx
│ │ │ │ ├── index.ts
│ │ │ │ ├── internal-package/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── tsconfig.json
│ │ │ │ └── unprefixed/
│ │ │ │ └── module.ts
│ │ │ ├── negated-production-paths/
│ │ │ │ ├── index.test.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.json
│ │ │ │ └── package.json
│ │ │ ├── npm-scripts/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── entry.ts
│ │ │ │ ├── ignore.js
│ │ │ │ ├── package.json
│ │ │ │ └── script.js
│ │ │ ├── ns-spread-reexport/
│ │ │ │ ├── aliased-import.ts
│ │ │ │ ├── animals.ts
│ │ │ │ ├── colors.ts
│ │ │ │ ├── consumer.ts
│ │ │ │ ├── destructured.ts
│ │ │ │ ├── fruits.ts
│ │ │ │ ├── hello.resolver.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── member-access.ts
│ │ │ │ ├── mixed-usage.ts
│ │ │ │ ├── ns-alias-reexport.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── resolvers.barrel.ts
│ │ │ │ ├── resolvers.ts
│ │ │ │ └── utils.ts
│ │ │ ├── package-entry-points/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── feature/
│ │ │ │ │ ├── internal/
│ │ │ │ │ │ ├── no-entry.js
│ │ │ │ │ │ └── system/
│ │ │ │ │ │ ├── unused.ts
│ │ │ │ │ │ └── used.ts
│ │ │ │ │ └── my-feature.js
│ │ │ │ ├── lib/
│ │ │ │ │ ├── deep/
│ │ │ │ │ │ ├── er/
│ │ │ │ │ │ │ └── file.js
│ │ │ │ │ │ └── main.js
│ │ │ │ │ └── index.js
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ ├── public/
│ │ │ │ │ │ └── lib/
│ │ │ │ │ │ └── rary/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── lost.js
│ │ │ │ │ └── runtime/
│ │ │ │ │ ├── deep/
│ │ │ │ │ │ └── deno.ts
│ │ │ │ │ └── node.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── path-aliases/
│ │ │ │ ├── abc/
│ │ │ │ │ └── main.js
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── lib/
│ │ │ │ │ ├── data.ext
│ │ │ │ │ ├── fn.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── my-module.ts
│ │ │ │ └── package.json
│ │ │ ├── path-aliases2/
│ │ │ │ ├── index.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── ts/
│ │ │ │ │ ├── components/
│ │ │ │ │ │ └── file.ts
│ │ │ │ │ └── shared/
│ │ │ │ │ └── file.ts
│ │ │ │ ├── tsconfig.json
│ │ │ │ ├── vite/
│ │ │ │ │ ├── component/
│ │ │ │ │ │ └── file.ts
│ │ │ │ │ ├── dir/
│ │ │ │ │ │ └── file.ts
│ │ │ │ │ └── file.ts
│ │ │ │ ├── vite.config.ts
│ │ │ │ ├── vitest/
│ │ │ │ │ ├── component/
│ │ │ │ │ │ └── file.ts
│ │ │ │ │ ├── dir/
│ │ │ │ │ │ └── file.ts
│ │ │ │ │ └── file.ts
│ │ │ │ ├── webpack/
│ │ │ │ │ ├── components/
│ │ │ │ │ │ └── file.ts
│ │ │ │ │ ├── file.ts
│ │ │ │ │ ├── match.ts
│ │ │ │ │ ├── shared/
│ │ │ │ │ │ └── file.ts
│ │ │ │ │ └── wild/
│ │ │ │ │ └── file.ts
│ │ │ │ └── webpack.config.ts
│ │ │ ├── pathless/
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ ├── dir/
│ │ │ │ │ │ └── module-a.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── same.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── peer-dependencies/
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── peer-dependencies-circular/
│ │ │ │ └── package.json
│ │ │ ├── peer-dependencies-optional/
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── peer-dependencies-optional-host/
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── peer-dependencies-optional-ignored/
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.json
│ │ │ │ └── package.json
│ │ │ ├── peer-dependencies-optional-strict/
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── peer-dependencies-optional-strict-unreferenced/
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── plugin-config/
│ │ │ │ ├── index.ts
│ │ │ │ ├── index.vitest.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── vitest.config.ts
│ │ │ ├── plugin-disable/
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ ├── vite.config.ts
│ │ │ │ └── ws/
│ │ │ │ ├── package.json
│ │ │ │ └── playwright.config.ts
│ │ │ ├── plugin-negated-entry-globs/
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── src/
│ │ │ │ └── pages/
│ │ │ │ ├── _stories/
│ │ │ │ │ └── index.stories.ts
│ │ │ │ ├── _util.ts
│ │ │ │ ├── about/
│ │ │ │ │ └── index.astro
│ │ │ │ ├── blog/
│ │ │ │ │ ├── _util/
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── _util.ts
│ │ │ │ │ └── index.astro
│ │ │ │ └── index.astro
│ │ │ ├── plugin-overlap/
│ │ │ │ ├── package.json
│ │ │ │ ├── tsconfig.json
│ │ │ │ └── typedoc.json
│ │ │ ├── plugins/
│ │ │ │ ├── _template/
│ │ │ │ │ └── package.json
│ │ │ │ ├── angular/
│ │ │ │ │ ├── angular.json
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── app.component.spec.ts
│ │ │ │ │ │ ├── main.ts
│ │ │ │ │ │ ├── polyfill.js
│ │ │ │ │ │ └── script.js
│ │ │ │ │ ├── tsconfig.app.json
│ │ │ │ │ ├── tsconfig.json
│ │ │ │ │ └── tsconfig.spec.json
│ │ │ │ ├── angular2/
│ │ │ │ │ ├── angular.json
│ │ │ │ │ ├── another-karma.conf.js
│ │ │ │ │ ├── karma.conf.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── browser.ts
│ │ │ │ │ │ ├── environments/
│ │ │ │ │ │ │ ├── environment.development.ts
│ │ │ │ │ │ │ └── environment.ts
│ │ │ │ │ │ ├── main.server.ts
│ │ │ │ │ │ └── server.ts
│ │ │ │ │ └── tsconfig.app.json
│ │ │ │ ├── angular3/
│ │ │ │ │ ├── angular.json
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ ├── main-for-non-prod.ts
│ │ │ │ │ ├── main-for-testing.ts
│ │ │ │ │ ├── main.server-for-non-prod.ts
│ │ │ │ │ ├── main.server.ts
│ │ │ │ │ ├── main.ts
│ │ │ │ │ ├── polyfill-for-non-prod.js
│ │ │ │ │ ├── polyfill.js
│ │ │ │ │ ├── script-for-non-prod.js
│ │ │ │ │ ├── script.js
│ │ │ │ │ └── server.ts
│ │ │ │ ├── astro/
│ │ │ │ │ ├── .astro/
│ │ │ │ │ │ └── types.d.ts
│ │ │ │ │ ├── astro.config.mjs
│ │ │ │ │ ├── knip.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── components/
│ │ │ │ │ │ │ ├── BaseHead.astro
│ │ │ │ │ │ │ ├── Footer.astro
│ │ │ │ │ │ │ ├── FormattedDate.astro
│ │ │ │ │ │ │ ├── Header.astro
│ │ │ │ │ │ │ └── HeaderLink.astro
│ │ │ │ │ │ ├── consts.ts
│ │ │ │ │ │ ├── content/
│ │ │ │ │ │ │ ├── blog/
│ │ │ │ │ │ │ │ ├── first-post.md
│ │ │ │ │ │ │ │ └── using-mdx.mdx
│ │ │ │ │ │ │ └── config.ts
│ │ │ │ │ │ ├── env.d.ts
│ │ │ │ │ │ ├── layouts/
│ │ │ │ │ │ │ ├── BlogPost.astro
│ │ │ │ │ │ │ └── Layout.astro
│ │ │ │ │ │ ├── pages/
│ │ │ │ │ │ │ ├── _top-level-dir-unused/
│ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ ├── _top-level-file-unused.ts
│ │ │ │ │ │ │ ├── about/
│ │ │ │ │ │ │ │ └── mdx-with-layout.mdx
│ │ │ │ │ │ │ ├── about.astro
│ │ │ │ │ │ │ ├── blog/
│ │ │ │ │ │ │ │ ├── [...slug].astro
│ │ │ │ │ │ │ │ ├── _nested-unused-file.ts
│ │ │ │ │ │ │ │ ├── _util/
│ │ │ │ │ │ │ │ │ ├── nested/
│ │ │ │ │ │ │ │ │ │ └── deeply-nested-unused-file.ts
│ │ │ │ │ │ │ │ │ └── unused-component.astro
│ │ │ │ │ │ │ │ └── index.astro
│ │ │ │ │ │ │ ├── index.astro
│ │ │ │ │ │ │ └── rss.xml.js
│ │ │ │ │ │ └── styles/
│ │ │ │ │ │ └── global.css
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── astro-db/
│ │ │ │ │ ├── astro.config.mjs
│ │ │ │ │ ├── db/
│ │ │ │ │ │ ├── config.ts
│ │ │ │ │ │ └── seed.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ └── pages/
│ │ │ │ │ │ └── index.astro
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── astro-og-canvas/
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── astro-sharp-image-service/
│ │ │ │ │ ├── astro.config.mjs
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ └── pages/
│ │ │ │ │ └── index.astro
│ │ │ │ ├── ava/
│ │ │ │ │ ├── ava.config.mjs
│ │ │ │ │ └── package.json
│ │ │ │ ├── ava2/
│ │ │ │ │ ├── __tests__/
│ │ │ │ │ │ ├── __helpers__/
│ │ │ │ │ │ │ └── index.cjs
│ │ │ │ │ │ └── mod.cjs
│ │ │ │ │ ├── ava.config.mjs
│ │ │ │ │ ├── index.cjs
│ │ │ │ │ ├── mod.cjs
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── test.js
│ │ │ │ ├── ava3/
│ │ │ │ │ ├── ava.config.mjs
│ │ │ │ │ ├── index.cjs
│ │ │ │ │ ├── mod.cjs
│ │ │ │ │ ├── mod.test.js
│ │ │ │ │ ├── mod.test.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── mod.test.js
│ │ │ │ │ │ └── mod.test.ts
│ │ │ │ │ ├── test.js
│ │ │ │ │ └── test.ts
│ │ │ │ ├── babel/
│ │ │ │ │ ├── .babelrc
│ │ │ │ │ ├── .babelrc.js
│ │ │ │ │ ├── babel.config.cts
│ │ │ │ │ ├── babel.config.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── biome/
│ │ │ │ │ ├── biome.json
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── shared/
│ │ │ │ │ └── base.json
│ │ │ │ ├── biome-workspace/
│ │ │ │ │ ├── biome.jsonc
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── packages/
│ │ │ │ │ └── stub/
│ │ │ │ │ ├── biome.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── bumpp/
│ │ │ │ │ ├── bump.config.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── bun/
│ │ │ │ │ ├── index.spec.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── bun2/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ ├── index.check.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── bun3/
│ │ │ │ │ ├── bunfig.toml
│ │ │ │ │ ├── index.spec.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── preload.ts
│ │ │ │ │ ├── setup-env.ts
│ │ │ │ │ └── setup.ts
│ │ │ │ ├── bun4/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── test/
│ │ │ │ │ └── index.test.ts
│ │ │ │ ├── capacitor/
│ │ │ │ │ ├── android/
│ │ │ │ │ │ └── capacitor.settings.gradle
│ │ │ │ │ ├── capacitor.config.json
│ │ │ │ │ ├── capacitor.config.ts
│ │ │ │ │ ├── ios/
│ │ │ │ │ │ └── App/
│ │ │ │ │ │ └── Podfile
│ │ │ │ │ └── package.json
│ │ │ │ ├── changelogen/
│ │ │ │ │ ├── changelog.config.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── changelogithub/
│ │ │ │ │ ├── changelogithub.config.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── changesets/
│ │ │ │ │ ├── .changeset/
│ │ │ │ │ │ └── config.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── commitizen/
│ │ │ │ │ ├── .czrc
│ │ │ │ │ └── package.json
│ │ │ │ ├── commitlint/
│ │ │ │ │ ├── .commitlintrc.json
│ │ │ │ │ ├── commitlint.config.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── convex/
│ │ │ │ │ ├── convex/
│ │ │ │ │ │ ├── _generated/
│ │ │ │ │ │ │ └── dataModel.d.ts
│ │ │ │ │ │ ├── auth.config.ts
│ │ │ │ │ │ └── schema.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── create-typescript-app/
│ │ │ │ │ ├── create-typescript-app.config.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── cspell/
│ │ │ │ │ ├── .cspell.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── cucumber/
│ │ │ │ │ ├── cucumber.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── steps/
│ │ │ │ │ └── step.ts
│ │ │ │ ├── cypress/
│ │ │ │ │ ├── cypress/
│ │ │ │ │ │ └── support/
│ │ │ │ │ │ ├── commands.ts
│ │ │ │ │ │ └── e2e.ts
│ │ │ │ │ ├── cypress.config.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── cypress-multi-reporter/
│ │ │ │ │ ├── cypress/
│ │ │ │ │ │ └── support/
│ │ │ │ │ │ ├── commands.ts
│ │ │ │ │ │ └── e2e.ts
│ │ │ │ │ ├── cypress.config.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── reporter-config.json
│ │ │ │ ├── cypress2/
│ │ │ │ │ ├── cypress/
│ │ │ │ │ │ └── support/
│ │ │ │ │ │ ├── commands.ts
│ │ │ │ │ │ ├── component.ts
│ │ │ │ │ │ └── e2e.ts
│ │ │ │ │ ├── cypress.config.js
│ │ │ │ │ ├── e2e/
│ │ │ │ │ │ └── mod.e2e.js
│ │ │ │ │ ├── mod.component.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── danger/
│ │ │ │ │ ├── dangerfile.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── dependency-cruiser/
│ │ │ │ │ ├── .dependency-cruiser.js
│ │ │ │ │ ├── baseline.config.js
│ │ │ │ │ ├── custom-depcruise-config.js
│ │ │ │ │ ├── dependency-cruise.config.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── docusaurus/
│ │ │ │ │ ├── blog/
│ │ │ │ │ │ └── 2021-08-01-mdx-blog-post.mdx
│ │ │ │ │ ├── docs/
│ │ │ │ │ │ └── tutorial-basics/
│ │ │ │ │ │ └── markdown-features.mdx
│ │ │ │ │ ├── docusaurus.config.js
│ │ │ │ │ ├── docusaurus.config.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── sidebars.js
│ │ │ │ │ ├── sidebars.ts
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── components/
│ │ │ │ │ │ │ └── HomepageFeatures/
│ │ │ │ │ │ │ └── index.js
│ │ │ │ │ │ └── pages/
│ │ │ │ │ │ └── index.js
│ │ │ │ │ └── static/
│ │ │ │ │ ├── css/
│ │ │ │ │ │ ├── custom.css
│ │ │ │ │ │ └── theme.css
│ │ │ │ │ └── js/
│ │ │ │ │ ├── analytics.js
│ │ │ │ │ └── custom.js
│ │ │ │ ├── drizzle/
│ │ │ │ │ ├── drizzle.config.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ ├── schema/
│ │ │ │ │ │ └── users.ts
│ │ │ │ │ └── schema.ts
│ │ │ │ ├── eleventy/
│ │ │ │ │ ├── _data/
│ │ │ │ │ │ └── global.cjs
│ │ │ │ │ ├── _includes/
│ │ │ │ │ │ └── footer.njk
│ │ │ │ │ ├── eleventy.config.cjs
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── pages/
│ │ │ │ │ └── index.njk
│ │ │ │ ├── eleventy2/
│ │ │ │ │ ├── _data/
│ │ │ │ │ │ └── global.cjs
│ │ │ │ │ ├── _includes/
│ │ │ │ │ │ └── footer.njk
│ │ │ │ │ ├── eleventy.config.cjs
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── pages/
│ │ │ │ │ └── index.njk
│ │ │ │ ├── eleventy3/
│ │ │ │ │ ├── .eleventy.js
│ │ │ │ │ ├── _includes/
│ │ │ │ │ │ └── footer.njk
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── pages/
│ │ │ │ │ │ └── index.njk
│ │ │ │ │ └── src/
│ │ │ │ │ ├── _includes/
│ │ │ │ │ │ └── abc.js
│ │ │ │ │ ├── _plugins/
│ │ │ │ │ │ └── syntax-highlighter.js
│ │ │ │ │ ├── assets/
│ │ │ │ │ │ └── index.js
│ │ │ │ │ └── static/
│ │ │ │ │ └── index.js
│ │ │ │ ├── eleventy4/
│ │ │ │ │ ├── .eleventy.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ ├── _siteData/
│ │ │ │ │ │ └── global.cjs
│ │ │ │ │ └── assets/
│ │ │ │ │ └── index.js
│ │ │ │ ├── eslint/
│ │ │ │ │ ├── .eslintrc.cjs
│ │ │ │ │ ├── .eslintrc.js
│ │ │ │ │ ├── .eslintrc.json
│ │ │ │ │ ├── .eslintrc.yml
│ │ │ │ │ ├── base.eslint.json
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── eslint2/
│ │ │ │ │ ├── eslint.config.ts
│ │ │ │ │ ├── knip.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── eslint3/
│ │ │ │ │ ├── eslint.config.js
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── eslint4/
│ │ │ │ │ ├── eslint.config.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── eslint5/
│ │ │ │ │ ├── eslint.config.ts
│ │ │ │ │ ├── knip.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── expo/
│ │ │ │ │ ├── app.config.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ └── app/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── expo2/
│ │ │ │ │ ├── app.config.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ └── routes/
│ │ │ │ │ └── index.js
│ │ │ │ ├── expo3/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── _layout.ts
│ │ │ │ │ ├── app.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── expressive-code/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── page.tsx
│ │ │ │ │ ├── next.config.mjs
│ │ │ │ │ └── package.json
│ │ │ │ ├── expressive-code2/
│ │ │ │ │ ├── astro.config.mjs
│ │ │ │ │ ├── ec.config.mjs
│ │ │ │ │ └── package.json
│ │ │ │ ├── expressive-code3/
│ │ │ │ │ ├── astro.config.mjs
│ │ │ │ │ ├── ec.config.mjs
│ │ │ │ │ └── package.json
│ │ │ │ ├── gatsby/
│ │ │ │ │ ├── gatsby-config.js
│ │ │ │ │ ├── gatsby-node.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── github-action/
│ │ │ │ │ ├── action.yml
│ │ │ │ │ ├── dist/
│ │ │ │ │ │ └── index.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ └── main.ts
│ │ │ │ ├── github-actions/
│ │ │ │ │ ├── .github/
│ │ │ │ │ │ ├── actions/
│ │ │ │ │ │ │ ├── composite/
│ │ │ │ │ │ │ │ └── action.yml
│ │ │ │ │ │ │ ├── node-a/
│ │ │ │ │ │ │ │ ├── action.yml
│ │ │ │ │ │ │ │ ├── dist/
│ │ │ │ │ │ │ │ │ └── pre.js
│ │ │ │ │ │ │ │ ├── main.js
│ │ │ │ │ │ │ │ └── post.js
│ │ │ │ │ │ │ └── node-b/
│ │ │ │ │ │ │ ├── action.yaml
│ │ │ │ │ │ │ └── main.js
│ │ │ │ │ │ └── workflows/
│ │ │ │ │ │ ├── test.yml
│ │ │ │ │ │ └── working-directory.yml
│ │ │ │ │ ├── comment.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── scripts/
│ │ │ │ │ ├── check-dependencies.js
│ │ │ │ │ ├── from-working-dir-with-path.js
│ │ │ │ │ ├── from-working-dir.js
│ │ │ │ │ ├── get-release-notes.js
│ │ │ │ │ └── no-working-dir.js
│ │ │ │ ├── github-actions-workspaces/
│ │ │ │ │ ├── .github/
│ │ │ │ │ │ └── workflows/
│ │ │ │ │ │ └── dir.yml
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── packages/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── lib/
│ │ │ │ │ └── package.json
│ │ │ │ ├── graphql-codegen/
│ │ │ │ │ ├── codegen.ts
│ │ │ │ │ ├── codegen.yaml
│ │ │ │ │ └── package.json
│ │ │ │ ├── graphql-codegen-graphql-config/
│ │ │ │ │ ├── .graphqlrc
│ │ │ │ │ ├── graphql.config.toml
│ │ │ │ │ ├── graphql.config.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── graphql-codegen-graphql-config2/
│ │ │ │ │ └── package.json
│ │ │ │ ├── hardhat/
│ │ │ │ │ ├── hardhat.config.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── husky-lint-staged/
│ │ │ │ │ └── package.json
│ │ │ │ ├── husky-v8/
│ │ │ │ │ ├── .husky/
│ │ │ │ │ │ ├── post-checkout
│ │ │ │ │ │ ├── pre-commit
│ │ │ │ │ │ ├── pre-push
│ │ │ │ │ │ └── pre-rebase
│ │ │ │ │ └── package.json
│ │ │ │ ├── husky-v9/
│ │ │ │ │ ├── .husky/
│ │ │ │ │ │ ├── post-checkout
│ │ │ │ │ │ ├── pre-commit
│ │ │ │ │ │ ├── pre-push
│ │ │ │ │ │ └── pre-rebase
│ │ │ │ │ └── package.json
│ │ │ │ ├── husky-v9-1/
│ │ │ │ │ ├── .husky/
│ │ │ │ │ │ └── pre-commit
│ │ │ │ │ └── package.json
│ │ │ │ ├── i18next-parser/
│ │ │ │ │ ├── custom.config.js
│ │ │ │ │ ├── i18next-parser.config.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── jest/
│ │ │ │ │ ├── customSuiteProperties.cjs
│ │ │ │ │ ├── jest.config.js
│ │ │ │ │ ├── jest.config.shared.js
│ │ │ │ │ ├── jest.setup.js
│ │ │ │ │ ├── jest.transform.js
│ │ │ │ │ ├── local-preset/
│ │ │ │ │ │ └── jest-preset.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── snapshotResolver.js
│ │ │ │ ├── jest2/
│ │ │ │ │ ├── jest.config.js
│ │ │ │ │ ├── jest.environment.js
│ │ │ │ │ ├── knip.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── project1/
│ │ │ │ │ ├── customProperties.cjs
│ │ │ │ │ ├── jest.config.js
│ │ │ │ │ └── setupFiles/
│ │ │ │ │ └── setup.js
│ │ │ │ ├── jest3/
│ │ │ │ │ ├── __mocks__/
│ │ │ │ │ │ └── used.js
│ │ │ │ │ ├── index.spec.ts
│ │ │ │ │ ├── jest.config.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── karma/
│ │ │ │ │ ├── karma.conf.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── karma2/
│ │ │ │ │ ├── karma.conf.js
│ │ │ │ │ ├── out-of-base-path/
│ │ │ │ │ │ └── example.spec.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ ├── another-example.spec.js
│ │ │ │ │ ├── example.spec.js
│ │ │ │ │ └── excluded.spec.js
│ │ │ │ ├── karma3/
│ │ │ │ │ ├── karma-plugin.js
│ │ │ │ │ ├── karma.conf.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── knex/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── knexfile.js
│ │ │ │ │ ├── migrations/
│ │ │ │ │ │ └── 20231201_create_users_table.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── seeds/
│ │ │ │ │ └── 01_users.js
│ │ │ │ ├── ladle/
│ │ │ │ │ ├── .ladle/
│ │ │ │ │ │ ├── components.tsx
│ │ │ │ │ │ ├── config.mjs
│ │ │ │ │ │ └── vite.config.ts
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── basic.stories.tsx
│ │ │ │ │ │ └── control.stories.tsx
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── lefthook/
│ │ │ │ │ ├── example.mjs
│ │ │ │ │ ├── lefthook.yml
│ │ │ │ │ └── package.json
│ │ │ │ ├── lefthook-ci/
│ │ │ │ │ ├── lefthook.yml
│ │ │ │ │ └── package.json
│ │ │ │ ├── lefthook-v1/
│ │ │ │ │ ├── _git/
│ │ │ │ │ │ ├── HEAD
│ │ │ │ │ │ ├── config
│ │ │ │ │ │ ├── hooks/
│ │ │ │ │ │ │ └── prepare-commit-msg
│ │ │ │ │ │ ├── objects/
│ │ │ │ │ │ │ └── .gitkeep
│ │ │ │ │ │ └── refs/
│ │ │ │ │ │ └── heads/
│ │ │ │ │ │ └── .gitkeep
│ │ │ │ │ ├── lefthook.yml
│ │ │ │ │ └── package.json
│ │ │ │ ├── lint-staged/
│ │ │ │ │ ├── .lintstagedrc.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── lint-staged-comment/
│ │ │ │ │ ├── .lintstagedrc.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── linthtml/
│ │ │ │ │ ├── .linthtmlrc.js
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── package.json
│ │ │ │ ├── lockfile-lint/
│ │ │ │ │ ├── .lockfile-lintrc.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── lost-pixel/
│ │ │ │ │ ├── lostpixel.config.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── markdownlint/
│ │ │ │ │ ├── .markdownlint.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── mdx/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── mdxlint/
│ │ │ │ │ ├── .mdxlintrc.mjs
│ │ │ │ │ └── package.json
│ │ │ │ ├── metro/
│ │ │ │ │ ├── custom-metro-transformer.js
│ │ │ │ │ ├── metro.config.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ └── app/
│ │ │ │ │ └── index.js
│ │ │ │ ├── metro-defaults/
│ │ │ │ │ ├── metro.config.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ └── app/
│ │ │ │ │ └── index.js
│ │ │ │ ├── metro-react-native/
│ │ │ │ │ ├── metro.config.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ └── app/
│ │ │ │ │ └── index.js
│ │ │ │ ├── mocha/
│ │ │ │ │ ├── .mocharc.json
│ │ │ │ │ ├── .mocharc.yml
│ │ │ │ │ ├── example.test.ts
│ │ │ │ │ ├── hooks.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── moonrepo/
│ │ │ │ │ ├── .moon/
│ │ │ │ │ │ ├── tasks/
│ │ │ │ │ │ │ └── typescript.yml
│ │ │ │ │ │ └── tasks.yml
│ │ │ │ │ ├── apps/
│ │ │ │ │ │ └── a/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── libs/
│ │ │ │ │ │ └── b/
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── server/
│ │ │ │ │ │ └── server.ts
│ │ │ │ │ ├── moon.yml
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── pnpm-workspace.yaml
│ │ │ │ │ ├── tools/
│ │ │ │ │ │ ├── build.ts
│ │ │ │ │ │ └── linters/
│ │ │ │ │ │ └── lint-readme.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── msw/
│ │ │ │ │ ├── bob/
│ │ │ │ │ │ └── mockServiceWorker.js
│ │ │ │ │ ├── mocks/
│ │ │ │ │ │ ├── browser.ts
│ │ │ │ │ │ ├── handlers.ts
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── server.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── nano-staged/
│ │ │ │ │ ├── .nano-staged.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── nest/
│ │ │ │ │ ├── knip.json
│ │ │ │ │ ├── nest-cli.json
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── app.controller.spec.ts
│ │ │ │ │ │ ├── app.controller.ts
│ │ │ │ │ │ ├── app.module.ts
│ │ │ │ │ │ ├── app.service.ts
│ │ │ │ │ │ └── main.ts
│ │ │ │ │ └── test/
│ │ │ │ │ ├── app.e2e-spec.ts
│ │ │ │ │ └── jest-e2e.json
│ │ │ │ ├── netlify/
│ │ │ │ │ ├── netlify.toml
│ │ │ │ │ └── package.json
│ │ │ │ ├── next/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── api/
│ │ │ │ │ │ │ └── auth/
│ │ │ │ │ │ │ ├── route.ts
│ │ │ │ │ │ │ └── util.ts
│ │ │ │ │ │ ├── home/
│ │ │ │ │ │ │ ├── page.tsx
│ │ │ │ │ │ │ └── sitemap.ts
│ │ │ │ │ │ ├── layout.tsx
│ │ │ │ │ │ ├── sitemap.ts
│ │ │ │ │ │ └── unused.ts
│ │ │ │ │ ├── instrumentation.ts
│ │ │ │ │ ├── middleware.ts
│ │ │ │ │ ├── next.config.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── pages/
│ │ │ │ │ ├── [[...route]].tsx
│ │ │ │ │ ├── home.tsx
│ │ │ │ │ └── unused.jsx
│ │ │ │ ├── next-intl/
│ │ │ │ │ ├── i18n/
│ │ │ │ │ │ └── request.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── next-mdx/
│ │ │ │ │ ├── mdx-components.tsx
│ │ │ │ │ ├── next.config.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── next-middleware/
│ │ │ │ │ ├── next.config.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── page.tsx
│ │ │ │ │ │ └── middleware.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── next-page-extensions/
│ │ │ │ │ ├── next.config.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ ├── instrumentation.page.ts
│ │ │ │ │ ├── middleware.page.ts
│ │ │ │ │ └── unused.ts
│ │ │ │ ├── nitro/
│ │ │ │ │ ├── .nitro/
│ │ │ │ │ │ └── types/
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ ├── nitro.config.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── server/
│ │ │ │ │ │ ├── routes/
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ └── utils/
│ │ │ │ │ │ └── fn.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── node/
│ │ │ │ │ └── package.json
│ │ │ │ ├── node-modules-inspector/
│ │ │ │ │ ├── .nmrc.js
│ │ │ │ │ ├── node-modules-inspector.config.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── node-test-runner/
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── index.test.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── nodemon/
│ │ │ │ │ └── package.json
│ │ │ │ ├── npm-package-json-lint/
│ │ │ │ │ ├── .npmpackagejsonlintrc.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── nuxt/
│ │ │ │ │ ├── .gitignore
│ │ │ │ │ ├── app.tsx
│ │ │ │ │ ├── app.vue
│ │ │ │ │ ├── nuxt.config.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── server/
│ │ │ │ │ │ ├── api/
│ │ │ │ │ │ │ └── health.get.ts
│ │ │ │ │ │ └── utils/
│ │ │ │ │ │ └── db.ts
│ │ │ │ │ ├── shared/
│ │ │ │ │ │ ├── types/
│ │ │ │ │ │ │ └── api.ts
│ │ │ │ │ │ └── utils/
│ │ │ │ │ │ └── capitalize.ts
│ │ │ │ │ ├── tsconfig.json
│ │ │ │ │ └── utils/
│ │ │ │ │ └── fn.ts
│ │ │ │ ├── nuxt-auto-import/
│ │ │ │ │ ├── .gitignore
│ │ │ │ │ ├── app.vue
│ │ │ │ │ ├── components/
│ │ │ │ │ │ ├── AppHeader.vue
│ │ │ │ │ │ └── StatusBadge.vue
│ │ │ │ │ ├── composables/
│ │ │ │ │ │ ├── useCounter.ts
│ │ │ │ │ │ └── useTheme.ts
│ │ │ │ │ ├── nuxt.config.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── tsconfig.json
│ │ │ │ │ └── utils/
│ │ │ │ │ └── format.ts
│ │ │ │ ├── nuxt-auto-import-disabled/
│ │ │ │ │ ├── .gitignore
│ │ │ │ │ ├── app.vue
│ │ │ │ │ ├── components/
│ │ │ │ │ │ ├── AppHeader.vue
│ │ │ │ │ │ └── StatusBadge.vue
│ │ │ │ │ ├── composables/
│ │ │ │ │ │ ├── useCounter.ts
│ │ │ │ │ │ └── useTheme.ts
│ │ │ │ │ ├── nuxt.config.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── tsconfig.json
│ │ │ │ │ └── utils/
│ │ │ │ │ └── format.ts
│ │ │ │ ├── nuxt-config/
│ │ │ │ │ ├── .gitignore
│ │ │ │ │ ├── app.vue
│ │ │ │ │ ├── components/
│ │ │ │ │ │ └── Button.vue
│ │ │ │ │ ├── custom-utils/
│ │ │ │ │ │ └── logger.ts
│ │ │ │ │ ├── local-module/
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── my-plugins/
│ │ │ │ │ │ └── auth.ts
│ │ │ │ │ ├── nuxt.config.ts
│ │ │ │ │ ├── other-components/
│ │ │ │ │ │ └── Card.vue
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── some-layer/
│ │ │ │ │ │ └── nuxt.config.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── nx/
│ │ │ │ │ ├── apps/
│ │ │ │ │ │ ├── a/
│ │ │ │ │ │ │ ├── project.json
│ │ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ │ └── b/
│ │ │ │ │ │ ├── project.json
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ ├── knip.json
│ │ │ │ │ ├── libs/
│ │ │ │ │ │ └── b/
│ │ │ │ │ │ ├── .eslintrc.json
│ │ │ │ │ │ ├── jest.config.ts
│ │ │ │ │ │ ├── project.json
│ │ │ │ │ │ ├── tsconfig.build.json
│ │ │ │ │ │ ├── tsconfig.lib.json
│ │ │ │ │ │ ├── vitest.config.ts
│ │ │ │ │ │ └── webpack.config.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── tsconfig.base.json
│ │ │ │ ├── nx-crystal/
│ │ │ │ │ ├── nx.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── nyc/
│ │ │ │ │ ├── .nycrc.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── oclif/
│ │ │ │ │ └── package.json
│ │ │ │ ├── openapi-ts/
│ │ │ │ │ ├── openapi-ts.config.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── oxfmt/
│ │ │ │ │ ├── .oxfmtrc-1.jsonc
│ │ │ │ │ ├── .oxfmtrc.json
│ │ │ │ │ ├── .oxfmtrc.jsonc
│ │ │ │ │ └── package.json
│ │ │ │ ├── oxlint/
│ │ │ │ │ ├── .oxlintrc-0.json
│ │ │ │ │ ├── .oxlintrc-3.json
│ │ │ │ │ ├── .oxlintrc-4.json
│ │ │ │ │ ├── oxlint-5.config.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── parcel/
│ │ │ │ │ ├── .parcelrc
│ │ │ │ │ └── package.json
│ │ │ │ ├── payload/
│ │ │ │ │ ├── migrations/
│ │ │ │ │ │ └── 20260218.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── payload-types.ts
│ │ │ │ │ ├── payload.config.ts
│ │ │ │ │ └── src/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── (payload)/
│ │ │ │ │ │ └── importMap.js
│ │ │ │ │ └── components/
│ │ │ │ │ └── ImportMapComponent.tsx
│ │ │ │ ├── playwright/
│ │ │ │ │ ├── custom-reporter.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── playwright.config.ts
│ │ │ │ │ └── test/
│ │ │ │ │ └── some.spec.ts
│ │ │ │ ├── playwright-ct/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── playwright/
│ │ │ │ │ │ ├── common.css
│ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── playwright-ct.config.ts
│ │ │ │ │ └── test/
│ │ │ │ │ └── some.spec.ts
│ │ │ │ ├── playwright-ct2/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── playwright-ct.config.ts
│ │ │ │ │ ├── src/
│ │ │ │ │ │ └── unused.spec.ts
│ │ │ │ │ └── tests/
│ │ │ │ │ └── component/
│ │ │ │ │ └── some.spec.ts
│ │ │ │ ├── playwright2/
│ │ │ │ │ ├── integration/
│ │ │ │ │ │ └── some-test.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── playwright.config.ts
│ │ │ │ ├── plop/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── plopfile.js
│ │ │ │ │ └── template.hbs
│ │ │ │ ├── pm2/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── pm2.config.json
│ │ │ │ │ └── src/
│ │ │ │ │ ├── another.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── unused.js
│ │ │ │ ├── pm2-ecosystem/
│ │ │ │ │ ├── ecosystem.config.json
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ ├── another.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── unused.js
│ │ │ │ ├── pnpm/
│ │ │ │ │ ├── .pnpmfile.cjs
│ │ │ │ │ └── package.json
│ │ │ │ ├── pnpm2/
│ │ │ │ │ ├── .pnpmfile.cjs
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── pnpm-workspace.yaml
│ │ │ │ ├── postcss/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── postcss.config.js
│ │ │ │ ├── postcss-cjs/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── postcss.config.cjs
│ │ │ │ ├── postcss-next/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── postcss.config.json
│ │ │ │ ├── postcss-tailwindcss/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── postcss.config.js
│ │ │ │ ├── postcss-tailwindcss2/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── postcss.config.mjs
│ │ │ │ ├── preconstruct/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── other.js
│ │ │ │ ├── prettier/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── prettier.config.js
│ │ │ │ ├── prettier-json5/
│ │ │ │ │ ├── .prettierrc.json5
│ │ │ │ │ └── package.json
│ │ │ │ ├── prettier-reexport/
│ │ │ │ │ ├── knip.json
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── prettier.config.js
│ │ │ │ ├── prisma/
│ │ │ │ │ ├── .config/
│ │ │ │ │ │ └── prisma.ts
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── prisma.custom-config.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── prisma/
│ │ │ │ │ │ ├── schema-dot-config.prisma
│ │ │ │ │ │ ├── schema-package-json.prisma
│ │ │ │ │ │ ├── schema-root-config.prisma
│ │ │ │ │ │ ├── schema-script.prisma
│ │ │ │ │ │ ├── seed-dot-config.ts
│ │ │ │ │ │ ├── seed-package-json.ts
│ │ │ │ │ │ └── seed-root-config.ts
│ │ │ │ │ ├── prisma-multi-schema/
│ │ │ │ │ │ ├── model/
│ │ │ │ │ │ │ ├── post.prisma
│ │ │ │ │ │ │ └── user.prisma
│ │ │ │ │ │ └── schema.prisma
│ │ │ │ │ └── prisma.config.ts
│ │ │ │ ├── prisma2/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── prisma/
│ │ │ │ │ │ └── schema.prisma
│ │ │ │ │ └── schema.prisma
│ │ │ │ ├── qwik/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── components/
│ │ │ │ │ │ │ └── router-head.tsx
│ │ │ │ │ │ ├── entry.dev.tsx
│ │ │ │ │ │ ├── entry.preview.tsx
│ │ │ │ │ │ ├── entry.ssr.tsx
│ │ │ │ │ │ ├── root.tsx
│ │ │ │ │ │ └── routes/
│ │ │ │ │ │ ├── index.tsx
│ │ │ │ │ │ └── layout.tsx
│ │ │ │ │ └── vite.config.ts
│ │ │ │ ├── qwik-custom-dirs/
│ │ │ │ │ ├── docs/
│ │ │ │ │ │ ├── components/
│ │ │ │ │ │ │ └── mdx-note.tsx
│ │ │ │ │ │ ├── entry.dev.tsx
│ │ │ │ │ │ ├── entry.preview.tsx
│ │ │ │ │ │ ├── entry.ssr.tsx
│ │ │ │ │ │ ├── extra-pages/
│ │ │ │ │ │ │ └── index.tsx
│ │ │ │ │ │ ├── pages/
│ │ │ │ │ │ │ ├── guide.mdx
│ │ │ │ │ │ │ └── index.tsx
│ │ │ │ │ │ └── root.tsx
│ │ │ │ │ ├── knip.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── vite.config.ts
│ │ │ │ ├── raycast/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ ├── search-bookmarks.tsx
│ │ │ │ │ ├── shared/
│ │ │ │ │ │ └── load-bookmarks.ts
│ │ │ │ │ ├── tools/
│ │ │ │ │ │ └── organize-tabs.ts
│ │ │ │ │ └── unused.ts
│ │ │ │ ├── react-cosmos/
│ │ │ │ │ ├── __fixtures__/
│ │ │ │ │ │ └── any.mdx
│ │ │ │ │ ├── cosmos.config.json
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ ├── cosmos.decorator.tsx
│ │ │ │ │ └── my-cosmos-plugin.ts
│ │ │ │ ├── react-native/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── react-native.config.js
│ │ │ │ ├── react-router/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── root.tsx
│ │ │ │ │ │ ├── routes/
│ │ │ │ │ │ │ ├── $/
│ │ │ │ │ │ │ │ └── route.tsx
│ │ │ │ │ │ │ ├── $.tsx
│ │ │ │ │ │ │ ├── another-route.tsx
│ │ │ │ │ │ │ ├── home.tsx
│ │ │ │ │ │ │ ├── layout.tsx
│ │ │ │ │ │ │ ├── main+/
│ │ │ │ │ │ │ │ └── nested+/
│ │ │ │ │ │ │ │ └── _index.tsx
│ │ │ │ │ │ │ └── route.(with).$special[.chars].tsx
│ │ │ │ │ │ └── routes.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── react-router.config.ts
│ │ │ │ ├── react-router-with-server-entry/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── entry.server.tsx
│ │ │ │ │ │ ├── root.tsx
│ │ │ │ │ │ ├── routes/
│ │ │ │ │ │ │ └── home.tsx
│ │ │ │ │ │ └── routes.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── react-router.config.ts
│ │ │ │ ├── relay/
│ │ │ │ │ ├── __generated__/
│ │ │ │ │ │ └── artifact.graphql.ts
│ │ │ │ │ ├── myrelay.config.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── unused.ts
│ │ │ │ │ ├── used.ts
│ │ │ │ │ └── vite.config.ts
│ │ │ │ ├── relay2/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── relay.config.js
│ │ │ │ │ ├── src/
│ │ │ │ │ │ └── __generated__/
│ │ │ │ │ │ └── artifact.graphql.ts
│ │ │ │ │ ├── unused.ts
│ │ │ │ │ ├── used.ts
│ │ │ │ │ └── vite.config.ts
│ │ │ │ ├── release-it/
│ │ │ │ │ ├── .release-it.json
│ │ │ │ │ ├── bin/
│ │ │ │ │ │ └── release-notes.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── remark/
│ │ │ │ │ └── package.json
│ │ │ │ ├── remix/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── entry.client.tsx
│ │ │ │ │ │ ├── entry.server.tsx
│ │ │ │ │ │ ├── root.tsx
│ │ │ │ │ │ ├── routes/
│ │ │ │ │ │ │ └── index.tsx
│ │ │ │ │ │ └── utils.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── remix.config.js
│ │ │ │ │ ├── remix.init/
│ │ │ │ │ │ └── index.js
│ │ │ │ │ ├── server.js
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── rollup/
│ │ │ │ │ ├── do-not-bundle.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── rollup.config.js
│ │ │ │ ├── rsbuild/
│ │ │ │ │ ├── entry-1.ts
│ │ │ │ │ ├── entry-2.ts
│ │ │ │ │ ├── entry-3.ts
│ │ │ │ │ ├── entry-4.ts
│ │ │ │ │ ├── entry-5.ts
│ │ │ │ │ ├── entry-6.ts
│ │ │ │ │ ├── entry-7.ts
│ │ │ │ │ ├── entry-8.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── pre-entry-1.ts
│ │ │ │ │ ├── pre-entry-2.ts
│ │ │ │ │ ├── pre-entry-3.ts
│ │ │ │ │ └── rsbuild.config.ts
│ │ │ │ ├── rslib/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── rslib.config.ts
│ │ │ │ ├── rspack/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── rspack.config.js
│ │ │ │ │ ├── src/
│ │ │ │ │ │ └── entry.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── rstest/
│ │ │ │ │ ├── included.test.ts
│ │ │ │ │ ├── not-included.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── rstest.config.ts
│ │ │ │ ├── rstest2/
│ │ │ │ │ ├── __mocks__/
│ │ │ │ │ │ └── lodash.ts
│ │ │ │ │ ├── excluded.test.ts
│ │ │ │ │ ├── included.test.ts
│ │ │ │ │ ├── not-included.spec.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── rstest.config.ts
│ │ │ │ ├── sanity/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── sanity.blueprint.ts
│ │ │ │ │ ├── sanity.cli.ts
│ │ │ │ │ ├── sanity.config.ts
│ │ │ │ │ └── schema.ts
│ │ │ │ ├── semantic-release/
│ │ │ │ │ ├── .releaserc
│ │ │ │ │ └── package.json
│ │ │ │ ├── sentry/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── sentry.client.config.ts
│ │ │ │ │ ├── sentry.edge.config.ts
│ │ │ │ │ └── sentry.server.config.ts
│ │ │ │ ├── simple-git-hooks/
│ │ │ │ │ └── package.json
│ │ │ │ ├── size-limit/
│ │ │ │ │ ├── .size-limit.cjs
│ │ │ │ │ └── package.json
│ │ │ │ ├── sst/
│ │ │ │ │ ├── handlers/
│ │ │ │ │ │ ├── auth.ts
│ │ │ │ │ │ ├── other-auth.ts
│ │ │ │ │ │ └── some-route.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── sst.config.ts
│ │ │ │ │ └── stacks/
│ │ │ │ │ ├── AuthHandlerStack.ts
│ │ │ │ │ └── AuthStack.ts
│ │ │ │ ├── sst2/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── route.ts
│ │ │ │ │ └── sst.config.ts
│ │ │ │ ├── starlight/
│ │ │ │ │ ├── astro.config.mjs
│ │ │ │ │ ├── components/
│ │ │ │ │ │ ├── Footer.astro
│ │ │ │ │ │ └── Head.astro
│ │ │ │ │ └── package.json
│ │ │ │ ├── storybook/
│ │ │ │ │ ├── .storybook/
│ │ │ │ │ │ ├── main.js
│ │ │ │ │ │ ├── preview.js
│ │ │ │ │ │ └── vitest.setup.ts
│ │ │ │ │ ├── addon/
│ │ │ │ │ │ └── register.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── storybook2/
│ │ │ │ │ ├── .rnstorybook/
│ │ │ │ │ │ ├── index.tsx
│ │ │ │ │ │ ├── main.ts
│ │ │ │ │ │ ├── preview.tsx
│ │ │ │ │ │ └── storybook.requires.ts
│ │ │ │ │ ├── components/
│ │ │ │ │ │ └── Button/
│ │ │ │ │ │ ├── Button.stories.tsx
│ │ │ │ │ │ └── Button.tsx
│ │ │ │ │ └── package.json
│ │ │ │ ├── stryker/
│ │ │ │ │ ├── .stryker.conf.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── stryker.conf.cjs
│ │ │ │ │ ├── stryker.conf.json
│ │ │ │ │ └── stryker.conf.mjs
│ │ │ │ ├── stylelint/
│ │ │ │ │ ├── .stylelintrc
│ │ │ │ │ └── package.json
│ │ │ │ ├── stylelint2/
│ │ │ │ │ ├── .stylelintrc.cjs
│ │ │ │ │ ├── .stylelintrc.mjs
│ │ │ │ │ ├── myCustomPlugin.js
│ │ │ │ │ ├── myExtendableConfig.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── stylelint.config.js
│ │ │ │ ├── stylelint3/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── stylelint.config.mjs
│ │ │ │ ├── svelte/
│ │ │ │ │ ├── .svelte-kit/
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ ├── knip.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── app.d.ts
│ │ │ │ │ │ ├── app.html
│ │ │ │ │ │ ├── hooks.client.ts
│ │ │ │ │ │ ├── hooks.server.ts
│ │ │ │ │ │ ├── instrumentation.server.ts
│ │ │ │ │ │ ├── lib/
│ │ │ │ │ │ │ ├── component.svelte
│ │ │ │ │ │ │ └── store.svelte.ts
│ │ │ │ │ │ ├── params/
│ │ │ │ │ │ │ └── lang.ts
│ │ │ │ │ │ ├── routes/
│ │ │ │ │ │ │ ├── +layout.svelte
│ │ │ │ │ │ │ ├── +page.svelte
│ │ │ │ │ │ │ ├── +page.ts
│ │ │ │ │ │ │ ├── Counter.svelte
│ │ │ │ │ │ │ ├── Header.svelte
│ │ │ │ │ │ │ ├── login/
│ │ │ │ │ │ │ │ └── +server.ts
│ │ │ │ │ │ │ └── styles.css
│ │ │ │ │ │ └── service-worker.ts
│ │ │ │ │ ├── svelte.config.js
│ │ │ │ │ ├── tsconfig.json
│ │ │ │ │ └── vite.config.ts
│ │ │ │ ├── sveltekit/
│ │ │ │ │ ├── .svelte-kit/
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ ├── knip.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── app.d.ts
│ │ │ │ │ │ ├── app.html
│ │ │ │ │ │ ├── hooks.client.ts
│ │ │ │ │ │ ├── hooks.server.ts
│ │ │ │ │ │ ├── instrumentation.server.ts
│ │ │ │ │ │ ├── lib/
│ │ │ │ │ │ │ ├── component.svelte
│ │ │ │ │ │ │ └── store.svelte.ts
│ │ │ │ │ │ ├── params/
│ │ │ │ │ │ │ └── lang.ts
│ │ │ │ │ │ ├── routes/
│ │ │ │ │ │ │ ├── +layout.svelte
│ │ │ │ │ │ │ ├── +page.svelte
│ │ │ │ │ │ │ ├── +page.ts
│ │ │ │ │ │ │ ├── Counter.svelte
│ │ │ │ │ │ │ ├── Header.svelte
│ │ │ │ │ │ │ ├── login/
│ │ │ │ │ │ │ │ └── +server.ts
│ │ │ │ │ │ │ └── styles.css
│ │ │ │ │ │ └── service-worker.ts
│ │ │ │ │ ├── svelte.config.js
│ │ │ │ │ ├── tsconfig.json
│ │ │ │ │ └── vite.config.ts
│ │ │ │ ├── sveltekit2/
│ │ │ │ │ ├── knip.ts
│ │ │ │ │ ├── lib/
│ │ │ │ │ │ └── helper.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ └── routes/
│ │ │ │ │ │ └── +page.svelte
│ │ │ │ │ └── svelte.config.js
│ │ │ │ ├── svgo/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── svgo.config.js
│ │ │ │ ├── svgr/
│ │ │ │ │ ├── .svgrrc
│ │ │ │ │ └── package.json
│ │ │ │ ├── swc/
│ │ │ │ │ ├── .swcrc
│ │ │ │ │ └── package.json
│ │ │ │ ├── syncpack/
│ │ │ │ │ └── package.json
│ │ │ │ ├── tailwind/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── tailwind.config.js
│ │ │ │ ├── tailwind2/
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── knip.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── styles.css
│ │ │ │ ├── tanstack-router/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── routeTree.gen.ts
│ │ │ │ │ │ └── routes/
│ │ │ │ │ │ ├── __root.tsx
│ │ │ │ │ │ ├── index.tsx
│ │ │ │ │ │ └── posts/
│ │ │ │ │ │ └── $postId.tsx
│ │ │ │ │ ├── tsconfig.json
│ │ │ │ │ └── tsr.config.json
│ │ │ │ ├── taskfile/
│ │ │ │ │ ├── Taskfile.yml
│ │ │ │ │ ├── check.ts
│ │ │ │ │ ├── nested/
│ │ │ │ │ │ └── Taskfile.yml
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── scripts/
│ │ │ │ │ │ ├── build.js
│ │ │ │ │ │ ├── deep.js
│ │ │ │ │ │ ├── deploy.js
│ │ │ │ │ │ ├── dev.js
│ │ │ │ │ │ ├── nested.js
│ │ │ │ │ │ └── shared.js
│ │ │ │ │ └── shared/
│ │ │ │ │ ├── Taskfile.yml
│ │ │ │ │ └── deep/
│ │ │ │ │ └── Taskfile.yml
│ │ │ │ ├── taskfile2/
│ │ │ │ │ ├── custom-taskfile.yml
│ │ │ │ │ ├── knip.json
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── scripts/
│ │ │ │ │ │ ├── custom-build.js
│ │ │ │ │ │ ├── custom-test.js
│ │ │ │ │ │ └── subtask.js
│ │ │ │ │ └── tasks/
│ │ │ │ │ └── subtask.yml
│ │ │ │ ├── travis/
│ │ │ │ │ ├── .travis.yml
│ │ │ │ │ └── package.json
│ │ │ │ ├── tsdown/
│ │ │ │ │ ├── entry-1.ts
│ │ │ │ │ ├── entry-2.ts
│ │ │ │ │ ├── entry-3.ts
│ │ │ │ │ ├── entry-4.ts
│ │ │ │ │ ├── entry-5.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── tsdown.config-3.ts
│ │ │ │ │ ├── tsdown.config-4.ts
│ │ │ │ │ ├── tsdown.config.json
│ │ │ │ │ └── tsdown.config.ts
│ │ │ │ ├── tsgo/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── tsup/
│ │ │ │ │ ├── entry-1.ts
│ │ │ │ │ ├── entry-2.ts
│ │ │ │ │ ├── entry-3.ts
│ │ │ │ │ ├── entry-4.ts
│ │ │ │ │ ├── entry-5.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── tsup.config-3.ts
│ │ │ │ │ ├── tsup.config-4.ts
│ │ │ │ │ ├── tsup.config.json
│ │ │ │ │ └── tsup.config.ts
│ │ │ │ ├── tsx/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── test/
│ │ │ │ │ ├── a.ts
│ │ │ │ │ └── dir/
│ │ │ │ │ └── b.ts
│ │ │ │ ├── typedoc/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── tsconfig.json
│ │ │ │ │ └── typedoc.json
│ │ │ │ ├── typescript/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── tsconfig.app.json
│ │ │ │ │ ├── tsconfig.base.json
│ │ │ │ │ ├── tsconfig.ext.json
│ │ │ │ │ ├── tsconfig.json
│ │ │ │ │ ├── tsconfig.jsx-import-source-preact.json
│ │ │ │ │ ├── tsconfig.jsx-import-source-react.json
│ │ │ │ │ ├── tsconfig.jsx-preserve.json
│ │ │ │ │ └── tsconfig.jsx.json
│ │ │ │ ├── typescript2/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── packages/
│ │ │ │ │ │ ├── lib/
│ │ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ │ ├── src/
│ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── unbuild/
│ │ │ │ │ ├── build.config.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── unocss/
│ │ │ │ │ ├── main.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── unocss.config.ts
│ │ │ │ ├── vercel-og/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── api/
│ │ │ │ │ │ └── og/
│ │ │ │ │ │ └── route.jsx
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ └── pages/
│ │ │ │ │ └── api/
│ │ │ │ │ └── og.tsx
│ │ │ │ ├── vike/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── pages/
│ │ │ │ │ │ ├── _error/
│ │ │ │ │ │ │ └── +Page.tsx
│ │ │ │ │ │ ├── about/
│ │ │ │ │ │ │ ├── +Page.tsx
│ │ │ │ │ │ │ └── code.css
│ │ │ │ │ │ ├── index/
│ │ │ │ │ │ │ ├── +Page.tsx
│ │ │ │ │ │ │ └── Counter.tsx
│ │ │ │ │ │ └── star-wars/
│ │ │ │ │ │ ├── @id/
│ │ │ │ │ │ │ ├── +Page.tsx
│ │ │ │ │ │ │ └── +data.ts
│ │ │ │ │ │ ├── index/
│ │ │ │ │ │ │ ├── +Page.tsx
│ │ │ │ │ │ │ └── +data.ts
│ │ │ │ │ │ └── types.ts
│ │ │ │ │ ├── renderer/
│ │ │ │ │ │ ├── +config.ts
│ │ │ │ │ │ ├── +onPageTransitionEnd.ts
│ │ │ │ │ │ ├── +onPageTransitionStart.ts
│ │ │ │ │ │ ├── +onRenderClient.tsx
│ │ │ │ │ │ ├── +onRenderHtml.tsx
│ │ │ │ │ │ ├── Layout.css
│ │ │ │ │ │ ├── Layout.tsx
│ │ │ │ │ │ ├── Link.tsx
│ │ │ │ │ │ ├── getPageTitle.ts
│ │ │ │ │ │ ├── useData.ts
│ │ │ │ │ │ └── usePageContext.tsx
│ │ │ │ │ ├── server/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── root.ts
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ └── vite.config.ts
│ │ │ │ ├── vite/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ └── vite-env.d.ts
│ │ │ │ │ └── vite.config.ts
│ │ │ │ ├── vite2/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── mock.desktop.js
│ │ │ │ │ │ └── mock.desktop.ts
│ │ │ │ │ └── vite.config.ts
│ │ │ │ ├── vite3/
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ ├── App.tsx
│ │ │ │ │ └── unused.ts
│ │ │ │ ├── vite4/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── component.ts
│ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ └── main.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── vite.config.ts
│ │ │ │ ├── vitepress/
│ │ │ │ │ ├── .vitepress/
│ │ │ │ │ │ ├── config.mts
│ │ │ │ │ │ └── theme/
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── index.md
│ │ │ │ │ └── package.json
│ │ │ │ ├── vitest/
│ │ │ │ │ ├── __mocks__/
│ │ │ │ │ │ └── mockedModule.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── setupTests.ts
│ │ │ │ │ │ └── vite-env.d.ts
│ │ │ │ │ ├── test/
│ │ │ │ │ │ ├── basic.bench.ts
│ │ │ │ │ │ ├── basic.spec-d.ts
│ │ │ │ │ │ ├── basic.spec.ts
│ │ │ │ │ │ └── basic.test-d.ts
│ │ │ │ │ ├── vite.config.ts
│ │ │ │ │ ├── vitest-default-coverage.config.ts
│ │ │ │ │ ├── vitest.config.ts
│ │ │ │ │ └── vitest.workspace.ts
│ │ │ │ ├── vitest-npm-script/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── vitest.config.ts
│ │ │ │ ├── vitest2/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── basic.spec.ts
│ │ │ │ │ │ └── unit.vitest.ts
│ │ │ │ │ └── vitest.config.ts
│ │ │ │ ├── vitest3/
│ │ │ │ │ ├── knip.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── basic.test.ts
│ │ │ │ │ │ └── unit.test.tsx
│ │ │ │ │ ├── vite.config.ts
│ │ │ │ │ └── vitest.config.ts
│ │ │ │ ├── vitest4/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ └── unused.test.ts
│ │ │ │ │ ├── tests/
│ │ │ │ │ │ ├── adder.test.ts
│ │ │ │ │ │ └── setup.ts
│ │ │ │ │ └── vitest.config.ts
│ │ │ │ ├── vitest5/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── index.test.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ └── vite.config.ts
│ │ │ │ ├── vitest6/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── fiep.ts
│ │ │ │ │ │ └── setup.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ └── unused.test.ts
│ │ │ │ │ └── tests/
│ │ │ │ │ └── adder.test.ts
│ │ │ │ ├── vitest7/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── index.test.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ └── vitest.config.ts
│ │ │ │ ├── vitest8/
│ │ │ │ │ ├── my-env.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── custom-env.test.ts
│ │ │ │ │ │ ├── index.test.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ └── vitest.config.ts
│ │ │ │ ├── vitest9/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── packages/
│ │ │ │ │ │ └── client/
│ │ │ │ │ │ ├── e2e/
│ │ │ │ │ │ │ ├── another-setup.js
│ │ │ │ │ │ │ └── client.test.ts
│ │ │ │ │ │ ├── e2e-setup.ts
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── vitest.config.e2e.ts
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── example.test.ts
│ │ │ │ │ │ └── unit.setup.ts
│ │ │ │ │ └── vitest.config.ts
│ │ │ │ ├── vue/
│ │ │ │ │ ├── index.vue
│ │ │ │ │ ├── knip.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── vue.config.js
│ │ │ │ ├── vue-webpack/
│ │ │ │ │ ├── child1.vue
│ │ │ │ │ ├── child2.vue
│ │ │ │ │ ├── child3.vue
│ │ │ │ │ ├── knip.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── parent.vue
│ │ │ │ │ ├── tsconfig.json
│ │ │ │ │ └── vue.config.js
│ │ │ │ ├── webdriver-io/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── wdio.conf.js
│ │ │ │ ├── webpack/
│ │ │ │ │ ├── merge.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── app-dep.ts
│ │ │ │ │ │ ├── app.tsx
│ │ │ │ │ │ ├── components/
│ │ │ │ │ │ │ ├── button.js
│ │ │ │ │ │ │ └── input.js
│ │ │ │ │ │ ├── entry.js
│ │ │ │ │ │ ├── module1.js
│ │ │ │ │ │ ├── my-custom-loader.js
│ │ │ │ │ │ ├── routes.ts
│ │ │ │ │ │ ├── subpath-entry.ts
│ │ │ │ │ │ ├── unused.ts
│ │ │ │ │ │ └── vendor.js
│ │ │ │ │ ├── webpack.babel.js
│ │ │ │ │ ├── webpack.common.js
│ │ │ │ │ ├── webpack.config.js
│ │ │ │ │ ├── webpack.dev.js
│ │ │ │ │ └── webpack.prod.js
│ │ │ │ ├── webpack-cli/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── webpack.config.js
│ │ │ │ ├── webpack-reexport/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ └── index.js
│ │ │ │ │ └── webpack.config.js
│ │ │ │ ├── webpack2/
│ │ │ │ │ ├── entry.dev.js
│ │ │ │ │ ├── entry.prod.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── webpack.dev.js
│ │ │ │ │ └── webpack.prod.js
│ │ │ │ ├── wireit/
│ │ │ │ │ ├── apps/
│ │ │ │ │ │ ├── example-configuration/
│ │ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ │ ├── rollup.config.json
│ │ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ │ └── missing/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── wrangler/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── worker-test-entry.ts
│ │ │ │ │ └── wrangler.toml
│ │ │ │ ├── xo/
│ │ │ │ │ ├── .xo-config.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── xo.config.cjs
│ │ │ │ ├── yarn/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── yarn.config.cjs
│ │ │ │ ├── yarn-berry/
│ │ │ │ │ ├── .gitgnore
│ │ │ │ │ ├── .yarn/
│ │ │ │ │ │ ├── plugins/
│ │ │ │ │ │ │ └── @yarnpkg/
│ │ │ │ │ │ │ ├── plugin-bar.cjs
│ │ │ │ │ │ │ └── plugin-foo.cjs
│ │ │ │ │ │ └── releases/
│ │ │ │ │ │ └── yarn-4.12.0.cjs
│ │ │ │ │ ├── .yarnrc.yml
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── yarn.config.cjs
│ │ │ │ └── yorkie/
│ │ │ │ └── package.json
│ │ │ ├── pragma/
│ │ │ │ ├── index.test.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── jsx.tsx
│ │ │ │ ├── local-env.js
│ │ │ │ ├── package.json
│ │ │ │ ├── reference-types.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── preprocessors/
│ │ │ │ ├── identity.ts
│ │ │ │ └── minimal.ts
│ │ │ ├── re-exports/
│ │ │ │ ├── 1-entry.ts
│ │ │ │ ├── 2-re-export-star.ts
│ │ │ │ ├── 3-re-export-named.ts
│ │ │ │ ├── 4-my-module.ts
│ │ │ │ └── package.json
│ │ │ ├── re-exports-aliased-ns/
│ │ │ │ ├── 1-first.ts
│ │ │ │ ├── 2-second.ts
│ │ │ │ ├── 3-barrel.ts
│ │ │ │ ├── 4-collect.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── re-exports-cjs/
│ │ │ │ ├── 1-entry.js
│ │ │ │ ├── 2-re-export-star.js
│ │ │ │ ├── 3-my-module.js
│ │ │ │ └── package.json
│ │ │ ├── re-exports-deep/
│ │ │ │ ├── 1-entry.ts
│ │ │ │ ├── 2-re-export-star.ts
│ │ │ │ ├── 3-re-export-named.ts
│ │ │ │ ├── 4-re-export-star.ts
│ │ │ │ ├── 5-re-export-named.ts
│ │ │ │ ├── 6-re-export-star.ts
│ │ │ │ ├── 7-my-module.ts
│ │ │ │ └── package.json
│ │ │ ├── re-exports-default-renamed/
│ │ │ │ ├── default-reexported/
│ │ │ │ │ ├── blueberry.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── pear.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── named-reexported/
│ │ │ │ │ ├── apricot.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── peach.ts
│ │ │ │ ├── not-reexported/
│ │ │ │ │ └── index.ts
│ │ │ │ └── package.json
│ │ │ ├── re-exports-default-renamed-deep/
│ │ │ │ ├── deep.ts
│ │ │ │ ├── default-reexported/
│ │ │ │ │ ├── blueberry.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── pear.ts
│ │ │ │ │ └── pineapple.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── intermediate.ts
│ │ │ │ ├── named-reexported/
│ │ │ │ │ ├── apricot.ts
│ │ │ │ │ ├── coconut.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── peach.ts
│ │ │ │ ├── not-reexported/
│ │ │ │ │ └── index.ts
│ │ │ │ └── package.json
│ │ │ ├── re-exports-destructure-spread/
│ │ │ │ ├── animal.ts
│ │ │ │ ├── animals.ts
│ │ │ │ ├── farm.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── re-exports-enum/
│ │ │ │ ├── index.ts
│ │ │ │ ├── mid.ts
│ │ │ │ ├── myEnum.ts
│ │ │ │ ├── myNextEnum.ts
│ │ │ │ └── package.json
│ │ │ ├── re-exports-enum-members-workspace/
│ │ │ │ ├── index.ts
│ │ │ │ ├── lib/
│ │ │ │ │ ├── enums.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── package.json
│ │ │ │ └── package.json
│ │ │ ├── re-exports-enum-unused/
│ │ │ │ ├── index.ts
│ │ │ │ ├── mid.ts
│ │ │ │ ├── myEnum.ts
│ │ │ │ └── package.json
│ │ │ ├── re-exports-export-declaration/
│ │ │ │ ├── package.json
│ │ │ │ └── src/
│ │ │ │ ├── exporter/
│ │ │ │ │ ├── exporterA.ts
│ │ │ │ │ ├── exporterB.ts
│ │ │ │ │ ├── exporterC.ts
│ │ │ │ │ ├── exporterD.ts
│ │ │ │ │ └── index.ts
│ │ │ │ └── index.ts
│ │ │ ├── re-exports-export-ns/
│ │ │ │ ├── 1-root.ts
│ │ │ │ ├── 2-psuedo-re-exporter.ts
│ │ │ │ ├── 3-branch.ts
│ │ │ │ ├── 4-leaf-A.ts
│ │ │ │ ├── 4-leaf-B.ts
│ │ │ │ ├── 4-leaf-C.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── re-exports-ignore-exports-used-in-file/
│ │ │ │ ├── export.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── package.json
│ │ │ │ └── reexport.ts
│ │ │ ├── re-exports-ns-member/
│ │ │ │ ├── index.ts
│ │ │ │ ├── member-ab.ts
│ │ │ │ ├── member-cd.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── sub2-pseudo.ts
│ │ │ │ ├── sub2-sub.ts
│ │ │ │ └── sub3.ts
│ │ │ ├── re-exports-ns-type/
│ │ │ │ ├── assets.tsx
│ │ │ │ ├── barrel.ts
│ │ │ │ ├── index.tsx
│ │ │ │ ├── package.json
│ │ │ │ ├── pluginA.ts
│ │ │ │ ├── pluginB.ts
│ │ │ │ ├── styled.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── re-exports-ns-type2/
│ │ │ │ ├── index.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── schema.ts
│ │ │ │ └── types.ts
│ │ │ ├── re-exports-pseudo/
│ │ │ │ ├── index.ts
│ │ │ │ ├── left.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── pseudo.ts
│ │ │ │ └── right.ts
│ │ │ ├── re-exports-public/
│ │ │ │ ├── index.ts
│ │ │ │ ├── module.ts
│ │ │ │ └── package.json
│ │ │ ├── re-exports-recursive/
│ │ │ │ ├── barrel.ts
│ │ │ │ ├── cycle-a.ts
│ │ │ │ ├── cycle-b.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── module.ts
│ │ │ │ └── package.json
│ │ │ ├── re-exports-renamed/
│ │ │ │ ├── fileA.ts
│ │ │ │ ├── fileB.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── re-exports-spread/
│ │ │ │ ├── animal.ts
│ │ │ │ ├── animals.ts
│ │ │ │ ├── farm.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── re-exports-twice/
│ │ │ │ ├── dir/
│ │ │ │ │ ├── default.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── named.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── re-exports-with-decorator/
│ │ │ │ ├── barrel.ts
│ │ │ │ ├── decorator.ts
│ │ │ │ ├── entry.ts
│ │ │ │ ├── my-module.ts
│ │ │ │ └── package.json
│ │ │ ├── rules/
│ │ │ │ ├── exports.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── ns.ts
│ │ │ │ ├── package.json
│ │ │ │ └── unused.ts
│ │ │ ├── script-visitors-bun/
│ │ │ │ ├── index.ts
│ │ │ │ ├── package.json
│ │ │ │ └── script.ts
│ │ │ ├── script-visitors-execa/
│ │ │ │ ├── execa-docs.mjs
│ │ │ │ ├── main.js
│ │ │ │ ├── methods.mjs
│ │ │ │ ├── node.mjs
│ │ │ │ ├── options.mjs
│ │ │ │ ├── package.json
│ │ │ │ └── script.js
│ │ │ ├── script-visitors-zx/
│ │ │ │ ├── main.js
│ │ │ │ ├── node.mjs
│ │ │ │ ├── package.json
│ │ │ │ ├── script.js
│ │ │ │ └── zx-docs.mjs
│ │ │ ├── self-reference/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── entry.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── lib/
│ │ │ │ │ └── module.js
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── self-reference-from-plugin/
│ │ │ │ ├── .eslintrc.json
│ │ │ │ ├── .gitignore
│ │ │ │ ├── data.json
│ │ │ │ ├── entry.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── lokal.js
│ │ │ │ └── package.json
│ │ │ ├── session/
│ │ │ │ ├── Harness.Parallel.Host.ts
│ │ │ │ ├── Harness.Parallel.Worker.ts
│ │ │ │ ├── Harness.Parallel.ts
│ │ │ │ ├── Harness.ts
│ │ │ │ ├── a.ts
│ │ │ │ ├── b.ts
│ │ │ │ ├── c.ts
│ │ │ │ ├── default-export.ts
│ │ │ │ ├── diamond-base.ts
│ │ │ │ ├── diamond-left.ts
│ │ │ │ ├── diamond-right.ts
│ │ │ │ ├── diamond-top.ts
│ │ │ │ ├── flowers.ts
│ │ │ │ ├── host.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── overload-1.ts
│ │ │ │ ├── overload-2.ts
│ │ │ │ ├── overload-3.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── rose.ts
│ │ │ │ ├── runner.ts
│ │ │ │ ├── src/
│ │ │ │ │ ├── core/
│ │ │ │ │ │ └── app/
│ │ │ │ │ │ └── types.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types/
│ │ │ │ │ └── public/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── internal.ts
│ │ │ │ ├── theme-reexport.ts
│ │ │ │ ├── theme.ts
│ │ │ │ └── worker.ts
│ │ │ ├── session-dependencies/
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── utils.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── session-re-exports/
│ │ │ │ ├── app/
│ │ │ │ │ ├── consumer-2.ts
│ │ │ │ │ ├── consumer-3.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── pkg/
│ │ │ │ ├── internal/
│ │ │ │ │ └── consumer-1.ts
│ │ │ │ ├── package.json
│ │ │ │ └── public/
│ │ │ │ ├── barrel.ts
│ │ │ │ └── implementation.ts
│ │ │ ├── skip-exports-analysis/
│ │ │ │ ├── e2e/
│ │ │ │ │ └── used.e2e.js
│ │ │ │ ├── lib/
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── used.js
│ │ │ │ │ └── used.test.js
│ │ │ │ ├── package.json
│ │ │ │ └── src/
│ │ │ │ ├── index.js
│ │ │ │ ├── used.js
│ │ │ │ └── used.test.js
│ │ │ ├── subpath-import/
│ │ │ │ ├── entry.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── lib/
│ │ │ │ │ ├── dep-polyfill.d.ts
│ │ │ │ │ └── dep-polyfill.js
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── subpath-import-from-plugin/
│ │ │ │ ├── .eslintrc.json
│ │ │ │ ├── entry.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── lib/
│ │ │ │ │ ├── dep-polyfill.d.ts
│ │ │ │ │ └── dep-polyfill.js
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── subpath-imports-outdir/
│ │ │ │ ├── dist/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── index.d.ts
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── test/
│ │ │ │ │ ├── test1.d.ts
│ │ │ │ │ ├── test1.js
│ │ │ │ │ ├── test2.d.ts
│ │ │ │ │ └── test2.js
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── test/
│ │ │ │ │ ├── test1.ts
│ │ │ │ │ └── test2.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── subpath-patterns/
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ ├── entry.ts
│ │ │ │ │ └── internals/
│ │ │ │ │ ├── unused.ts
│ │ │ │ │ ├── used.alt
│ │ │ │ │ ├── used.ext
│ │ │ │ │ └── used.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── tagged-template-literal/
│ │ │ │ ├── Component.astro
│ │ │ │ ├── ScriptTag.astro
│ │ │ │ ├── app.ts
│ │ │ │ ├── index.astro
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── tags-cli/
│ │ │ │ ├── index.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── tags.ts
│ │ │ │ └── unimported.ts
│ │ │ ├── tags-exclude/
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── tags.ts
│ │ │ ├── tags-include/
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── tags.ts
│ │ │ ├── trace/
│ │ │ │ ├── barrel.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── module.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── require.ts
│ │ │ │ ├── shared.ts
│ │ │ │ └── string.ts
│ │ │ ├── treat-config-hints-as-errors/
│ │ │ │ ├── index.js
│ │ │ │ └── package.json
│ │ │ ├── treat-config-hints-as-errors2/
│ │ │ │ ├── index.js
│ │ │ │ └── package.json
│ │ │ ├── ts-namespace/
│ │ │ │ ├── index.ts
│ │ │ │ ├── members.ts
│ │ │ │ ├── merged.ts
│ │ │ │ ├── modules.ts
│ │ │ │ ├── package.json
│ │ │ │ └── types.ts
│ │ │ ├── tsc-files-mode/
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ ├── declare-global.ts
│ │ │ │ │ ├── declare-module.ts
│ │ │ │ │ ├── excluded.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── module.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── tsconfig-extends/
│ │ │ │ ├── boilerplate/
│ │ │ │ │ └── tsconfig.base.json
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ └── frontend/
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ └── index.tsx
│ │ │ │ └── tsconfig.json
│ │ │ ├── tsconfig-include-dir/
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ ├── helper.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.d.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── tsconfig-nested-paths/
│ │ │ │ ├── package.json
│ │ │ │ ├── shared/
│ │ │ │ │ └── utils.ts
│ │ │ │ ├── src/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── server/
│ │ │ │ │ │ ├── handler.ts
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ └── ui/
│ │ │ │ │ ├── button.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── tsconfig-paths-extends/
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ ├── cli.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── lib/
│ │ │ │ │ │ └── main.ts
│ │ │ │ │ └── util/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── tsconfig.base.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── tsconfig-preset-strict/
│ │ │ │ ├── index.ts
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── tsconfig-rootdirs/
│ │ │ │ ├── generated/
│ │ │ │ │ └── src/
│ │ │ │ │ └── index.generated.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── tsconfig.json
│ │ │ │ └── tsconfig.source.json
│ │ │ ├── type-in-type/
│ │ │ │ ├── index.ts
│ │ │ │ ├── module.ts
│ │ │ │ ├── package.json
│ │ │ │ └── types.ts
│ │ │ ├── type-in-value-export/
│ │ │ │ ├── package.json
│ │ │ │ └── src/
│ │ │ │ ├── api.ts
│ │ │ │ └── index.ts
│ │ │ ├── types/
│ │ │ │ ├── index.ts
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── url-import-meta-url/
│ │ │ │ ├── file.css
│ │ │ │ ├── file.js
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.js
│ │ │ │ └── package.json
│ │ │ ├── workspaces/
│ │ │ │ ├── apps/
│ │ │ │ │ ├── backend/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ ├── frontend/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ └── ignored-workspace/
│ │ │ │ │ └── package.json
│ │ │ │ ├── docs/
│ │ │ │ │ ├── dangling.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── local/
│ │ │ │ │ └── tsconfig/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── tsconfig.base.json
│ │ │ │ ├── package.json
│ │ │ │ ├── packages/
│ │ │ │ │ ├── shared/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ ├── tsconfig.json
│ │ │ │ │ │ └── types.ts
│ │ │ │ │ └── tools/
│ │ │ │ │ ├── ignored/
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── tsconfig.json
│ │ │ │ │ └── utils.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── workspaces-bun-test/
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ └── lib/
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── tests/
│ │ │ │ │ └── index.test.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── workspaces-circular/
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ ├── lib-a/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── lib-b/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── package.json
│ │ │ │ └── lib-c/
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── workspaces-circular-symlinks/
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ ├── lib-a/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── package.json
│ │ │ │ └── lib-b/
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── workspaces-cross-reference/
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ ├── lib-a/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── mod-a.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── tsconfig.json
│ │ │ │ └── lib-b/
│ │ │ │ ├── index.ts
│ │ │ │ ├── mod-b.ts
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── workspaces-dts/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── knip.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── packages/
│ │ │ │ │ ├── client/
│ │ │ │ │ │ ├── client.d.ts
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ ├── server/
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ ├── server.d.ts
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ └── shared/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ ├── unused-function.js
│ │ │ │ │ │ └── used-function.js
│ │ │ │ │ ├── tsconfig.build.json
│ │ │ │ │ └── tsconfig.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── workspaces-entry-files/
│ │ │ │ ├── .storybook/
│ │ │ │ │ └── main.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ ├── client/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── index.stories.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ └── shared/
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ └── index.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── workspaces-ignored/
│ │ │ │ ├── package.json
│ │ │ │ ├── packages/
│ │ │ │ │ ├── a/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── b1/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── b2/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── c/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── d1/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── d2/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── deep/
│ │ │ │ │ │ ├── er/
│ │ │ │ │ │ │ └── h2/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ └── unignored/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── e/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── flat/
│ │ │ │ │ │ └── i1/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── g/
│ │ │ │ │ │ └── main.c
│ │ │ │ │ └── production/
│ │ │ │ │ └── package.json
│ │ │ │ └── pnpm-workspace.yaml
│ │ │ ├── workspaces-include-entry-exports/
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ ├── app/
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── package.json
│ │ │ │ └── lib/
│ │ │ │ ├── index.js
│ │ │ │ └── package.json
│ │ │ ├── workspaces-module-resolution/
│ │ │ │ ├── package.json
│ │ │ │ ├── packages/
│ │ │ │ │ ├── workspace-a/
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ ├── src/
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ └── workspace-b/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── exports.ts
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── self.ts
│ │ │ │ │ │ └── used-fn.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── workspaces-nested/
│ │ │ │ ├── L-1-1/
│ │ │ │ │ ├── L-1-2/
│ │ │ │ │ │ ├── L-1-3/
│ │ │ │ │ │ │ ├── .eslintrc.json
│ │ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── package.json
│ │ │ │ └── package.json
│ │ │ ├── workspaces-noconfig-plugin/
│ │ │ │ ├── lib/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ ├── util.test.ts
│ │ │ │ │ └── util.ts
│ │ │ │ ├── package.json
│ │ │ │ └── src/
│ │ │ │ ├── index.ts
│ │ │ │ └── util.test.ts
│ │ │ ├── workspaces-node-test/
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ └── lib/
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── tests/
│ │ │ │ │ └── index.test.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── workspaces-paths/
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ ├── lib-a/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── dir/
│ │ │ │ │ │ │ └── module-a.ts
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── same.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── lib-b/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── dir/
│ │ │ │ │ │ │ └── module-b.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── lib-c/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── dir/
│ │ │ │ │ │ │ └── module.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── lib-d/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── dir/
│ │ │ │ │ │ │ └── module.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── lib-e/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── dir/
│ │ │ │ │ │ │ └── module-e.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── lib-f/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── same.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ └── lib-g/
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── same.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── workspaces-paths-compilers/
│ │ │ │ ├── knip.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── packages/
│ │ │ │ │ └── app/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── components/
│ │ │ │ │ │ │ ├── App.vue
│ │ │ │ │ │ │ ├── Child.vue
│ │ │ │ │ │ │ └── Sub.vue
│ │ │ │ │ │ ├── main.ts
│ │ │ │ │ │ ├── pages/
│ │ │ │ │ │ │ └── Home.vue
│ │ │ │ │ │ └── router.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── workspaces-plugin-circular/
│ │ │ │ ├── package.json
│ │ │ │ ├── packages/
│ │ │ │ │ └── lib/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── tsconfig.app.json
│ │ │ │ │ ├── tsconfig.json
│ │ │ │ │ └── tsconfig.spec.json
│ │ │ │ └── tsconfig.base.json
│ │ │ ├── workspaces-plugin-config/
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ ├── backend/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── vitest.config.ts
│ │ │ │ │ ├── eslint.config.js
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── index.vitest.ts
│ │ │ │ │ ├── jest.config.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── frontend/
│ │ │ │ │ ├── .eslintrc.js
│ │ │ │ │ ├── components/
│ │ │ │ │ │ ├── component.js
│ │ │ │ │ │ └── component.test.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── vitest.config.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── index.vitest.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── postcss.config.js
│ │ │ │ │ └── rollup.config.ts
│ │ │ │ ├── shared/
│ │ │ │ │ ├── ava.config.js
│ │ │ │ │ ├── components/
│ │ │ │ │ │ ├── component.ava.js
│ │ │ │ │ │ ├── component.js
│ │ │ │ │ │ ├── component.tales.js
│ │ │ │ │ │ ├── epic/
│ │ │ │ │ │ │ ├── component.fable.tsx
│ │ │ │ │ │ │ └── component.stories.mdx
│ │ │ │ │ │ └── storybook/
│ │ │ │ │ │ ├── main.ts
│ │ │ │ │ │ ├── manager.ts
│ │ │ │ │ │ └── preview.ts
│ │ │ │ │ ├── dev-entry.js
│ │ │ │ │ ├── jest-setup.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── production-entry.js
│ │ │ │ │ └── webpack.config.js
│ │ │ │ └── tailwind/
│ │ │ │ ├── package.json
│ │ │ │ └── postcss.js
│ │ │ ├── workspaces-plugin-overlap/
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ └── workspace-a/
│ │ │ │ ├── package.json
│ │ │ │ ├── tsconfig.json
│ │ │ │ └── typedoc.json
│ │ │ ├── workspaces-pnpm/
│ │ │ │ ├── apps/
│ │ │ │ │ ├── app-a/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── app-b/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── docs/
│ │ │ │ │ ├── dangling.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── package.json
│ │ │ │ ├── packages/
│ │ │ │ │ ├── lib-a/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── lib-b/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── package.json
│ │ │ │ └── pnpm-workspace.yaml
│ │ │ ├── workspaces-root/
│ │ │ │ ├── app/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── package.json
│ │ │ │ ├── scripts/
│ │ │ │ │ └── index.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── workspaces-self-and-cross-ref/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── package.json
│ │ │ │ ├── packages/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ ├── src/
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ ├── lib/
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ ├── src/
│ │ │ │ │ │ │ ├── alpha.ts
│ │ │ │ │ │ │ ├── beta.ts
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ └── shared/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ └── polyfills/
│ │ │ │ │ │ └── polyfills.client.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── pnpm-workspace.yaml
│ │ │ │ ├── tsconfig.base.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── workspaces-self-reference/
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ ├── eslint-config-x-self-reference/
│ │ │ │ │ ├── .gitignore
│ │ │ │ │ ├── entry.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── tsconfig.json
│ │ │ │ └── from-plugin/
│ │ │ │ ├── .eslintrc.json
│ │ │ │ ├── data.json
│ │ │ │ ├── entry.ts
│ │ │ │ ├── file.js
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── workspaces-tooling/
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ ├── backend/
│ │ │ │ │ ├── .eslintrc.js
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── eslint-config-custom/
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── package.json
│ │ │ │ └── frontend/
│ │ │ │ ├── .eslintrc.js
│ │ │ │ ├── index.ts
│ │ │ │ ├── jest.config.js
│ │ │ │ ├── jest.setup.js
│ │ │ │ └── package.json
│ │ │ ├── zero-config/
│ │ │ │ ├── exclude.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── my-module.ts
│ │ │ │ ├── my-namespace.ts
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ └── מסמכים/
│ │ │ ├── .gitignore
│ │ │ ├── package.json
│ │ │ └── src/
│ │ │ └── index.ts
│ │ ├── package.json
│ │ ├── rmdir.js
│ │ ├── schema-jsonc.json
│ │ ├── schema.json
│ │ ├── scripts/
│ │ │ ├── create-new-plugin.ts
│ │ │ ├── generate-plugin-defs.js
│ │ │ ├── run-test.ts
│ │ │ ├── tsconfig.json
│ │ │ └── verify-fixtures.ts
│ │ ├── src/
│ │ │ ├── CacheConsultant.ts
│ │ │ ├── CatalogCounselor.ts
│ │ │ ├── ConfigurationChief.ts
│ │ │ ├── ConsoleStreamer.ts
│ │ │ ├── DependencyDeputy.ts
│ │ │ ├── IssueCollector.ts
│ │ │ ├── IssueFixer.ts
│ │ │ ├── JsonCatalogPeeker.ts
│ │ │ ├── PackagePeeker.ts
│ │ │ ├── ProjectPrincipal.ts
│ │ │ ├── WorkspaceWorker.ts
│ │ │ ├── YamlCatalogPeeker.ts
│ │ │ ├── binaries/
│ │ │ │ ├── bash-parser.ts
│ │ │ │ ├── fallback.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── plugins.ts
│ │ │ │ ├── resolvers/
│ │ │ │ │ ├── bun.ts
│ │ │ │ │ ├── bunx.ts
│ │ │ │ │ ├── find.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── npm.ts
│ │ │ │ │ ├── npx.ts
│ │ │ │ │ ├── pnpm.ts
│ │ │ │ │ ├── pnpx.ts
│ │ │ │ │ └── yarn.ts
│ │ │ │ └── util.ts
│ │ │ ├── cli.ts
│ │ │ ├── compilers/
│ │ │ │ ├── compilers.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── mdx.ts
│ │ │ │ ├── scss.ts
│ │ │ │ └── types.ts
│ │ │ ├── constants.ts
│ │ │ ├── graph/
│ │ │ │ ├── analyze.ts
│ │ │ │ └── build.ts
│ │ │ ├── graph-explorer/
│ │ │ │ ├── cache.ts
│ │ │ │ ├── constants.ts
│ │ │ │ ├── explorer.ts
│ │ │ │ ├── operations/
│ │ │ │ │ ├── build-exports-tree.ts
│ │ │ │ │ ├── find-cycles.ts
│ │ │ │ │ ├── get-contention.ts
│ │ │ │ │ ├── get-dependency-usage.ts
│ │ │ │ │ ├── get-usage.ts
│ │ │ │ │ ├── has-strictly-ns-references.ts
│ │ │ │ │ ├── is-referenced.ts
│ │ │ │ │ └── resolve-definition.ts
│ │ │ │ ├── utils.ts
│ │ │ │ ├── visitors.ts
│ │ │ │ ├── walk-down.ts
│ │ │ │ └── walk-up.ts
│ │ │ ├── index.ts
│ │ │ ├── manifest/
│ │ │ │ ├── helpers.ts
│ │ │ │ └── index.ts
│ │ │ ├── plugins/
│ │ │ │ ├── _template/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── angular/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── types.ts
│ │ │ │ │ └── update-types.sh
│ │ │ │ ├── astro/
│ │ │ │ │ ├── compiler-mdx.ts
│ │ │ │ │ ├── compiler.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── resolveFromAST.ts
│ │ │ │ ├── astro-db/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── astro-og-canvas/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── ava/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── babel/
│ │ │ │ │ ├── helpers.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── biome/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── bumpp/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── bun/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── c8/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── capacitor/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── changelogen/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── changelogithub/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── changesets/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── commitizen/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── commitlint/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── convex/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── create-typescript-app/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── cspell/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── cucumber/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── cypress/
│ │ │ │ │ ├── helpers.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── danger/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── dependency-cruiser/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── docusaurus/
│ │ │ │ │ ├── helpers.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── dotenv/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── drizzle/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── eleventy/
│ │ │ │ │ ├── helpers.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── eslint/
│ │ │ │ │ ├── helpers.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── resolveFromAST.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── execa/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── visitors/
│ │ │ │ │ └── execa.ts
│ │ │ │ ├── expo/
│ │ │ │ │ ├── helpers.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── expressive-code/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── gatsby/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── github-action/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── github-actions/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── glob/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── graphql-codegen/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── hardhat/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── husky/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── i18next-parser/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── jest/
│ │ │ │ │ ├── helpers.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── karma/
│ │ │ │ │ ├── helpers.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── knex/
│ │ │ │ │ ├── helpers.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── ladle/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── lefthook/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── lint-staged/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── linthtml/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── lockfile-lint/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── lost-pixel/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── markdownlint/
│ │ │ │ │ ├── helpers.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── mdx/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── mdxlint/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── metro/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── mocha/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── moonrepo/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── msw/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── nano-staged/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── nest/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── netlify/
│ │ │ │ │ ├── helpers.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── next/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── resolveFromAST.ts
│ │ │ │ ├── next-intl/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── next-mdx/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── resolveFromAST.ts
│ │ │ │ ├── nitro/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── node/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── node-modules-inspector/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── nodemon/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── npm-package-json-lint/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── nuxt/
│ │ │ │ │ ├── helpers.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── nx/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── nyc/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── oclif/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── openapi-ts/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── oxfmt/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── oxlint/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── parcel/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── payload/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── playwright/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── playwright-ct/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── playwright-test/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── plop/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── pm2/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── pnpm/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── postcss/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── preconstruct/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── prettier/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── prisma/
│ │ │ │ │ ├── compiler.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── qwik/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── resolveFromAST.ts
│ │ │ │ ├── raycast/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── react-cosmos/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── react-native/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── react-router/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── relay/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── release-it/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── remark/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── remix/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── rollup/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── rsbuild/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── rslib/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── rspack/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── rstest/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── sanity/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── semantic-release/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── sentry/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── simple-git-hooks/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── size-limit/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── sst/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── resolveFromAST.ts
│ │ │ │ ├── starlight/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── resolveFromAST.ts
│ │ │ │ ├── storybook/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── stryker/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── stylelint/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── svelte/
│ │ │ │ │ ├── compiler.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── sveltekit/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── svgo/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── svgr/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── swc/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── syncpack/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── tailwind/
│ │ │ │ │ ├── compiler.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── tanstack-router/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── taskfile/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── travis/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── ts-node/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── tsdown/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── resolveFromAST.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── tsup/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── resolveFromAST.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── tsx/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── typedoc/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── typescript/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── unbuild/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── unocss/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── vercel-og/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── vike/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── vite/
│ │ │ │ │ ├── helpers.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── visitors/
│ │ │ │ │ └── importMetaGlob.ts
│ │ │ │ ├── vitepress/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── vitest/
│ │ │ │ │ ├── helpers.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── vue/
│ │ │ │ │ ├── compiler.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── webdriver-io/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── webpack/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── types.ts
│ │ │ │ │ └── visitors/
│ │ │ │ │ └── requireContext.ts
│ │ │ │ ├── wireit/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── wrangler/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── xo/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── yarn/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── yorkie/
│ │ │ │ │ └── index.ts
│ │ │ │ └── zx/
│ │ │ │ ├── index.ts
│ │ │ │ └── visitors/
│ │ │ │ └── zx.ts
│ │ │ ├── plugins.ts
│ │ │ ├── reporters/
│ │ │ │ ├── codeclimate.ts
│ │ │ │ ├── codeowners.ts
│ │ │ │ ├── compact.ts
│ │ │ │ ├── disclosure.ts
│ │ │ │ ├── github-actions.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── json.ts
│ │ │ │ ├── markdown.ts
│ │ │ │ ├── symbols.ts
│ │ │ │ ├── trace.ts
│ │ │ │ ├── util/
│ │ │ │ │ ├── configuration-hints.ts
│ │ │ │ │ └── util.ts
│ │ │ │ └── watch.ts
│ │ │ ├── run.ts
│ │ │ ├── schema/
│ │ │ │ ├── configuration.ts
│ │ │ │ └── plugins.ts
│ │ │ ├── session/
│ │ │ │ ├── build-maps.ts
│ │ │ │ ├── file-descriptor.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── package-json-descriptor.ts
│ │ │ │ ├── session.ts
│ │ │ │ └── types.ts
│ │ │ ├── types/
│ │ │ │ ├── PluginNames.ts
│ │ │ │ ├── args.ts
│ │ │ │ ├── config.ts
│ │ │ │ ├── entries.ts
│ │ │ │ ├── exports.ts
│ │ │ │ ├── issues.ts
│ │ │ │ ├── module-graph.ts
│ │ │ │ ├── options.ts
│ │ │ │ ├── package-json.ts
│ │ │ │ ├── project.ts
│ │ │ │ ├── tsconfig-json.ts
│ │ │ │ └── workspace.ts
│ │ │ ├── types.ts
│ │ │ ├── typescript/
│ │ │ │ ├── SourceFileManager.ts
│ │ │ │ ├── ast-helpers.ts
│ │ │ │ ├── follow-imports.ts
│ │ │ │ ├── get-imports-and-exports.ts
│ │ │ │ ├── resolve-module-names.ts
│ │ │ │ └── visitors/
│ │ │ │ ├── calls.ts
│ │ │ │ ├── exports.ts
│ │ │ │ ├── helpers.ts
│ │ │ │ ├── imports.ts
│ │ │ │ ├── jsdoc.ts
│ │ │ │ ├── local-refs.ts
│ │ │ │ ├── members.ts
│ │ │ │ ├── script-visitors.ts
│ │ │ │ └── walk.ts
│ │ │ ├── util/
│ │ │ │ ├── Performance.ts
│ │ │ │ ├── array.ts
│ │ │ │ ├── catalog.ts
│ │ │ │ ├── cli-arguments.ts
│ │ │ │ ├── codeowners.ts
│ │ │ │ ├── create-input-handler.ts
│ │ │ │ ├── create-options.ts
│ │ │ │ ├── create-workspace-graph.ts
│ │ │ │ ├── debug.ts
│ │ │ │ ├── empty.ts
│ │ │ │ ├── errors.ts
│ │ │ │ ├── file-entry-cache.ts
│ │ │ │ ├── fs.ts
│ │ │ │ ├── get-included-issue-types.ts
│ │ │ │ ├── git.ts
│ │ │ │ ├── glob-core.ts
│ │ │ │ ├── glob.ts
│ │ │ │ ├── graph-sequencer.ts
│ │ │ │ ├── input.ts
│ │ │ │ ├── issue-initializers.ts
│ │ │ │ ├── jiti.ts
│ │ │ │ ├── load-config.ts
│ │ │ │ ├── load-tsconfig.ts
│ │ │ │ ├── loader.ts
│ │ │ │ ├── log.ts
│ │ │ │ ├── map-workspaces.ts
│ │ │ │ ├── math.ts
│ │ │ │ ├── module-graph.ts
│ │ │ │ ├── modules.ts
│ │ │ │ ├── object.ts
│ │ │ │ ├── package-json.ts
│ │ │ │ ├── package-name.ts
│ │ │ │ ├── parse-and-convert-gitignores.ts
│ │ │ │ ├── path.ts
│ │ │ │ ├── plugin-config.ts
│ │ │ │ ├── plugin.ts
│ │ │ │ ├── regex.ts
│ │ │ │ ├── remove-export.ts
│ │ │ │ ├── reporter.ts
│ │ │ │ ├── require.ts
│ │ │ │ ├── resolve.ts
│ │ │ │ ├── string.ts
│ │ │ │ ├── table.ts
│ │ │ │ ├── tag.ts
│ │ │ │ ├── to-source-path.ts
│ │ │ │ ├── trace.ts
│ │ │ │ ├── watch.ts
│ │ │ │ ├── workspace-file-filter.ts
│ │ │ │ ├── workspace-selectors.ts
│ │ │ │ └── workspace.ts
│ │ │ └── version.ts
│ │ ├── test/
│ │ │ ├── barrel-namespace-chain.test.ts
│ │ │ ├── catalog.empty.test.ts
│ │ │ ├── catalog.package-json.test.ts
│ │ │ ├── catalog.pnpm.test.ts
│ │ │ ├── catalog.yarn.test.ts
│ │ │ ├── cli/
│ │ │ │ ├── cli-config.test.ts
│ │ │ │ ├── cli-include.test.ts
│ │ │ │ ├── cli-preprocessor.test.ts
│ │ │ │ ├── cli-reporter-codeclimate.test.ts
│ │ │ │ ├── cli-reporter-codeclimate2.test.ts
│ │ │ │ ├── cli-reporter-codeclimate3.test.ts
│ │ │ │ ├── cli-reporter-codeclimate4.test.ts
│ │ │ │ ├── cli-reporter-compact.test.ts
│ │ │ │ ├── cli-reporter-github-actions.test.ts
│ │ │ │ ├── cli-reporter-json-catalog.test.ts
│ │ │ │ ├── cli-reporter-json.test.ts
│ │ │ │ ├── cli-reporter-json2.test.ts
│ │ │ │ ├── cli-reporter-json3.test.ts
│ │ │ │ ├── cli-reporter-json4.test.ts
│ │ │ │ ├── cli-reporter-markdown.test.ts
│ │ │ │ ├── cli-reporter-symbols-catalog.test.ts
│ │ │ │ ├── cli-reporter-symbols-pathlike.test.ts
│ │ │ │ ├── cli-reporter.test.ts
│ │ │ │ ├── cli-trace.test.ts
│ │ │ │ ├── cli-treat-config-hints-as-errors.test.ts
│ │ │ │ └── cli.test.ts
│ │ │ ├── commonjs-tsconfig.test.ts
│ │ │ ├── commonjs.test.ts
│ │ │ ├── compilers.manual.test.ts
│ │ │ ├── compilers.prisma.test.ts
│ │ │ ├── compilers.scss.test.ts
│ │ │ ├── compilers.tailwind.test.ts
│ │ │ ├── compilers.test.ts
│ │ │ ├── configuration-hints.test.ts
│ │ │ ├── configuration-hints2.test.ts
│ │ │ ├── cross-workspace-inputs.test.ts
│ │ │ ├── custom-paths-workspaces.test.ts
│ │ │ ├── definitely-typed.test.ts
│ │ │ ├── dependencies-types.test.ts
│ │ │ ├── dependencies.test.ts
│ │ │ ├── dts-baseurl-implicit-relative.test.ts
│ │ │ ├── dts-compiled.test.ts
│ │ │ ├── dts.test.ts
│ │ │ ├── duplicate-dependencies.test.ts
│ │ │ ├── duplicate-exports-alias.test.ts
│ │ │ ├── empty-main.test.ts
│ │ │ ├── entry-exports-enum-members.test.ts
│ │ │ ├── entry-exports-namespace.test.ts
│ │ │ ├── entry-files.test.ts
│ │ │ ├── entry-js.test.ts
│ │ │ ├── enum-members-enumerated.test.ts
│ │ │ ├── enum-members.test.ts
│ │ │ ├── export-spread.test.ts
│ │ │ ├── exports-default-interface.test.ts
│ │ │ ├── exports-default-type.test.ts
│ │ │ ├── exports-special-characters.test.ts
│ │ │ ├── exports-value-refs-default.test.ts
│ │ │ ├── exports-value-refs.test.ts
│ │ │ ├── exports.test.ts
│ │ │ ├── extensions-css-ts.test.ts
│ │ │ ├── fix/
│ │ │ │ ├── fix-catalog-json-root.test.ts
│ │ │ │ ├── fix-catalog-json.test.ts
│ │ │ │ ├── fix-catalog-yaml.test.ts
│ │ │ │ ├── fix-exclude-dependencies.test.ts
│ │ │ │ ├── fix-members.test.ts
│ │ │ │ ├── fix-workspaces.test.ts
│ │ │ │ ├── fix.test.ts
│ │ │ │ └── format.test.ts
│ │ │ ├── git-branch-file.test.ts
│ │ │ ├── gitignore.test.ts
│ │ │ ├── graph-explorer/
│ │ │ │ ├── contention.test.ts
│ │ │ │ ├── cycles.test.ts
│ │ │ │ ├── trace-export.test.ts
│ │ │ │ ├── walk-down.test.ts
│ │ │ │ └── walk-up.test.ts
│ │ │ ├── helpers/
│ │ │ │ ├── assertAndRemoveProperty.ts
│ │ │ │ ├── baseCounters.ts
│ │ │ │ ├── baseNodeObjects.ts
│ │ │ │ ├── copy-fixture.ts
│ │ │ │ ├── create-options.ts
│ │ │ │ ├── diff.ts
│ │ │ │ ├── exec.ts
│ │ │ │ └── resolve.ts
│ │ │ ├── ignore-dependencies-binaries-json.test.ts
│ │ │ ├── ignore-dependencies-binaries.test.ts
│ │ │ ├── ignore-exports-used-in-file-alias-exclude.test.ts
│ │ │ ├── ignore-exports-used-in-file-id-chars.test.ts
│ │ │ ├── ignore-exports-used-in-file-id-underscores.test.ts
│ │ │ ├── ignore-exports-used-in-file-re-export.test.ts
│ │ │ ├── ignore-exports-used-in-file-shorthand.test.ts
│ │ │ ├── ignore-exports-used-in-file-some.test.ts
│ │ │ ├── ignore-exports-used-in-file-typeof-class.test.ts
│ │ │ ├── ignore-exports-used-in-file.test.ts
│ │ │ ├── ignore-files.test.ts
│ │ │ ├── ignore-issues.test.ts
│ │ │ ├── ignore-members.test.ts
│ │ │ ├── ignore-negated.test.ts
│ │ │ ├── ignore-patterns.test.ts
│ │ │ ├── ignore-unresolved.test.ts
│ │ │ ├── ignore-unresolved2.test.ts
│ │ │ ├── import-equals.test.ts
│ │ │ ├── import-errors.test.ts
│ │ │ ├── import-meta-glob.test.ts
│ │ │ ├── import-named-default-id.test.ts
│ │ │ ├── import-star-iteration.test.ts
│ │ │ ├── imports-destructure-spread.test.ts
│ │ │ ├── imports-dynamic-access.test.ts
│ │ │ ├── imports-namespace-jsx.test.ts
│ │ │ ├── imports-namespace-with-nsexports.test.ts
│ │ │ ├── imports-namespace.test.ts
│ │ │ ├── imports-opaque.test.ts
│ │ │ ├── imports-prop-access-call.test.ts
│ │ │ ├── imports-self.test.ts
│ │ │ ├── imports-typeof.test.ts
│ │ │ ├── imports.test.ts
│ │ │ ├── include-entry-exports-scripts.test.ts
│ │ │ ├── include-entry-exports.test.ts
│ │ │ ├── include-entry-reexports.test.ts
│ │ │ ├── include-libs.test.ts
│ │ │ ├── js-only.test.ts
│ │ │ ├── jsdoc-exports.test.ts
│ │ │ ├── jsdoc.test.ts
│ │ │ ├── jsx.test.ts
│ │ │ ├── module-block.test.ts
│ │ │ ├── module-register.test.ts
│ │ │ ├── module-resolution-baseurl-implicit-relative.test.ts
│ │ │ ├── module-resolution-non-std-absolute.test.ts
│ │ │ ├── module-resolution-non-std-implicit.test.ts
│ │ │ ├── module-resolution-non-std.test.ts
│ │ │ ├── module-resolution-tsconfig-paths.test.ts
│ │ │ ├── negated-production-paths.test.ts
│ │ │ ├── npm-scripts.test.ts
│ │ │ ├── ns-spread-reexport.test.ts
│ │ │ ├── package-entry-points.test.ts
│ │ │ ├── path-aliases.test.ts
│ │ │ ├── path-aliases2.test.ts
│ │ │ ├── pathless.test.ts
│ │ │ ├── peer-dependencies-circular.test.ts
│ │ │ ├── peer-dependencies-optional-host.test.ts
│ │ │ ├── peer-dependencies-optional-ignored.test.ts
│ │ │ ├── peer-dependencies-optional-strict.test.ts
│ │ │ ├── peer-dependencies-optional.test.ts
│ │ │ ├── peer-dependencies.test.ts
│ │ │ ├── plugin-config.test.ts
│ │ │ ├── plugin-disable.test.ts
│ │ │ ├── plugin-negated-entry-globs.test.ts
│ │ │ ├── plugin-overlap.test.ts
│ │ │ ├── plugins/
│ │ │ │ ├── _template.test.ts
│ │ │ │ ├── angular.test.ts
│ │ │ │ ├── angular2.test.ts
│ │ │ │ ├── angular3.test.ts
│ │ │ │ ├── astro-db.test.ts
│ │ │ │ ├── astro-og-canvas.test.ts
│ │ │ │ ├── astro-sharp-image-service.test.ts
│ │ │ │ ├── astro.test.ts
│ │ │ │ ├── ava.test.ts
│ │ │ │ ├── ava2.test.ts
│ │ │ │ ├── ava3.test.ts
│ │ │ │ ├── babel.test.ts
│ │ │ │ ├── biome-workspace.test.ts
│ │ │ │ ├── biome.test.ts
│ │ │ │ ├── bumpp.test.ts
│ │ │ │ ├── bun.test.ts
│ │ │ │ ├── bun2.test.ts
│ │ │ │ ├── bun3.test.ts
│ │ │ │ ├── bun4.test.ts
│ │ │ │ ├── capacitor.test.ts
│ │ │ │ ├── changelogen.test.ts
│ │ │ │ ├── changelogithub.test.ts
│ │ │ │ ├── changesets.test.ts
│ │ │ │ ├── commitizen.test.ts
│ │ │ │ ├── commitlint.test.ts
│ │ │ │ ├── convex.test.ts
│ │ │ │ ├── create-typescript-app.test.ts
│ │ │ │ ├── cspell.test.ts
│ │ │ │ ├── cucumber.test.ts
│ │ │ │ ├── cypress-multi-reporter.test.ts
│ │ │ │ ├── cypress.test.ts
│ │ │ │ ├── cypress2.test.ts
│ │ │ │ ├── danger.test.ts
│ │ │ │ ├── dependency-cruiser.test.ts
│ │ │ │ ├── docusaurus.test.ts
│ │ │ │ ├── drizzle.test.ts
│ │ │ │ ├── eleventy.test.ts
│ │ │ │ ├── eleventy2.test.ts
│ │ │ │ ├── eleventy3.test.ts
│ │ │ │ ├── eleventy4.test.ts
│ │ │ │ ├── eslint.test.ts
│ │ │ │ ├── eslint2.test.ts
│ │ │ │ ├── eslint3.test.ts
│ │ │ │ ├── eslint4.test.ts
│ │ │ │ ├── eslint5.test.ts
│ │ │ │ ├── expo.test.ts
│ │ │ │ ├── expo2.test.ts
│ │ │ │ ├── expo3.test.ts
│ │ │ │ ├── expressive-code.test.ts
│ │ │ │ ├── fooi.test.ts
│ │ │ │ ├── gatsby.test.ts
│ │ │ │ ├── github-action.test.ts
│ │ │ │ ├── github-actions-workspaces.test.ts
│ │ │ │ ├── github-actions.test.ts
│ │ │ │ ├── graphql-codegen-graphql-config.test.ts
│ │ │ │ ├── graphql-codegen-graphql-config2.test.ts
│ │ │ │ ├── graphql-codegen.test.ts
│ │ │ │ ├── hardhat.test.ts
│ │ │ │ ├── husky-legacy.test.ts
│ │ │ │ ├── husky-v8.test.ts
│ │ │ │ ├── husky-v9-1.test.ts
│ │ │ │ ├── husky-v9.test.ts
│ │ │ │ ├── i18next-parser.test.ts
│ │ │ │ ├── jest.test.ts
│ │ │ │ ├── jest2.test.ts
│ │ │ │ ├── jest3.test.ts
│ │ │ │ ├── karma.test.ts
│ │ │ │ ├── karma2.test.ts
│ │ │ │ ├── karma3.test.ts
│ │ │ │ ├── knex.test.ts
│ │ │ │ ├── ladle.test.ts
│ │ │ │ ├── lefthook-ci.test.ts
│ │ │ │ ├── lefthook-v1.test.ts
│ │ │ │ ├── lefthook.test.ts
│ │ │ │ ├── lint-staged.test.ts
│ │ │ │ ├── linthtml.test.ts
│ │ │ │ ├── lockfile-lint.test.ts
│ │ │ │ ├── lost-pixel.test.ts
│ │ │ │ ├── markdownlint.test.ts
│ │ │ │ ├── mdx.test.ts
│ │ │ │ ├── mdxlint.test.ts
│ │ │ │ ├── metro-defaults.test.ts
│ │ │ │ ├── metro-react-native.test.ts
│ │ │ │ ├── metro.test.ts
│ │ │ │ ├── mocha.test.ts
│ │ │ │ ├── moonrepo.test.ts
│ │ │ │ ├── msw.test.ts
│ │ │ │ ├── nano-staged.test.ts
│ │ │ │ ├── nest.test.ts
│ │ │ │ ├── netlify.test.ts
│ │ │ │ ├── next-intl.test.ts
│ │ │ │ ├── next-mdx.test.ts
│ │ │ │ ├── next-middleware.test.ts
│ │ │ │ ├── next-page-extensions.test.ts
│ │ │ │ ├── next.test.ts
│ │ │ │ ├── nitro.test.ts
│ │ │ │ ├── node-modules-inspector.test.ts
│ │ │ │ ├── node-test-runner.test.ts
│ │ │ │ ├── node.test.ts
│ │ │ │ ├── nodemon.test.ts
│ │ │ │ ├── npm-package-json-lint.test.ts
│ │ │ │ ├── nuxt-auto-import-disabled.test.ts
│ │ │ │ ├── nuxt-auto-import.test.ts
│ │ │ │ ├── nuxt-config.test.ts
│ │ │ │ ├── nuxt.test.ts
│ │ │ │ ├── nx-crystal.test.ts
│ │ │ │ ├── nx.test.ts
│ │ │ │ ├── nyc.test.ts
│ │ │ │ ├── oclif.test.ts
│ │ │ │ ├── openapi-ts.test.ts
│ │ │ │ ├── oxfmt.test.ts
│ │ │ │ ├── oxlint.test.ts
│ │ │ │ ├── parcel.test.ts
│ │ │ │ ├── payload.test.ts
│ │ │ │ ├── playwright-ct.test.ts
│ │ │ │ ├── playwright-ct2.test.ts
│ │ │ │ ├── playwright.test.ts
│ │ │ │ ├── playwright2.test.ts
│ │ │ │ ├── plop.test.ts
│ │ │ │ ├── pm2.test.ts
│ │ │ │ ├── pnpm.test.ts
│ │ │ │ ├── pnpm2.test.ts
│ │ │ │ ├── postcss-cjs.test.ts
│ │ │ │ ├── postcss-next.test.ts
│ │ │ │ ├── postcss-tailwindcss.test.ts
│ │ │ │ ├── postcss-tailwindcss2.test.ts
│ │ │ │ ├── postcss.test.ts
│ │ │ │ ├── preconstruct.test.ts
│ │ │ │ ├── prettier-re-exports.test.ts
│ │ │ │ ├── prettier.test.ts
│ │ │ │ ├── prisma.test.ts
│ │ │ │ ├── prisma2.test.ts
│ │ │ │ ├── qwik.test.ts
│ │ │ │ ├── raycast.test.ts
│ │ │ │ ├── react-cosmos.test.ts
│ │ │ │ ├── react-native.test.ts
│ │ │ │ ├── react-router.test.ts
│ │ │ │ ├── relay.test.ts
│ │ │ │ ├── relay2.test.ts
│ │ │ │ ├── release-it.test.ts
│ │ │ │ ├── remark.test.ts
│ │ │ │ ├── remix.test.ts
│ │ │ │ ├── rollup.test.ts
│ │ │ │ ├── rsbuild.test.ts
│ │ │ │ ├── rslib.test.ts
│ │ │ │ ├── rspack.test.ts
│ │ │ │ ├── rstest.test.ts
│ │ │ │ ├── rstest2.test.ts
│ │ │ │ ├── sanity.test.ts
│ │ │ │ ├── semantic-release.test.ts
│ │ │ │ ├── sentry.test.ts
│ │ │ │ ├── simple-git-hooks.test.ts
│ │ │ │ ├── size-limit.test.ts
│ │ │ │ ├── sst.test.ts
│ │ │ │ ├── sst2.test.ts
│ │ │ │ ├── starlight.test.ts
│ │ │ │ ├── storybook.test.ts
│ │ │ │ ├── storybook2.test.ts
│ │ │ │ ├── stryker.test.ts
│ │ │ │ ├── stylelint.test.ts
│ │ │ │ ├── stylelint2.test.ts
│ │ │ │ ├── stylelint3.test.ts
│ │ │ │ ├── svelte.test.ts
│ │ │ │ ├── sveltekit.test.ts
│ │ │ │ ├── svgo.test.ts
│ │ │ │ ├── svgr.test.ts
│ │ │ │ ├── swc.test.ts
│ │ │ │ ├── syncpack.test.ts
│ │ │ │ ├── tailwind.test.ts
│ │ │ │ ├── tailwind2.test.ts
│ │ │ │ ├── tanstack-router.test.ts
│ │ │ │ ├── taskfile.test.ts
│ │ │ │ ├── taskfile2.test.ts
│ │ │ │ ├── travis.test.ts
│ │ │ │ ├── tsdown.test.ts
│ │ │ │ ├── tsgo.test.ts
│ │ │ │ ├── tsup.test.ts
│ │ │ │ ├── tsx.test.ts
│ │ │ │ ├── typedoc.test.ts
│ │ │ │ ├── typescript.test.ts
│ │ │ │ ├── typescript2.test.ts
│ │ │ │ ├── unbuild.test.ts
│ │ │ │ ├── unocss.test.ts
│ │ │ │ ├── vercel-og.test.ts
│ │ │ │ ├── vike.test.ts
│ │ │ │ ├── vite.test.ts
│ │ │ │ ├── vite2.test.ts
│ │ │ │ ├── vite3.test.ts
│ │ │ │ ├── vite4.test.ts
│ │ │ │ ├── vitepress.test.ts
│ │ │ │ ├── vitest-npm-script.test.ts
│ │ │ │ ├── vitest.test.ts
│ │ │ │ ├── vitest2.test.ts
│ │ │ │ ├── vitest3.test.ts
│ │ │ │ ├── vitest4.test.ts
│ │ │ │ ├── vitest5.test.ts
│ │ │ │ ├── vitest6.test.ts
│ │ │ │ ├── vitest7.test.ts
│ │ │ │ ├── vitest8.test.ts
│ │ │ │ ├── vitest9.test.ts
│ │ │ │ ├── vue-webpack.test.ts
│ │ │ │ ├── vue.test.ts
│ │ │ │ ├── webdriver-io.test.ts
│ │ │ │ ├── webpack-cli.test.ts
│ │ │ │ ├── webpack-re-exports.test.ts
│ │ │ │ ├── webpack.test.ts
│ │ │ │ ├── webpack2.test.ts
│ │ │ │ ├── wireit.test.ts
│ │ │ │ ├── wrangler.test.ts
│ │ │ │ ├── xo.test.ts
│ │ │ │ ├── yarn-berry.test.ts
│ │ │ │ ├── yarn.test.ts
│ │ │ │ └── yorkie.test.ts
│ │ │ ├── pragma.test.ts
│ │ │ ├── re-exports-aliased-ns.test.ts
│ │ │ ├── re-exports-cjs.test.ts
│ │ │ ├── re-exports-deep.test.ts
│ │ │ ├── re-exports-default-renamed-deep.test.ts
│ │ │ ├── re-exports-default-renamed.test.ts
│ │ │ ├── re-exports-destructure-spread.test.ts
│ │ │ ├── re-exports-enum-members-workspace.test.ts
│ │ │ ├── re-exports-enum-unused.test.ts
│ │ │ ├── re-exports-enum.test.ts
│ │ │ ├── re-exports-export-declaration.test.ts
│ │ │ ├── re-exports-export-ns.test.ts
│ │ │ ├── re-exports-ignore-exports-used-in-file.test.ts
│ │ │ ├── re-exports-ns-member.test.ts
│ │ │ ├── re-exports-pseudo.test.ts
│ │ │ ├── re-exports-public.test.ts
│ │ │ ├── re-exports-recursive.test.ts
│ │ │ ├── re-exports-renamed.test.ts
│ │ │ ├── re-exports-spread.test.ts
│ │ │ ├── re-exports-twice.test.ts
│ │ │ ├── re-exports-with-decorator.test.ts
│ │ │ ├── re-exports.test.ts
│ │ │ ├── rules.test.ts
│ │ │ ├── script-visitors-bun.test.ts
│ │ │ ├── script-visitors-execa.test.ts
│ │ │ ├── script-visitors-zx.test.ts
│ │ │ ├── self-reference-from-plugin.test.ts
│ │ │ ├── self-reference.test.ts
│ │ │ ├── session/
│ │ │ │ ├── session.contention.test.ts
│ │ │ │ ├── session.file-changes.test.ts
│ │ │ │ ├── session.re-exports.test.ts
│ │ │ │ ├── session.test.ts
│ │ │ │ └── util.ts
│ │ │ ├── session-dependencies.test.ts
│ │ │ ├── skip-exports-analysis.test.ts
│ │ │ ├── subpath-import-from-plugin.test.ts
│ │ │ ├── subpath-import.test.ts
│ │ │ ├── subpath-imports-outdir.test.ts
│ │ │ ├── subpath-patterns.test.ts
│ │ │ ├── tagged-template-literal.test.ts
│ │ │ ├── tags-cli.test.ts
│ │ │ ├── tags-exclude.test.ts
│ │ │ ├── tags-include.test.ts
│ │ │ ├── ts-namespace.test.ts
│ │ │ ├── tsc-files-mode.test.ts
│ │ │ ├── tsconfig-extends.test.ts
│ │ │ ├── tsconfig-include-dir.test.ts
│ │ │ ├── tsconfig-nested-paths.test.ts
│ │ │ ├── tsconfig-paths-extends.test.ts
│ │ │ ├── tsconfig-preset-strict.test.ts
│ │ │ ├── tsconfig-rootdirs.test.ts
│ │ │ ├── tsconfig.json
│ │ │ ├── type-in-type.test.ts
│ │ │ ├── type-in-value-export.test.ts
│ │ │ ├── types.test.ts
│ │ │ ├── unresolved-rtl.test.ts
│ │ │ ├── url-import-meta-url.test.ts
│ │ │ ├── util/
│ │ │ │ ├── codeowners.test.ts
│ │ │ │ ├── convert-gitignore-patterns.test.ts
│ │ │ │ ├── find-and-parse-gitignores.test.ts
│ │ │ │ ├── get-included-issue-types.test.ts
│ │ │ │ ├── get-inputs-from-scripts.test.ts
│ │ │ │ ├── graph-sequencer.test.ts
│ │ │ │ ├── has-strictly-ns-references.test.ts
│ │ │ │ ├── load.test.ts
│ │ │ │ ├── modules.test.ts
│ │ │ │ ├── remove-export.test.ts
│ │ │ │ ├── serialize.test.ts
│ │ │ │ ├── string.test.ts
│ │ │ │ ├── table.test.ts
│ │ │ │ ├── workspace-selectors.test.ts
│ │ │ │ └── workspace.test.ts
│ │ │ ├── workspace-selectors-errors.test.ts
│ │ │ ├── workspace-selectors-root.test.ts
│ │ │ ├── workspace-selectors.test.ts
│ │ │ ├── workspaces-circular-symlinks.test.ts
│ │ │ ├── workspaces-circular.test.ts
│ │ │ ├── workspaces-cross-reference.test.ts
│ │ │ ├── workspaces-dts.test.ts
│ │ │ ├── workspaces-entry-files.test.ts
│ │ │ ├── workspaces-ignored.test.ts
│ │ │ ├── workspaces-include-entry-exports.test.ts
│ │ │ ├── workspaces-module-resolution.test.ts
│ │ │ ├── workspaces-nested.test.ts
│ │ │ ├── workspaces-noconfig-plugin.test.ts
│ │ │ ├── workspaces-paths-compilers.test.ts
│ │ │ ├── workspaces-paths.test.ts
│ │ │ ├── workspaces-plugin-circular.test.ts
│ │ │ ├── workspaces-plugin-config.test.ts
│ │ │ ├── workspaces-plugin-overlap.test.ts
│ │ │ ├── workspaces-pnpm.test.ts
│ │ │ ├── workspaces-self-reference.test.ts
│ │ │ ├── workspaces-tooling.test.ts
│ │ │ ├── workspaces.test.ts
│ │ │ └── zero-config.test.ts
│ │ └── tsconfig.json
│ ├── language-server/
│ │ ├── README.md
│ │ ├── license
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── cli.js
│ │ │ ├── code-actions.js
│ │ │ ├── constants.js
│ │ │ ├── diagnostics.js
│ │ │ ├── index.js
│ │ │ ├── server.js
│ │ │ └── types.d.ts
│ │ └── tsconfig.json
│ ├── mcp-server/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── license
│ │ ├── package.json
│ │ └── src/
│ │ ├── cli.js
│ │ ├── curated-resources.js
│ │ ├── server.js
│ │ ├── texts.js
│ │ └── tools.js
│ └── vscode-knip/
│ ├── .gitignore
│ ├── .release-it.json
│ ├── README.md
│ ├── license
│ ├── package.json
│ ├── scripts/
│ │ ├── publish.js
│ │ └── sync-from-mcp.js
│ ├── src/
│ │ ├── collect-dependency-hover-snippets.js
│ │ ├── collect-export-hover-snippets.js
│ │ ├── index.js
│ │ ├── render-dependency-hover.js
│ │ ├── render-export-hover.js
│ │ ├── tools.js
│ │ ├── tree-view-base.js
│ │ ├── tree-view-exports.js
│ │ └── tree-view-imports.js
│ ├── test/
│ │ ├── extension.test.mjs
│ │ ├── index.mjs
│ │ └── run.mjs
│ └── tsconfig.json
├── pnpm-workspace.yaml
├── release.sh
└── templates/
├── demo/
│ ├── monorepo/
│ │ ├── .gitignore
│ │ ├── knip.ts
│ │ ├── package.json
│ │ ├── packages/
│ │ │ ├── client/
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ └── index.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── server/
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ └── index.ts
│ │ │ │ └── tsconfig.json
│ │ │ └── shared/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── exports.ts
│ │ │ │ ├── import-numbers.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── numbers.ts
│ │ │ │ └── used-fn.ts
│ │ │ └── tsconfig.json
│ │ └── tsconfig.json
│ └── script/
│ └── demo.lua
├── issue-reproduction/
│ ├── basic/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── index.ts
│ │ ├── knip.json
│ │ ├── package.json
│ │ └── tsconfig.json
│ └── monorepo/
│ ├── .gitignore
│ ├── README.md
│ ├── knip.json
│ ├── package.json
│ ├── packages/
│ │ ├── client/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ └── index.ts
│ │ │ └── tsconfig.json
│ │ └── lib/
│ │ ├── package.json
│ │ ├── src/
│ │ │ └── index.ts
│ │ └── tsconfig.json
│ └── tsconfig.json
├── language-server-client/
│ ├── .gitignore
│ ├── knip.json
│ ├── package.json
│ ├── packages/
│ │ ├── client/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── blend.js
│ │ │ │ ├── index.ts
│ │ │ │ ├── pick.js
│ │ │ │ └── reap.js
│ │ │ └── tsconfig.json
│ │ ├── server/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── branch-definition.ts
│ │ │ │ ├── branch-left.ts
│ │ │ │ ├── branch-right.ts
│ │ │ │ ├── branch.ts
│ │ │ │ ├── circular-a.ts
│ │ │ │ ├── circular-b.ts
│ │ │ │ ├── circular-c.ts
│ │ │ │ ├── conflict-1.ts
│ │ │ │ ├── conflict-2.ts
│ │ │ │ ├── conflict-3.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── overload-1.ts
│ │ │ │ ├── overload-2.ts
│ │ │ │ └── overload-3.ts
│ │ │ └── tsconfig.json
│ │ └── shared/
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── constants.ts
│ │ │ ├── fruits.ts
│ │ │ ├── helpers.ts
│ │ │ ├── index.ts
│ │ │ └── unused.ts
│ │ └── tsconfig.json
│ └── tsconfig.json
└── playground/
├── basic/
│ ├── README.md
│ ├── clutter.ts
│ ├── index.ts
│ ├── package.json
│ ├── tsconfig.json
│ └── util.ts
└── monorepo/
├── .gitignore
├── README.md
├── knip.ts
├── package.json
├── packages/
│ ├── client/
│ │ ├── package.json
│ │ ├── src/
│ │ │ └── index.ts
│ │ └── tsconfig.json
│ ├── server/
│ │ ├── package.json
│ │ ├── src/
│ │ │ └── index.ts
│ │ └── tsconfig.json
│ └── shared/
│ ├── package.json
│ ├── src/
│ │ ├── exports.ts
│ │ ├── index.ts
│ │ └── used-fn.ts
│ └── tsconfig.json
└── tsconfig.json
================================================
FILE CONTENTS
================================================
================================================
FILE: .agents/MODULE_GRAPH.md
================================================
# Module Graph
Concise walk-through from CLI to reporter output.
Core module graph and AST traversal.
## Implementation walk-through
The sequence from [CLI][1]:
1. [Create options][2]
2. [Run][3]
1. Normalize user config
2. Get workspaces
3. [Build module graph][4]
1. [Run enabled plugins][5] in each workspace
2. Store entry points and referenced dependencies
3. [Create TS programs][6]
4. [Get imports and exports][7] using TS AST traversal/visitors
5. [Get dependencies/binaries from scripts][8]
4. [Analyze module graph][9]
1. Find [unused exports][10] (respecting [namespaces & members][11])
2. Settle unused files
3. [Settle unused/unlisted dependencies][12]
4. Settle unused catalog entries
3. [Run default reporter][13]
[1]: ./packages/knip/src/cli.ts
[2]: ./packages/knip/src/util/create-options.ts
[3]: ./packages/knip/src/run.ts
[4]: ./packages/knip/src/graph/build.ts
[5]: ./packages/knip/src/WorkspaceWorker.ts
[6]: ./packages/knip/src/ProjectPrincipal.ts
[7]: ./packages/knip/src/typescript/get-imports-and-exports.ts
[8]: ./packages/knip/src/binaries/bash-parser.ts
[9]: ./packages/knip/src/graph/analyze.ts
[10]: ./packages/knip/src/graph-explorer/operations/is-referenced.ts
[11]:
./packages/knip/src/graph-explorer/operations/has-strictly-ns-references.ts
[12]: ./packages/knip/src/DependencyDeputy.ts
[13]: ./packages/knip/src/reporters/symbols.ts
================================================
FILE: .agents/PLUGINS.md
================================================
# Plugins
## General
Read [Writing A Plugin][1] first to understand:
- Plugin responsibilities
- Functions like `resolveConfig` and `Input` type definition
- Consider `resolveFromAST` only for custom plugin-specific needs (core takes
care of module resolution, imports, exports, external dependencies)
## Creating a new plugin
To create a new plugin for a certain package/tool/framework:
- Come up with a kebab-cased `name`.
- Run `pnpm create-plugin --name [name]` from the `packages/knip` directory.
- Update the plugin's `types.ts`: add only relevant types, remove if unused.
- Consult similar plugins and the tool's website before implementation
- Update and fill out the blanks in the generated files.
- Remove unused variables and empty arrays from the template
- Don't forget: [run tests][2] individually first.
[1]: ../packages/docs/src/content/docs/writing-a-plugin/index.md
[2]: ../AGENTS.md#test
================================================
FILE: .gitattributes
================================================
# Convert all files to use "\n" line endings.
* text eol=lf
# Specify the file type for some binary files to prevent Git from changing the line endings upon
# cloning the repository.
*.gif binary
*.ico binary
*.jpeg binary
*.jpg binary
*.png binary
*.otf binary
*.mov binary
*.mp3 binary
*.mp4 binary
*.webm binary
*.webp binary
================================================
FILE: .github/CODE_OF_CONDUCT.md
================================================
# Code of Conduct
- **Be kind & respectful**: Treat everyone with kindness, empathy, and respect. No personal attacks, offensive language,
or discrimination.
- **Collaborate**: Share your ideas, help others, and work together. We're all here to learn and grow!
- **Communicate clearly**: Be open and honest, but also considerate. Keep your messages clear and concise.
- **Stay on topic**: Keep discussions relevant to the project. Off-topic conversations can happen elsewhere.
- **Be patient**: We all have different skill levels and backgrounds. Give people time to respond and learn.
- **Report issues**: If you see any violations of this Code of Conduct, please report them to the [project
maintainer][1].
This document is a summary of [the Contributor Covenant Code Of Conduct][2].
By participating in this project, you agree to follow this Code of Conduct.
[1]: https://github.com/webpro
[2]: https://www.contributor-covenant.org/version/2/1/code_of_conduct/
================================================
FILE: .github/CONTRIBUTING.md
================================================
# Contributing
Thank you for investing your time in contributing to Knip!
Read our [Code of Conduct][1] to keep our community approachable and
respectable.
## Types of contributions
- Star the project to show your support
- Share [Knip][2] in social media or blog posts
- [Open an issue][3]
- [Open a pull request][4] to:
- Fix a bug
- Add a new feature
- Add a new plugin
- Improve output or add a new reporter
- Improve documentation
- Improve performance or architecture
The main goal of Knip is to keep projects clean & tidy. Everything that
contributes to that goal is welcome!
## Open an issue
Feel free to open an issue for things like this:
- Knip throws an error.
- Knip shows incorrect output, e.g. it reports false negatives.
- Documentation is incorrect or something is missing.
- Questions about configuration or how to run Knip.
- Discuss whether to start a pull request.
- Request a new feature.
Before you open an issue:
- Make sure you're using the **latest** version of Knip (see
[https://github.com/webpro-nl/knip/releases][5])
- Use GitHub search to find related questions, known issues, etc.
- If relevant, use the `--debug` flag which might reveal errors, potential
issues with configuration, etc.
## Open a pull request
Pull requests are welcome!
Please consider this before opening a pull request:
- Open an issue before starting the work if for any reason you're not 100% sure
about it. We can optimize both your and our time if we discuss ideas and
choose a direction upfront.
- Pull requests may not align with the general philosophy, or may not be
affordable to maintain, and therefore rejected.
- Generated ("vibe-coded") pull requests may be rejected without explanation.
- Read [development][6] instructions and guidelines.
- If you think your PR is not ready for review yet, [set it as a draft][7].
- No need to worry about commit messages, they will probably be squashed into a
single commit when merged.
- After your first PR is merged, you are automatically added to the [list of
contributors][8].
[1]: ./CODE_OF_CONDUCT.md
[2]: https://knip.dev
[3]: #open-an-issue
[4]: #open-a-pull-request
[5]: https://github.com/webpro-nl/knip/releases
[6]: ./DEVELOPMENT.md
[7]:
https://docs.github.com/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-stage-of-a-pull-request
[8]: https://knip.dev/#created-by-awesome-contributors
================================================
FILE: .github/DEVELOPMENT.md
================================================
# Development
Development in this repository is using:
- pnpm
- TypeScript
- Biome
This document describes commands and tasks that might help during development.
Use what fits your workflow best, but make sure [QA][1] passes.
> [!TIP]
>
> tl;dr The quickest way to get started: `git clone`, `pnpm install`, find a
> relevant test file in `packages/knip/test`, and [hit F5 in VS Code or
> WebStorm][2].
## Contents
- [Getting started][3]
- [Agents][4]
- [Contributing a plugin?][5]
- [Running Knip][6]
- [Tests][7]
- [QA][1]
- [GitHub Action][8]
## Getting started
This guide assumes familiarity with concepts like [forking][9], [cloning a
repo][10] and working with a package manager.
- Fork the project using the [GitHub website][11] or the [`gh` CLI][12]
- Clone the repository
- Install dependencies
Example terminal commands on your machine to get started:
```shell
git clone git@github.com:[username]/knip.git
# Or using gh CLI: gh repo fork webpro-nl/knip --clone
cd knip
pnpm install
cd packages/knip
pnpm build
pnpm test
```
To skip slower tests related to CLI and `--fix`, while still covering all the
essentials and plugins:
```shell
pnpm test:smoke
bun test:bun:smoke
```
## Agents
Using coding agents cq AI-powered tooling? Inform it about [AGENTS.md][13]. Take
responsibility and make sure to not cause unnecessary review and "wall of text"
overhead to maintainers. Also [consider this before opening a pull request][14].
## Contributing a plugin?
In addition to the generic guidelines in this document, there's a guide for
[writing a plugin][15].
## Running Knip
Knip is written in TypeScript, and there are a few options to run it including
your changes:
- [Compile][16] ahead of time to JavaScript to run in Node.js
- [Without compilation][17]
- Transpile on the fly using e.g `tsx` to run in Node.js
- Use a runtime that supports TypeScript (i.e. Bun)
### Compile
Use `pnpm build` to compile using `tsc` once. To recompile on changes:
```shell
pnpm watch
```
On source code changes, `tsc` will compile to JavaScript, and the `knip`
executable is available globally to run from any directory.
### Without compilation
Run Knip without compilation:
```shell
node path/to/knip/packages/knip/src/cli.ts
```
#### Alias
Expanding on this idea, set up an alias like so:
```shell
alias k="node --inspect ~/p/knip/packages/knip/src/cli.ts"
```
Invoke `k` to run Knip including any local changes. And if it's in the built-in
terminal, it will stop at breakpoints. For the rest of this document, `knip` or
`node --inspect` can be replaced with `k`.
## Tests
Most pull requests should probably include one or more tests.
Assuming you've created `test/feature.test.ts` and `fixtures/feature` (the
plugin create command does for you), here's a few ideas to run and debug Knip
from a test.
Creating a new plugin? The [plugin guide][18] has a command to set up a test
with fixtures for you.
### Run single test file
```shell
node --test test/my-feature.test.ts
bun test test/plugins/my-plugin.test.ts
```
### Run Knip in the directory
```shell
knip --directory fixtures/feature
```
### Attach debugger to Node.js
To debug Knip in an IDE (e.g. [VS Code][19] or [WebStorm][20]), open the
built-in terminal and allow the debugger to connect:
```shell
cd fixtures/feature
node --inspect ../../src/cli.ts
```
Make sure VS Code is set up to attach to the Node.js process ("Always" or "With
flag").
### Attach debugger from inside a test file
Run configurations for VS Code and WebStorm² are set up in the repo. This a
great way to debug almost anything in Knip.
- Using Node.js
- From any test file, run the "Debug test with tsx/Node.js" launch config
- Using Bun
- VS Code: ensure the [Bun extension][21] is enabled
- WebStorm: ensure the [Bun plugin][22] is enabled
- From any test file, run the "Debug test with Bun" launch config
From now on, just set a breakpoint and hit `F5` (Code) or `ctrl-r` (WS) from any
test file to run and debug.
² Requires at least WebStorm 2025.2 EAP
### Attach debugger to tests
In case you're wondering if or why some code is ever hit, attach the debugger to
each test. Set a breakpoint and run all tests in one of the following ways:
- From built-in terminal: `tsx --inspect --test test/**/*.test.ts`
- Use the "Debug all tests with Bun" launch config.
## QA
Knip has a few tools set up to verify code quality and to format code and
documentation:
```shell
pnpm format
pnpm lint
pnpm knip
pnpm knip --strict
pnpm test
```
## GitHub Action
The [ci.yml][23] workflow runs the tests across Bun, recent Node.js versions,
Ubuntu, macOS and Windows. QA in CI must be all green before a pull request can
be merged. The [integration.yml][24] workflow runs Knip in multiple repositories
using Knip, against the latest version of the code.
## Previews
Thanks to [pkg.pr.new][25] pull requests can be previewed by installing it as a
regular package. Every push is published to their registry. Look for the
`pkg-pr-new` bot in your pull request.
[1]: #qa
[2]: #attach-debugger-to-bun-from-a-test
[3]: #getting-started
[4]: #agents
[5]: #contributing-a-plugin
[6]: #running-knip
[7]: #tests
[8]: #github-action
[9]: https://docs.github.com/get-started/quickstart/fork-a-repo
[10]:
https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository
[11]: https://github.com/webpro-nl/knip
[12]: https://cli.github.com/
[13]: ../AGENTS.md
[14]: ./CONTRIBUTING.md#open-a-pull-request
[15]: https://knip.dev/guides/writing-a-plugin/
[16]: #compile
[17]: #without-compilation
[18]: https://knip.dev/guides/writing-a-plugin#create-a-new-plugin
[19]: https://code.visualstudio.com/docs/nodejs/nodejs-debugging
[20]: https://www.jetbrains.com/help/webstorm/running-and-debugging-node-js.html
[21]: https://marketplace.visualstudio.com/items?itemName=oven.bun-vscode
[22]: https://www.jetbrains.com/help/webstorm/bun.html#bun_before_you_start
[23]: https://github.com/webpro-nl/knip/actions/workflows/ci.yml
[24]: https://github.com/webpro-nl/knip/actions/workflows/integration.yml
[25]: https://pkg.pr.new
================================================
FILE: .github/FUNDING.yml
================================================
github: webpro
open_collective: knip
================================================
FILE: .github/ISSUE_TEMPLATE/01-bug_report.yaml
================================================
name: 🐛 Bug report
description: Create a report to help us improve
title: '🐛 '
labels: ['bug']
body:
- type: markdown
attributes:
value: |
Use common sense and provide the necessary information that helps us to help you.
A minimal reproduction is mandatory: only the code and configuration required to demonstrate the issue.
Issues that do not meet these requirements may be closed without further investigation.
- type: checkboxes
attributes:
label: Prerequisites
description: Please check existing information about your issue
options:
- label: I'm using the latest version
required: true
- label: I've read the relevant [documentation](https://knip.dev)
required: true
- label: I've searched for [existing issues](https://github.com/webpro-nl/knip/issues?q=is%3Aissue)
required: true
- label: I've checked the [list of known issues](https://knip.dev/reference/known-issues)
required: true
- label: I've read the [issue reproduction guide](https://knip.dev/guides/issue-reproduction)
required: true
- type: input
id: reproduction
attributes:
label: Reproduction url
description: Please link to the location of the issue reproduction
validations:
required: true
- type: checkboxes
attributes:
label: Reproduction access
description: For instance, a CodeSandbox seems private by default
options:
- label: I've made sure the reproduction is publicly accessible
required: true
- type: textarea
id: description
attributes:
label: Description of the issue
description: What happened, and what would you expect to happen?
validations:
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/02-regression.yaml
================================================
name: 🔄 Regression
description: Something that worked a certain way before, but no longer does
title: '🔄 '
labels: ['regression']
body:
- type: markdown
attributes:
value: |
Please make sure you have read the docs and are using the latest version of Knip.
Use common sense and provide the necessary information that helps me or others to help you.
A minimal reproduction is mandatory: only the code and configuration required to demonstrate the issue.
Issues that do not meet these requirements may be closed without further investigation.
- type: checkboxes
attributes:
label: Prerequisites
description: Please check existing information about your issue
options:
- label: I've read the relevant [documentation](https://knip.dev)
required: true
- label: I've searched for [existing
issues](https://github.com/webpro-nl/knip/issues?q=is%3Aissue)
required: true
- label: I've read the [issue reproduction
guide](https://knip.dev/guides/issue-reproduction)
required: true
- type: input
id: reproduction
attributes:
label: Reproduction url
description: Please link to the location of the issue reproduction
validations:
required: true
- type: checkboxes
attributes:
label: Reproduction access
description: For instance, a CodeSandbox seems private by default
options:
- label: I've made sure the reproduction is publicly accessible
required: true
- type: input
id: good-version
attributes:
label: Good version
description: What's the latest version it worked as expected?
validations:
required: true
- type: input
id: bad-version
attributes:
label: Bad version
description: What's the first version it no longer works as expected?
validations:
required: true
- type: textarea
id: description
attributes:
label: Description of the regression
description: What happened before, what happens now?
validations:
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/03-feature_request.yaml
================================================
name: 💡 Feature Request (RFC)
description: Suggest an idea for Knip
title: '💡 '
labels: ['feature request']
body:
- type: markdown
attributes:
value: Use common sense and provide the necessary information to explain why
the feature is useful to you and to others. Thanks!
- type: textarea
id: description
attributes:
label: Suggest an idea for Knip
validations:
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/04-documentation.yaml
================================================
name: 📘 Documentation
description: An idea for or issue with the documentation website (knip.dev)
title: '📘 '
labels: ['documentation']
body:
- type: markdown
attributes:
value: An idea for or issue with the documentation website
- type: input
id: link
attributes:
label: Link
description: If possible or relevant, please link to the location
- type: textarea
id: description
attributes:
label: Description of the issue
description: Please describe the issue
validations:
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/05-everything-else.yaml
================================================
name: 🧩 Everything Else
description: Discuss anything related to Knip
title: '🧩 '
labels: ['discussion']
body:
- type: markdown
attributes:
value: Feel free to discuss something related to Knip that does not fit the other categories.
- type: textarea
id: description
attributes:
label: Discuss anything related to Knip
validations:
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<!--
- Try to author code and/or docs similar to the rest of the repository
- See [DEVELOPMENT.md][1] for development and QA guidelines
Through [the CI workflow][2] the changes will be tested in Ubuntu, macOS and Windows.
The changes will also be [tested against a number of external projects][3].
[1]: https://github.com/webpro-nl/knip/blob/main/.github/DEVELOPMENT.md
[2]: https://github.com/webpro-nl/knip/blob/main/.github/workflows/ci.yml
[3]: https://github.com/webpro-nl/knip/blob/main/.github/workflows/integration.yml
-->
================================================
FILE: .github/copilot-instructions.md
================================================
See [AGENTS.md][1].
[1]: ../AGENTS.md
================================================
FILE: .github/workflows/ci-bun.yml
================================================
name: Tests (Bun)
on:
workflow_dispatch:
pull_request:
push:
branches:
- '**'
tags:
- '!**'
jobs:
test:
strategy:
matrix:
os:
- macos-latest
- ubuntu-latest
- windows-latest
runs-on: ${{ matrix.os }}
name: ${{ matrix.os }}
steps:
- uses: actions/checkout@v6
- uses: oven-sh/setup-bun@v2
with:
bun-version: 1.2.22
- name: Install dependencies
run: bun install --ignore-scripts
- name: Run linter and formatter
run: bun ci
- name: Build knip
run: bun run build
working-directory: packages/knip
- name: Run knip
run: ./packages/knip/bin/knip-bun.js
- name: Run knip (production/strict)
run: ./packages/knip/bin/knip-bun.js --production --strict
- name: Test knip
run: bun run test:bun
working-directory: packages/knip
================================================
FILE: .github/workflows/ci-ts-latest.yml
================================================
name: Tests (against typescript@latest in Node.js v22)
on:
workflow_dispatch:
pull_request:
push:
branches:
- '**'
tags:
- '!**'
jobs:
test:
runs-on: ubuntu-latest
name: Ubuntu/Node v22
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: 22
- uses: pnpm/action-setup@v5
- name: Install dependencies
run: pnpm install
- name: Install latest peer dependencies
run: pnpm add typescript@latest @types/node@22
working-directory: packages/knip
- name: Build knip
run: pnpm run build
working-directory: packages/knip
- name: Test knip
run: pnpm run test:node
working-directory: packages/knip
- name: Run knip
run: ./packages/knip/bin/knip.js
- name: Run knip in strict mode
run: ./packages/knip/bin/knip.js --production --strict
================================================
FILE: .github/workflows/ci-ts-next.yml
================================================
name: Tests (against typescript@next in Node.js v24)
on:
workflow_dispatch:
pull_request:
push:
branches:
- '**'
tags:
- '!**'
jobs:
test:
runs-on: ubuntu-latest
name: Ubuntu/Node v24
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: 24
- uses: pnpm/action-setup@v5
- name: Install dependencies
run: pnpm install
- name: Install latest peer dependencies
run: pnpm add typescript@next @types/node@24
working-directory: packages/knip
- name: Build knip
run: pnpm run build
working-directory: packages/knip
- name: Test knip
run: pnpm run test:node
working-directory: packages/knip
- name: Run knip
run: ./packages/knip/bin/knip.js
- name: Run knip in strict mode
run: ./packages/knip/bin/knip.js --production --strict
================================================
FILE: .github/workflows/ci.yml
================================================
name: Tests (against typescript@5.0.4 in Node.js v20)
on:
workflow_dispatch:
pull_request:
push:
branches:
- '**'
tags:
- '!**'
jobs:
test:
strategy:
matrix:
os:
- macos-latest
- ubuntu-latest
- windows-latest
node:
- 20
- 22
runs-on: ${{ matrix.os }}
name: ${{ matrix.os }} (Node v${{ matrix.node }})
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: ${{ matrix.node }}
- uses: pnpm/action-setup@v5
- name: Install dependencies
run: pnpm install
- name: Build knip
run: pnpm run build
working-directory: packages/knip
- name: Install earliest supported peer dependencies
run: pnpm add typescript@5.0.4 @types/node@20
working-directory: packages/knip
- name: Type-check against TS 5.0.4
run: |
node -e "let f=require('fs'),p='tsconfig.json';f.writeFileSync(p,f.readFileSync(p,'utf8').replace(/.*(?:rewriteRelativeImportExtensions|erasableSyntaxOnly).*\n/g,''))"
pnpm tsc --noEmit
working-directory: packages/knip
- name: Test knip
run: pnpm run test:smoke
working-directory: packages/knip
- name: Run knip
run: ./packages/knip/bin/knip.js --reporter github-actions
- name: Run knip in strict mode
run: ./packages/knip/bin/knip.js --production --strict
================================================
FILE: .github/workflows/integration.yml
================================================
name: Publish preview & run ecosystem tests
on:
workflow_dispatch:
pull_request:
push:
branches:
- '**'
tags:
- '!**'
permissions:
issues: write
jobs:
publish:
name: Build and publish Knip
runs-on: ubuntu-latest
outputs:
sha: ${{ steps.publish.outputs.sha }}
steps:
- uses: actions/checkout@v6
- uses: pnpm/action-setup@v5
- run: pnpm install --frozen-lockfile
working-directory: packages/knip
- run: pnpm run build
working-directory: packages/knip
- id: publish
run: |
pnpx pkg-pr-new publish --compact './packages/knip' './packages/language-server' './packages/mcp-server'
- name: Comment on referenced issues
if: github.event_name == 'push'
uses: actions/github-script@v8
with:
script: |
const sha = '${{ steps.publish.outputs.sha }}';
const commits = context.payload.commits || [];
const messages = commits.map(commit => commit.message).join('\n');
const issueRefs = messages.match(/#(\d+)/g) || [];
const issues = new Set(issueRefs.map(ref => parseInt(ref.slice(1))));
const isClosingMatch = /(?:close[sd]?|fix(?:e[sd])?|resolve[sd]?)\s+#(\d+)/gi;
const closingIssues = new Set([...messages.matchAll(isClosingMatch)].map(m => parseInt(m[1])));
for (const issue_number of issues) {
try {
const { owner, repo } = context.repo;
const { data } = await github.rest.issues.get({ owner, repo, issue_number });
if (data.state === 'open' || closingIssues.has(issue_number)) {
const body = `Preview release available:\n\`\`\`sh\nnpm i -D https://pkg.pr.new/knip@${sha}\n\`\`\``;
await github.rest.issues.createComment({ owner, repo, issue_number, body });
}
} catch(error) {
console.log(`Could not comment on #${issue_number}: ${error.message}`);}
}
integration:
name: Run Knip in ${{ matrix.project.name }}
needs: publish
runs-on: ubuntu-latest
env:
PKG_URL: https://pkg.pr.new/knip@${{ needs.publish.outputs.sha }}
strategy:
fail-fast: false
matrix:
project:
- name: 10ten-ja-reader
repo: birchill/10ten-ja-reader
commands: |
pnpm install
pnpm dlx $PKG_URL
- name: argos
repo: argos-ci/argos
commands: |
pnpm install
pnpm build
pnpm add -D -w $PKG_URL
pnpm run knip
- name: astro
repo: withastro/astro
commands: |
pnpm install
pnpm build
pnpm add -D -w $PKG_URL
- name: create-typescript-app
repo: JoshuaKGoldberg/create-typescript-app
commands: |
pnpm install
pnpm add -D $PKG_URL
pnpm lint:knip
- name: DefinitelyTyped-tools
repo: microsoft/DefinitelyTyped-tools
commands: |
pnpm install
pnpm dlx $PKG_URL
- name: eslint
repo: eslint/eslint
commands: |
npm install
npm install --prefix docs
npm install -D $PKG_URL
npm run lint:unused -- --cache
npm run lint:unused -- --cache
- name: mocha
repo: mochajs/mocha
commands: |
npm ci
npm install -D $PKG_URL
npm run lint:knip
- name: InvokeAI
repo: invoke-ai/InvokeAI
sparse-checkout: invokeai/frontend/web
commands: |
cd invokeai/frontend/web
pnpm install
pnpm add -D $PKG_URL
bunx --bun knip --tags=-knipignore
bunx --bun knip --tags=-knipignore --production --fix --allow-remove-files --format
bunx --bun knip --tags=-knipignore --production
- name: npmx.dev
repo: npmx-dev/npmx.dev
commands: |
pnpm install
pnpm add -D -w $PKG_URL
pnpm knip
pnpm knip --production --exclude dependencies
- name: prettier
repo: prettier/prettier
commands: |
yarn
yarn --cwd scripts/release
yarn --cwd scripts/tools/bundle-test
yarn --cwd scripts/tools/eslint-plugin-prettier-internal-rules
yarn --cwd website
yarn add -D knip@$PKG_URL
yarn knip
- name: query
repo: TanStack/query
commands: |
pnpm install
pnpm add -D -w $PKG_URL
pnpm test:knip --cache
pnpm test:knip --cache
- name: rolldown
repo: rolldown/rolldown
commands: |
pnpm install
pnpm add -D -w knip@$PKG_URL
pnpm knip
- name: sentry
repo: getsentry/sentry
commands: |
pnpm install
pnpm add -D $PKG_URL
pnpm run knip
pnpm run knip:prod
- name: slonik
repo: gajus/slonik
commands: |
pnpm install --no-frozen-lockfile
pnpm dlx $PKG_URL
- name: TypeScript
repo: microsoft/TypeScript
commands: |
npm ci
npm install -D $PKG_URL
npm run knip
steps:
- uses: actions/checkout@v6
- name: Check out ${{ matrix.project.repo }}
uses: actions/checkout@v6
with:
repository: ${{ matrix.project.repo }}
path: ${{ matrix.project.name }}
sparse-checkout: ${{ matrix.project.sparse-checkout }}
- name: Apply patch if exists
working-directory: ${{ matrix.project.name }}
run: |
PATCH_FILE="${{ github.workspace }}/.github/workflows/patches/${{ matrix.project.name }}.patch"
[ -f "$PATCH_FILE" ] && git apply --verbose "$PATCH_FILE" || true
- uses: actions/setup-node@v6
with:
node-version: 24
- uses: oven-sh/setup-bun@v2
- uses: pnpm/action-setup@v5
- name: Run Knip in ${{ matrix.project.repo }}
working-directory: ${{ matrix.project.name }}
run: |
set -x
${{ matrix.project.commands }}
================================================
FILE: .github/workflows/markdown-link-check.json
================================================
{
"aliveStatusCodes": [0, 200, 429],
"ignorePatterns": [
{ "generated": "packages/docs/src/content/docs/reference/plugins/*.md" }
]
}
================================================
FILE: .github/workflows/markdown-link-check.yml
================================================
name: Check Markdown links
on:
push:
branches:
- '**'
tags:
- '!**'
jobs:
markdown-link-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@main
- name: Check Markdown links
uses: gaurav-nelson/github-action-markdown-link-check@v1
with:
config-file: .github/workflows/markdown-link-check.json
use-quiet-mode: 'yes'
use-verbose-mode: 'yes'
================================================
FILE: .github/workflows/patches/.gitkeep
================================================
================================================
FILE: .github/workflows/patches/TypeScript.patch
================================================
diff --git a/knip.jsonc b/knip.jsonc
index f471ada9b2..83844be8aa 100644
--- a/knip.jsonc
+++ b/knip.jsonc
@@ -32,6 +32,7 @@
"ignoreExportsUsedInFile": {
"enum": true,
"interface": true,
+ "namespace": true,
"type": true
},
"mocha": false
================================================
FILE: .github/workflows/patches/argos.patch
================================================
diff --git a/knip.json b/knip.json
--- a/knip.json
+++ b/knip.json
@@ -11,7 +11,8 @@
"src/graphql/definitions/*.ts",
"scripts/*.ts"
],
- "ignore": ["**/bin/**/*"]
+ "ignore": ["**/bin/**/*"],
+ "ignoreDependencies": ["@argos/knex-scripts", "moment"]
},
"apps/frontend": {
"ignore": ["vite.config.mts"],
================================================
FILE: .github/workflows/patches/create-typescript-app.patch
================================================
diff --git a/knip.json b/knip.json
index 8bbe72d..23921d7 100644
--- a/knip.json
+++ b/knip.json
@@ -1,6 +1,6 @@
{
"$schema": "https://unpkg.com/knip@5.71.0/schema.json",
- "entry": ["src/**/*.test.*", "src/index.ts"],
+ "entry": ["src/**/*.test.*"],
"ignoreDependencies": [
"all-contributors-cli",
"cspell-populate-words",
================================================
FILE: .github/workflows/patches/npmx.dev.patch
================================================
diff --git a/knip.ts b/knip.ts
index f885994f..27d68897 100644
--- a/knip.ts
+++ b/knip.ts
@@ -4,18 +4,6 @@ const config: KnipConfig = {
workspaces: {
'.': {
entry: [
- 'app/router.options.ts!',
- 'app/app.vue!',
- 'app/error.vue!',
- 'app/pages/**/*.vue!',
- 'app/components/**/*.vue!',
- 'app/components/**/*.d.vue.ts!',
- 'app/composables/**/*.ts!',
- 'app/middleware/**/*.ts!',
- 'app/plugins/**/*.ts!',
- 'app/utils/**/*.ts!',
- 'server/**/*.ts!',
- 'modules/**/*.ts!',
'config/**/*.ts!',
'lunaria/**/*.ts!',
'shared/**/*.ts!',
@@ -24,11 +12,12 @@ const config: KnipConfig = {
'pwa-assets.config.ts',
'.lighthouserc.cjs',
'lighthouse-setup.cjs',
- 'uno-preset-rtl.ts!',
+ 'uno-preset-*.ts!',
'scripts/**/*.ts',
],
project: [
- '**/*.{ts,vue,cjs,mjs}',
+ '**/*.{ts,vue,cjs,mjs}!',
+ '!test/**!',
'!test/fixtures/**',
'!test/test-utils/**',
'!test/e2e/helpers/**',
@@ -48,31 +37,39 @@ const config: KnipConfig = {
/** Some components import types from here, but installing it directly could lead to a version mismatch */
'vue-router',
- /** Required by @nuxtjs/i18n at runtime but not directly imported in production code */
- '@intlify/shared',
-
/** Oxlint plugins don't get picked up yet */
'@e18e/eslint-plugin',
'eslint-plugin-regexp',
/** Used in test/e2e/helpers/ which is excluded from knip project scope */
'h3-next',
+
+ /** Not referenced in production source code (either pending/inactive, or effectively devDependencies) */
+ '@deno/doc!',
+ '@floating-ui/vue!',
+ '@intlify/shared!',
+ '@shikijs/langs!',
+ '@shikijs/themes!',
+ '@upstash/redis!',
+ '@vueuse/integrations!',
+ 'algoliasearch!',
+ 'focus-trap!',
+ 'ipaddr.js!',
+ 'marked!',
+ 'sanitize-html!',
+ 'semver!',
+ 'shiki!',
+ 'virtua!',
+ 'vue-data-ui!',
],
- ignoreUnresolved: ['#components', '#oauth/config'],
+ ignoreUnresolved: ['#oauth/config'],
},
'cli': {
project: ['src/**/*.ts!', '!src/mock-*.ts'],
},
'docs': {
entry: ['app/**/*.{ts,vue,css}'],
- ignoreDependencies: [
- 'docus',
- 'better-sqlite3',
- '@nuxtjs/mdc',
- 'nuxt!',
- '@nuxt/ui',
- 'tailwindcss',
- ],
+ ignoreDependencies: ['docus', 'better-sqlite3', '@nuxtjs/mdc', 'nuxt!'],
},
},
}
================================================
FILE: .gitignore
================================================
node_modules
/.idea/*
!/.idea/runConfigurations
.DS_Store
.npmrc
packages/*/dist
================================================
FILE: .idea/runConfigurations/Debug_Bun_test.xml
================================================
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Debug Bun test" type="BunRunConfiguration">
<option name="program" value="$FilePath$" />
<option name="runtimeParameters">
<list>
<option value="test" />
</list>
</option>
<option name="workingDirectory" value="$PROJECT_DIR$/packages/knip" />
<method v="2" />
</configuration>
</component>
================================================
FILE: .idea/runConfigurations/Debug_Node_test.xml
================================================
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Debug Node test" type="NodeJSConfigurationType" node-parameters="--test --import tsx --import ./transform-test.js" path-to-js-file="$FilePath$" working-dir="$PROJECT_DIR$/packages/knip">
<method v="2" />
</configuration>
</component>
================================================
FILE: .oxfmtrc.json
================================================
{
"printWidth": 120,
"singleQuote": true,
"arrowParens": "avoid",
"trailingComma": "es5",
"overrides": [
{
"files": ["**/*.json", "**/*.jsonc"],
"options": { "printWidth": 80 }
},
{
"files": ["*.css"],
"options": { "singleQuote": false }
},
{
"files": ["packages/knip/test/util/get-inputs-from-scripts.test.ts"],
"options": { "printWidth": 200 }
}
]
}
================================================
FILE: .oxlintrc.json
================================================
{
"$schema": "./node_modules/oxlint/configuration_schema.json",
"plugins": ["typescript", "import"],
"categories": {
"correctness": "error"
},
"rules": {
"no-unused-vars": [
"error",
{
"argsIgnorePattern": "^_",
"caughtErrorsIgnorePattern": "^_",
"destructuredArrayIgnorePattern": "^_"
}
],
"no-unused-expressions": [
"error",
{ "allowShortCircuit": true, "allowTernary": true }
],
"no-console": "error",
"@typescript-eslint/no-explicit-any": "off",
"no-param-reassign": "off",
"dot-notation": "off",
"array-callback-return": "off"
},
"ignorePatterns": [
"**/dist",
"**/tmp",
"**/vendor",
"packages/docs/.astro",
".vscode",
"templates"
],
"overrides": [
{
"files": ["**/*.astro"],
"rules": { "no-unused-vars": "off" }
},
{
"files": ["packages/knip/**"],
"rules": {
"no-restricted-imports": [
"error",
{
"paths": [
{
"name": "node:path",
"message": "Please use src/util/path.js instead."
},
{
"name": "path",
"message": "Please use src/util/path.js instead."
},
{
"name": "node:assert",
"message": "Please use node:assert/strict instead."
}
]
}
],
"import/extensions": ["error", "always", { "ignorePackages": true }]
}
},
{
"files": ["packages/docs/**", "packages/create-config/**"],
"rules": { "no-restricted-imports": "off", "no-console": "off" }
},
{
"files": ["packages/language-server/**"],
"rules": { "no-console": "off" }
},
{
"files": [
"packages/knip/src/reporters/**",
"packages/knip/scripts/**",
"packages/vscode-knip/scripts/**",
"packages/vscode-knip/test/**"
],
"rules": { "no-console": "off" }
},
{
"files": ["packages/knip/fixtures/**"],
"rules": {
"no-unused-expressions": "off",
"no-unused-vars": "off",
"no-console": "off",
"no-duplicate-enum-values": "off",
"no-restricted-imports": "off",
"triple-slash-reference": "off",
"import/namespace": "off",
"import/extensions": "off"
}
}
]
}
================================================
FILE: .prettierignore
================================================
**/dist
**/tmp
**/fixtures
**/*.md
**/*.mdx
templates/language-server-client
packages/docs/.astro
================================================
FILE: .release-it.json
================================================
{
"$schema": "https://unpkg.com/release-it@19/schema/release-it.json",
"git": {
"commitMessage": "Release ${npm.name}@${version}",
"tagName": "${npm.name}@${version}"
},
"npm": {
"publishPackageManager": "pnpm",
"publishArgs": ["--no-git-checks"]
}
}
================================================
FILE: .vscode/extensions.json
================================================
{
"recommendations": [
"oxc.oxc-vscode",
"remcohaszing.vscode-mdxlint",
"unifiedjs.vscode-remark"
]
}
================================================
FILE: .vscode/launch.json
================================================
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Debug test with Node.js",
"runtimeArgs": ["--test"],
"args": ["${file}"],
"cwd": "${workspaceFolder}/packages/knip",
"console": "integratedTerminal"
},
{
"type": "bun",
"request": "launch",
"name": "Debug test with Bun",
"program": "${file}",
"cwd": "${workspaceFolder}/packages/knip",
"runtime": "bun",
"runtimeArgs": ["test", "--timeout", "999999999"],
"internalConsoleOptions": "openOnSessionStart"
},
{
"type": "bun",
"request": "launch",
"name": "Debug all tests with Bun",
"program": ".",
"cwd": "${workspaceFolder}/packages/knip",
"runtime": "bun",
"runtimeArgs": ["test", "--timeout", "999999999"],
"internalConsoleOptions": "openOnSessionStart"
},
{
"name": "Run Extension on Playground Monorepo (w/ MCP Server)",
"type": "extensionHost",
"request": "launch",
"runtimeExecutable": "${execPath}",
"args": [
"--extensionDevelopmentPath=${workspaceFolder}/packages/vscode-knip",
"${workspaceFolder}/templates/language-server-client" // Point at any repo
],
"outFiles": [
"${workspaceFolder}/packages/vscode-knip/**/*.js",
"${workspaceFolder}/packages/language-server/**/*.js",
"${workspaceFolder}/packages/mcp-server/**/*.js"
]
},
{
"name": "Attach to Knip Server",
"type": "node",
"request": "attach",
"port": 6009,
"restart": true,
"outFiles": [
"${workspaceFolder}/packages/language-server/**/*.js",
"${workspaceFolder}/packages/knip/dist/**/*.js",
"${workspaceFolder}/packages/knip/src/**/*.ts"
],
"sourceMaps": true,
"resolveSourceMapLocations": [
"${workspaceFolder}/**",
"!**/node_modules/**"
]
}
],
"compounds": [
{
"name": "Run + Attach Knip LSP",
"configurations": [
"Run Extension on Playground Monorepo (w/ MCP Server)",
"Attach to Knip Server"
]
}
],
"inputs": [
{
"id": "projectPath",
"type": "promptString",
"description": "Enter absolute path to y${lineNumber}our project dir",
"default": "${workspaceFolder}/templates/language-server-client"
}
]
}
================================================
FILE: .vscode/settings.json
================================================
{
"[javascript]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[json]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[jsonc]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[markdown]": {
"editor.defaultFormatter": "unifiedjs.vscode-remark"
},
"[mdx]": {
"editor.defaultFormatter": "remcohaszing.vscode-mdxlint"
},
"[typescript]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[typescriptreact]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"oxc.fmt.configPath": ".oxfmtrc.json",
"cSpell.enabled": true,
"cSpell.words": [
"astro",
"codebase",
"codegen",
"codeowners",
"commitlint",
"devkit",
"execa",
"jiti",
"knip",
"lefthook",
"preprocess",
"preprocessor",
"stylelint",
"timerify",
"tsup",
"unimported",
"webp"
],
"editor.formatOnSave": true
}
================================================
FILE: AGENTS.md
================================================
# Knip
Knip is a tool to find and fix unused dependencies, exports and files in
JavaScript and TypeScript projects.
## Context: project overview
- Monorepo
- Main package is core in `packages/knip` (TypeScript)
- Language Server in `packages/language-server` (JS + JSDoc for types)
- VS Code Extension in `packages/vscode-knip` (JS + JSDoc for types)
- [Documentation][1] content in `packages/docs` (Astro + MD/MDX)
## Principles
- Ask yourself: "Would a staff engineer approve this?" — maintain high standards
- If something goes sideways, stop and re-plan immediately - don't keep pushing
- For non-trivial changes: pause and ask "is there a more elegant way?"
- If a fix feels hacky: "Knowing everything I know now, implement the elegant solution" — but skip this for simple, obvious fixes (i.e. don't over-engineer)
- Challenge your own work before presenting it
- Your training data is stale — verify packages, APIs, and syntax against current docs
- If you say "I will do X", actually do X — don't just announce intentions
- Don't blindly follow instructions: question the user if the request would not result in something better or faster
## Communication
- Zero context switching required from the user
- When reporting information to the user, be extremely concise and sacrifice
grammar for the sake of concision
- Don't add comments to code, unless explicitly asked for.
## Planning
1. Plan: write plan to `.agents/tasks/todo-(name).md` with checkable items
2. Get alignment: check in with user before starting implementation, question any doubts or noise
3. Track progress: mark items complete as you go
4. Explain changes: high-level summary at each step
5. Document results: add review section to `.agents/tasks/todo-(name).md`
6. Capture lessons: update `.agents/lessons.md` after corrections
- Use subagents liberally to keep main context window clean
- Offload research, exploration, and parallel analysis to subagents
## Workflow
- Read broadly before editing — understand surrounding code, not just the target
- Commit chunks of verified work — don't let unrelated changes accumulate
- Make small, testable, incremental changes — not big-bang edits
- Avoid manual edits and regex-based refactors, prefer AST-based tools and codemods (jscodeshift) — except for tiny edits
- Reflect on outcomes between steps — don't blindly chain actions
- Diff behavior between main and your changes when relevant
## Code style
- Performance is key, both high level (design) and low level (impl).
- Avoid redundant code and abstractions.
- Avoid unnecessary complexity and nesting.
- Concise one-liners are fine, but prioritize clarity over cleverness.
- JavaScript
- Prefer plain `for..in/of` loops over iterator methods like `map`/`reduce`.
- TypeScript
- Avoid `any` and type casting (`as`)
- Avoid runtime overhead just to get the types right
## Verification
- Insufficient testing is the #1 failure mode — test rigorously, not hopefully
- State verification method _before_ implementing (test, CLI output, linter, screenshot)
- Prefer TDD for new features — write or update tests before implementing
- For UI or integration changes: screenshots or CLI output as evidence
- Tailor to the domain: run a bash command, check a web page, use a linter — whatever is most direct
- Every completed task must answer: "How was this verified?"
- Document verification steps in `.agents/tasks/todo-(name).md`
- Maintain "known pitfalls" in `.agents/lessons.md` — check it before starting, update it after corrections
## Issues and Pull Requests
- When given a bug report, first confirm the behavior is actually wrong. Reproduce, then check if the reported behavior is correct-by-design before writing any fix
- Find repositories/CodeSandbox/StackBlitz source files and local fixtures to actually reproduce the issue at hand
- To fetch stackblitz.com reproduction url: `pnpx stackblitz-zip https://stackblitz.com/edit/{name} {filename}.zip`
## Domain Knowledge
- Unused file → unused exports/dependencies is a chain, not a bug
- Use `--performance` or `--performance-fn [name]` to profile (→ [timerify][2])
- If creating or modifying a plugin, read [PLUGINS.md][3] first.
- If modifying core module graph, AST traversal, or CLI sequence, read [MODULE_GRAPH.md][4] first.
## Environment
- Before using `sed`, `awk`, etc. — verify GNU or POSIX-compatible tools are installed (gnu-sed, coreutils)
- Always look at root lockfile and package.json to choose between npm/npx, pnpm/pnpx, etc.
## Run & Debug
Important: debug, don't guess.
Run the CLI directly using `node` or `bun`. The rest of this document shows
`knip` in commands for consistency. Replace it with `node (path/to/)src/cli.ts`
or `bun (path/to/)src/cli.ts` and keep using what works.
- Run `knip` directly in a fixture or temp directory (over creating test scripts
that import the `main` function).
- Knip requires `package.json` in root dir.
- Enable [debug & helpers][5] with `--debug` (not `DEBUG=`). Warning: noisy.
- Use [trace][6] to debug
- exported identifiers (`knip --trace-export [name] --trace-file [file]`)
- external dependencies (`knip --trace-dependency [name] --workspace [dir]`)
## Test
Prefer `bun` over `node` for speed. Don't run all tests at once (slow & noisy).
Start out with running the relevant test(s) first:
```sh
cd packages/knip
bun test test/util/get-inputs-from-scripts.test.ts
node --test test/commonjs.test.ts
```
To run all relevant tests without having to build `knip`:
```sh
cd packages/knip
pnpm run test:bun:smoke
```
Use `node` if Bun is not available:
```sh
cd packages/knip
node --test test/commonjs.test.ts
pnpm test:smoke
```
Build core package and run all tests only if there are changes in auto-fix,
formatting and reporter related functionality:
```sh
cd packages/knip
pnpm build
pnpm test
```
## Fixtures
There are plenty of directories with fixtures in `packages/knip/fixtures`.
- In general, tests have their own fixture directory.
- Plugin fixture directories at `packages/knip/fixtures/plugins/[plugin-name]*`.
- For trivial changes or fixes, extend an existing fixture.
- Don't use "foo" or vague names. One fixture should consist of descriptive file
and variable names like `module.ts` and `barrel.ts`, or build upon a "theme"
such as fruits or animals to indicate relation/hierarchy.
- Use empty files if sufficient (e.g. to verify import specifier or entry file).
- For debugging, it might be useful to run Knip from the fixture directory and
see output in terminal. Example:
```sh
cd packages/knip/fixtures/commonjs
knip
```
## Build
To type-check `knip` with `tsc`:
```sh
cd packages/knip
pnpm build
```
[1]: https://knip.dev
[2]: ./packages/knip/src/util/Performance.ts
[3]: ./.agents/PLUGINS.md
[4]: ./.agents/MODULE_GRAPH.md
[5]: ./packages/knip/src/util/debug.ts
[6]: ./packages/docs/src/content/docs/guides/troubleshooting.md#trace
================================================
FILE: knip.json
================================================
{
"$schema": "https://unpkg.com/knip@6/schema.json",
"workspaces": {
".": {
"project": ["!templates/**"]
},
"packages/knip": {
"project": [
"src/**/*.ts!",
"test/**/*.ts",
"!src/util/empty.ts",
"!**/_template/**"
],
"ignoreDependencies": ["prettier"]
},
"packages/docs": {
"entry": ["{remark,scripts}/*.ts"]
},
"packages/vscode-knip": {
"entry": ["src/index.js!", "scripts/*.js", "test/*.mjs"],
"ignoreDependencies": ["vscode!"]
}
}
}
================================================
FILE: license
================================================
ISC License (ISC)
Copyright 2022-2025 Lars Kappert
Permission to use, copy, modify, and/or distribute this software for any purpose
with or without fee is hereby granted, provided that the above copyright notice
and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
THIS SOFTWARE.
================================================
FILE: package.json
================================================
{
"name": "@knip/root",
"version": "0.0.0",
"private": true,
"description": "Find unused dependencies, exports and files in your TypeScript and JavaScript projects",
"homepage": "https://knip.dev",
"bugs": "https://github.com/webpro-nl/knip/issues",
"license": "ISC",
"author": {
"name": "Lars Kappert",
"email": "lars@webpro.nl"
},
"repository": {
"type": "git",
"url": "https://github.com/webpro-nl/knip"
},
"workspaces": [
"packages/*"
],
"type": "module",
"scripts": {
"watch": "pnpm run --dir packages/knip watch",
"docs": "pnpm run --dir packages/docs dev",
"test": "pnpm run --dir packages/knip test",
"format": "oxfmt",
"lint": "oxlint",
"ci": "oxlint && oxfmt --check && installed-check --ignore-dev",
"release": "./release.sh"
},
"devDependencies": {
"@release-it/bumper": "^7.0.5",
"installed-check": "^9.3.0",
"mdxlint": "^1.0.0",
"mdxlint-preset-webpro": "^1.1.1",
"oxfmt": "^0.35.0",
"oxlint": "^1.50.0",
"release-it": "^19.2.4",
"remark-cli": "12.0.1",
"remark-preset-webpro": "^2.1.1"
},
"prettier": {
"arrowParens": "avoid",
"singleQuote": true,
"trailingComma": "es5"
},
"remarkConfig": {
"plugins": [
"preset-webpro"
]
},
"engines": {
"node": ">=22.0.0"
},
"packageManager": "pnpm@10.24.0",
"mdxlint": {
"plugins": [
"mdxlint-preset-webpro"
]
}
}
================================================
FILE: packages/create-config/README.md
================================================
# @knip/create-config
Add Knip to a repository.
```shell
npm init @knip/config
```
This adds Knip and its peer dependencies to `devDependencies`.
Example result:
```json
{
"name": "my-package",
"scripts": {
"knip": "knip"
},
"devDependencies": {
"@types/node": "^20.14.8",
"knip": "^5.30.1",
"typescript": "^5.5.4"
}
}
```
================================================
FILE: packages/create-config/index.js
================================================
#!/usr/bin/env node
import { execSync } from 'node:child_process';
import fs from 'node:fs';
import { EOL } from 'node:os';
import path from 'node:path';
const fileExists = filePath => {
const stat = fs.statSync(filePath, { throwIfNoEntry: false });
return stat?.isFile();
};
const hasAccess = filePath => {
try {
fs.accessSync(filePath, fs.constants.R_OK);
return true;
} catch {
return false;
}
};
const readFirstBytes = (filePath, length = 128) => {
const fd = fs.openSync(filePath, 'r');
const buffer = Buffer.alloc(length);
const bytesRead = fs.readSync(fd, buffer, 0, length, 0);
fs.closeSync(fd);
return buffer.subarray(0, bytesRead).toString('utf-8');
};
const getPackageManager = () => {
// get the root of the repository
let repositoryRoot = '';
try {
repositoryRoot = execSync('git rev-parse --show-toplevel', { stdio: [null, null, 'ignore'] })
.toString()
.trim();
} catch {}
if (fileExists(path.join(repositoryRoot, 'bun.lock'))) return 'bun';
if (fileExists(path.join(repositoryRoot, 'bun.lockb'))) return 'bun';
if (hasAccess(path.join(repositoryRoot, 'yarn.lock'))) {
const yarnLock = readFirstBytes(path.join(repositoryRoot, 'yarn.lock'), 128);
return yarnLock.includes('yarn lockfile v1') ? 'yarn' : 'yarn-berry';
}
if (fileExists(path.join(repositoryRoot, 'pnpm-lock.yaml'))) return 'pnpm';
return 'npm';
};
const getBinX = pm => {
if (pm === 'npm') return 'npx';
return pm;
};
const hasWorkspaces = manifest => {
if (manifest.workspaces) {
if (Array.isArray(manifest.workspaces) && manifest.workspaces.length > 0) return true;
if (typeof manifest.workspaces === 'object' && manifest.workspaces.packages?.length > 0) return true;
}
if (hasAccess('pnpm-workspace.yaml')) {
try {
const content = fs.readFileSync('pnpm-workspace.yaml', 'utf-8');
return /(^|\n)packages:\n/.test(content);
} catch {
return false;
}
}
return false;
};
const findPackageJsonFiles = (dir, depth = 0) => {
if (depth > 3) return [];
const dirs = [];
const entries = fs.readdirSync(dir, { withFileTypes: true });
for (const entry of entries) {
if (entry.name === 'node_modules' || entry.name.startsWith('.')) continue;
const fullPath = path.join(dir, entry.name);
if (entry.isDirectory()) {
dirs.push(...findPackageJsonFiles(fullPath, depth + 1));
} else if (entry.name === 'package.json' && dir !== process.cwd()) {
dirs.push(path.relative(process.cwd(), dir));
}
}
return dirs;
};
const getWorkspaceFlag = (manifest, pm) => {
if (pm === 'pnpm') return hasWorkspaces(manifest) ? '-w' : undefined;
if (pm === 'yarn') return hasWorkspaces(manifest) ? '-W' : undefined;
};
const getPackageManagerFromPackageJson = manifest => {
if (!manifest.packageManager) return undefined;
let [pmName, pmVersion] = manifest.packageManager.split('@');
if (pmName === 'yarn' && pmVersion?.[0] > 1) {
pmName = 'yarn-berry';
}
const validPackageManagers = ['bun', 'yarn', 'yarn-berry', 'pnpm', 'npm'];
if (!validPackageManagers.includes(pmName)) return undefined;
return pmName;
};
const main = () => {
if (!fileExists('package.json')) {
console.error('Please run this command from the root of a repository with a package.json.');
return;
}
const packageJsonPath = path.join(process.cwd(), 'package.json');
const manifest = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
// Differentiate yarn v1 and v2+ but call them both with `yarn`
const pm = getPackageManagerFromPackageJson(manifest) ?? getPackageManager();
const bin = pm === 'yarn-berry' ? 'yarn' : pm;
const cmd = [bin, 'add', getWorkspaceFlag(manifest, pm), '-D', 'knip', 'typescript', '@types/node']
.filter(Boolean)
.join(' ');
execSync(cmd, { stdio: 'inherit' });
console.info('');
console.info('✓ Install Knip');
const knipConfig = {
$schema: 'https://unpkg.com/knip@6/schema.json',
tags: ['-lintignore'],
};
const hasExplicitWorkspaces = hasWorkspaces(manifest);
if (hasExplicitWorkspaces) knipConfig.workspaces = { '.': {} };
try {
if (!fileExists('knip.json')) {
fs.writeFileSync('knip.json', `${JSON.stringify(knipConfig, null, 2)}${EOL}`);
console.info('✓ Create knip.json');
} else {
console.info('✓ Detected knip.json');
}
} catch (error) {
console.warn('× Failed to create knip.json:', error.message);
}
try {
execSync('npm pkg set scripts.knip=knip', { stdio: ['inherit', 'inherit', 'ignore'] });
console.info('✓ Add knip to package.json#scripts');
} catch {
console.warn('× Failed to add knip to package.json#scripts');
}
if (!hasExplicitWorkspaces) {
const packages = findPackageJsonFiles(process.cwd());
if (packages.length > 0) {
console.info('');
console.info('⚠ Found package.json files in subdirectories:');
for (const pkg of packages.slice(0, 5)) console.info(`- ${pkg}`);
if (packages.length > 5) console.info(`- ...and ${packages.length - 5} more`);
console.info('Consider adding workspaces to knip.json:');
console.info('More details: https://knip.dev/features/monorepos-and-workspaces#additional-workspaces');
}
}
console.info('');
console.info(`→ Run \`${getBinX(bin)} knip --max-show-issues 5\` to run Knip for the first time`);
console.info(`→ Continue with https://knip.dev/overview/configuration`);
};
main();
================================================
FILE: packages/create-config/package.json
================================================
{
"name": "@knip/create-config",
"version": "1.2.1",
"homepage": "https://knip.dev",
"bugs": "https://github.com/webpro-nl/knip/issues",
"license": "ISC",
"author": {
"name": "Lars Kappert",
"email": "lars@webpro.nl"
},
"repository": {
"type": "git",
"url": "https://github.com/webpro-nl/knip",
"directory": "packages/create-config"
},
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/webpro"
},
{
"type": "opencollective",
"url": "https://opencollective.com/knip"
}
],
"bin": "index.js",
"type": "module",
"publishConfig": {
"access": "public"
},
"scripts": {
"release": "release-it -c ../../.release-it.json"
}
}
================================================
FILE: packages/docs/.gitignore
================================================
.astro/
.DS_Store
.env
dist/
node_modules/
src/content/docs/reference/plugins/
================================================
FILE: packages/docs/README.md
================================================
# knip.dev
The source of [knip.dev][1].
[1]: https://knip.dev
================================================
FILE: packages/docs/astro.config.ts
================================================
import starlight from '@astrojs/starlight';
import type { ExpressiveCodeTheme } from '@astrojs/starlight/expressive-code';
import { defineConfig } from 'astro/config';
import remarkDirective from 'remark-directive';
import { fixInternalLinks } from './remark/fixInternalLinks.ts';
import { transformDirectives } from './remark/transformDirectives.ts';
const setForeground = (theme: ExpressiveCodeTheme, scope: string, value: string) => {
const settings = theme.settings.find(setting => setting.scope?.includes(scope));
if (settings) settings.settings.foreground = value;
};
export default defineConfig({
site: 'https://knip.dev',
base: '/',
// @ts-expect-error
sitemap: false,
trailingSlash: 'never',
redirects: {
'/guides/commonjs': '/guides/working-with-commonjs',
'/guides/writing-a-plugin': '/writing-a-plugin',
},
markdown: {
remarkPlugins: [fixInternalLinks, transformDirectives, remarkDirective],
},
integrations: [
starlight({
title: 'Knip',
logo: {
light: './src/assets/title-light.svg',
dark: './src/assets/title-dark.svg',
replacesTitle: true,
},
social: [
{ icon: 'github', label: 'GitHub', href: 'https://github.com/webpro-nl/knip' },
{ icon: 'blueSky', label: 'Bluesky', href: 'https://bsky.app/profile/webpro.nl' },
{ icon: 'npm', label: 'npm', href: 'https://www.npmjs.com/package/knip' },
],
components: {
Head: './src/components/Head.astro',
Footer: './src/components/Footer.astro',
},
customCss: ['./src/styles/custom.css', './src/fonts/font-face.css'],
editLink: {
baseUrl: 'https://github.com/webpro-nl/knip/edit/main/packages/docs/',
},
sidebar: [
{
label: 'Overview',
autogenerate: { directory: 'overview' },
},
{
label: 'Understanding Knip',
autogenerate: { directory: 'explanations' },
},
{
label: 'Features',
autogenerate: { directory: 'features' },
},
{
label: 'Guides',
autogenerate: { directory: 'guides' },
},
{
label: 'Writing a Plugin',
autogenerate: { directory: 'writing-a-plugin' },
},
{
label: 'Reference',
autogenerate: { directory: 'reference' },
},
{
label: 'Blog',
autogenerate: { directory: 'blog' },
},
{
label: 'Read more',
collapsed: true,
autogenerate: { directory: 'typescript' },
},
],
expressiveCode: {
emitExternalStylesheet: true,
styleOverrides: {
// @ts-expect-error deal with it
'frm-tooltipSuccessBg': 'var(--sl-color-orange)',
'frm-tooltipSuccessFg': 'var(--sl-color-white)',
'frm-edBg': 'var(--sl-color-black)',
'frm-edActTabBg': 'var(--sl-color-black)',
'frm-edActTabBrdCol': 'var(--sl-color-black)',
'frm-edTabBarBg': 'none',
'frm-edTabBarBrdBtmCol': 'none',
'frm-frameBoxShdCssVal': 'none',
},
frames: {
showCopyToClipboardButton: true,
},
themes: ['min-dark'],
customizeTheme: theme => {
setForeground(theme, 'entity.name.tag', '#f68a22');
setForeground(theme, 'entity.name.type', '#ededed');
setForeground(theme, 'string', '#ededed');
return theme;
},
},
}),
],
});
================================================
FILE: packages/docs/mock/contributors.json
================================================
[
{
"login": "webpro",
"id": 456426,
"node_id": "MDQ6VXNlcjQ1NjQyNg==",
"avatar_url": "https://avatars.githubusercontent.com/u/456426?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/webpro",
"html_url": "https://github.com/webpro",
"followers_url": "https://api.github.com/users/webpro/followers",
"following_url": "https://api.github.com/users/webpro/following{/other_user}",
"gists_url": "https://api.github.com/users/webpro/gists{/gist_id}",
"starred_url": "https://api.github.com/users/webpro/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/webpro/subscriptions",
"organizations_url": "https://api.github.com/users/webpro/orgs",
"repos_url": "https://api.github.com/users/webpro/repos",
"events_url": "https://api.github.com/users/webpro/events{/privacy}",
"received_events_url": "https://api.github.com/users/webpro/received_events",
"type": "User",
"site_admin": false,
"contributions": 1282
}
]
================================================
FILE: packages/docs/package.json
================================================
{
"name": "@knip/docs",
"version": "0.0.0",
"private": true,
"description": "Documentation for Knip, hosted at knip.dev",
"homepage": "https://knip.dev",
"repository": {
"type": "git",
"url": "github:webpro-nl/knip",
"directory": "packages/docs"
},
"type": "module",
"scripts": {
"prebuild": "node ./scripts/generate-plugin-docs.ts",
"build": "astro check && astro build",
"postbuild": "[ \"$CF_PAGES\" = \"1\" ] && find dist -mindepth 2 -type f -name 'index.html' -exec bash -c 'f=\"$1\"; d=$(dirname \"$f\"); bn=$(basename \"$d\"); mv -v \"$f\" \"$d/../$bn.html\"' _ {} \\; && find dist -mindepth 1 -type d -empty -print -delete || true",
"dev": "astro dev",
"remark": "remark README.md 'src/content/docs/**/*.md' --verbose -o && mdxlint 'src/content/docs/**/*.mdx' --verbose -o"
},
"dependencies": {
"@astro-community/astro-embed-youtube": "0.5.10",
"@astrojs/starlight": "0.38.1",
"sharp": "0.34.5"
},
"devDependencies": {
"@astrojs/check": "0.9.8",
"@octokit/graphql": "^9.0.3",
"@types/mdast": "4.0.4",
"@types/unist": "3.0.3",
"astro": "6.0.5",
"hastscript": "9.0.1",
"picocolors": "^1.1.1",
"remark-directive": "4.0.0",
"remark-frontmatter": "5.0.0",
"remark-gfm": "4.0.1",
"remark-parse": "11.0.0",
"remark-stringify": "11.0.0",
"unified": "11.0.5",
"unist-builder": "4.0.0",
"unist-util-visit": "5.1.0"
},
"engines": {
"node": ">=22.0.0"
}
}
================================================
FILE: packages/docs/public/fonts/fonts.conf
================================================
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<dir>/vercel/path0/docs/public/fonts/</dir>
<cachedir>/vercel/path0/docs/.astro/</cachedir>
<config></config>
</fontconfig>
================================================
FILE: packages/docs/public/manifest.json
================================================
{
"name": "Knip",
"short_name": "Knip",
"icons": [
{
"src": "/favicon.svg",
"type": "image/svg+xml",
"sizes": "512x512"
},
{
"src": "/icon-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "/icon-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
],
"theme_color": "#fbfbfb",
"background_color": "#f56e0f",
"display": "standalone",
"scope": "/",
"start_url": "/overview/getting-started/"
}
================================================
FILE: packages/docs/public/robots.txt
================================================
User-agent: *
Allow: /
Sitemap: https://knip.dev/sitemap.txt
================================================
FILE: packages/docs/remark/fixInternalLinks.ts
================================================
import pc from 'picocolors';
import type { Node, Parent } from 'unist';
import { type Visitor, visit } from 'unist-util-visit';
interface LinkNode extends Node {
url: string;
}
const isLinkNode = (node: Node): node is LinkNode =>
(node.type === 'link' || node.type === 'definition') && typeof (node as LinkNode).url === 'string';
const dateTimeFormat = new Intl.DateTimeFormat([], {
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: false,
});
export const fixInternalLinks = () => (tree: Parent) => {
const visitor: Visitor = node => {
if (isLinkNode(node) && node.url.startsWith('.')) {
const url = node.url;
node.url = url.replace(/(?:\/index)?\.mdx?(#.+)?$/, '$1');
console.log(`${pc.dim(dateTimeFormat.format(new Date()))} ${pc.cyan('[fix-link]')} Modify ${url} → ${node.url}`);
}
};
visit(tree, visitor);
};
================================================
FILE: packages/docs/remark/transformDirectives.ts
================================================
import { h } from 'hastscript';
import type { Node, Parent } from 'unist';
import { type Visitor, visit } from 'unist-util-visit';
interface DirectiveNode extends Node {
type: 'textDirective' | 'leafDirective' | 'containerDirective';
name: string;
attributes: Record<string, any>;
data: Record<string, any>;
}
const isDirectiveNode = (node: Node): node is DirectiveNode =>
node.type === 'textDirective' || node.type === 'leafDirective' || node.type === 'containerDirective';
export const transformDirectives = () => (tree: Parent) => {
const visitor: Visitor<Node> = node => {
if (isDirectiveNode(node)) {
const hast = h(node.name, node.attributes);
// oxlint-disable-next-line no-cond-assign
const data = node.data || (node.data = {});
data.hName = hast.tagName;
data.hProperties = hast.properties;
}
};
visit(tree, visitor);
};
================================================
FILE: packages/docs/scripts/generate-plugin-docs.ts
================================================
import fs from 'node:fs/promises';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import type { Root } from 'mdast';
import remarkDirective from 'remark-directive';
import remarkFrontmatter from 'remark-frontmatter';
import remarkParse from 'remark-parse';
import remarkStringify from 'remark-stringify';
import { unified } from 'unified';
import type { Node } from 'unist';
import { u } from 'unist-builder';
import type { Plugin } from '../../knip/src/types/config.ts';
const rootDir = path.join(path.dirname(fileURLToPath(import.meta.url)), '..');
const referenceDocsDir = path.join(rootDir, 'src/content/docs/reference');
const knipDir = path.join(rootDir, '../../packages/knip');
const pluginsDir = path.join(knipDir, 'src/plugins');
const directories = await fs.opendir(pluginsDir);
const plugins = [];
const srcBaseUrl = new URL('webpro-nl/knip/blob/main/packages/knip/src/plugins', 'https://github.com');
const parseFragment = (text: string) => {
const tree = unified().use(remarkParse).parse(text);
return tree.children;
};
const writeTree = async (tree: Node, filePath: string) => {
try {
const file = await unified().run(tree);
const markdown = unified()
.use(remarkFrontmatter, ['yaml'])
.use(remarkDirective)
.use(remarkStringify, {
bullet: '-',
})
.stringify(file as Root);
await fs.writeFile(filePath, markdown);
} catch (err) {
console.error(err);
}
};
for await (const dir of directories) {
if (dir.isDirectory() && dir.name !== '_template') {
const pluginName = dir.name;
const pluginDir = path.join(pluginsDir, pluginName);
const mod = await import(path.join(pluginDir, 'index.ts'));
const plugin: Plugin = mod.default;
const docs: undefined | { note: string; entry?: string[]; production?: string[] } = mod.docs;
const { title, enablers, args, config, entry, production, project } = plugin;
plugins.push([title, pluginName]);
const frontmatter = u('yaml', `title: ${title}\nsidebar:\n hidden: true`);
const defaults: Record<string, string[]> = {};
const configFiles = typeof config === 'function' ? config({ cwd: pluginDir }) : config;
if (configFiles && configFiles.length > 0) defaults.config = configFiles;
if (entry && entry.length > 0) defaults.entry = entry;
if (docs?.entry && docs.entry.length > 0) defaults.entry = [...(defaults.entry ?? []), ...docs.entry];
if (production && production.length > 0) defaults.entry = [...(defaults.entry ?? []), ...production];
if (docs?.production && docs.production.length > 0)
defaults.entry = [...(defaults.entry ?? []), ...docs.production];
if (project && project.length > 0) defaults.project = project;
const hasDefaultConfig = Object.values(defaults).some(v => v.length > 0);
const enabledText =
Array.isArray(enablers) && enablers.length > 0
? enablers.length === 1 && typeof enablers[0] === 'string'
? parseFragment(
`This plugin is enabled if \`"${enablers[0]}"\` is listed in \`"dependencies"\` or \`"devDependencies"\` in \`package.json\`.`
)
: [
...parseFragment(
`This plugin is enabled if there's a match in \`"dependencies"\` or \`"devDependencies"\` in \`package.json\`:`
),
u(
'list',
enablers.map((enabler: string | RegExp) =>
u('listItem', [u('inlineCode', typeof enabler === 'string' ? enabler : enabler.source)])
)
),
]
: typeof enablers === 'string'
? parseFragment(enablers)
: [u('paragraph', [u('text', 'This plugin is always enabled.')])];
const defaultConfig = hasDefaultConfig
? [
u('heading', { depth: 2 }, [u('text', 'Default configuration')]),
...parseFragment('If this plugin is enabled, the following configuration is added automatically:'),
u('code', {
lang: 'json', // TODO How to set attributes/properties/props properly?
value: JSON.stringify({ [pluginName]: defaults }, null, 2),
}),
...parseFragment('Depending on local configuration, plugins may modify the defaults as shown.'),
...parseFragment('Custom `config` or `entry` options override default values, they are not merged.'),
...parseFragment(
'See [Plugins](../../explanations/plugins.md) for more details about plugins and their `entry` and `config` options.'
),
]
: [];
const notes = docs?.note ? [u('heading', { depth: 2 }, [u('text', 'Note')]), ...parseFragment(docs.note)] : [];
const printCode = (value: unknown): string =>
Array.isArray(value)
? `[${value.map(printCode).join(', ')}]`
: typeof value === 'function'
? value.toString()
: JSON.stringify(value).replace(/([,:])/g, '$1 ');
const argsText = args
? [
...parseFragment(
`## Shell commands\n\nThis plugin adds argument parsing for the <code>${args.binaries ? args.binaries.join(' and ') : pluginName}</code>
${args.binaries && args.binaries.length > 1 ? 'binaries' : 'binary'}. Configuration:`
),
...parseFragment(
`\`\`\`\n${Object.entries(args)
.filter(([key]) => key !== 'binaries')
.map(([key, value]) => `${key}: ${printCode(value)}`)
.join('\n')}\n\`\`\``
),
...parseFragment(
'The configuration was generated from source code. Also see [Script Parser](../../features/script-parser.md).'
),
]
: [];
const generated = parseFragment(
`## Generated from source\n\nThis page was generated from the [${pluginName} plugin source code](${srcBaseUrl}/${dir.name}/index.ts).`
);
const tree = u('root', [
frontmatter,
u('heading', { depth: 2 }, [u('text', 'Enabled')]),
...enabledText,
...defaultConfig,
...notes,
...argsText,
...generated,
]);
console.log(`Writing ${pluginName} docs to plugins/${pluginName}.md`);
await writeTree(tree, path.join(referenceDocsDir, `plugins/${pluginName}.md`));
}
}
plugins.sort((a, b) => (a[1] < b[1] ? -1 : 1));
const frontmatter = u('yaml', `title: Plugins (${plugins.length})\ntableOfContents: false`);
const tree = u('root', [
frontmatter,
u('containerDirective', { name: 'section{.columns.min200}' }, [
u(
'list',
{ spread: false, ordered: false },
plugins.map(plugin =>
u('listItem', [u('link', { title: plugin[0], url: `/reference/plugins/${plugin[1]}` }, [u('text', plugin[0])])])
)
),
u('paragraph'),
]),
]);
console.log('Writing plugin list to plugins.md');
await writeTree(tree, path.join(referenceDocsDir, 'plugins.md'));
================================================
FILE: packages/docs/scripts/get-monthly-sponsorships-github.ts
================================================
import { graphql } from '@octokit/graphql';
const token = process.env.GITHUB_TOKEN_SPONSORSHIPS;
type Options = {
token?: string;
startDate: Date;
endDate?: Date;
recurringOnly: boolean;
};
interface SponsorActivity {
action: 'NEW_SPONSORSHIP' | 'CANCELLED_SPONSORSHIP';
timestamp: string;
sponsorsTier: {
monthlyPriceInDollars: number;
isOneTime: boolean;
};
sponsor: {
login: string;
};
}
interface GraphQLResponse {
viewer: {
sponsorsActivities: {
nodes: SponsorActivity[];
};
};
}
const getMonthlyTotals = async (options: Options) => {
const { token, startDate, recurringOnly } = options;
const { viewer } = await graphql<GraphQLResponse>({
query: `
query {
viewer {
sponsorsActivities(first: 100, period: ALL) {
nodes {
action
timestamp
sponsorsTier {
monthlyPriceInDollars
isOneTime
}
sponsor {
... on User { login }
... on Organization { login }
}
}
}
}
}
`,
headers: {
authorization: `token ${token}`,
},
});
const activities = [...viewer.sponsorsActivities.nodes].sort(
(a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime()
);
const activeRecurring = new Map<string, number>();
const monthlyTotals = new Map<string, number>();
const now = new Date();
for (let d = new Date(startDate); d <= now; d = new Date(d.getFullYear(), d.getMonth() + 1, 1)) {
monthlyTotals.set(d.toISOString().substring(0, 7), 0);
}
for (const activity of activities) {
const { action, sponsor, sponsorsTier, timestamp } = activity;
if (recurringOnly && sponsorsTier?.isOneTime) continue;
const amount = sponsorsTier?.monthlyPriceInDollars || 0;
const monthYear = new Date(timestamp).toISOString().substring(0, 7);
if (sponsorsTier?.isOneTime) {
if (!recurringOnly && action === 'NEW_SPONSORSHIP') {
monthlyTotals.set(monthYear, (monthlyTotals.get(monthYear) || 0) + amount);
}
} else {
if (action === 'NEW_SPONSORSHIP') activeRecurring.set(sponsor.login, amount);
if (action === 'CANCELLED_SPONSORSHIP') activeRecurring.delete(sponsor.login);
const total = Array.from(activeRecurring.values()).reduce((sum, a) => sum + a, 0);
for (const month of monthlyTotals.keys()) {
if (month >= monthYear) monthlyTotals.set(month, total);
}
}
}
return monthlyTotals;
};
export const getGitHubTotals = async (options: Options) => {
if (!token) throw new Error('GITHUB_TOKEN_SPONSORSHIPS is not set');
const monthlyData = await getMonthlyTotals({ ...options, token });
const startMonth = options.startDate.toISOString().substring(0, 7);
const endMonth = options.endDate?.toISOString().substring(0, 7);
for (const month of monthlyData.keys()) {
if (month < startMonth || (endMonth && month > endMonth)) monthlyData.delete(month);
}
return monthlyData;
};
================================================
FILE: packages/docs/scripts/get-monthly-sponsorships-opencollective.ts
================================================
import { graphql } from '@octokit/graphql';
const token = process.env.OPENCOLLECTIVE_TOKEN;
const RATE_EUR_TO_USD = 1.08;
type Options = {
token?: string;
startDate: Date;
endDate?: Date;
recurringOnly: boolean;
};
interface Transaction {
id: string;
type: string;
kind: string;
amount: {
value: number;
currency: string;
};
createdAt: string;
fromAccount: {
name: string;
};
}
interface Expense {
id: string;
amount: number;
currency: string;
createdAt: string;
type: string;
status: string;
}
interface GraphQLResponse {
account: {
transactions: {
nodes: Transaction[];
};
};
expenses: {
nodes: Expense[];
};
}
const getMonthlyTotals = async (options: Options): Promise<Map<string, number>> => {
const { token, startDate, recurringOnly } = options;
const { account, expenses } = await graphql<GraphQLResponse>({
query: `
query {
account(slug: "knip") {
transactions(type: CREDIT) {
nodes {
id
type
kind
amount {
value
currency
}
createdAt
fromAccount {
name
}
}
}
}
expenses(fromAccount: { slug: "webpro" }) {
nodes {
id
amount
currency
createdAt
type
status
}
}
}
`,
url: 'https://api.opencollective.com/graphql/v2',
headers: {
'Api-Key': token,
Accept: 'application/json',
},
});
const monthlyTotals = new Map<string, number>();
const now = new Date();
for (let d = new Date(startDate); d <= now; d = new Date(d.getFullYear(), d.getMonth() + 1, 1)) {
monthlyTotals.set(d.toISOString().substring(0, 7), 0);
}
for (const transaction of account.transactions.nodes) {
if (recurringOnly && transaction.kind !== 'CONTRIBUTION') continue;
const month = new Date(transaction.createdAt).toISOString().substring(0, 7);
const amount = Math.round(transaction.amount.value);
monthlyTotals.set(month, (monthlyTotals.get(month) || 0) + amount);
}
if (!recurringOnly) {
for (const expense of expenses.nodes) {
const month = new Date(expense.createdAt).toISOString().substring(0, 7);
const amount =
expense.currency === 'EUR'
? Math.round((expense.amount / 100) * RATE_EUR_TO_USD)
: Math.round(expense.amount / 100);
monthlyTotals.set(month, (monthlyTotals.get(month) || 0) + amount);
}
}
return monthlyTotals;
};
export const getOpenCollectiveTotals = async (options: Options) => {
if (!token) throw new Error('OPENCOLLECTIVE_TOKEN is not set');
const monthlyData = await getMonthlyTotals({ ...options, token });
const startMonth = options.startDate.toISOString().substring(0, 7);
const endMonth = options.endDate?.toISOString().substring(0, 7);
for (const month of monthlyData.keys()) {
if (month < startMonth || (endMonth && month > endMonth)) monthlyData.delete(month);
}
return monthlyData;
};
================================================
FILE: packages/docs/scripts/get-monthly-sponsorships.ts
================================================
import { Table } from '../../knip/src/util/table.ts';
import { getGitHubTotals } from './get-monthly-sponsorships-github.ts';
import { getOpenCollectiveTotals } from './get-monthly-sponsorships-opencollective.ts';
const START_DATE = new Date('2023-11-01');
const END_DATE = new Date();
END_DATE.setDate(1);
END_DATE.setHours(-1);
const main = async () => {
const [monthlyGHS, monthlyGHSRO, monthlyOC, monthlyOCRO] = await Promise.all([
getGitHubTotals({ startDate: START_DATE, endDate: END_DATE, recurringOnly: false }),
getGitHubTotals({ startDate: START_DATE, endDate: END_DATE, recurringOnly: true }),
getOpenCollectiveTotals({ startDate: START_DATE, endDate: END_DATE, recurringOnly: false }),
getOpenCollectiveTotals({ startDate: START_DATE, endDate: END_DATE, recurringOnly: true }),
]);
const monthly = new Map<string, number[]>();
for (const [month, amount] of monthlyGHS) monthly.set(month, [...(monthly.get(month) || []), amount]);
for (const [month, amount] of monthlyOC) monthly.set(month, [...(monthly.get(month) || []), amount]);
const monthlyRO = new Map<string, number[]>();
for (const [month, amount] of monthlyGHSRO) monthlyRO.set(month, [...(monthlyRO.get(month) || []), amount]);
for (const [month, amount] of monthlyOCRO) monthlyRO.set(month, [...(monthlyRO.get(month) || []), amount]);
const table = new Table();
const digits = (n: number) => (v: any) => (typeof v === 'number' ? v.toFixed(n) : v);
const sum = Array.from(monthly.values()).reduce((a, c) => a + c.reduce((a, b) => a + b, 0), 0);
const sumGHS = Array.from(monthlyGHS.values()).reduce((a, c) => a + c, 0);
const sumOC = Array.from(monthlyOC.values()).reduce((a, c) => a + c, 0);
const sumRO = Array.from(monthlyRO.values()).reduce((a, c) => a + c.reduce((a, b) => a + b, 0), 0);
for (const [key, value] of [
['months', monthly.size],
['github', sumGHS],
['OC', sumOC],
['sum', sum],
['avg', sum / monthly.size],
['recurring sum', sumRO],
['recurring avg', sumRO / monthlyRO.size],
]) {
table.row();
table.cell('key', key);
table.cell('value', value, digits(0));
}
console.log(table.toString());
const url = new URL('/', 'https://try.venz.dev');
url.searchParams.set('type', 'pivot');
url.searchParams.set('lp', 'tr');
url.searchParams.set('br', '0');
url.searchParams.set('labelX', 'month');
url.searchParams.set('labelY', 'amount ($)');
url.searchParams.append('l', 'GitHub Sponsors');
url.searchParams.append('color', '#fbfbfb');
url.searchParams.append('l', 'Open Collective');
url.searchParams.append('color', '#2487ff');
for (const [month, amount] of monthly) {
url.searchParams.append('label', month);
url.searchParams.append('data', amount.join(','));
}
console.log('\nVenz link');
const text = `${url.origin}?${decodeURIComponent(url.searchParams.toString()).replaceAll('#', '%23')}`;
console.log(text);
};
main().catch(console.error);
================================================
FILE: packages/docs/src/assets/testimonials.json
================================================
{
"data": [
{
"entities": {
"urls": [
{
"url": "cdn.bsky.app/img/dummy-02",
"display_url": "cdn.bsky.app/img/julien.deniau.me",
"media_key": "4"
}
]
},
"id": "3mdrubg3y5c2z",
"author_id": "11",
"created_at": "2026-02-01T07:57:00.000Z",
"attachments": {},
"text": "Done on a mono-repo in two times.\nWhat's impressive is that there were no false positive!\ncdn.bsky.app/img/dummy-02"
},
{
"entities": {
"urls": [
{
"url": "https://t.co/EwIeRiHaXf",
"display_url": "pic.x.com/EwIeRiHaXf",
"media_key": "6"
}
]
},
"id": "2017122504914161979",
"author_id": "16",
"created_at": "2026-01-30T06:27:00.000Z",
"text": "Good morning 🌄\nA tool I discovered lately.\nIf you care about clean codebases, this one's a gem 💎"
},
{
"entities": {
"urls": []
},
"id": "3mcky5ps3r22p",
"author_id": "12",
"created_at": "2026-01-16T20:53:09.000Z",
"text": "Knip is a cracking-looking open source tool for trimming unused JavaScript."
},
{
"entities": {
"urls": [
{
"url": "cdn.bsky.app/img/dummy-03",
"display_url": "cdn.bsky.app/img/patak.dev",
"media_key": "5"
}
]
},
"id": "3mcjtmv35wc2y",
"author_id": "15",
"created_at": "2026-01-16T09:59:29.000Z",
"attachments": {},
"text": "From the report, we could improve the situation if we stop sending unused JavaScript. @webpro.nl is doing an incredible job growing the usage of knip.dev, and that should hopefully make a dent in the future.\ncdn.bsky.app/img/dummy-03"
},
{
"entities": {
"urls": [
{
"url": "https://knip.dev/blog/for-editors-and-agents",
"expanded_url": "https://knip.dev/blog/for-editors-and-agents",
"display_url": "knip.dev/blog/for-edi..."
}
]
},
"id": "3mby3zkzhfs2t",
"author_id": "13",
"created_at": "2026-01-09T08:41:49.000Z",
"text": "The VSCode/Cursor extension is ace!\nAnd you can use the Knip MCP to create the config file.\nIt works for Svelte as well.\nKnip is really really good 🙏"
},
{
"entities": {
"urls": [
{
"url": "https://t.co/6rcslWBqIV",
"display_url": "pic.x.com/6rcslWBqIV",
"media_key": "6"
}
]
},
"id": "2007481125610914217",
"author_id": "17",
"created_at": "2026-01-03T15:56:00.000Z",
"attachments": { "media_keys": ["6"] },
"text": "This is both embarrassing and satisfying after running @Knip https://t.co/6rcslWBqIV"
},
{
"entities": {
"urls": [
{
"url": "https://t.co/hneEWMqdnm",
"expanded_url": "https://knip.dev",
"display_url": "Knip.dev"
}
]
},
"id": "2007221517562904675",
"author_id": "18",
"created_at": "2026-01-02T23:44:00.000Z",
"text": "You can't spell Opus without https://t.co/hneEWMqdnm"
},
{
"entities": {
"urls": []
},
"id": "3mbggqrihuk2r",
"author_id": "14",
"created_at": "2026-01-02T08:05:50.000Z",
"text": "Knip is amazing and you should be using it."
},
{
"entities": {
"urls": []
},
"id": "1932778410691949034",
"author_id": "10",
"created_at": "2025-06-11T14:34:00.000Z",
"text": "\"Thanks Knip!\"\neveryday,\nevery team member,\nliterally..\nknip.dev 🏅"
},
{
"entities": {
"urls": []
},
"url": "https://github.com/webpro-nl/knip/issues/1120#issuecomment-2943978262",
"author_id": "9",
"created_at": "2025-06-05T14:00:00.000Z",
"text": "Thank you so much for this incredible piece of software! Knip is one of the most impressive tools I've seen in my career."
},
{
"entities": {
"urls": [
{
"url": "https://github.com/webpro-nl/knip/pull/1022",
"expanded_url": "https://github.com/webpro-nl/knip/pull/1022",
"display_url": "https://github.com/webpro-nl/knip/pull/1022",
"title": "feat: add create-typescript-app plugin",
"description": "feat: add create-typescript-app plugin",
"unwound_url": "https://github.com/webpro-nl/knip/pull/1022"
}
]
},
"id": "3lmhgsj2n622o",
"author_id": "7",
"created_at": "2025-04-10T13:50:00.000Z",
"attachments": {},
"text": "Got my first plugin merged into Knip by @webpro.nl today! ☺️\n\nThe contribution experience was fantastic: the docs were super clear, the code was straightforward to navigate, and the helper script to generate a new plugin got me 90% of the way there. Awesome. Thanks Lars!\n\nhttps://github.com/webpro-nl/knip/pull/1022"
},
{
"entities": {
"urls": []
},
"id": "1904580358307250634",
"author_id": "6",
"created_at": "2025-03-25T18:05:00.000Z",
"attachments": {},
"text": "All of the TanStack monorepos make use of knip.dev\n\nIt's like eslint for detecting unused dependencies or even your own files/modules."
},
{
"entities": {
"urls": [
{
"url": "cdn.bsky.app/img/dummy-01",
"display_url": "cdn.bsky.app/img/opw3iapscc55nlgrx6q2yjah",
"media_key": "2"
}
]
},
"id": "3ll5ioywml223",
"author_id": "8",
"created_at": "2025-03-24T20:32:00.000Z",
"attachments": {},
"text": "The joy of adding knip.dev (by @webpro.nl) on a codebase! Right in time for spring cleaning 🧹🍃\ncdn.bsky.app/img/dummy-01"
},
{
"entities": {
"urls": []
},
"id": "1874692207472726401",
"author_id": "5",
"created_at": "2025-01-02T06:40:00.000Z",
"attachments": {},
"text": "Knip helped us delete ~300k lines of unused code at Vercel."
},
{
"entities": {
"urls": [
{
"url": "https://t.co/kA81p5gkmP",
"expanded_url": "https://www.npmjs.com/package/knip",
"display_url": "npmjs.com/package/knip",
"title": "Knip",
"description": "Find unused dependencies, exports and files in your TypeScript and JavaScript projects.",
"unwound_url": "https://www.npmjs.com/package/knip"
}
]
},
"id": "1850975288362221628",
"author_id": "5",
"created_at": "2024-10-28T19:57:00.000Z",
"attachments": {},
"text": "Knip may be the greatest tool ever conceived.\nhttps://t.co/kA81p5gkmP"
},
{
"entities": {
"urls": []
},
"id": "3k3obqi65oy2p",
"author_id": "4",
"created_at": "2023-07-29T17:33:00.000Z",
"attachments": {},
"text": "`knip` is the best code maintenance tool I've used in my 20 years of development, just an absolute work of art"
},
{
"entities": {
"urls": []
},
"id": "1808672067900092505",
"author_id": "3",
"created_at": "2024-07-04T03:19:00.000Z",
"attachments": {},
"text": "knip is great.\n\nA great example of stuff just working. It detects your environment so well and its defaults are almost too good because I didn’t realise it was doing everything automatically."
},
{
"entities": {
"urls": []
},
"id": "1808808208229707835",
"author_id": "3",
"created_at": "2024-07-04T12:20:00.000Z",
"attachments": {},
"text": "Then was like “this is how tooling should be, this has taken me an hour not a day and it’s faster and more accurate and more future proof”\n\nFive stars ⭐️⭐️⭐️⭐️⭐️"
},
{
"entities": {
"urls": []
},
"id": "1803013555907698921",
"author_id": "2",
"created_at": "2024-06-18T12:35:00.000Z",
"attachments": {},
"text": "Crazy useful tool. Thought it would be a nightmare to setup in my Next.js+Workers repo but it has crazy good automatic detection for code dependencies. In short, Knip creates a graph of code use and highlights dead code for you to snip (knip)."
},
{
"entities": {
"urls": []
},
"id": "1793913676896031033",
"author_id": "44217212",
"created_at": "2024-05-24T09:55:00.000Z",
"attachments": {},
"text": "Lars is singlehandedly building the best tool to keep your code clean and your dependencies minimal. And he's so engaging and helpful. Can't imagine going back to not using knip 👏"
},
{
"entities": {
"urls": [
{
"url": "https://t.co/dummy-01",
"display_url": "pic.twitter.com/uOuO1ch5ij",
"media_key": "1"
}
]
},
"id": "1745972825490604506",
"author_id": "1",
"created_at": "2024-01-13T01:55:00.000Z",
"attachments": { "media_keys": ["1"] },
"text": "warning: do not use a tool like knip.dev + code search to delete a ton of unused code. It works too well.\n\nI just did this in https://github.com/sourcegraph/cody/pull/2705, and my boss said if I end the week with net negative lines of code committed, I'm in deep trouble. https://t.co/dummy-01"
},
{
"entities": {
"mentions": [
{
"username": "argos_ci",
"id": "1554000987022663681"
},
{
"username": "webprolific",
"id": "218833730"
}
],
"annotations": [
{
"probability": 0.6699,
"type": "Other",
"normalized_text": "Prettier"
},
{
"probability": 0.7586,
"type": "Other",
"normalized_text": "ESLint"
}
],
"urls": [
{
"url": "https://t.co/uOuO1ch5ij",
"expanded_url": "https://twitter.com/gregberge_/status/1730180003453927560/photo/1",
"display_url": "pic.twitter.com/uOuO1ch5ij",
"media_key": "3_1730179997682552832"
}
]
},
"author_id": "22918124",
"text": "Ran knip.dev in @argos_ci, and boom 💥! Dead code detected instantly. With a good config, it can run on CI to keep projects clean. Installing this tool should be a no-brainer, like Prettier or ESLint.\n\nKudos, @webprolific! 👏 https://t.co/uOuO1ch5ij",
"id": "1730180003453927560",
"created_at": "2023-11-30T11:00:32.000Z",
"edit_history_tweet_ids": ["1730180003453927560"],
"attachments": { "media_keys": ["3_1730179997682552832"] }
},
{
"note_tweet": {
"text": "Problem: \n🚫 Your project has unused files.\n🚫 It has unused npm dependencies.\n🚫 It has unused TypeScript exports.\n\nBut you haven't noticed, because these things are hard to spot.\n\nSolution: knip\n\nI just used knip to find and resolve dozens of issues.\n\nhttps://t.co/QmN3sNlmbm",
"entities": {
"urls": [
{
"url": "https://t.co/QmN3sNlmbm",
"expanded_url": "https://github.com/webpro-nl/knip",
"display_url": "github.com/webpro-nl/knip"
}
]
}
},
"entities": {
"annotations": [
{
"probability": 0.8569,
"type": "Other",
"normalized_text": "TypeScript"
}
],
"urls": [
{
"url": "https://t.co/grbeTqMtt6",
"expanded_url": "https://github.com/webpro-nl/knip",
"display_url": "github.com/webpro-nl/knip",
"images": [
{
"url": "https://pbs.twimg.com/news_img/1729485824314548224/0xZughNs?format=png&name=orig",
"width": 1280,
"height": 640
},
{
"url": "https://pbs.twimg.com/news_img/1729485824314548224/0xZughNs?format=png&name=150x150",
"width": 150,
"height": 150
}
],
"title": "GitHub - webpro-nl/knip: ✂️ Find unused dependencies, exports and files in your JavaScript and TypeScript projects. Knip it before you ship it!",
"description": "✂️ Find unused dependencies, exports and files in your JavaScript and TypeScript projects. Knip it before you ship it! - GitHub - webpro-nl/knip: ✂️ Find unused dependencies, exports and files in yo...",
"unwound_url": "https://github.com/webpro-nl/knip"
},
{
"url": "https://t.co/qaOXBlD3eo",
"expanded_url": "https://twitter.com/i/web/status/1691460974518353920",
"display_url": "twitter.com/i/web/status/1…"
}
]
},
"author_id": "19268321",
"text": "Problem: \n🚫 Your project has unused files.\n🚫 It has unused npm dependencies.\n🚫 It has unused TypeScript exports.\n\nBut you haven't noticed, because these things are hard to spot.\n\nSolution: knip\n\nI just used knip to find and resolve dozens of issues.\n\nhttps://t.co/grbeTqMtt6 https://t.co/qaOXBlD3eo",
"id": "1691460974518353920",
"created_at": "2023-08-15T14:44:56.000Z",
"edit_history_tweet_ids": ["1691460974518353920"]
},
{
"entities": {
"mentions": [
{
"username": "webprolific",
"id": "218833730"
}
],
"annotations": [
{
"probability": 0.6322,
"type": "Other",
"normalized_text": "Knip"
}
]
},
"author_id": "3126044440",
"text": "@webprolific Knip helped me get rid of over 41k lines of code in legacy codebase 🥺🥺💕",
"id": "1729181106715632088",
"created_at": "2023-11-27T16:51:17.000Z",
"edit_history_tweet_ids": ["1729181106715632088"]
},
{
"entities": {
"mentions": [
{
"username": "contra",
"id": "973313523790082053"
}
],
"annotations": [
{
"probability": 0.8474,
"type": "Other",
"normalized_text": "Knip"
}
],
"urls": [
{
"url": "https://t.co/UgCunYQWzu",
"expanded_url": "https://twitter.com/webprolific/status/1729105865683435542",
"display_url": "twitter.com/webprolific/st…"
}
]
},
"author_id": "95668959",
"text": "Big fans of Knip at @Contra. Such an extremely well developed and maintained project https://t.co/UgCunYQWzu",
"id": "1729157761215369264",
"created_at": "2023-11-27T15:18:31.000Z",
"edit_history_tweet_ids": ["1729157761215369264"]
},
{
"entities": {
"mentions": [
{
"username": "webprolific",
"id": "218833730"
}
],
"urls": [
{
"url": "https://t.co/ZUYYdvkBJc",
"expanded_url": "https://github.com/getsentry/sentry/",
"display_url": "github.com/getsentry/sent…",
"title": "GitHub - getsentry/sentry: Developer-first error tracking and performance monitoring",
"description": "Developer-first error tracking and performance monitoring - GitHub - getsentry/sentry: Developer-first error tracking and performance monitoring",
"unwound_url": "https://github.com/getsentry/sentry/"
}
]
},
"author_id": "1632752318994153472",
"text": "@webprolific Just tried this on https://t.co/ZUYYdvkBJc - got some super useful results! Nice work.",
"id": "1727040036334424406",
"created_at": "2023-11-21T19:03:26.000Z",
"edit_history_tweet_ids": ["1727040036334424406"]
},
{
"entities": {
"mentions": [
{ "username": "TkDodo", "id": "44217212" },
{
"username": "webprolific",
"id": "218833730"
},
{
"username": "webprolific",
"id": "218833730"
}
]
},
"author_id": "1513218780167655427",
"text": "@TkDodo @webprolific I've manage to delete 6k LOC in the last 30 minutes 🫣\n\nGreat job here @webprolific 👍🏽",
"id": "1726807293583609935",
"created_at": "2023-11-21T03:38:35.000Z",
"edit_history_tweet_ids": ["1726807293583609935"]
},
{
"entities": {
"mentions": [
{
"username": "webprolific",
"id": "218833730"
}
],
"urls": [
{
"url": "https://t.co/Tg5E6C7gqa",
"expanded_url": "https://twitter.com/housecor/status/1713975785273303286",
"display_url": "twitter.com/housecor/statu…"
}
]
},
"author_id": "44217212",
"text": "knip is an amazing tool. Shoutout to @webprolific for building it 🙌.\n\nNot cleaning up correctly has a real maintenance cost. I've deleted lots of dead code - functions that were only used in tests and components that were only used in stories - all thanks to knip 🚀. https://t.co/Tg5E6C7gqa",
"id": "1714023231689031941",
"created_at": "2023-10-16T20:59:18.000Z",
"edit_history_tweet_ids": ["1714023231689031941"]
},
{
"entities": {
"annotations": [
{
"probability": 0.9562,
"type": "Other",
"normalized_text": "JavaScript"
},
{
"probability": 0.8666,
"type": "Other",
"normalized_text": "TypeScript"
}
],
"urls": [
{
"url": "https://t.co/f3fzC5UPtR",
"expanded_url": "https://github.com/webpro-nl/knip",
"display_url": "github.com/webpro-nl/knip",
"images": [
{
"url": "https://pbs.twimg.com/news_img/1729485824314548224/0xZughNs?format=png&name=orig",
"width": 1280,
"height": 640
},
{
"url": "https://pbs.twimg.com/news_img/1729485824314548224/0xZughNs?format=png&name=150x150",
"width": 150,
"height": 150
}
],
"title": "GitHub - webpro-nl/knip: ✂️ Find unused dependencies, exports and files in your JavaScript and TypeScript projects. Knip it before you ship it!",
"description": "✂️ Find unused dependencies, exports and files in your JavaScript and TypeScript projects. Knip it before you ship it! - GitHub - webpro-nl/knip: ✂️ Find unused dependencies, exports and files in yo...",
"unwound_url": "https://github.com/webpro-nl/knip"
}
]
},
"author_id": "481186762",
"text": "🛠️ Knip\n\n👉🏻 Knip finds unused dependencies, exports and files in your JavaScript and TypeScript projects.\n👉🏻 Less code and dependencies lead to improved performance, less maintenance and easier refactorings. \n\nhttps://t.co/f3fzC5UPtR",
"id": "1696221274039595363",
"created_at": "2023-08-28T18:00:40.000Z",
"edit_history_tweet_ids": ["1696221274039595363"]
},
{
"entities": {
"annotations": [
{
"probability": 0.9354,
"type": "Other",
"normalized_text": "JavaScript"
},
{
"probability": 0.7027,
"type": "Other",
"normalized_text": "TypeScript"
},
{
"probability": 0.7208,
"type": "Other",
"normalized_text": "Josh"
}
],
"urls": [
{
"url": "https://t.co/nKtvr2wEg6",
"expanded_url": "https://twitter.com/JoshuaKGoldberg/status/1693713311836115286",
"display_url": "twitter.com/JoshuaKGoldberg"
}
]
},
"author_id": "416394303",
"text": "Knip is wonderful at finding out unused code/dependencies in a legacy JavaScript/TypeScript application\n\nRecommend 💯\n\nHere's how Josh used it to remove code bloat in Centered: https://t.co/nKtvr2wEg6",
"id": "1693944495472046382",
"created_at": "2023-08-22T11:13:34.000Z",
"edit_history_tweet_ids": ["1693944495472046382"]
},
{
"entities": {
"annotations": [
{
"probability": 0.5513,
"type": "Other",
"normalized_text": "Knip"
}
],
"urls": [
{
"url": "https://t.co/L8w9V11PRL",
"expanded_url": "https://www.smashingmagazine.com/2023/08/knip-automated-tool-find-unused-files-exports-dependencies/",
"display_url": "smashingmagazine.com/2023/08/knip-a…",
"images": [
{
"url": "https://pbs.twimg.com/news_img/1727384011872366592/W-M5klkJ?format=jpg&name=orig",
"width": 1200,
"height": 675
},
{
"url": "https://pbs.twimg.com/news_img/1727384011872366592/W-M5klkJ?format=jpg&name=150x150",
"width": 150,
"height": 150
}
],
"title": "Knip: An Automated Tool For Finding Unused Files, Exports, And Dependencies — Smashing Magazine",
"description": "Most of the projects have at least a few unused files, exports, and dependencies lying around, often because it’s difficult knowing when one thing relies on another and scary removing something you’re not sure is in use. Lars Kappert shares a tool he’s been working on that offers a solution.",
"unwound_url": "https://www.smashingmagazine.com/2023/08/knip-automated-tool-find-unused-files-exports-dependencies/"
}
]
},
"author_id": "15736190",
"text": "Unused files, exports, and dependencies often clutter projects, as it’s difficult knowing when one thing relies on another and scary to remove something you’re not sure is in use. 👀\n\n↬ Meet Knip, which scours projects for these unused artifacts: https://t.co/L8w9V11PRL",
"id": "1691120132901240832",
"created_at": "2023-08-14T16:10:33.000Z",
"edit_history_tweet_ids": ["1691120132901240832"]
},
{
"entities": {
"mentions": [
{
"username": "typescript",
"id": "809233214"
}
],
"urls": [
{
"url": "https://t.co/1mRMwvjIpw",
"expanded_url": "https://effectivetypescript.com/2023/07/29/knip/",
"display_url": "effectivetypescript.com/2023/07/29/kni…",
"images": [
{
"url": "https://pbs.twimg.com/news_img/1696204795353219085/ZjmFlTVW?format=jpg&name=orig",
"width": 560,
"height": 735
},
{
"url": "https://pbs.twimg.com/news_img/1696204795353219085/ZjmFlTVW?format=jpg&name=150x150",
"width": 150,
"height": 150
}
],
"title": "Effective TypeScript › Recommendation Update: ✂️ Use knip to detect dead code and types",
"description": "TL;DR: Use ts-prune is in maintenance mode. Use knip to find dead code instead. It's great!",
"unwound_url": "https://effectivetypescript.com/2023/07/29/knip/"
}
]
},
"author_id": "21046936",
"text": "Recommendation update: use knip to find dead code, types and dependencies in your @typescript ✂️https://t.co/1mRMwvjIpw",
"id": "1685298103094554625",
"created_at": "2023-07-29T14:35:53.000Z",
"edit_history_tweet_ids": ["1685298103094554625"]
},
{
"entities": {
"annotations": [
{
"probability": 0.9661,
"type": "Other",
"normalized_text": "GitHub"
}
],
"urls": [
{
"url": "https://t.co/vnxNbiJs1I",
"expanded_url": "https://github.com/webpro-nl/knip",
"display_url": "github.com/webpro-nl/knip",
"images": [
{
"url": "https://pbs.twimg.com/news_img/1729485824314548224/0xZughNs?format=png&name=orig",
"width": 1280,
"height": 640
},
{
"url": "https://pbs.twimg.com/news_img/1729485824314548224/0xZughNs?format=png&name=150x150",
"width": 150,
"height": 150
}
],
"title": "GitHub - webpro-nl/knip: ✂️ Find unused dependencies, exports and files in your JavaScript and TypeScript projects. Knip it before you ship it!",
"description": "✂️ Find unused dependencies, exports and files in your JavaScript and TypeScript projects. Knip it before you ship it! - GitHub - webpro-nl/knip: ✂️ Find unused dependencies, exports and files in yo...",
"unwound_url": "https://github.com/webpro-nl/knip"
}
]
},
"author_id": "380616577",
"text": "This is worth checking out on GitHub. 👍 https://t.co/vnxNbiJs1I",
"id": "1581910299846012928",
"created_at": "2022-10-17T07:29:40.000Z",
"edit_history_tweet_ids": ["1581910299846012928"]
},
{
"note_tweet": {
"text": "Streamlining React projects with Knip:\n\nRecently, I employed Knip for a project, and it worked wonders! \n\nIt efficiently resolved issues with removing\n✅ Unused files, \n✅ Unused npm dependencies, \n✅ Unneeded TypeScript exports.\n\n A real time-saver for maintaining a clean and efficient codebase. 🛠️ #ReactDevelopment \n\nhttps://t.co/IbJH2fIzsE",
"entities": {
"urls": [
{
"url": "https://t.co/IbJH2fIzsE",
"expanded_url": "https://github.com/webpro-nl/knip",
"display_url": "github.com/webpro-nl/knip"
}
],
"hashtags": [{ "tag": "ReactDevelopment" }]
}
},
"entities": {
"annotations": [
{
"probability": 0.743,
"type": "Other",
"normalized_text": "Knip"
},
{
"probability": 0.7667,
"type": "Other",
"normalized_text": "Knip"
}
],
"urls": [
{
"url": "https://t.co/P39xg0qCrT",
"expanded_url": "https://twitter.com/i/web/status/1693502146128281657",
"display_url": "twitter.com/i/web/status/1…"
}
]
},
"author_id": "827145937030148097",
"text": "Streamlining React projects with Knip:\n\nRecently, I employed Knip for a project, and it worked wonders! \n\nIt efficiently resolved issues with removing\n✅ Unused files, \n✅ Unused npm dependencies, \n✅ Unneeded TypeScript exports.\n\n A real time-saver for maintaining a clean and… https://t.co/P39xg0qCrT",
"id": "1693502146128281657",
"created_at": "2023-08-21T05:55:50.000Z",
"edit_history_tweet_ids": ["1693502146128281657"]
},
{
"entities": {
"annotations": [
{
"probability": 0.9331,
"type": "Other",
"normalized_text": "JavaScript"
},
{
"probability": 0.5907,
"type": "Other",
"normalized_text": "Knip"
}
]
},
"author_id": "18191376",
"text": "Found a bunch of unused code, -dependencies, and unnecessary exports. Had just one false positive but overall pretty good. 10/10 would recommend.\n\nIf you’ve got a JavaScript package/project use Knip and remove unnecessary code. ✂️",
"id": "1692942539614028086",
"created_at": "2023-08-19T16:52:09.000Z",
"edit_history_tweet_ids": ["1692942539614028086"]
}
],
"includes": {
"media": [
{
"media_key": "1",
"url": "https://pbs.twimg.com/media/GDrwdB3aYAAu4am?format=png&name=orig",
"type": "photo"
},
{
"media_key": "2",
"url": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:opw3iapscc55nlgrx6q2yjah/bafkreihzszb56agbe6dtuf6xfutl65mjg5ethnrvw264d5bljbm377jora@jpeg",
"type": "photo"
},
{
"media_key": "3_1730179997682552832",
"url": "https://pbs.twimg.com/media/GALVin9a0AAsn0-.jpg",
"type": "photo"
},
{
"media_key": "4",
"url": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:4dsclu5hjmht3shxutxtge6h/bafkreid63o3hwvwpk6emgzj64vywusztofhz2yihuvwkywuuajn4eekvom@jpeg",
"type": "photo"
},
{
"media_key": "5",
"url": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:2gkh62xvzokhlf6li4ol3b3d/bafkreiahk2jbsb2stw276lkrkxrkvialqs25zrpgo2n3cigzfb7qvgfsmq@jpeg",
"type": "photo"
},
{
"media_key": "6",
"url": "https://pbs.twimg.com/media/G9wBaMFWoAAkgv5.png",
"type": "photo"
}
],
"users": [
{
"id": "11",
"username": "julien.deniau.me",
"profile_image_url": "https://cdn.bsky.app/img/avatar/plain/did:plc:4dsclu5hjmht3shxutxtge6h/bafkreiht3iqxcmelwe7oysawrdpynzevf4dt2ndzeln4f5c2izf62zm57q@jpeg",
"name": "Julien Deniau"
},
{
"id": "12",
"username": "alexharfordseo.bsky.social",
"profile_image_url": "https://cdn.bsky.app/img/avatar/plain/did:plc:y3arowkhgiexpyvmmxvquavg/bafkreiazlcx5fdxylsqtsdng3beq3ayuoc7nzyqcddeequhi7uploqcjny@jpeg",
"name": "AlexHarford-TechSEO"
},
{
"id": "13",
"username": "fubits.dev",
"profile_image_url": "https://cdn.bsky.app/img/avatar/plain/did:plc:6aglx53tojyuwxwueap5og3h/bafkreiclnob3mnfvo74an6ugrnbdikrkxcskndjojrdtkwf5vwjuu77z5u@jpeg",
"name": "Ilja"
},
{
"id": "14",
"username": "alexanderkaran.bsky.social",
"profile_image_url": "https://cdn.bsky.app/img/avatar/plain/did:plc:3n4fccuhdomkkebojjdurnco/bafkreiggltcvdoh4igf5yxvrxggysmasv5efn6hffyav2o6swxslbc3lp4@jpeg",
"name": "Alexander Karan"
},
{
"id": "15",
"username": "patak.dev",
"profile_image_url": "https://cdn.bsky.app/img/avatar/plain/did:plc:2gkh62xvzokhlf6li4ol3b3d/bafkreifgzl4e5jqlakd77ajvnilsb5tufsv24h2sxfwmitkzxrh3sk6mhq@jpeg",
"name": "patak"
},
{
"id": "16",
"username": "psparwez",
"profile_image_url": "https://unavatar.io/x/psparwez",
"name": "PS"
},
{
"id": "17",
"username": "k_shehadeh",
"profile_image_url": "https://unavatar.io/x/k_shehadeh",
"name": "Karim Shehadeh"
},
{
"id": "18",
"username": "cramforce",
"profile_image_url": "https://unavatar.io/x/cramforce",
"name": "Malte Ubl"
},
{
"id": "1",
"username": "sqs",
"profile_image_url": "https://pbs.twimg.com/profile_images/1519180377604034560/NxI03WYE_400x400.jpg",
"name": "Quinn Slack"
},
{
"id": "2",
"username": "jokull",
"profile_image_url": "https://pbs.twimg.com/profile_images/1943338796122083328/NsFCJwMd_400x400.jpg",
"name": "Jökull Solberg"
},
{
"id": "3",
"username": "Hicksyfern",
"profile_image_url": "https://pbs.twimg.com/profile_images/1559181703352094720/NFL2PBbK_400x400.jpg",
"name": "Tom Hicks"
},
{
"id": "4",
"username": "daviduzumeri.bsky.social",
"profile_image_url": "https://cdn.bsky.app/img/avatar/plain/did:plc:6ykajndqngy2kxozo37mpsgc/bafkreif2xu6bini3tpv2hfauw53ng43zbefgqol36yt4baehcbdfxahihu@jpeg",
"name": "Old Man Uzi"
},
{
"id": "5",
"username": "gary__tyr",
"profile_image_url": "https://pbs.twimg.com/profile_images/1947080916045631488/m42HwWiy_400x400.jpg",
"name": "Gary Tyr"
},
{
"id": "6",
"username": "KevinVanCott",
"profile_image_url": "https://pbs.twimg.com/profile_images/1419785698887012357/V533Pwsr_400x400.jpg",
"name": "Kevin Thomas Van Cott"
},
{
"id": "7",
"username": "joshuakgoldberg.com",
"profile_image_url": "https://cdn.bsky.app/img/avatar/plain/did:plc:hwtki3j7oghodc7h6gqnrtro/bafkreicvkrpjmc7yoviwf5vhkecgcgyn23x24ix4aqdwiikcl226c64k2q@jpeg",
"name": "Josh Goldberg 💖"
},
{
"id": "8",
"username": "beaussan.io",
"profile_image_url": "https://cdn.bsky.app/img/avatar/plain/did:plc:opw3iapscc55nlgrx6q2yjah/bafkreiaj72657msogojjdk4wr76fe3umimydon3pzzrquuj7opcftntrqa@jpeg",
"name": "Nicolas Beaussart"
},
{
"id": "9",
"username": "MidnightDesign",
"name": "Rudolph Gottesheim",
"profile_image_url": "https://avatars.githubusercontent.com/u/743172?v=4"
},
{
"id": "10",
"username": "stephaneledorze",
"name": "stephane le dorze",
"profile_image_url": "https://pbs.twimg.com/profile_images/1587561006317899777/y8cgxyI7_400x400.jpg"
},
{
"id": "22918124",
"username": "gregberge_",
"profile_image_url": "https://pbs.twimg.com/profile_images/1722358890807861248/75S7CB3G_normal.jpg",
"name": "Greg Bergé"
},
{
"id": "19268321",
"username": "housecor",
"profile_image_url": "https://pbs.twimg.com/profile_images/1963593369306750976/7gPWqEa8_400x400.jpg",
"name": "Cory House"
},
{
"id": "3126044440",
"username": "pkgacek",
"profile_image_url": "https://pbs.twimg.com/profile_images/585047168899244033/kpQ-Reb7_normal.jpg",
"name": "Piotr Gacek 🐟"
},
{
"id": "95668959",
"username": "kuizinas",
"profile_image_url": "https://pbs.twimg.com/profile_images/1978959812172894209/yQXTNMuJ_400x400.jpg",
"name": "Gajus"
},
{
"id": "1632752318994153472",
"username": "imabhiprasad",
"profile_image_url": "https://pbs.twimg.com/profile_images/1917768224612962304/7RHnN131_400x400.jpg",
"name": "Abhijeet Prasad"
},
{
"id": "1513218780167655427",
"username": "fernandoeeu_dev",
"profile_image_url": "https://pbs.twimg.com/profile_images/1513219705317822473/9CR0LjqB_normal.jpg",
"name": "Fernando"
},
{
"id": "44217212",
"username": "TkDodo",
"profile_image_url": "https://pbs.twimg.com/profile_images/1803004614372937728/OSIQ4AGx_400x400.jpg",
"name": "Dominik 🔮"
},
{
"id": "481186762",
"username": "Mokkapps",
"profile_image_url": "https://pbs.twimg.com/profile_images/1825498937911889920/FtBqvqgK_400x400.jpg",
"name": "Michael Hoffmann"
},
{
"id": "416394303",
"username": "nicoespeon",
"profile_image_url": "https://pbs.twimg.com/profile_images/1649018862527041536/9s6Nlwyj_normal.jpg",
"name": "Nicolas Carlo"
},
{
"id": "15736190",
"username": "smashingmag",
"profile_image_url": "https://pbs.twimg.com/profile_images/1669591955653685248/mTxJyTGY_normal.jpg",
"name": "Smashing Magazine 🇺🇦 🏳️🌈"
},
{
"id": "21046936",
"username": "danvdk",
"profile_image_url": "https://pbs.twimg.com/profile_images/485135064557035520/zATSd81r_normal.jpeg",
"name": "Dan Vanderkam"
},
{
"id": "380616577",
"username": "stefanjudis",
"profile_image_url": "https://pbs.twimg.com/profile_images/1465780299380502537/pptBYF44_normal.jpg",
"name": "Stefan Judis"
},
{
"id": "827145937030148097",
"username": "BKailaash",
"profile_image_url": "https://pbs.twimg.com/profile_images/839048279442718720/SiC-Q2Nc_normal.jpg",
"name": "Kailaash"
},
{
"id": "18191376",
"username": "waldekm",
"profile_image_url": "https://pbs.twimg.com/profile_images/1670040743006617602/N5VnH4YU_normal.jpg",
"name": "Waldek Mastykarz"
}
]
}
}
================================================
FILE: packages/docs/src/components/Contributors.astro
================================================
---
import { readFile } from 'node:fs/promises';
const ENVIRONMENT = import.meta.env.ENVIRONMENT;
const GITHUB_TOKEN = import.meta.env.GITHUB_TOKEN;
const isFetch = ENVIRONMENT !== 'development' && Boolean(GITHUB_TOKEN);
interface Contributor {
html_url: string;
avatar_url: string;
login: string;
}
const url = new URL('/repos/webpro-nl/knip/contributors', 'https://api.github.com');
url.searchParams.set('per_page', '100');
const getAllContributors = async (url: URL) => {
const allContributors: Contributor[] = [];
let nextUrl: string = url.href;
console.log('\n');
while (nextUrl) {
console.log(`Fetching contributors from ${nextUrl}`);
const response = await fetch(nextUrl, {
headers: {
Accept: 'application/vnd.github+json',
Authorization: `Bearer ${GITHUB_TOKEN}`,
'X-GitHub-Api-Version': '2022-11-28',
},
});
if (!response.ok) {
console.error('GitHub API request failed:');
console.log(await response.text());
return [];
}
const contributors = await response.json();
allContributors.push(...contributors);
const linkHeader = response.headers.get('Link');
nextUrl = linkHeader?.match(/<([^>]+)>;\s*rel="next"/)?.[1] || '';
}
return allContributors;
};
const contributors: Contributor[] = isFetch
? await getAllContributors(url)
: JSON.parse(await readFile('mock/contributors.json', 'utf-8'));
if (!Array.isArray(contributors)) console.log(contributors);
---
<style>
.contributors {
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
}
.contributors a {
border: none !important;
opacity: 0.8;
max-height: 100px;
overflow: hidden;
}
.contributors a:hover {
opacity: 1;
}
</style>
<div class="contributors">
{
(Array.isArray(contributors) ? contributors : []).map(contributor => (
<a href={contributor.html_url}>
<img
src={contributor.avatar_url}
alt={contributor.login}
width="100"
height="100"
/>
</a>
))
}
</div>
================================================
FILE: packages/docs/src/components/EmojiBlastButton.astro
================================================
<style>
div {
display: none;
justify-content: center;
}
button {
color: var(--sl-color-text-accent);
margin-top: 2rem;
padding: 1rem;
background-color: var(--sl-color-orange);
border: 2px solid var(--sl-color-text-accent);
border-radius: 8px;
cursor: pointer;
font-size: 1.25rem;
}
button:hover {
background-color: var(--sl-color-bright-orange);
}
</style>
<div data-button-container>
<button>Hooray, release the clutter!</button>
</div>
<script is:inline type="module" id="emoji-blasts">
import { emojiBlast } from 'https://unpkg.com/emoji-blast@0.10.1';
const container = document.querySelector('[data-button-container]');
const button = container.querySelector('button');
if(emojiBlast && button) {
const cb = () => emojiBlast({ emojis: ["✂️", "🚀", "❤️", "🎉", "🧡", "2️⃣"] });
container.style.display = 'flex';
button.addEventListener('click', cb);
};
</script>
================================================
FILE: packages/docs/src/components/Footer.astro
================================================
---
import Default from '@astrojs/starlight/components/Footer.astro';
---
<style>
p {
border-top: 1px solid var(--sl-color-gray-3);
margin-top: 5rem !important;
padding-top: 1rem;
text-align: center;
}
a {
color: var(--sl-color-white);
margin: 0 0.5rem;
}
</style>
<Default {...Astro.props} />
<p>
<a href="https://github.com/webpro-nl/knip/blob/main/packages/knip/license"
>ISC License</a
> © 2024
<a href="https://www.webpro.nl">Lars Kappert</a>
</p>
<script async defer src="https://smplnltcs.knip.dev/latest.js"></script>
<noscript>
<img
src="https://smplnltcs.knip.dev/noscript.gif"
alt=""
referrerpolicy="no-referrer-when-downgrade" />
</noscript>
================================================
FILE: packages/docs/src/components/Head.astro
================================================
---
import Default from '@astrojs/starlight/components/Head.astro';
const slug = Astro.locals.starlightRoute.slug;
const url = new URL(Astro.url);
url.pathname = `/og/docs${slug ? `/${slug}` : ''}.webp`;
---
<Default {...Astro.props} />
<meta property="og:image" content={url.href} />
<meta name="twitter:image" content={url.href} />
<meta name="twitter:card" content="summary_large_image" />
<link rel="sitemap" href="/sitemap.txt" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="icon" href="/favicon.svg" type="image/svg+xml" />
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
<link rel="manifest" href="/manifest.json" />
================================================
FILE: packages/docs/src/components/Post.astro
================================================
---
import { formatTimestamp, type PostWithUser, replaceShortenedUrls } from '../util/post.js';
const post: PostWithUser = replaceShortenedUrls(Astro.props.data);
---
<style>
.text {
color: var(--sl-color-text-accent);
}
.n .name,
.engagement > * {
margin-top: 0 !important;
}
header {
display: flex;
align-items: center;
line-height: 1.3;
}
.n .profile {
border-radius: 9999px;
width: 48px;
height: 48px;
}
.n {
display: flex;
gap: 1rem;
}
.n .name {
display: flex;
flex-direction: column;
}
.engagement {
display: flex;
align-items: center;
justify-content: space-around;
color: #595959;
}
.engagement > * {
display: flex;
gap: 0.5rem;
white-space: nowrap;
align-items: center;
}
.engagement svg {
fill: currentColor;
}
</style>
{
post && (
<>
<header class="n">
<img class="profile" src={post.user.profile_image_url} />
<div class="name">
<span class="real">{post.user.name}</span>
<span class="screen">@{post.user.username}</span>
</div>
</header>
<p class="text" set:html={post.text.trim().replace(/\n/g, '<br />')} />
<p class="timestamp">
<a
href={`${post.url ? post.url : post.id.length > 17 ? `https://twitter.com/${post.user.username}/status/${post.id}` : `https://bsky.app/profile/${post.user.username}/post/${post.id}`}`}>
{formatTimestamp(post.created_at)}
</a>
</p>
</>
)
}
================================================
FILE: packages/docs/src/components/Posts.astro
================================================
---
import { readFile } from 'node:fs/promises';
import { Card, CardGrid } from '@astrojs/starlight/components';
import type { PostResponse } from '../util/post.js';
import Post from './Post.astro';
const testimonials: PostResponse = JSON.parse(await readFile('src/assets/testimonials.json', 'utf-8'));
---
<div class="no-title-cards">
<CardGrid stagger>
{
testimonials.data.map(testimonial => {
return (
<Card title="">
<Post
data={{
...testimonial,
user: testimonials.includes.users.find(
user => user.id === testimonial.author_id
),
media: testimonials.includes.media?.filter(media =>
testimonial.entities.urls
?.map(url => url.media_key)
.includes(media.media_key)
),
}}
/>
</Card>
);
})
}
<CardGrid />
</CardGrid>
</div>
================================================
FILE: packages/docs/src/components/Projects.astro
================================================
---
import Adobe from '../assets/projects/adobe.svg';
import AGGrid from '../assets/projects/ag-grid.svg';
import AGGrid2 from '../assets/projects/ag-grid2.svg';
import Anthropic from '../assets/projects/anthropic.svg';
import ArkType from '../assets/projects/arktype.svg';
import AstroLogo from '../assets/projects/astro.svg';
import AWS from '../assets/projects/aws.svg';
import Backstage from '../assets/projects/backstage.svg';
import Cloudflare from '../assets/projects/cloudflare.svg';
import CreateTypeScriptApp from '../assets/projects/create-typescript-app.png';
import Datadog from '../assets/projects/datadog.svg';
import ESLint from '../assets/projects/eslint.svg';
import FreeCodeCamp from '../assets/projects/freecodecamp.svg';
import Google from '../assets/projects/google.svg';
import Grafana from '../assets/projects/grafana.svg';
import Guardian from '../assets/projects/guardian.svg';
import Microsoft from '../assets/projects/microsoft.svg';
import Mocha from '../assets/projects/mocha.svg';
import Nuxt from '../assets/projects/nuxt.svg';
import Prettier from '../assets/projects/prettier.svg';
import Sanity from '../assets/projects/sanity.svg';
import SAP from '../assets/projects/sap.svg';
import Sentry from '../assets/projects/sentry.svg';
import Shopify from '../assets/projects/shopify.svg';
import SourceGraph from '../assets/projects/sourcegraph.svg';
import Stately from '../assets/projects/stately.svg';
import Storybook from '../assets/projects/storybook.svg';
import Svelte from '../assets/projects/svelte.svg';
import TanStack from '../assets/projects/tanstack.png';
import TypeScriptESLint from '../assets/projects/typescript-eslint.svg';
import Vercel from '../assets/projects/vercel.svg';
---
<style>
div {
margin-top: 4rem;
display: flex;
flex-wrap: wrap;
align-content: center;
align-items: center;
justify-content: space-between;
gap: 3.5rem;
list-style: none;
padding: 0;
}
a {
border-bottom: none !important;
display: flex;
}
svg, img {
width: auto;
height: 32px !important;
margin: 0 !important;
opacity: 0.9;
transition: all 0.3s ease;
filter: brightness(0.6) grayscale(100%)
}
[data-theme=light] svg {
opacity: 0.7;
}
.contrast svg {
opacity: 1;
filter: contrast(1) grayscale(100%)
}
.shrink {
margin: 0 -3%;
svg {
scale: 0.75;
}
}
.grow svg {
scale: 1.4;
}
.blowup svg {
scale: 2.5;
}
.raise svg {
translate: 0 -6px;
}
.sink svg {
translate: 0 6px;
}
a:hover svg,
a:hover img {
filter: none;
}
[data-theme=light] a:hover svg,
[data-theme=light] a:hover img {
opacity: 1;
filter: none;
}
</style>
<div id="projects">
<a href="https://github.com/search?type=code&q=org:adobe knip" class="contrast grow"><Adobe /></a>
<a href="https://github.com/search?type=code&q=org:ag-grid knip"><AGGrid /><AGGrid2 /></a>
<a href="https://github.com/search?type=code&q=org:anthropics knip" class="shrink"><Anthropic /></a>
<a href="https://github.com/search?type=code&q=org:arktypeio knip" class="grow"><ArkType /></a>
<a href="https://github.com/search?type=code&q=org:withastro knip"><AstroLogo /></a>
<a href="https://github.com/search?type=code&q=org:aws-samples knip" class="sink" ><AWS/></a>
<a href="https://github.com/search?type=code&q=org:backstage knip"><Backstage /></a>
<a href="https://github.com/search?type=code&q=org:cloudflare knip" class="grow"><Cloudflare /></a>
<a href="https://github.com/search?type=code&q=org:datadog knip"><Datadog /></a>
<a href="https://github.com/search?type=code&q=org:eslint knip" class="contrast"><ESLint /></a>
<a href="https://github.com/search?type=code&q=org:freeCodeCamp knip"><FreeCodeCamp /></a>
<a href="https://github.com/search?type=code&q=org:google-gemini knip"><Google /></a>
<a href="https://github.com/search?type=code&q=org:grafana knip"><Grafana /></a>
<a href="https://github.com/search?type=code&q=org:guardian knip"><Guardian /></a>
<a href="https://github.com/search?type=code&q=org:JoshuaKGoldberg knip"><img src={CreateTypeScriptApp.src}/></a>
<a href="https://github.com/search?type=code&q=org:microsoft knip"><Microsoft /></a>
<a href="https://github.com/search?type=code&q=org:mochajs knip" class="contrast grow"><Mocha /></a>
<a href="https://github.com/search?type=code&q=org:nuxt knip"><Nuxt /></a>
<a href="https://github.com/search?type=code&q=org:prettier knip" class="contrast grow"><Prettier /></a>
<a href="https://github.com/search?type=code&q=org:sanity-io knip"><Sanity /></a>
<a href="https://github.com/search?type=code&q=org:SAP knip" class="blowup"><SAP /></a>
<a href="https://github.com/search?type=code&q=org:getsentry knip"><Sentry /></a>
<a href="https://github.com/search?type=code&q=org:shopify knip"><Shopify /></a>
<a href="https://github.com/search?type=code&q=org:sourcegraph knip"><SourceGraph /></a>
<a href="https://github.com/search?type=code&q=org:statelyai knip"><Stately /></a>
<a href="https://github.com/search?type=code&q=org:storybookjs knip"><Storybook /></a>
<a href="https://github.com/search?type=code&q=org:sveltejs knip" class="contrast"><Svelte /></a>
<a href="https://github.com/search?type=code&q=org:tanstack knip" class="contrast"><img src={TanStack.src}/></a>
<a href="https://github.com/search?type=code&q=org:typescript-eslint knip" class="contrast grow"><TypeScriptESLint/></a>
<a href="https://github.com/search?type=pullrequests&q=org:vercel knip" class="shrink"><Vercel/></a>
</div>
================================================
FILE: packages/docs/src/components/Sponsors.astro
================================================
---
const { showAll = true } = Astro.props;
---
<div class=`sponsors ${showAll ? '' : 'front'}`>
<a class="smaller" href="https://datadoghq.com">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800.5 203.19" class="w500">
<style type="text/css">
.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#632CA6;}
[data-theme="dark"] .sponsors .st0 { fill:#FFF; }
[data-theme="dark"] .datadog-light { display: none; }
[data-theme="light"] .datadog-dark { display: none; }
</style>
<g>
<g>
<path class="st0" d="M260.87,144.65h-37.4v-86.1h37.4c26.94,0,40.43,13.57,40.43,40.7C301.29,129.51,287.81,144.65,260.87,144.65z
M239.45,130.79h19c17.9,0,26.84-10.51,26.84-31.55c0-17.91-8.95-26.87-26.84-26.87h-19L239.45,130.79L239.45,130.79z"/>
<polygon class="st0" points="318.04,144.65 301.62,144.65 338.25,58.55 355.44,58.55 392.85,144.65 375.66,144.65 364.8,121.17
337.17,121.17 342.66,107.32 360.58,107.32 346.46,74.98"/>
<polygon class="st0" points="383.82,58.55 449.28,58.55 449.28,72.39 424.55,72.39 424.55,144.65 408.57,144.65 408.57,72.39
383.82,72.39"/>
<polygon class="st0" points="457.5,144.65 441.08,144.65 477.71,58.55 494.9,58.55 532.31,144.65 515.1,144.65 504.24,121.17
476.61,121.17 482.1,107.32 500.02,107.32 485.91,74.98"/>
<path class="st0" d="M580.32,144.65h-37.4v-86.1h37.4c26.96,0,40.43,13.57,40.43,40.7C620.75,129.51,607.28,144.65,580.32,144.65z
M558.91,130.79h19c17.89,0,26.86-10.51,26.86-31.55c0-17.91-8.96-26.87-26.86-26.87h-19V130.79z"/>
<path class="st0" d="M631.58,101.72c0-29.2,14.45-43.79,43.33-43.79c28.44,0,42.64,14.59,42.64,43.79
c0,29.03-14.21,43.55-42.64,43.55C647.31,145.27,632.87,130.75,631.58,101.72z M674.91,131.39c17.36,0,26.05-10.01,26.05-30.05
c0-19.72-8.69-29.59-26.05-29.59c-17.82,0-26.73,9.87-26.73,29.59C648.18,121.38,657.09,131.39,674.91,131.39z"/>
<path class="st0" d="M784.26,109.81v20.16c-3.69,0.96-6.99,1.44-9.9,1.44c-19.55,0-29.31-10.34-29.31-31.01
c0-19.09,10.36-28.62,31.07-28.62c8.65,0,16.69,1.61,24.13,4.82V62.14c-7.44-2.8-15.89-4.21-25.34-4.21
c-30.97,0-46.46,14.15-46.46,42.47c0,29.9,15.22,44.87,45.67,44.87c10.47,0,19.17-1.52,26.13-4.58V95.64h-25.82l-5.4,14.16
L784.26,109.81L784.26,109.81z"/>
</g>
<g class="datadog-dark">
<path class="st0" d="M167.2,98.4l-54.9,10c-1.4,1.8-4.7,4.8-6.3,5.6c-6.9,3.5-11.6,2.5-15.7,1.4c-2.6-0.7-4.1-1-6.3-2l-13.4,1.8
l8.1,67.9l94.1-17L167.2,98.4z M83.4,176.7l-0.8-7.4L98,145.9l17.4,5.1l15-25.1l18,11.9l13.7-28.7l4.9,52.2L83.4,176.7z M79.5,110
c-6.8-4.4-13.8-10.6-16.9-14.1c-0.5-0.4-0.4-2.1-0.4-2.1c2.8,2.2,14.3,10.4,26.4,14.1c4.3,1.3,10.9,1.8,16.6-1.4
c4.4-2.5,9.6-6.8,12.7-11.2l0.6,1c0,0.7-1.5,3.9-2.2,5.2c1.3,0.8,2.3,1,3.8,1.4l10.1-1.6c3.6-5.8,6.2-15.2,3.4-24.2
c-1.6-5.1-9.8-15.4-10.4-15.9c-2.1-2,0.3-9.6-3.7-18c-4.3-8.8-15.6-18-20.5-22.1c1.4,1,10.3,4.6,14.4,9.6c0.4-0.5,0.6-3.2,0.9-3.9
c-3.6-4.6-3.8-12.9-3.8-15.1c0-4.1-2.1-8.7-2.1-8.7s3.6,2.8,4.5,7.7c1.1,5.7,3.4,10.3,6.5,14.1c5.8,7.2,11,10.9,13.7,8.2
c3.2-3.2-3.2-17.5-11.3-25.5c-9.5-9.3-12-8.1-17.5-6.1c-4.4,1.5-6.8,14.2-18.4,13.9c-2-0.2-7-0.4-9.5-0.3c1.3-1.8,2.4-3.2,2.4-3.2
s-3.9,1.6-7.2,3.6l-0.3-0.4c1.1-2.4,2.3-3.8,2.3-3.8s-3.1,1.9-5.9,4.1c0.5-2.8,2.5-4.6,2.5-4.6s-3.9,0.7-8.9,6.2
c-5.7,1.5-7,2.6-11.6,4.6c-7.4-1.6-10.8-4.2-14.1-9c-2.5-3.6-7-4.2-11.6-2.3c-6.7,2.8-15.1,6.5-15.1,6.5s2.8-0.1,5.6,0
c-3.9,1.5-7.7,3.5-7.7,3.5s1.8-0.1,4.1,0c-1.6,1.3-2.4,1.9-3.9,2.9c-3.6,2.6-6.5,5.6-6.5,5.6s2.4-1.1,4.6-1.7
c-1.5,3.5-4.6,6.1-4,10.4c0.5,3.9,5.3,12,11.6,17c0.5,0.4,9,8.3,15.4,5.1c6.4-3.2,8.9-6.1,10-10.5c1.2-5.1,0.5-8.9-2.1-19.9
c-0.9-3.6-3.1-11.1-4.2-14.6l0.2-0.2c2.1,4.4,7.4,16.1,9.6,23.9c3.4,12.2,2.3,18.4,0.8,20.7c-4.7,6.8-16.6,7.8-22,4
c-0.8,13.1,2.1,18.9,3.1,21.8c-0.5,3.3,1.7,9.6,1.7,9.6s0.2-2.8,1.2-4.3c0.3,3.3,1.9,7.3,1.9,7.3s-0.1-2.4,0.7-4.5
c1.1,1.8,1.9,2.2,2.9,3.6c1,3.6,3,6.2,3,6.2s-0.3-1.9-0.2-3.9c5,4.8,5.8,11.8,6.3,17.1c1.4,14.7-23.2,26.4-28,35.6
c-3.6,5.4-5.8,14.1,0.3,19.2c14.8,12.3,9.1,15.7,16.5,21.1c10.2,7.4,22.9,4.1,27.2-1.9c6-8.4,4.5-16.3,2.2-23.7
c-1.8-5.8-6.5-15.4-12.4-19.1c-6-3.8-11.9-4.5-16.8-4l0.5-0.5c7.1-1.4,14.6-0.6,20,2.8c6.1,3.9,11.7,10.7,14.6,21
c3.3-0.5,3.8-0.7,6.8-1.1L65,111.6L79.5,110z M113.8,43.3c6.3,2.9,5.5,8.5,5.6,11.8c0.1,0.9,0,1.6-0.1,2c-0.9-0.5-2.2-0.8-4.4-0.7
c-0.6,0-1.3,0.1-1.9,0.2c-2.3-1.2-3.7-3.7-5-6.3c-0.1-0.2-0.2-0.5-0.3-0.7c0-0.1-0.1-0.2-0.1-0.3c0,0,0-0.1,0-0.1
c-0.7-2.2-0.2-2.7,0.1-3.3s1.4-1.3-0.2-1.8c-0.1,0-0.3-0.1-0.5-0.1C108.1,42.6,111.4,42.2,113.8,43.3z M106,79.9
c1.2-0.9,6.8-2.7,12-3.4c2.7-0.3,6.6-0.5,7.4,0c1.6,0.9,1.6,3.7,0.5,6.3c-1.6,3.8-3.9,7.9-6.6,8.2c-4.3,0.6-8.3-1.7-12.9-5.2
C104.8,84.6,103.8,81.6,106,79.9z M65.6,51.4c6.8-4.6,15.5-2.8,14-1.4c-2.8,2.7,0.9,1.9,1.3,6.8c0.3,3.6-0.9,5.6-1.9,6.7
c-2.1,0.3-4.7,0.8-7.8,1.8c-1.8,0.6-3.4,1.2-4.8,1.9c-0.4-0.2-0.8-0.5-1.2-0.9C60.5,62.1,60.7,54.8,65.6,51.4z"/>
</g>
<g class="datadog-light">
<g>
<path class="st0" d="M158.87,144.16L142,133.04l-14.07,23.5l-16.36-4.78l-14.41,21.99l0.74,6.92l78.33-14.43l-4.55-48.94
L158.87,144.16z M85.82,123.07l12.57-1.73c2.03,0.91,3.45,1.26,5.89,1.88c3.8,0.99,8.19,1.94,14.7-1.34
c1.51-0.75,4.67-3.64,5.94-5.28l51.49-9.34l5.25,63.57l-88.21,15.9L85.82,123.07z M181.46,100.16l-5.08,0.97L166.62,0.25
L0.25,19.54l20.5,166.33l19.47-2.83c-1.55-2.22-3.98-4.91-8.11-8.35c-5.74-4.76-3.71-12.86-0.32-17.97
c4.47-8.63,27.54-19.61,26.23-33.41c-0.47-5.02-1.27-11.55-5.93-16.03c-0.17,1.86,0.14,3.65,0.14,3.65s-1.91-2.44-2.87-5.77
c-0.95-1.28-1.69-1.68-2.7-3.39c-0.72,1.97-0.62,4.26-0.62,4.26s-1.56-3.7-1.82-6.82c-0.93,1.4-1.16,4.05-1.16,4.05
s-2.03-5.83-1.57-8.97c-0.93-2.73-3.68-8.15-2.9-20.47c5.08,3.56,16.26,2.71,20.61-3.71c1.45-2.13,2.44-7.93-0.72-19.36
c-2.03-7.33-7.05-18.25-9.01-22.4l-0.23,0.17c1.03,3.34,3.16,10.33,3.98,13.73c2.47,10.29,3.13,13.87,1.97,18.61
c-0.99,4.12-3.35,6.82-9.35,9.84c-6,3.03-13.96-4.34-14.47-4.74c-5.83-4.64-10.34-12.22-10.84-15.9
c-0.52-4.03,2.32-6.45,3.76-9.74c-2.05,0.59-4.34,1.63-4.34,1.63s2.73-2.83,6.1-5.27c1.4-0.92,2.21-1.51,3.68-2.73
c-2.13-0.03-3.86,0.02-3.86,0.02s3.55-1.92,7.23-3.31c-2.69-0.12-5.27-0.02-5.27-0.02S35.75,27.1,42,24.5
c4.3-1.76,8.5-1.24,10.86,2.17c3.1,4.47,6.35,6.9,13.25,8.41c4.24-1.88,5.52-2.84,10.84-4.29c4.68-5.15,8.36-5.82,8.36-5.82
s-1.82,1.67-2.31,4.3c2.66-2.09,5.57-3.84,5.57-3.84s-1.13,1.39-2.18,3.6l0.24,0.36c3.1-1.86,6.74-3.32,6.74-3.32
s-1.04,1.32-2.26,3.02c2.34-0.02,7.08,0.1,8.91,0.31c10.86,0.24,13.11-11.6,17.28-13.08c5.22-1.86,7.55-2.99,16.44,5.74
c7.63,7.5,13.59,20.91,10.63,23.92c-2.48,2.49-7.38-0.97-12.8-7.74c-2.87-3.58-5.03-7.81-6.05-13.19
c-0.86-4.54-4.19-7.17-4.19-7.17s1.93,4.31,1.93,8.11c0,2.08,0.26,9.84,3.59,14.19c-0.33,0.64-0.48,3.15-0.85,3.63
c-3.87-4.68-12.19-8.03-13.54-9.02c4.59,3.76,15.14,12.4,19.19,20.68c3.83,7.83,1.57,15.01,3.51,16.87
c0.55,0.53,8.24,10.11,9.72,14.93c2.58,8.39,0.15,17.21-3.22,22.68l-9.43,1.47c-1.38-0.38-2.31-0.58-3.55-1.29
c0.68-1.21,2.04-4.22,2.05-4.84l-0.53-0.93c-2.94,4.16-7.85,8.2-11.94,10.52c-5.35,3.03-11.51,2.56-15.52,1.32
c-11.39-3.51-22.16-11.21-24.75-13.23c0,0-0.08,1.61,0.41,1.98c2.87,3.24,9.45,9.1,15.81,13.18l-13.55,1.49l6.41,49.89
c-2.84,0.41-3.28,0.61-6.39,1.05c-2.74-9.68-7.98-16.01-13.71-19.69c-5.05-3.25-12.02-3.98-18.7-2.66l-0.43,0.5
c4.64-0.48,10.12,0.19,15.74,3.75c5.52,3.49,9.97,12.51,11.61,17.94c2.1,6.94,3.55,14.36-2.1,22.23
c-4.02,5.59-15.74,8.68-25.22,2c2.53,4.07,5.95,7.4,10.55,8.02c6.84,0.93,13.33-0.26,17.79-4.84c3.81-3.92,5.84-12.12,5.3-20.75
l6.03-0.87l2.18,15.49l99.88-12.03L181.46,100.16z M120.69,58.08c-0.28,0.64-0.72,1.05-0.06,3.12l0.04,0.12l0.1,0.27l0.27,0.62
c1.19,2.42,2.49,4.71,4.66,5.88c0.56-0.09,1.15-0.16,1.75-0.19c2.04-0.09,3.33,0.23,4.15,0.68c0.07-0.41,0.09-1,0.04-1.88
c-0.16-3.07,0.61-8.29-5.29-11.04c-2.23-1.03-5.35-0.72-6.39,0.58c0.19,0.02,0.36,0.06,0.49,0.11
C122.04,56.89,120.98,57.43,120.69,58.08 M137.23,86.73c-0.77-0.43-4.39-0.26-6.93,0.04c-4.84,0.57-10.07,2.25-11.22,3.14
c-2.08,1.61-1.14,4.42,0.4,5.57c4.32,3.22,8.1,5.39,12.09,4.86c2.45-0.32,4.61-4.2,6.14-7.73
C138.77,90.19,138.77,87.58,137.23,86.73 M94.36,61.88c1.37-1.3-6.8-3-13.14,1.32c-4.67,3.19-4.82,10.03-0.35,13.9
c0.45,0.38,0.82,0.66,1.16,0.88c1.31-0.62,2.8-1.24,4.51-1.79c2.9-0.94,5.3-1.43,7.28-1.68c0.95-1.06,2.05-2.92,1.77-6.29
C95.22,63.63,91.75,64.36,94.36,61.88"/>
</g>
</g>
</g>
</svg>
</a>
<a href="https://workleap.com" class="smaller">
<svg viewBox="0 5 156 30" xmlns="http://www.w3.org/2000/svg" class="w500">
<style>
.fill {
fill: var(--sl-color-white);
/* #171417 */
}
@media (prefers-color-scheme: light) {
.fill {
fill: var(--sl-color-black);
}
}
</style>
<path class="fill" d="M42.4298 10.5439C36.7859 10.5439 32.8051 14.2893 32.8051 20.0761C32.8051 25.7624 36.5132 29.8466 42.4298 29.8466C48.1054 29.8466 52.0532 26.0007 52.0532 20.0761C52.0532 14.562 48.3163 10.5439 42.4298 10.5439ZM42.4298 25.4552C39.7765 25.4552 38.076 23.3434 38.076 20.0761C38.076 16.9451 39.7765 14.9353 42.4298 14.9353C45.0832 14.9353 46.7852 16.9451 46.7852 20.0761C46.7895 23.3434 45.089 25.4552 42.4341 25.4552H42.4298ZM85.9012 10.5439H79.4694L72.4994 17.9227V5.31261H67.2601V29.403H72.5037V23.9478L75.1801 21.3035L80.2586 29.3973H86.2858L78.8552 17.693L85.9012 10.5439ZM87.8787 29.403H93.1194V5.31261H87.8801L87.8787 29.403ZM128.972 13.8643C127.879 11.866 125.57 10.5439 122.787 10.5439C118.023 10.5439 114.619 14.4601 114.619 20.112C114.619 25.8643 118.023 29.8466 122.856 29.8466C125.271 29.8466 127.279 28.8604 128.435 27.2252V29.403H133.676V10.9874H129.407L128.972 13.8643ZM124.181 25.5226C121.662 25.5226 119.927 23.2745 119.921 20.0574C119.921 16.9106 121.658 14.6955 124.179 14.6955C126.7 14.6955 128.435 16.8762 128.435 19.9885C128.435 23.2386 126.696 25.5212 124.181 25.5226ZM146.831 10.5482C144.047 10.5482 141.74 11.8646 140.648 13.8658L140.217 10.9946H135.948V35.0735H141.187V27.2295C142.344 28.8632 144.361 29.8509 146.768 29.8509C151.601 29.8509 155.002 25.8672 155.002 20.1148C154.998 14.4644 151.597 10.5482 146.831 10.5482ZM145.432 25.5241C142.912 25.5241 141.176 23.276 141.176 20.0689C141.176 17.0068 142.911 14.8606 145.432 14.8606C147.953 14.8606 149.69 17.0398 149.69 20.1378C149.69 23.3104 147.953 25.5241 145.432 25.5241ZM104.173 10.5439C98.6988 10.5439 94.8543 14.5261 94.8543 20.2756C94.8543 25.9232 98.8351 29.8351 104.509 29.8466C108.486 29.8466 111.455 27.9459 112.736 24.5752L108.011 23.4841C107.501 24.7761 106.045 25.5226 104.38 25.5226C101.93 25.5226 100.389 23.8531 100.019 21.4025H113.052L113.094 20.913C113.164 20.1706 113.164 19.4231 113.094 18.6807C112.577 13.5743 108.943 10.5439 104.173 10.5439ZM100.22 18.2672C100.738 16.0608 102.325 14.6955 104.222 14.6955C106.223 14.6955 107.642 15.8885 107.916 18.2672H100.22ZM58.3745 14.5965L57.8277 10.9817H53.5585V29.403H58.7992V20.5182C58.7992 17.4188 60.9776 15.5813 64.6513 15.5813H65.4348V10.5439H64.9096C61.6205 10.5439 59.6229 11.8445 58.3745 14.5965ZM28.1097 10.9817L23.8046 24.077L19.7463 10.9874H14.6333L10.5622 27.1865L6.22119 10.9874H0.712115L7.34051 35.0778H13.0333L17.1949 18.7998L21.1268 29.8538H27.2085L33.6216 10.9946L28.1097 10.9817Z" />
</svg>
</a>
<a href="https://sourcegraph.com/community">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 312.8 55.5" class="w500">
<style>
.fill {
fill: var(--sl-color-white);
}
@media (prefers-color-scheme: light) {
.fill {
fill: var(--sl-color-black);
}
}
</style>
<path
d="M34.8 53.8c-2.8.5-5.5-1.3-6-4.1L21.2 8.2c-.5-2.8 1.3-5.5 4.1-6s5.5 1.3 6 4.1l7.6 41.5c.5 2.8-1.4 5.5-4.1 6z"
style="fill:#ff5543"></path>
<path
d="M14.9 46.7c-1.8.3-3.6-.3-4.9-1.7-1.8-2.2-1.6-5.4.6-7.2l32.1-27.3c2.2-1.8 5.4-1.6 7.2.6 1.8 2.2 1.6 5.4-.6 7.2l-32 27.3c-.7.6-1.6 1-2.4 1.1z"
style="fill:#a112ff"></path>
<path
d="M50.8 40.1c-.9.2-1.8.1-2.6-.2L8.4 25.8c-2.7-1-4.1-3.9-3.1-6.6s3.9-4.1 6.6-3.1l39.7 14.1c2.7 1 4.1 3.9 3.1 6.6-.6 1.8-2.2 3-3.9 3.3z"
style="fill:#00cbec"></path>
<path
class="fill"
d="M84 35.1c0-1-.4-1.8-1.1-2.4-.7-.6-1.6-1.2-2.7-1.7s-2.3-1-3.6-1.6c-1.3-.5-2.5-1.2-3.6-2s-2-1.8-2.7-3c-.7-1.2-1.1-2.7-1.1-4.5 0-1.6.3-3 .8-4.1.5-1.2 1.3-2.1 2.3-2.9 1-.8 2.1-1.3 3.5-1.7 1.3-.4 2.8-.6 4.5-.6 1.9 0 3.7.2 5.3.5s3.1.8 4.1 1.4l-2 5.3c-.7-.4-1.7-.8-3.1-1.1-1.4-.4-2.8-.5-4.4-.5-1.5 0-2.6.3-3.4.9-.8.6-1.2 1.4-1.2 2.4 0 .9.4 1.7 1.1 2.3.7.6 1.6 1.2 2.7 1.7s2.3 1.1 3.6 1.6c1.3.6 2.5 1.2 3.6 2s2 1.8 2.7 2.9c.7 1.2 1.1 2.6 1.1 4.3 0 1.7-.3 3.2-.9 4.5-.6 1.3-1.4 2.3-2.4 3.1-1 .8-2.3 1.5-3.8 1.9-1.5.4-3.1.6-4.9.6-2.3 0-4.4-.2-6.1-.7-1.8-.4-3.1-.9-3.9-1.3l2-5.4c.3.2.8.4 1.3.6.5.2 1.2.4 1.8.6.7.2 1.4.3 2.2.5.8.1 1.5.2 2.3.2 1.9 0 3.3-.3 4.3-1 1.2-.6 1.7-1.5 1.7-2.8zM93.1 32.2c0-3.9 1-7 2.9-9.1 1.9-2.1 4.6-3.2 8.1-3.2 1.9 0 3.5.3 4.8.9 1.4.6 2.5 1.4 3.4 2.5.9 1.1 1.6 2.4 2 3.9.4 1.5.7 3.2.7 5 0 3.9-1 7-2.9 9.1-1.9 2.1-4.6 3.2-8.1 3.2-1.9 0-3.5-.3-4.8-.9-1.4-.6-2.5-1.4-3.4-2.5-.9-1.1-1.6-2.4-2-3.9-.5-1.5-.7-3.2-.7-5zm6.2 0c0 1 .1 2 .3 2.8.2.9.5 1.6.8 2.3.4.7.9 1.2 1.5 1.5.6.4 1.3.5 2.2.5 1.6 0 2.8-.6 3.5-1.7.8-1.1 1.2-3 1.2-5.4 0-2.1-.4-3.9-1.1-5.2-.7-1.3-1.9-2-3.6-2-1.5 0-2.7.6-3.5 1.7-.9 1.1-1.3 2.9-1.3 5.5zM124.1 20.6v13.2c0 1.9.2 3.3.7 4.1.4.8 1.3 1.3 2.6 1.3 1.1 0 2.1-.3 2.9-1 .8-.7 1.3-1.5 1.7-2.5v-15h6v16.2c0 1.3.1 2.5.2 3.7.1 1.2.3 2.3.6 3.3h-4.6l-1.1-3.4h-.2c-.7 1.2-1.7 2.2-3 2.9-1.3.8-2.8 1.2-4.5 1.2-1.2 0-2.2-.2-3.2-.5-.9-.3-1.7-.8-2.3-1.5-.6-.7-1.1-1.7-1.4-2.9s-.5-2.8-.5-4.7V20.6h6.1zM155.5 26.2c-1-.3-1.8-.5-2.6-.5-1.1 0-2 .3-2.7.9-.7.6-1.2 1.3-1.5 2.2v15h-6V20.6h4.7l.7 3.1h.2c.5-1.1 1.2-2 2.1-2.7s2-.9 3.2-.9c.8 0 2.5.4 3.4.8l-1.5 5.3zM175.1 42.4c-.9.7-2.1 1.2-3.4 1.6-1.3.4-2.7.5-4.1.5-1.9 0-3.4-.3-4.7-.9-1.3-.6-2.3-1.4-3.1-2.5-.8-1.1-1.4-2.4-1.7-3.9-.4-1.5-.5-3.2-.5-5 0-3.9.9-7 2.7-9.1 1.8-2.1 4.3-3.2 7.7-3.2 1.7 0 3.1.1 4.1.4 1 .3 2 .6 2.8 1.1l-1.4 4.9c-.7-.3-1.4-.6-2.1-.8-.7-.2-1.5-.3-2.4-.3-1.7 0-2.9.6-3.8 1.7-.9 1.1-1.3 2.9-1.3 5.3 0 1 .1 1.9.3 2.7s.5 1.6 1 2.2c.4.6 1 1.1 1.7 1.5.7.4 1.5.5 2.4.5 1 0 1.9-.1 2.6-.4.7-.3 1.3-.6 1.9-1l1.3 4.7zM196.4 41.8c-.9.7-2.2 1.4-3.8 1.9-1.6.5-3.3.8-5.1.8-3.8 0-6.5-1.1-8.2-3.3-1.7-2.2-2.6-5.2-2.6-9 0-4.1 1-7.2 2.9-9.2s4.7-3.1 8.2-3.1c1.2 0 2.3.2 3.4.5s2.1.8 3 1.5 1.6 1.7 2.1 2.9.8 2.7.8 4.5c0 .7 0 1.3-.1 2.1-.1.7-.2 1.5-.3 2.3h-14c.1 2 .6 3.4 1.5 4.4.9 1 2.4 1.5 4.4 1.5 1.3 0 2.4-.2 3.4-.6 1-.4 1.8-.8 2.3-1.2l2.1 4zm-8.7-17.1c-1.6 0-2.8.5-3.5 1.4-.8.9-1.2 2.2-1.4 3.8h8.6c.1-1.7-.1-3-.8-3.9-.5-.8-1.5-1.3-2.9-1.3zM220.6 43.8c0 3.4-.9 5.9-2.7 7.5s-4.4 2.4-7.7 2.4c-2.2 0-4-.2-5.3-.5s-2.3-.6-2.9-1l1.3-4.8c.7.3 1.5.6 2.5.8s2.1.4 3.5.4c2.1 0 3.5-.5 4.3-1.4.8-.9 1.1-2.2 1.1-3.8V42h-.2c-1.1 1.5-3 2.2-5.8 2.2-3 0-5.2-.9-6.7-2.8s-2.2-4.8-2.2-8.7c0-4.2 1-7.3 3-9.4 2-2.1 4.9-3.2 8.6-3.2 2 0 3.8.1 5.3.4s2.8.6 3.8 1v22.3zm-10.2-4.5c1.2 0 2.1-.3 2.7-.8.6-.5 1.1-1.3 1.5-2.4V25.7c-1-.4-2.2-.6-3.6-.6-1.6 0-2.8.6-3.6 1.7-.9 1.2-1.3 3-1.3 5.6 0 2.3.4 4 1.1 5.2.7 1.2 1.8 1.7 3.2 1.7zM238.1 26.2c-1-.3-1.8-.5-2.6-.5-1.1 0-2 .3-2.7.9-.7.6-1.2 1.3-1.5 2.2v15h-6V20.6h4.7l.7 3.1h.2c.5-1.1 1.2-2 2.1-2.7s2-.9 3.2-.9c.8 0 1.7.2 2.7.5l-.8 5.6zM241 21.7c1.2-.6 2.1-.8 3.8-1.1 1.7-.3 3.5-.5 5.3-.5 1.6 0 3 .2 4 .6s1.9.9 2.6 1.7c.6.7 1.1 1.6 1.3 2.6.3 1 .4 2.1.4 3.3 0 1.4 0 2.7-.1 4.1-.1 1.4-.1 2.7-.2 4.1 0 1.3 0 2.6.1 3.9s.3 2.4.7 3.6H254l-1-3.2c-.6 1-1.5 1.8-2.6 2.5s-2.5 1-4.3 1c-1.1 0-2.1-.2-2.9-.5-.9-.3-1.6-.8-2.2-1.4s-1.1-1.3-1.4-2.1c-.3-.8-.5-1.7-.5-2.8 0-1.4.3-2.6 1-3.6s1.5-1.8 2.7-2.4c1.2-.6 2.6-1 4.3-1.3s3.5-.3 5.6-.2c.2-1.7.1-3-.4-3.7-.5-.8-1.5-1.1-3.1-1.1-1.2 0-2.5.1-3.8.4s-1.9.4-2.7.8l-1.7-4.7zm7.1 17.5c1.2 0 2.2-.3 2.9-.8.7-.5 1.2-1.1 1.6-1.7v-3c-1-.1-1.9-.1-2.8 0-.9.1-1.7.2-2.3.4s-1.2.5-1.6.9c-.4.4-.6.9-.6 1.5 0 .9.3 1.5.8 2 .4.5 1.1.7 2 .7zM263.1 20.6h4.4l.7 2.8h.2c.8-1.2 1.8-2 2.9-2.6 1.1-.6 2.4-.8 4-.8 2.9 0 5.1.9 6.6 2.8s2.2 4.8 2.2 8.9c0 2-.2 3.8-.7 5.4s-1.2 3-2.1 4.1c-.9 1.1-2 2-3.3 2.6-1.3.6-2.8.9-4.5.9-1 0-1.8-.1-2.4-.2-.6-.1-1.2-.4-1.9-.7v9.5h-6V20.6zm10.3 4.4c-1.2 0-2.1.3-2.8.9s-1.2 1.5-1.6 2.7v9.7c.4.3.9.6 1.4.8.5.2 1.2.3 2 .3 1.7 0 3-.6 3.9-1.8.9-1.2 1.3-3.2 1.3-6.1 0-2-.3-3.6-1-4.7-.6-1.2-1.7-1.8-3.2-1.8zM301.6 43.8V30.6c0-1.9-.3-3.3-.8-4.1s-1.5-1.3-2.9-1.3c-1 0-2 .3-2.8 1-.9.7-1.4 1.6-1.7 2.7v14.8h-6V11.3h6v11.9h.2c.7-1 1.7-1.8 2.7-2.4 1.1-.6 2.5-.9 4.1-.9 1.2 0 2.2.2 3.1.5.9.3 1.7.8 2.3 1.5s1.1 1.7 1.3 2.9.4 2.7.4 4.5v14.5h-5.9z"
></path>
</svg>
</a>
{showAll &&
<a href="https://birchill.co.jp">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 559.6 120.8" class="w400">
<style>
.fill {
fill: var(--sl-color-white);
}
@media (prefers-color-scheme: light) {
.fill {
fill: var(--sl-color-black);
}
}
</style>
<path
class="fill"
d="M104.8 55l-.4-.1c-.4-.2-.8-.7-.8-1.2V21.2a1.2 1.2 0 0 1 1.2-1.2c.3 0 .7.1 1 .4A60 60 0 0 1 117 38.9c.1.4 0 .9-.2 1.2l-11 14.3c-.3.4-.6.5-1 .5zM64.9 120.8a1.2 1.2 0 0 1-1.2-1.2c-.6-23.4-2.7-65-9.9-80.7v-.7a168 168 0 0 0 2.9-27.8V1.3c0-.7.5-1.2 1.1-1.2a49.4 49.4 0 0 1 13.3.8c.5.1 1 .6 1 1.2v27.6c0 26.8 2.7 61 7 87.2.1.6-.2 1.1-.8 1.3a60.2 60.2 0 0 1-13.3 2.5h-.1zM87.2 114.6c-.2 0-.4 0-.6-.2-.3-.1-.5-.5-.6-.8a558.1 558.1 0 0 1-5.5-51.7c2.6-18.2 8-29.7 13.6-39.4a1.2 1.2 0 0 1 1.3-.6c.5.2 1 .6 1 1.2v85.4c0 .4-.3.8-.6 1a60.7 60.7 0 0 1-8.6 5zM32.4 87.1c-.3 0-.7-.1-.9-.3a78 78 0 0 1-13.2-22.6V17.7a1.2 1.2 0 0 1 1.4-1.1c.5 0 .8.4.9.8l5.9 20c4.6 15.7 7 32 7 48.5 0 .5-.2 1-.7 1.2h-.4zM80.6 31.6h-.3c-.5-.1-1-.6-1-1.2V4.7A1.2 1.2 0 0 1 81 3.6C84.9 5 88.6 6.8 92.2 9c.5.3.7 1 .4 1.6l-1.3 2.2c-3 5.1-6.5 11-9.6 18.1-.2.5-.7.7-1.1.7zM104.8 101l-.4-.1c-.5-.2-.8-.7-.8-1.2v-30c0-.3.1-.6.3-.8L118 50.5a1.2 1.2 0 0 1 1.2-.5c.5.2.8.5.9 1a61.2 61.2 0 0 1-14.5 49.5c-.2.3-.5.4-.9.4zM9.7 92.3c-.4 0-.8-.2-1-.6a60.3 60.3 0 0 1 0-62.5 1.2 1.2 0 0 1 2.2.6v61.3c0 .6-.3 1-.8 1.2h-.4zM32.4 113.8l-.6-.1a60.8 60.8 0 0 1-13.2-9.6c-.2-.2-.4-.6-.4-.9V85a1.2 1.2 0 0 1 1.2-1.1c.4 0 .8.1 1 .5 4 5.9 8.2 10.3 12.6 13.2.4.2.6.6.6 1v14c0 .5-.3.9-.6 1-.2.2-.4.2-.6.2zM40 60.8c-.6 0-1-.5-1.1-1-1.3-8.3-3-16.5-5.4-24.5l-7-23.8c-.2-.5 0-1 .4-1.4a59.7 59.7 0 0 1 21.3-8.8c.2 0 .5 0 .7.3.3.2.5.5.5.9v8c0 13-3.3 32.8-8.2 49.4-.2.5-.6.9-1.2.9zM55 120.7a60 60 0 0 1-13.3-2.8c-.5-.1-.8-.6-.8-1.1v-30a187.1 187.1 0 0 0 0-5.6 123 123 0 0 0 8.3-22.8 1.2 1.2 0 0 1 2.3.1 518 518 0 0 1 4.9 61c0 .3-.2.6-.4.8-.2.3-.5.4-.8.4H55zM180.6 95A19.3 19.3 0 0 1 170 84a23.9 23.9 0 0 1 4.1-23.7c1.8-2 3.9-3.4 6.3-4.5 2.5-1.1 5.3-1.7 8.3-1.7a20 20 0 0 1 14.6 6.1c1.8 1.9 3.2 4.1 4.1 6.7 1 2.7 1.4 5.5 1.4 8.5s-.4 5.9-1.4 8.5a19.2 19.2 0 0 1-18.7 12.7c-3 0-5.6-.5-8.1-1.6m-24.8-81.3c-1.4 1.1-2 2.8-2 5.2v53.4c0 6.3.8 11.9 2.6 16.6a30.2 30.2 0 0 0 18.5 18.8 41 41 0 0 0 28.3-.3 32 32 0 0 0 18.5-18.1c1.7-4.3 2.5-9 2.5-13.9 0-5-.8-9.7-2.5-13.9a31.6 31.6 0 0 0-17.6-18.1 33.9 33.9 0 0 0-26.5.4c-3.8 2-6.8 4.3-9 7V13.5l-2.6-.8c-1.3-.4-2.7-.6-4.3-.6-2.5 0-4.5.6-5.9 1.7m83.9 30.6c-1.4 1-2.1 2.9-2.1 5.3v58.6h14.8V44.1l-2.6-.8a15 15 0 0 0-4.3-.6c-2.5 0-4.4.5-5.8 1.6m-1-28.4a8.7 8.7 0 0 0-2.7 6.4c0 2.5.9 4.7 2.6 6.4a8.7 8.7 0 0 0 6.4 2.6c2.5 0 4.7-.9 6.4-2.6a8.7 8.7 0 0 0 2.6-6.4c0-2.5-.8-4.7-2.6-6.4a8.7 8.7 0 0 0-6.4-2.6c-2.5 0-4.6.9-6.4 2.6m37.2 31.5c-5 4.4-7.4 10.6-7.4 18.6v42.2h14.9V70.3c0-10.7 5-16.1 15.2-16.1a27.6 27.6 0 0 1 13 2.8c.5-.3 1.2-1.2 2-2.6a8.3 8.3 0 0 0 1.2-4.3c0-3.1-1.7-5.5-5.1-7a33.4 33.4 0 0 0-13.4-2.3c-8.7 0-15.5 2.2-20.4 6.6m64.7-4.3a31 31 0 0 0-19 17.7 38 38 0 0 0-2.7 15c0 5.5 1 10.4 2.8 14.7a31.1 31.1 0 0 0 18.9 17.3 48.5 48.5 0 0 0 34-2.2c1.5-.7 2.8-1.4 3.8-2.1l-6.2-11.1c-1 .6-2.8 1.5-5.5 2.7a26.4 26.4 0 0 1-10.5 1.7c-3 0-5.9-.4-8.5-1.2A17.7 17.7 0 0 1 336 85.1c-1.1-2.7-1.7-6-1.7-9.8 0-3.7.6-6.8 1.6-9.5A17.7 17.7 0 0 1 347 55.2c2.6-.9 5.4-1.3 8.3-1.3a26.4 26.4 0 0 1 17.8 6.3c1-.8 2.1-2 3.3-3.4 1.2-1.5 1.8-3.1 1.8-4.9 0-1.3-.4-2.6-1.3-3.9a11 11 0 0 0-4-3.5c-1.9-1-4.3-2-7.3-2.6a49.4 49.4 0 0 0-25 1.2m48.3-29.4c-1.4 1.1-2.1 2.9-2.1 5.2v89.3h14.9V73.1a20 20 0 0 1 4.5-13.6c3-3.5 7.5-5.2 13.4-5.2 5.8 0 10 1.5 12.3 4.4 2.4 3 3.6 7.3 3.6 13v36.5h14.9V67.3c0-4.4-.7-8.3-2-11.6-1.3-3.3-3.2-6-5.6-8.3a24.2 24.2 0 0 0-8.7-5c-3.3-1.1-7-1.7-11-1.7-5.6 0-10 1-13.6 2.7-3.5 1.9-6 3.8-7.8 6v-36l-2.6-.8c-1.3-.4-2.8-.6-4.3-.6-2.6 0-4.5.6-6 1.7m79.5 30.6c-1.4 1-2.1 2.9-2.1 5.3v58.6H481V44.1l-2.7-.8a15 15 0 0 0-4.3-.6c-2.5 0-4.4.5-5.8 1.6m-1-28.4a8.7 8.7 0 0 0-2.7 6.4c0 2.5.9 4.7 2.6 6.4a8.7 8.7 0 0 0 6.4 2.6c2.5 0 4.7-.9 6.4-2.6a8.7 8.7 0 0 0 2.6-6.4c0-2.5-.9-4.7-2.6-6.4a8.7 8.7 0 0 0-6.4-2.6c-2.5 0-4.6.9-6.4 2.6m32.5-2.2c-1.4 1.1-2 2.9-2 5.2v89.3h14.8V13.4l-2.6-.8c-1.3-.4-2.7-.6-4.3-.6-2.5 0-4.5.6-5.9 1.7M544 38.4v-25l-2.6-.8c-1.3-.4-2.8-.6-4.3-.6-2.6 0-4.5.6-6 1.7-1.3 1.1-2 2.9-2 5.2v89.3H544V53l14.7-28.3L544 38.4z"
></path>
<defs>
<linearGradient
id="grad1"
x1="-0.6"
x2="1"
y1="0"
y2="0"
gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#57595b"></stop>
<stop offset="1" stop-color="#fff" stop-opacity="0.5"></stop>
</linearGradient>
</defs>
<path
fill="url(#grad1)"
role="presentation"
d="M177.7 43.8c-3.9 2-6.9 4.3-9 7v22a22.9 22.9 0 0 1 5.4-12.5c1.8-2 3.9-3.4 6.4-4.5a20.4 20.4 0 0 1 12.3-1.3V41h-2c-5 0-9.3 1-13.2 2.9"
></path>
<path
fill="url(#grad1)"
role="presentation"
d="M401.7 31.4v46V73a20 20 0 0 1 4.5-13.7c3-3.4 7.4-5.1 13.4-5.1 2.3 0 4.4.2 6.2.7V40.8H423c-5.6 0-10.1.8-13.6 2.6-3.5 1.9-6 3.8-7.8 6v-18z"
></path>
</svg>
</a>
<a href="https://forge42.dev">
<img src="/sponsors/f42.png" alt="Forge 42" class="w150" />
</a>
<a href="http://ustark.de">
<img src="/sponsors/ulrichstark.png" alt="Ulrich Stark" class="w150" />
</a>
<a href="https://webdriver.io">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" class="w150">
<title>WebdriverIO</title>
<g
id="Logo-Regular"
stroke="none"
stroke-width="1"
fill="none"
fill-rule="evenodd">
<rect
id="Rectangle"
fill="#EA5906"
x="0"
y="0"
width="64"
height="64"
rx="5"></rect>
<path
d="M8,16 L8,48 L6,48 L6,16 L8,16 Z M43,16 C51.836556,16 59,23.163444 59,32 C59,40.836556 51.836556,48 43,48 C34.163444,48 27,40.836556 27,32 C27,23.163444 34.163444,16 43,16 Z M27,16 L14.106,47.9992078 L11.999,47.9992078 L24.894,16 L27,16 Z M43,18 C35.2680135,18 29,24.2680135 29,32 C29,39.7319865 35.2680135,46 43,46 C50.7319865,46 57,39.7319865 57,32 C57,24.2680135 50.7319865,18 43,18 Z"
id="Combined-Shape"
fill="#FFFFFF"></path>
</g>
</svg>
</a>
<a href="https://understandlegacycode.com">
<img src="/sponsors/nicoespeon.png" alt="Nicolas Carlo" class="w150" />
</a>
<a href="https://github.com/mintuhouse">
<img src="/sponsors/hasankumar.jpg" alt="Hasan Kumar" class="w150" />
</a>
<a href="https://kodfabrik.se">
<img src="/sponsors/voxpelli.png" alt="Pelle Wessman" class="w150" />
</a>
<a href="https://www.comet.com">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="10 0 140 59" class="w200">
<defs><image xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALgAAAC4CAYAAABQMybHAAA44ElEQVR42uy9B3gc5bX//z3vzHZp1WVLli3LtnA3xaZXOxe49AQiX26KE1IggQSS3JDcJE+ucJ7kpt1AAimYACEhBP72LxCIgVBlijEY995tWbYk26qrrVPe8392dle7qpZsg1d4Ds8ib5udnf3Mme973nPOK2CbbR9hswG3zQbcNttswG2zzQbcNttswG2zzQbcNttswG075U21D8HIsM21i53TcqKO/Wu3OB0BXQG6QB06afs7VGKT4q9hn8LO4nyD8ws5fj9SXqL7qsuNUSvdUVoy3zwVjxvZ6GSHcW2tWL20SfFE2qni/PNzokr7GG1jfYGrqdVDwZiqVJdXGLl5FRQMl7Cm+633aLqTO4P53b+jIJP8vk44nAYDrPrch9njaqeDh3ZxU2d7NN9lirFlwdwpVS1arLXx0KN7Y9MunSax7B6TiNgG3LYTam2LFudFnqobLQ4e8DvHVcwwA4GZdKi9mEiUwO0eJzW9gGKaRzGlwkQKAw4CBINpkN8wA9Q4tGwSQ2dASodikMMZEk61BeFIvUGiU5YVNzvdrpXm3qbdOPO0LnnhzObRdy8I2YDbNjwPzSwaP/G1AkdzZwHy/LOw98BpqstdLXV9JoKRYhD8APnjGCZ8KSdppV7sWs8O9Xfr9drk1qxHCZIIJChGzB2SKAh/brOU5rqQxnsjY0rXBqPGjrFXnd1WvvC2sA24bX2s7tJL1VkVl3n5UPNpSlvrZFOoc7k1MJWJqoRhFMOUqvUbEPV1vh/WiZf8n8lAzGBETOYuFnrQFE3I8e5wFvjfFi71zfzpEzdujKztmL9kiWkDfqp76y/8PLdl1+ZJTLgQRzouJpNPF5HYGGZ4EpGrpAvtz8l+aGAz4kI9ajBCBiNoMKIGoEvraoOkCorvnCnc7kOKx7nGWVbytKvS99KcZ37dZAN+yg0SF3lbXlteYXLsYrUzcgHH9AvJkKPB0t9LZ5y8fQQg457alAjqQNCQCBuAIeOPU88LSEohMRMnzkcm1dHuyvO95SgoeEw5veL1c59YGLAB/whbLWrFnZ9uyzE6telqR9dcbuu8EroxDYYsyji2fHKPc5zRhASJmIyAzujSGDGTLdjjuxZ/npDy2on7KbWf/pt6XkBxqQ3OspI/eXJzHj571R8abMA/gra75ta8vCOhORyOflKEopcgqk0AsyvBAWXJcWUYMiFB2rX4XwlDJgFOeuz4nrK0RsEWDczCgoJT3lwmuE5CnniHBISqhp0FuUvd0yv/95yXfrUhW8OMNuDDPF7Nn/hKiegMXCragv+OaOwyMs0xkHCdjAHiYFJEY7ZkSKcmLcBNmYQ64aOtf8dvKSw5zXji8UzIMz05J//FICGErvp9K3zTJv7o7NvPW0bzs28yyQZ8aMDQ/mu+mu8Jt52thLRPIBi5FrpRlnR3dPJlSPr0SntsaQ0cTZOS1FI3wKnQSQ/ICUnPPgS5koI84f+h5uW+kztl/DfOfuPXq7LNkys2vkcBZ9EiR0CMOVM53HSX6Ax+A6HIpZBmAeJop/Cm7r8n6ZbQ02GTcSTGaIlJRCSlPXZSWVCS2wTkyecoER1PQU6c8uDcI4KZkimJ91jXAEq+nmVMH2OEoxWHXn1v5SO7322zPfhIAPvSWrXdv2Oy2RauEYHIjaSbkxjSnQ7vZYcUid+ipkSHxujUuDsiQpyWFhbfqQFlj/tpT46MKEq31x5ErnRvCIn3kipi7vLiR0oumPk/U//y/Vbbg2exzg7ccUdRV2v99Wjt+q4Sitwc19ks4LDYPuneOsVUYv49rrHjXjsQlyOc2rWUFqHUn7SGSn6FdCQ+7qXTs6bW+0VG+Cf5XGrc3H0FIKTVWXxzklUZ0yfooeiBsbd/fP0bb7zBNuBZZnW1tep9+RXTjfrWu0R7512kaTNBcGePFEk72rjXPqJJtGpx0ClFXFKGJBBO/EWGFOkpV9KBzF6Qc/fmhi5XBMUHAF4YRskZZuGyRbvfbrMlShZZ5xe/WKgdDHxCtAa+QFFtFgO+9NAreyZqTAl06hJtUbYiJVLGYUuQzxm6hbvlxBDlSio4MlS5khF9yZQrJETUO370TwpmTPzF9CULtZN9zE75fPDFNTXKx5yFk43dzZ8XgWANDDmWKfPKRlkCd2Jypi0uR3QJw9LZlPTMnPTeScgpM+qRIVc4Q64kH+8hV5KenDM8uSVXUtGV5EYTXjsjqpLaDsdHnNIdPdx5Y6C98+8AttqAn0xovn6/6/C+ty5BU/2dHIpdSsy5EJxtIUoLrrCRiI6E9Qz90H0ZTsDVDSxnTM5QAmaZkiucIVdSMiYzuiIHkyvoKVdS75MZciUOeTQ6xWhqvSgbAD9lJUpgwYIiI2jM54OH7oBmTEkkQVHWHQ+TExGS9hhDMzmR1sJseWuZKT8yptPpWORKjzh3wlsfS3QlfjLF985VXLBUmVn+xYtffOCI7cE/TI/ITB0fv7lSqz/yZSUa+0/oZiULZMQNssd0Mw52AnAjqSMy5iIhMvLFUxKDE0O+YcsVEpSGdCC5QmnQe8iVHlcMsi6CRld4ll+6JgGwAf8w4Q5+85tT0NV1twiHbwRzDhTrp822/bS8dasmreQoiXTYwgI3FaKLg5mcqAFnhAAHkysJP9998e6ehmWZPIEoHVLkociVZAiRe+SsELEsCTe2zgawwgb8QxpMdnzpSxfyvsZvIhS6AgRvMuWZs0mqxXcmYkq0xBghnbulQIoeTkIuu0FLQC45HfNOefLUwNMykdDKnERYUjoPJfXtu0OHspcUyXhh92syw5Gc1uSpz4eme/UjrZOZWSEi0wb8A7TN06Y5S6PRK9AWuBPhyMVWbDsVEM4quNkaRB6JSkR7DSZTsGVCnopzxyEXIiNDUKRyTxgskq/N9L4WqD3lCicjI33kSgrsAeUK9ZErVkmHZCg+d+WOXy0tANBiA/5BQTN7tqN91Kh5HAh+G7pxbhpuULZobgscCURNtjx31ARYJCVILzlhCYOkRxUZcoWHIlcynSx6ypWemvz45Er30ZWyNLr+vVwb8A/Kc9fUONsDHTchGLxLmDyLAXdqiJRdoUBGKA53JBHrTmnaFIqcOZjMkCvJfKeEXEnKkiHJlW6tnCFXepUzd1/gMrX1MOSKpf01PTe8s8lta/APwHZedZWrMND+KY7EfkBSjmciJe2Qsit3O6IzWmMSMebuSRTqjulQN96ZkFtyRMhkuitlSJFB5ErGwLO3XOEMyPuVKzR0uZL4S9C7Qvnm1qjHBvwDkCUtqnm56Ip9i8ETIdBrOJU9njsOd1uMEZOwUl7i8qMbpH4gR2/IhyNX0oKkj1wRLC2wT4hcsWZ+BGCYqsaaYgN+IqMlgNI+btTHRFfobgZPSgSLs28Cx5p6N1KaO+EG0xGStMdO7zh1l9xIpMvNTpRcQa8Zz0HlijVmGFiuJM4jCSXXG0C+L4rtNuAnBprFNUrgZXWeebD5u2Qa54DY3YeTrICboJkSrXHPbSbYScWpudsbZ0Cemo2kJLipczbF3VDlSpL0/uQKUleAociVXqm2veUKJ84sCI8r6K0ebwN+QqCprRWBFa1nmkd23gVNOw8CbmT8rNmkuQ0p0RFjRIzkY4kkkIRXzfDkR5MrqTySIcuVtL/tI1cyZzwHliu9ErQGkCup4KvqUtsKq8vCtkQ5AXYk3FTlrN//Xwh1zUvAzVk3oLQwNoFADAhmxLlTntJCJAlnplxBRip6CqT41xNJuUIZcoUpPTkkM6QIWWVtmbKEugsaUv/OnG4fMEGL+0/QSn1GD08e1RoC8y5px3024Mdlhz939Wh1545vcFi7ngie9Pxe9unukMEIaJwGKsO1pyAXvSBH7wEdUhUMfeUK+pUrmUeEepRIZ8bJkVmXST2jK+n4E2XMkaXlSvpecruKYpKgXXOum2N78OOC5uffyW3fsOWzIqZ9nEl60+nN2Zf2GpckHVFplZbFiRCQSWmRhoiT+d2U8S0GlCv9Qd5LrlDys1KyhNC/XOETKFfi21dUtc192riN2Htyj7s60geVwTcarqCuzi8wy/JkTmAWem5ANxid0UR5WfdESHJyRHK6HIwy2gIeTa5wRnSlhybPkCsYilwZNEFraHKl+6gnoisMFfVmJLzhZB/7Eb2ESdcbco5x8MDdMLTTIFgkhvrJJOcsucUhk0jIkqie1LyUvqxbgKTyS3o9Hn+vSDnqVL1z93YzSjWTJ0qyOjK9rTjccbmSisiIlAfm9H5kbIOT/1GPAuXMGs/0/qWiJZQhBru9P5HuKSt6ufCTNzaebEZGrAcP136tPLZrx5dh6jMhUnXgWVjAwYywxghq3B2O5+5J8rS2PdlyJTPPnI+j/M161uNq5lzPK9V3Xh2zAT8G2/n1q1z63p03Ihi4AcTedPJU1rENzQQCUYbZXUiQ4UVTQ7NjlCv9hhD7kysZCVrpVNvUwJTTlUF0fOVvSfduqD7PG6fNqliDN07+bzASAadSkXOJGWn6IpEsSF8ws88kJzq5asw9inupu4I93W+k3/zqQaIroveMZ6/oCnp5cvRJtU3nk2eGG5HhydOnzxCiK5x4XPW6d7srSh4peiA7WiuPOMDbvnVzhWxquoUMbVp8sJ613juZRJVZJEyZGdacXG2Hccxypc+MZ39yZYDclR5yJQn5UcvfelQA9ZUrpFBYKc5fMvqMqStRlx2/w4gCnGtrnB1N7deTHp3HYEc6sJt98W5DAsEYw5TUay0H2T2MS0E2kFzhjIUgesqVzMf70eTpwspB88nphOWTW48ZjlzvGyjIe2zsfd+KZMtvMaIA7+pS5lBX8HPMsgSCsrYjQPxHD2mMmM7py3eGTs4M0xEGlytyALmS0tIYKEFrCPnkPcrfjjmf3DqZDNXv2+CbXPWLM5//3e5s+i1GDOAdP/1qgblj2wIytVnWtRmctXDrOhCKZcQpqGfGV3fedEojDyBXUpAjs6K+OwGqrybvV64Mlk+eqcmPMZ/cij66XfvcY0p/Zo6ZtTzbfo8RAXj86hm868AlRix8JRO7QOAs3leEdcAwqYeCoh5CJAnlEORKSrv3L1eGn6B1XOVvPQaeia4q5HIecBTn3Jt3MPe56jdu023Aj8Fa77m5zBls/IyQZoUkRrY2LIpDoWtAOJYRWaB0U550v5F0f7/jkSvdJ8QAIcThyJXh5JMnm+ya5PNsc5cU/zw/r3BJ9eoHYtn4m2Q94HW1l6pqa+AqqUUuhGA1m1txSQlrUseUGdKkV7SCMsGndCyajxJd6U+ucIbXP265MuTyN2sJorCam/Ome3zZ/S5fxevVWdBkc8QCfkY0vwLRI58gyGLO4sQCa10cA4jqGQ20MzDijJhySq6IjAIYQcnQ4DDkSs8Q4vHJlaPlkyf7JpnCoTY5CwueUSaMefjMxQ9syvY17kV2a28mCgfnka6dzWA1kfhw8pvP99u3G4yIxjBM7p56omSeSbqJfDqM2PuxtCdPh+Io2UgwM0cls4oGfXJDON3wPgVod15MRq5LKneF0qved+euUMZpkG5yL4VDaVML/S/kVFfcWTz73P+Zs+S3G7Md7qz34J0/nD+etPBNzEZhOizIWem9DROIakmdmxE3Rj/SpL/H0pMsveUKDJCICEUJQcojUqJJzfG3Kl5fGxQRkprZQSzN5JDTJRQ1D9LMMbrChXqga5QqlNHMXCQ100vMrrjQ6K/8jTLL30jGv4SpqGoQirJP8fpWO/NyXxCTq947/Q8/bhwJYCMdn8/WSZ1a0Rlc8SVqb1vIUo7Oxn4mmYAHw0BHZ6rTa6qyhbpXLutO6kiF2VJFCKBejeWt72mAlC4S6gG43ZvIlBucY8fuJa93d2z79uaiqtMjrivP10pKzjZw2Xg90WwNiVVaD7zr2PXM+w65YpMz3HgoxzWlYpze2FKtH26bQKpjuqHrY7grWMgQ/oSDE4o1fo3fTBlRVDUgcnOa2ZA7lRzPRseYsStz/O5tEx/6eSdGoGUt4OGff6E8Vr/99xQJXgsikc37Gvfe7R2EaCw5ypNpbU0yvZICkkBLmREh4W6FY31tcrqaSVXfdRSU1hlSWzlu7pUH8m+/vf24T8K6OrV5496C9jfezA/V7y9wlY8dLTxOL4iKmBGWhhHQm5vbomGjrfCCszsKz720ZfSCK0IY4UbZ6r2DvPYm2XTw1yzN8qxuY05AOBIHPFFv2R1xSDrjhHdOe21wxvqUiYGGhFA6FZdnHeX5X3L68pc5/IXbx+fnB2jhQvlBj3GWLFkiNtfU8EIiiY+gZaUG78hf5xf72q6RbJYmMr05iwfCgKanoxA9YxTp2HOmJkeitzeDRJdwujYpuf5nxeixL7pmn7+z6pZboh9e3N7S0iY+wpadg8zD0ZlsxC4iwSqyN+UkMbjUE4B3hyJ6tV9L5V0nIhzdKbMmKWoj+XKfyR1V+VjlmV/dRLfN0YGHYNtHHHBetcjRsfipiyD1MmS594ZVa5kxLd+dLy2T0e7M9NPElI1QREi4vG8ppWV/QNH4ZeN/8Ysu4BGbxFMF8PZn/j5a1ULzJFmrCmf30WOGpqerXtDPXGGGXGFSlEbKK3zKWVr86KT7/7p1JIXbbMBPkDl8znO5y6gmsoqIs/rgSZOsavn+VgvuGeuGLhzO/Q5//u/lhWf9ufprP23FA0/Y9J1qgO984X4Xlj15AVgfk83aG8lZPkMDTDNjCr3H1HcyYYqgKS7vKioouddp5j1f9bWfRm3sTlHA8ze9PA4wLwRBxQi4eusGpbusMvUAPZkZqAm3d5VaNvbnWtHkf1UtzN6kpI+qiSwKSZAa06ZLPVppJVVl+S2OsW6kgicZPdgomUMi2FA83nXOUeN/1an5X5xuw31qe/Cdd17lFIXBuRBchGyfcqDEpI5hpPK+uUf+dvwR4fLsc44q+0WbnvPPOQ89pNuoneKAF5xRVoSdG6oBqYyEflumJAtySuasMqe7Q5GiNAqf75dUnPP8nIU23Dbg8R1paZ4siKdLAmX7ANMC3EznT3VnW8eViRAdSl7+4+bUyiervvuoPaC0AU9aNDRJmtGiRBVAdg8w417aNEV3fmOq+gYEqXq8y9SJ0x6q/u5vu2y8bMAta/3r1/1Uv+EiCPb0bJqdpYBzojwtta5NaqpSOJ1bKL/gt+N/+Nu9Nlo24N3mrl/nMyOd49gqKcn+8CAb6fg30n35wo7cvCXqpHnvAEttsmzA0yZLKydxw4bRiegJZX0EJS5RpEzft9qtOdwbnMVjnhrzrezp6mRbtmjwzsbpQnCFFJz1yVUJqMlaelt09+IWzUpBwSPlZ0Z220jZgPf14OEjxSR1N4kRED6x6rtSoEurAl14vOsco8f/i+Y/aNpIZZed9Igzr1qUp7j9E0EsICSy/cbE6NHPVlHC8HpeHPuDPzTaONkevK862fJqoQJ9CgkIxghw4Km+JImJHVac6gYqrngZduqrDXi/O7Bvh5dVvZDTPcayfpCZ+ksKR8lf8Nr48eP32SjZgPfPiwNOlrrT6hE24IuYe7BPJ3H9+UTPyUToW6gdUNQ36ZaF9oylDfgA7I6eVMHNm3PTI7dUoIJNCCUMxdlBLFulobeRNA1WhEqKsxAkimHqeZCGh5nUD9ODJyKEkuF0bHZWTN0KvGiTZAPejzOsrRVhdfcoEnAnlkKK/4+ipDjryeldwyTepcKJu9lZcEA9tLbV7Nqtq6UzHGpedbEeaR9LgYYqUzcuID14HkxjDEM68CEJeRKKIZye9R2BhkM2Rjbg/dv06WRG1heAoJCAhFAOkcv/AvLKnvJOmLqaLv5ZO/Burzc1A3i1EYC1yCiv+Obfwhu3XyDDRz7DWvDfiI2CDzo6RAoABV3OUeVrKn/4pI6FZJNkA97XVre/KqaJYKEhICAcW9ld+CtZPPnZvPmPtAHPZsjeOndgy24viSjlTpkdBv4VI0o0xaHz72sDsLTr0Zr3HBy8yejcfyfM2JQP0pMLYeV/H5EdhzbbhcMjIyZwkiTKNGeo2PUbSPNs4SpY6Jl82Ys0d6HBm2ud0f3vlrOqzuLonsnSVCqhugvBJEhqbcShJsqZsFWRzvWtsfKD5dc9ZC34zy/c7wodeOYGGT70QxjatA/Ck1ttktsFIqHSZTRuxmfGfuvBgzZGtgfv34q2EBuTo+Qp/JXntmVLcQ9R5LUbK2MHXrnCjLbfBNanQ8ZKCdJJRgowhsnCpM7dbVIo2wrc7c911d20NActu2junbFVixY9M93//5xG8MCP2dDGnfiGnQxSGcIpmsdceH0X8KBNke3BB/Lgl6rRaUXnut35G/b5x+qlcuVcDjbcDj1wCbPMzVj9PCNJnDIXoGKyIi2edfCOeTDcUfSP0vlLgi1vfyfXuf3d74tg051SsveE7jMzjKCQwSOen1U+sOEHNkI24EcDRhzacLcnt2n1fA4fuBtm5DQGK+heXvToHpWtjlGuBnLkP+ilsgfp2ufbY09/dqrevP5h1oIXZHxbkyAMCKGDmViaLmsx2WHqdTOmxoIt/u9V/HLVfTZCtkQ5is2nnOYj18pww/dgRiYlcvSGs8BropaGzdg44rZvhVyKxqtu/QP2/NsOw737BZaRsyClA0I9Qg7POmJtGzzFR2BEHYgFK0hxzmA9OJkl5yXX/aCjnVCKW9FdpYVBGx8b8KNauC58BsIHvg0ZTcJ97I3updSLobV9LdK6u95Ts+jvtORvr1CsvQZOZ6PDN3qRs3zWe1i2sgUL37Cy/na9cL9zbGx1hRHYd5USa/2CjIVnsmD1aBkDDElQTTs2aAM+uHWu+GIht6y+HWb09OSSY8exikPybWa00gwf+ErszfmrNd2701F02q9VoS53fvL/7SIQN6//pW/UNeNz4y+dVNEaoPI/7+ZVixbF6l/axm07f8Ra6Nzk+lADDzKJ2OFSpY2PDfigpgT2zuZY55VgdqSXUjruYQWRGZkjYx1X5H3q+49gS+nfaPp0jTff49Sb552hHXz230MyNotIgFt2bA68fPnLOLxplevGm+uiTy1aJDsbJoL10sE/wlq+xmXjk/2mnLTB5YpveszI7ttY75iXXIHxRG7dBRllZ8f+f9FZdwR58WKly1h6tdlV/wtoh29ivWsG613TyAhcQGZstuk2mh2rd2+P+sobSGs+k8zYlO6hQJ9bYvkG0+C3f/b84eU2QtltJ63gIRrcWSIjbeeBSTnxfSKYIM1ZXWE5JX5PL358iuja/T0YobOYydVdBs/sYD1wugzu/a5eos3Mve6hFuH1vQJVDaN7+b3et8SiwArB1uA24INoo5xRYwEek2ydc+JhkbFiEdw2Lv5PQ5oXQUan9/qcZLceUtiMztIjzVdai/kWT97JqtqZgjnDc0sS0ElRoiRgQNVUGx9bgw9oeqytnBg5H0wiB4FhuBThGMW80xV+6YtTGfD0HcSm1vCVbg43TVhSA3GNw9kKGDGkC6CZSAmzcG8jElvhKW5BLJAnnM4WZlbiit/GyAa8r4jQu3Ik2PnBfQA5TMWbB0wiUl3BVJHZAONSk1VfqGYaOBKTThLUvQqJEI598JU97MireqZ1z5b6Ms8oAy5NOVJypeIB7EiKLVEG+GCh6oQPcuk6NgWZWvxiAeFYIyA6BiyJI6VVza16nxZCstlZBEUICLBQHS3CV/Zb70U3/MZ1+eNby2bP1uFvyAmiJafEvcW0MwltwAeWyM7iFggKf3CfQAYirYfiEoLJ9w5chS+DRKTngJaZCLpw5NVJR8Uya/BrYJ3wlj4uVLUZTv9yHn3GUzT67hC/fX1uqGXLJ8OxwO9I5UfDnYe+HnntU5U2Qjbg/WsjSfUAN38wlcYMUjwd8Iy3Wjn45i5pVoum/JhcxY+R4q4HiTCRCEH17CN36Z+kt/xHMrfIiANbOPnillbPab9i35g/QXUt9V7020bmxUok2PpphA7eJ/XAfDZj18jg3v8xg+u/z2s/l29jZGvwPhbSoo1OR95GGNGZH0Q8niH2GIXjd6Tuuy54chuvXPDDcDDwD3RuPg2ssMiftsv0la0SnQfKRXPd/5pGdFx4d9NThmvck2rR7EdcsYDDqija0V4gtfC/s9RGJWKFDGL2wYxd0XXowGMAVtgo2YD3sIJ/WxyIvjrvVRlrvU5KI/+EJjaSiCru/DdzCj09mvHQOX9pBfBy8gZgW+Jke3b6F0ytc0FcOJEeyM8PNb/umrtlbyLL8FHAHXYwwS/IKjVOr8TDRq6iN+faGNkSpZ/ABTF8E96A4luFE9pSliGEaxd8FX+n6gdiQzsf1DARaUQkSTjbnT6vZq1rmVq/vaMoIAhbJVPGOjsEKN5dav5suyeK7cH7N/eBwIFQbtGfyQxPYdbHHH+vE4YgtRPu4ic9cuZG4OmhnWx5U5+j4B4fwGVEzmeXBsoPA6vTz5++IKS9VfOoznqptPLLhUqKukdx5v964xa33Qs8i+2kTze3vlDr9+CF75nhQ18Fm/5jn9W0Fu/TyOl/mvxn3u2d+8SBYb2bWQX2qURVAzbxiQ9CWdHPkkw+EubmlXLGxrlzFxo2Rjbgg1r4vS9VcMv6/5aR5k8DMm/4npxBpESh5r7s81d8n+a9tPmYTpHDi3M6dr1RlG+2uGKqQ+qFZ3TkNM7uoLlzjZ4nQ3K9KdtswIcM+YoFY7h1yxc51rqAWa8ED00+WXOOwtFEjsJnvPnjHsBF/9g5HPj21tW6S+SO04S+72IZ6zqbhDKe2cwFCZ0gmoj1bfCUrpCc/67v8meO2GDbgB+zNb/8WZ/P3H8FGe0LOBY4l2AUspUrjoyELGtyhpnJECQ6oXq2wV3wF7Nw9jP+c37XOpzPC6xcUKR0NtzIoUOfYSN0JsHI7VnezGAWJimOJjgLnidX4cOe9oK1NH+JnX9iA36sSpopvPKOUejYeRbpnR8zYy0zoLjKidkdlwaCoDPrh8mRt5XdxXWKUvCe+7Ip+1ONgIZqweWfKBWdR+40Ig1fJmmUpJDum5Bl1T7HTyoNwr3B4Sxd6LzmG/8imm9DbgN+nLC/cJULuTl+3TNqNJlw6SRJVYVmxIwWj+NAO2b/M3Is+SC89q78UON7/0Wxpq9I0yg6+sA20fLeWiFLca1nX+VduVe+/qaNjw34h3cyMNOWLfc4pkXKGbNvNQYCn2trRfTit2uMzt3/h2GHJq1IjUnuoiVcOOuunAsfP2wjZAP+AYNdp2qv/KoqZrZVq+7iKmapKYjtZnP0Lnf7dQdpfk8pwWu/VxI+sPRBGW37RFqWDO8TidRWxVv1Nc/Vy/4/GyEb8A8O7rdumRDqWPN5GJFrYUYqGeQFWBIpASjencJdtFjmjl+c6WkjL154mRE++ASkXn7sX58hnMV/jU774h1F1XcGbIyy10Zs2VV0xWcmhdrWfx+xthqwzOFUBZrlY3Uvyc7R0oxWC2mU8MoF99M5f2llZkV7/YrTEbJ09zFfMxILHOtT1S3PlwKwAc9iEyPSc9fdnmO2bP0KR478B1tw945NW8FqZhkbZUaab421N8znuktV7LvHYRjaRBzXihBxcU9gI1CsRjb5bIRsDz5ka197V7638Z3SUKzZ6ck9L7CnfFrz9OkLtd6vi6H5PNbbbgRL78Bt3pLaWmqjjUjjLeScUeds3lLPpubLcPbHI/4Vh2C7st724EPxyLVq5KV5FzgPvvMTQ+t83CXFU2Zk+x+qGl79cvi1a8ZkvnbxYigytP8ylsaYIcsMMzJZhvfOgr/GJOHsohNRZEFk6tIuWbMBH4IZ2uvnmOEDvzSjTV+RRugcyeZ0jrVcJYMHfiJDB+/it7/QnXNdE/qcQ8aOjAVL51DH0SxNn06usZhWw6R69jCgH9/InEGO3MN68RldNkI24INa4NU7iqLRjrtghM4nZpGsmGFAELORB6PzUxGt5XLmpBw45xyVFYdzOFoCIEGkOohIJ0NfS8Jx5HhSSqTVSsK5Oi//+ubuT9lb5+bt/1fM9b8viA9mbbRsDW6ZEnmnQhrB2Yk2O6me4BmrrbJRyuGmi7csmb4UgIbDd0QFT2mRJCSsE+LoWoKIY2SG2uL39MIxW5TY4XfZ1MYcW6kcs1CdjeTKf43m3BZurLu2ODfadXFo0zfPZ+GsVCCjvOHBbZG6a99y55avoTkPhW3MTmHAhcPjl7EWz0CDRSnZQbEjpdNy1MRzl8EUr1eulh3bOsFmwRCABIS7STh8Vn2a/5y/tMZeufJvmhk6G2asanjhQus0NISS+4qnYEYd/ytYFu7aezcb0U9CRseIxIr2AAvNNGLbYtHW3/PLl/+VrnglZKN2ikoUQ4ZbSTg7B5IMQoio4inbh4Y8mYyNcBRFdYojZyUNraehRo7clyNFU9enHnDmTHtZKP4/CqG0D6svIkFnR+6bnDf+/naRY0Q07W5ogdvYjI5lJiGZrCg5QzrZCM40wodqw4jdzIsX25LlVAU8p+jiA6TmvckgrTdsFsBC3Uc5JS/Rbau7B4b5857YL9T830BxryfAHNjfsg5n7jKHf+KDhXMe6uze7vn3Rbz+qX+Ee9S9QnHvA3jwzECrLyGFSPW/4sif+UPfJc+u87a8e740wzfJRKiyTxw+MbiNlSF05LPRkifG2qidooDTuQ8EKLfqYXLk1QkSYRBkHKi4FIBQmxRH0cPuZtf7vVQ1uzw/fsXhKv0hqd4VJCiAOOjW+6yma4YQSotw5T3PudN+9JPXZ6zv87lzn2zxjj/71yJnwg+EM7+OSLSCSE9/vrUdE4SQUNw7yV2yyFky5bueSxa/y4AijfD5bETHDLLcSqL63gzNlOFDU2zUTlENHrefL5ux5vuXi7uM0KFPUrBhNsuYm1yFh4Sr8Fn36HGv0OmPR/oCOteorcUL37rsym0iEr1caC0XSr29EBBMrqIm4R1Vx+6KOt+FjzYtnPd0vzKEpv8+yItrFkfLRy/nUOPZMKMXysiBiSx1h3X2uwtb2Vm6hlhbHig7d/Po0/8vZHHb8qxHCmclAcrR9Q17TGdBqY3aSXKg2bQzvLnW2Vb/hLsw2ErIH2vg8vXhoeR7My9WsOweD440xUU1CvLnGLj85Uh324chWsOKb3p8DY85u0euJbNMXHZPlKhXTWbzy77Qmnvu5VD9rUc9hIQw+ad+KeeKV560cTvFAR8pxswUef7cu8xo00/B0j3wYWQQOfYruWX/6blyxTt9t1MrgHsw3BPRthGkwUekVyBi9ox5U1E9WwbPaiFJrvy33FMu3dobbH73kmqsee0GrLmkhtecfT6v/6yduPVR1eDHai3bvpPra1heIFr3uuECIo4iQ5Re0pn7fHE7LVwoj91D14rQ62+VRFu35Su+UdH80KQmmr+kR9KXN69kYyjiv49M+T8sIxMAUjK3QCAdjpz3ha/kD1T5s/YM7y+w7pLrIPd+B6HANDCrEK42ODr/yisX3JtsL2fbqSxReO0N+eGmlvOZ9Eughc9iraM0sRCDrwvO/O0QRp3mn/5WQWP04HAr4JlBxmvXzdGj++80I60zyOE7oniKHnGbef+gq1+M9Rwz1DhD+w/fCL3l89CCM0GcC2YJUlvh9L+luMsedv/bv5ZntprgrZ8pQ+fyRxE78u/pw8+AcB6Bb+oX6azl/7SxPHU9OEVf/48JkQM7bme98ybIWDkzHN1xZzMEREIXklBvchob6oIF4+9nrnmLaOiQdz7/qXwVm7+OSOvN8ePDegiSUBHxeuthtZrNjMIs0Wq5dvE9q7YvD7e3TiXVO5lJhp1aaGuYT9+Wc/l9bX0+oPWFSkh5Zh8/I7UCsDyPd77wMlVfHbPRPAUBD75200wjuGkhYp1XMtjT9wKUiEmzNPIRa7mOZGxs5NXKHzMvXjrUNg+Kj0fJtsBZBFZTuTFSD1ZRx46JvQGP20JaKBcCDQAamBe/BtQkm3a+PsApak13iv6UvSVzJlXbVJ6Kg8zAygVFFN71VRnruCYB96DpgAyQynrXmTJY/239zf9v1lA/J8ehhgUpbdaETyLbK76pLuks6Dj64HO+edSIiP+SA3Dkr09uP+OXUFthGKuJqm3vfaoBbq1Q2X7w31nvup5AjkEXlOr2htZfhc3g2XpXw2ebX/720KIUjROahbfsb0Su/QBrJNR21Vnwj9xxZ608IV9mxhkH4Zr0Gyj+1SCKAqxDeJrhKnsEmvNVG8lTcJDJa2vzIw3P/M7U2m4GD+ekTDTsEapvK+VPWeCd+9yqIb1rVa03euj1OQbM0xRhHuaiKSt95/y5+YR9H16sYN2iyYg1zoZw5EDBdvhnrqLqJ+wC5lMR8K5Xa6YpoU1PSi0wi49hl4koBFf+rTnXbfxbN2S1tQIfX+ZHjEuQW+BAZHs7iv6jnaoWRocM6s77XYg+kQ8xugiKU4FW347iM9qofOg54MxMg83W8qpFDsw+jXvPptr2EQI88vSEiwyp/x0sS49tl9lk37jv5l71zr3WJM3Oq1zoCp4L/dB/Qm+fA5gusKMZrolL4c57mma9eNTe4rzm5nLQgRsQ2X81ZLjSurKQ4zDcFXVwjVuCGX/ffjydaLmhxoPOvWdBiU2DKeMibSv801fT2CURG9uPWBTFiIVUUlWVjw3u7pI1694LX3ehfeUC6PvuhhFKTtDEOdRnILr5fMjS83j9dT+g0/+5d2C4z5uK2Pu1MFqvgjRzE8uRx91FbBpC289HrPlyrJ5dy7x62bFAzo3XetG26pswW74MLVyWGC15DqNLe4Abah6wIf+IDTIVX2mUyRE5tmJ4IpA0SEYTiVtjN8yEtv8uGKHqJNzcnfLKZg60wx9HbNfnmWv7rfvkzTWF0Nr/C3rLjZCGP11il2xMC+mG2XkhtJbvY+u1k45Nk+0/C7Lly5ChSgDx/XCAwxWIHbod4f2zbWw/YoDruee0CKev8dgWN4n7fUdIsNZgFS7r+jxwaFJG3Sf1DNgYHsSCV2LbvvJ+N6ftnw3j8DVg09FPHD4BO0sBs+MChBquODZ9YkyHES5Huu0KgeM6PTIaijidh1SL2vs6Viv4FEyuGxGA+1FxAHC8DwjzmAhXvVuU4vM24d35bhjhKZBw9B9HjwuKOAN6OYLbS/t671onWL0Yplk4OCsESMMLaV7Ae2uHv1AsW7F07me8xDD0YQ82eV9NFfYsW4CtF5xnRXBswLNsJDx3YVR4ipaQcOwaVg2ltaSg2gFn0dO79rfVo6ICIDWW6Ow2CKGCTCiy74RNZLUKMzgGFB+7DLYfSdljRirQuWX4WYKKuh5q7p6+B8JbD46tGk56LddBRcfbX0PXe/fD2PMT1P9znA14FlrzgYp34S79ixBq29Agt1aK0qH66zR/1ZLp85doqLg3BqFsBDg2eJarcz/8sw/1ebyoSEKokURrlCFMNClqGIpqDHwaXKryKni5DjncCC+vutUaCKP6kvVwVv0GSu42gEIAhSF8O+AqfwDqZZv6bGPPpyq5/nOzecctE3hzTd+xg2JKsEnWbiNqR1Gy0apu+XM0tLLmUW4RfkQO3gI2SgZuXs9MJCLkyH/F4Sms9V30+P4EdiR55cdeheJfBzNwPvqEZeKO19UBNf9ZTJzbCPyh59PjH9PQcck6ECJgDL7CsTUVr27GjB91AH2LeXjXxWOxo+s6qLnzkBf041BOF/xr3+AdH1tK9MAe5ppHsdtcCU2dZtVVk9yKKTduJEr3amS+1YHta+dDe+krYBGXVG1wVPyR+dbHiR7SE1c/GLxz9m9gHFwBLbQPldPqTyXAR9ygI7DyjiKl5f0bZKzzM+DYdJJGfnKhKksUQKghFo495CxaKh0lj/uvWLqz92AL7/zjKqD1e5BdZ0KanqTTlSDXITiKH0PelHtp6j/6zcvmdVefhvDGP0FvP38QL85QvHvhq76Nzny7z/Q7bz/ndGj7amF0Xm5FboQEpACEGoTifxtKxUKatubdo16j9pw7C107/wrZMTN9Tc7dAt9ZC2hS3Wo7hjICCx785/yudfHimj/fUCbeNiItF8vQ/pkQjrLEAFF2Ko7cHeyZ8KanumwDjb2vb7EyLZTMtS9i46pmRLffCNOcCRYesN4ET8mrUCf/k6b+rX3AHTj987ux+ucPQUbLYUbHJWLgGaBb1fiONqij/4RRH3sHeLsnlBvnjYK26b+ht92QoJoYMrn4ldRyIFuvhDRiXH/lV6nypaZBD0YsMglmV1WGr2LI6DgQzWTmNceyfpENeBbY/EQRw474zWqqUzPZjSMqIXTYoKq5UWDwvKjkimyrmRevQ2MkH0abEw5vJ5XfFs5cwrv/9843eedVT4HVKLSGr8CMzAbriYEkqRqEaxtco/8MFY9R+cK+U/aO9nMR6byyG+4efeqsvowEMzQP4aZLATw16M6YoXaQiFhXgWT4xWpvZ2gdNtwjGPAewCXW4Dmm1mjJHPFhl4hR9Ysx5tol2LJlBbrWnQ3icRAOFWa0CblT1iAydied+ZDed2SwyIHtj84GpK8X3OgJuemF8M7gnS+4Bi1+8FWsRVB/EmbLp8FaPsjRBSX/GQgst9H+iAB+0k6sxFVgf/KWkTS1d5B3bRKQ0cJk9IoGHBclJlZdmHRo0DESVb3RwXuv/imiDZsQ2zUFrrF74Jj6HE169oj9C9mAn2DghyIJ7jegXBg/AwwkKob6HZ9aXpz1DuDzBnDL4J9b9UIzgD8m7u1I3mzrHnPbh+DEG9f/dwHv+NgE3nXDWCulNn0SmCDlbQhXw+C/iqsRrC8noqxJkeWdn/Zz05Xjefd382wPfqqCzfe7sOXBuQgt+QRYmwxWwuBNb/OuMxfTpLW7rBd55myEdvBxyIPfBOv5PSIwVt9/RyfUUU9AnrYKSLRU5FoIfKqmEkrT6TADueDCw8jNX0Vj/vGhtJjgPfNGIfL+19ESvRCifhXvufq3NOGFERFPtztb9YEUhH21eQhsq4DZ6oa7ohMebqCqP0eP+r4dZ1yP6J5fwAyd1j1TSqoGpfhpeCd+hya9ZXluPvi9IgT+/mVohxbADFeBpANMBhRfA9T8J1B8+R9o1MPdM6m8/bpZ0NcshNl1EZhdgAhA9T+N4rE/ptHvHB7WCbhvRRW0g7lwTzlAlQ81Del47P63zyD4zm8gowUQjijUwq/RjKZHbA8+0uDeeZULa9uuRfTRT4Mx1WrLFt3ejk5awauveBRnvbyWehcLp+zAgnJoL309DXdSk7PhhNH6CUS97wL4jcX8mJ+28uaae5HT/jy6Nk6FmlcCdLbCNXk71KqtNOrh7pOJN9+eA+3ZO2EevhbSTP1eudAjX0Crp4n50l8SvXFUKcOHa3OwbdGXoR/6HMD5iO3czNtO/19MWf/O4ItyMWDOc4OlmiReATSnLVFGGtyrbnWg4935iB2qhRmemAhJAzB5PEjMALafhvVXfQd4cW2/G4g2joXUq5HO40oVPjOguyAcM/nw4hwqnR9EsqcKgI3xG3NzMgITd9pv9txuPpWjJTYHbGYOSuPU+aA3XIINO+5PDFqPYl3vnQut4S7IYGViF8U4xMww1t6wGWc+2zHY4Jnrr3kNWuE/YLZdALV0DVzT3wBetAeZI4vw5gmIdXwNZmhionc+pRrZMxgOaG2XIbLzM8yL+/deZlQZ4HgmqRQqFE0MOwKjxz0miX63OZzESr1lEqRZkvDV8bdLAkJV8Pv9R9Wxlc/vgXf6tyHdN0GpvIuqX9xiR1FGmsktMyE7pvUdmySn0YlVyOg8rPtjZb/vd1c1gkRD/2E/xYQZ3YHCTweHvV850QNQ1DU9c+Hj21TDcFUvhz5bG9J2XPn7YPV7SZ1MQkLx7QainUMarE185TCd1bGepr7VZIcJR9zAkgkidzRYugZYrCGRQW4GRyGysf8Chr37GyD8j0O4mxIEcjI7UdGh5r8JZ/HSY2mTTMWPdsE3/UGo+a+CnG0gZ8jqo6IULgZyHqc5q4e25mfM+w7UogdBrh0g9QCUvFfhmv57TFj8kW5VYUdRUpC/N30BYvsfBPfXEi7pNRX/NjirPknnLN884ECu5YkF0AM3g8yxAEVB6hqoZb+lqWtX9H9y1Qps2eJF7uhREBEfoEQQbGrGBlc41TjUOgEb5k1AVP8YjFAFlLzNcOQuown/7JOzbq3Jf1mQgGvN5Gxr+rn1s3xw+6aBRQ6crj2oem3/QPLI2q/VTQpml/XZjg34SAR89UWzEdnxJMxw9QCAM1zlT6Hsxjsy2yH3fVWNgoOjyxBaXwZ4Yyiau5eKv9vV/wlxaQ7a9Wug7fo4TOM0CNUDNmNgcy+ck5Yiv/o5Kn+ypUfILlm61l+1Pm+YMxku59Xg8GgoOe/DKK4bKO130GOx93NuGA2XQwbPhVC3IdL1PM3a2G4DPpIBX1HjAW35L+gHvwHTKErPvyT6b0L1bIdryrdpzpsvnJDP2zytEDL8dZgtt0FGy9BDvcQ/29kGR/Hf4Sj7KU1eufeo29s+ewqi++6DDF0CZgeE6IBj7B9RcvpPqXTJsLQ/bzt3LrSti2DGKkFKB9zTvofJ7z82EleisDV4Cqnzl0RQdP0iOCsegOLdASAIUASktkPNXw5HxT3I++RrJwbuWifIWADj0Dcgw2WWb2ZC+hb/L1YI/fBnYbTdwYdvzxl8DFGngpXrILvmgjUvYKiQsRIYB25Gy97qYY5HBFSaDiNcCTYc4FgRWEwDljlH4u9qx8EzIa/+6RFuuPcXaP7bcxDO6VB9RTC7GqDnrsXZF9QT3XliPJh39VR0NX8JHMsf4EpKyYQrN4zm/0D7u/GrxusDbm/fMhWsjwWskGJ6OXTW/VCcBcM6BkSSt56xHcJ5GDJaATi6IGg7cJlmA/5RgHzstyIA1sZvzKxYCVKWvXLiPiS271KY2oQBcsJ7ykczOgqMucyL3yaa3z9k4+/RsO2fawARAsy8VIcJwLMfZrhh+KHJ6rfBoTvB+izAUQ/vuOdG6kJZNuCDezPzA9lwZMdkkOk5eqMuyxEr4OAEbPmd06rWGcjr7r/+ZRjtT8Jouh5s+KB4G+Eo/R3C5+wD1g3zJLdawz3DzM8ljsHOEfsb2oCflBGtKYY1+pFShZI3ePHDuOcauf5T30dw0xI4kA/N3I2p07amquuz6gS3Af+Im2fifkTrNcAYysBNWhM7volHzTehSqtYOkOrbz7lD7UdRTkZ5hq/HKQ2Hr2ZqDXNH4QQy/vrEGCbDXh2mr9iLRyjXgQJY2DIra7PEo6CZXCOedM+aDbgI2fwWvxoF5TC30AteRZCDfWFnBmkxKCWvgLv9P9N1l3adizH2j4EJ3GsuWnuRNCez8LovBYyVAEiBRzX3L5DUAtegzrtMZq8dL19pGzARy7kq1Y5kPOVCTCpCu4cL8yoBkWrh+fa3f02DrLNNttsszW4bTbgttlmA26bbTbgttlmA26bbTbgttlmA26bbTbgttmA22abDbhtttmA22bbSbH/PwAA//8xbkaaA8KvmwAAAABJRU5ErkJggg==" id="comet-icon" width="59" height="59"/></defs>
<g transform="translate(-159 -293.118)">
<path class="fill" d="M254.632 315.691c2.012-2.633 6.422-3.33 8.589 1.007a3.4 3.4 0 0 1 .464-.542 5.56 5.56 0 0 1 5.26-2.556 5.83 5.83 0 0 1 5.109 3.948 8.2 8.2 0 0 1 .542 3.1c.077 2.555 0 5.111 0 7.588 0 1.316-.929 2.091-2.4 2.091a2.06 2.06 0 0 1-2.321-2.091v-7.977a2.655 2.655 0 0 0-2.167-2.555 2.58 2.58 0 0 0-2.863 1.781 4.8 4.8 0 0 0-.155 1.471v6.969c0 .852.077 1.7-.929 2.091a3.09 3.09 0 0 1-3.25-.387 1.64 1.64 0 0 1-.464-1.239v-7.9a2.85 2.85 0 0 0-2.321-2.865 2.55 2.55 0 0 0-2.707 1.623 6 6 0 0 0-.232 1.626v7.356c0 1.239-.851 1.936-2.244 1.936s-2.321-.7-2.321-1.936v-12.462c0-1.549.464-2.013 2.012-2.168a2.28 2.28 0 0 1 2.398 2.091m-22.13 6.269a7.28 7.28 0 0 1 2.863-6.891c4.178-3.252 10.833-1.24 11.92 3.872a14.45 14.45 0 0 1 0 6.04c-.619 3.252-4.024 5.653-7.351 5.575a7.634 7.634 0 0 1-7.274-5.807 10.8 10.8 0 0 1-.158-2.789m10.524.078a8.4 8.4 0 0 1-.077-1.394 2.9 2.9 0 1 0-5.8-.077 19 19 0 0 0 0 2.942 3.215 3.215 0 0 0 2.708 2.942 2.945 2.945 0 0 0 2.94-2.323 16 16 0 0 0 .229-2.09m38.685 1.24a3.29 3.29 0 0 0 3.327 3.639 8.16 8.16 0 0 0 3.792-1.007 1.79 1.79 0 0 1 2.63 1.936 2.44 2.44 0 0 1-.851 1.316 7.26 7.26 0 0 1-4.489 1.471 10.2 10.2 0 0 1-5.8-1.316 6.82 6.82 0 0 1-3.327-6.04c0-1.084.077-2.168.077-3.252 0-3.407 3.714-6.969 8.357-6.427a6.6 6.6 0 0 1 6.114 4.8 7 7 0 0 1 .154 2.555c-.154 1.7-.927 2.323-2.63 2.323h-7.354Zm0-2.788h4.41c.387 0 1.084-.155 1.162-.31a2.9 2.9 0 0 0-.155-1.626 3.14 3.14 0 0 0-3.637-1.007c-1.39.388-1.932 1.239-1.78 2.943m17.024-2.865v6.814c0 1.316.465 1.7 1.858 1.7h1.316a1.98 1.98 0 0 1 2.011 1.936 1.864 1.864 0 0 1-1.779 2.168 18.5 18.5 0 0 1-4.641-.461 4.33 4.33 0 0 1-3.25-4.336c-.077-5.653 0-11.305 0-17.035a1.48 1.48 0 0 1 .542-1.084 3.02 3.02 0 0 1 3.482 0 2.04 2.04 0 0 1 .542 1.161c.077 1.7 0 3.407 0 5.265h3.327c1.316 0 1.858.542 1.858 1.858s-.542 1.858-1.858 1.858h-3.1c-.073.078-.151.078-.308.156m-76.293 4.413v1.316c0 2.4 1.548 3.33 3.792 3.1a8 8 0 0 0 1.934-.619 1.981 1.981 0 0 1 2.012 3.407 7.92 7.92 0 0 1-5.262 1.316 9.7 9.7 0 0 1-2.089-.31 6.19 6.19 0 0 1-4.875-5.885 30 30 0 0 1 .077-5.265c.464-3.485 3.018-5.42 6.887-5.575a7.6 7.6 0 0 1 5.108 1.31 1.838 1.838 0 0 1 .542 2.71 1.7 1.7 0 0 1-2.321.852 9.5 9.5 0 0 0-2.94-.619c-1.78-.078-2.786 1.007-2.863 2.865a8.4 8.4 0 0 0-.002 1.397"/>
<use xlink:href="#comet-icon" transform="translate(159 293.118)"/>
</g>
</svg>
</a>}
</div>
================================================
FILE: packages/docs/src/components/SponsorsChart.astro
================================================
---
import Chart from '../assets/venz-chart.svg';
---
<Chart />
================================================
FILE: packages/docs/src/content/docs/blog/brief-history.md
================================================
---
title: A Brief History Of Knip
date: 2023-10-15
sidebar:
order: 8
---
_Published: 2023-10-15_
If you are fond of short lists and brief histories, then this page was written
just for you!
- 2022-10-04: The [initial commit][1]. Still so tiny at that point, but the seed
was planted. Starting out with finding unused files and exports, the name was
Exportman! 🦸
- 2022-10-09: Big plans and a rename 5 days later, the first published version
of Knip was [v0.1.2][2].
- 2022-11-22: Unused dependencies and support for workspaces and plugins in the
[first alpha of v1][3].
- 2023-01-10: Lots of testing and fixes led to [Knip v1][4].
- 2023-03-22: [Knip v2][5] saw a full rewrite of the TypeScript backend.
- 2023-10-15: [Introduction of Knip v3][6].
[1]: https://github.com/webpro-nl/knip/commit/9589dfe22608da7d89f2613383da6db5826226d2
[2]: https://github.com/webpro-nl/knip/tree/0.1.2
[3]: https://github.com/webpro-nl/knip/releases/tag/1.0.0-alpha.0
[4]: https://github.com/webpro-nl/knip/tree/1.0.0
[5]: https://github.com/webpro-nl/knip/issues/73
[6]: ./knip-v3.mdx
================================================
FILE: packages/docs/src/content/docs/blog/for-editors-and-agents.md
================================================
---
title: Knip for Editors & Agents
date: 2025-12-17
sidebar:
order: 2
---
_Published: 2025-12-17_
Three years in, Knip has found its place in [over 10.000 projects][1] and is
downloaded [over 18M times/month][2]. A long period of steady growth in usage
and stability allows Knip to become more accessible to more people. That's why
I'm excited and proud to introduce the brand new [Editor Extension][3] **and**
MCP Server. For humans and coding agents alike, Knip will help keep your
codebases tidy.
Don't forget... Knip it before you ship it!
## Editor Extension
This one is for you.
[The usual suspects][4] like red squiggles for unused exports are there. What
really moves the needle for DX with Knip's module graph is **navigation**. A
completely unique way to view & fly through codebases. Connect the dots during
development and refactors, while keeping things in check. We're starting out
with [3 key features][5]:
1. **Hover over Export** for import & usage locations
2. **Imports Tree View** for direct links to implementations
3. **Exports Tree View** for direct links to import & usage locations
The extension has a [built-in MCP Server][6] with a command and resources to
configure Knip for you, _completely automated_.
Find [Knip on the VS Code Marketplace][7] and find [Knip in the Open VSX
Registry][8].
## MCP Server
Configuring Knip has always been a major headache to many. No more. Tell your
coding agent to "configure knip" and it will RTFM so you don't have to. Using a
newer model like Opus 4.5 or GPT 5.2 results in an optimized `knip.json` file
and an uncluttered codebase.
The [MCP Server is available][9] separately and built into the VS Code
Extension.
## Language Server
The VS Code Extension and the MCP Server are powered by the new Language Server.
It's a custom server that builds the full module graph of your project, and
provides a session with a graph explorer to request all sorts of interesting
information. Queries like "where is an export imported" or "is this import part
of a circular dependency" are just scratching the surface here.
Extensions for other IDEs can be built on top. See
[language-server/README.md][10]
## Screenshots
- [Lint Findings][4]
- [Imports & Exports][5]
- [Contention][11]
- [Circular Dependencies][12]
- [Conflicts][13]
- [Branching][14]
- [VS Code Extension Settings][15]
### Lint Findings
![Lint Findings][16]
### Imports & Exports
![hover][17]
### Contention
The IDE extension shows extra issues in the tree views like circular
dependencies. We're starting out with some extra novelties like conflicting and
branched/diamond-shaped import chains.
#### Circular Dependencies
If an import is part of a circular dependency, Knip will display:
![Circular Dependencies][18]
#### Conflicts
TypeScript shows direct conflicts when importing or re-exporting the same named
export from different files. Except when the problem is more subtle and the
chain spans more than one file. Knip warns:
![Conflicts][19]
#### Branching
Branched or diamond-shaped imports chains indicate unnecessary re-exports and
complexity. They help to untangle large codebases and shrink or get rid of
barrel files. Knip warns:
![Branching][20]
### VS Code Extension Settings
![VS Code Extension Settings][21]
[1]: https://github.com/webpro-nl/knip/network/dependents
[2]: https://www.npmjs.com/package/knip
[3]: #editor-extension
[4]: #lint-findings
[5]: #imports--exports
[6]: #mcp-server
[7]: https://marketplace.visualstudio.com/items?itemName=webpro.vscode-knip
[8]: https://open-vsx.org/extension/webpro/vscode-knip
[9]: https://www.npmjs.com/package/@knip/mcp
[10]: https://github.com/webpro-nl/knip/blob/main/packages/language-server/README.md
[11]: #contention
[12]: #circular-dependencies
[13]: #conflicts
[14]: #branching
[15]: #vs-code-extension-settings
[16]: /screenshots/editors-and-agents/diagnostics.webp
[17]: /screenshots/editors-and-agents/imports-exports.webp
[18]: /screenshots/editors-and-agents/circular-dependency.webp
[19]: /screenshots/editors-and-agents/conflict.webp
[20]: /screenshots/editors-and-agents/branch.webp
[21]: /screenshots/editors-and-agents/vscode-extension-settings.webp
================================================
FILE: packages/docs/src/content/docs/blog/knip-v3.mdx
================================================
---
title: Announcing Knip v3
date: 2023-10-15
sidebar:
order: 9
---
import { Tabs, TabItem } from '@astrojs/starlight/components';
_Published: 2023-10-15_
Lots of new users got introduced to Knip, coming with clear bug reports, helpful
insights, superb reproductions and great suggestions this year. You're all a
friendly and helpful bunch! Recently I've opened a Discord channel where more
communication, collaboration, ideas and updates are happening: feel free to join
[The Knip Barn][1]!
Today, Knip has [over 140k weekly downloads on npm][2], [almost 4000 stars on
GitHub][3], and [over 500 repositories][4] using it. While numbers are just
numbers, they do add to the positive feedback I'm receiving daily. Everything
combined makes me think I'm on the right track which is very motivating to keep
working on Knip.
## So... What's Been Cooking Lately?
- Migration to a monorepo setup
- This very website built with Starlight 🌟
- Extended documentation for just about everything
- Improved JSON reporter for external integrations (e.g. [GitHub Action][5])
- Some breaking changes, but you probably don't need to make any changes
## Breaking Changes
A major bump comes with breaking changes, but most likely no changes necessary
on your end:
- Removed support for Node.js v16, Knip v3 requires at least Node.js v18.6
- Simplified [exit codes][6]
- [Production mode][7] now includes types by default (add `--exclude types` for
previous behavior)
- Removed `--ignore-internal` flag; [`@internal`][8] exports ignored in
production mode now
- The `--debug-file-filter` flag is removed
- The `jsonExt` reporter is now the default [JSON reporter][9] (the previous one
is gone)
- Moved `typescript` to `peerDependencies` (requires `>=5.0.4`)
## Installation
Try out the latest Knip v3 release today!
<Tabs syncKey="pm">
<TabItem label="npm">
```shell
npm install -D knip
```
</TabItem>
<TabItem label="pnpm">
```shell
pnpm add -D knip
```
</TabItem>
<TabItem label="bun">
```shell
bun add -D knip
```
</TabItem>
<TabItem label="yarn">
```shell
yarn add -D knip
```
</TabItem>
</Tabs>
Remember, Knip it before you ship it! Have a great day ☀️
[1]: https://discord.gg/r5uXTtbTpc
[2]: https://www.npmjs.com/package/knip
[3]: https://github.com/webpro-nl/knip/stargazers
[4]: https://github.com/webpro-nl/knip/network/dependents
[5]: https://github.com/marketplace/actions/knip-reporter
[6]: ../reference/cli.md#--no-exit-code
[7]: ../features/production-mode.md
[8]: ../reference/jsdoc-tsdoc-tags.md#internal
[9]: ../features/reporters.md#json
================================================
FILE: packages/docs/src/content/docs/blog/knip-v4.mdx
================================================
---
title: Announcing Knip v4
date: 2024-01-16
sidebar:
order: 6
---
import { Tabs, TabItem } from '@astrojs/starlight/components';
_Published: 2024-01-16_
I'm happy to announce that Knip v4 is available!
The work took over a month and the process of [slimming down to speed up][1]
ended up really well: significant faster runs and reduced memory usage. In the
meantime, v3 continued to receive more contributions, plugins and bug fixes.
## Highlights
Compared to v3, here are the highlights:
- Performance: significant speed bump (up to 80%!)
- Performance: globbing in combo with `.gitignore` is a lot more efficient
- Configuration: [built-in compilers][2] (for Astro, MDX, Svelte & Vue)
- The `ignore` option has been improved
- Internal refactoring to serialize data for future improvements like caching.
The actual performance win in your projects depends on various factors like size
and complexity.
## Major Changes
The changes have been tested against various repositories, but it's possible
that you will encounter false positives caused by the major refactoring that has
been done. If you do, [please report][3]!
### Unused Class Members
Finding unused class members is no longer enabled by default. Here's why it's
now opt-in:
- When using Knip for the first time on a large repository it can crash after a
while with an out of memory error. This is a terrible experience.
- Plenty of codebases don't use classes at all, keeping TS programs in memory is
a waste of resources.
- Many configurations already exclude `classMembers` from the output.
Enable unused class members by using the CLI argument or the configuration
option:
```shell
knip --include classMembers
```
```json
{
"include": ["classMembers"]
}
```
Now that unused class members is opt-in and better organized within Knip, it
might be interesting to start looking at opt-ins for other unused members, such
as those of types and interfaces.
By the way, enum members are "cheap" with the v4 refactor, so those are still
included by default.
### Compilers
You can remove the `compilers` option from your configuration. Since you can
override them, your custom compilers can stay where they are. This also means
that you can go back from `knip.ts` to `knip.json` if you prefer.
### Ignore Files
The `ignore` option accepted patterns like `examples/`, but if you want to
ignore the files inside this folder you should update to globs like
`examples/**`.
## What's Next?
The refactoring for this release opens the door to more optimizations, such as
caching. I'm also very excited to see how deeper integrations such as in GitHub
Actions or IDEs like VS Code or WebStorm may further develop.
Remember, if you are you using Knip at work your company can [sponsor me][4]!
## One More Thing...
An idea I've been toying with is "tagged exports". The idea is that you can tag
exports in a JSDoc comment. The tag does not need to be part of the JSDoc or
TSDoc spec. For example:
```ts
/** @custom */
export const myExport = 1;
```
Then, include or exclude such tagged exports from the report like so:
```shell
knip --experimental-tags=+custom
knip --experimental-tags=-custom,-internal
```
This way, you can either focus on or ignore specific tagged exports with tags
you define yourself. This also works for individual class or enum members.
Once this feature is intuitive and stable, the `experimental` flag will be
removed and option(s) added to the Knip configuration file. The docs are in the
[CLI reference][5].
## Let's Go!
What are you waiting for? Start using Knip v4 today!
<Tabs syncKey="pm">
<TabItem label="npm">
```shell
npm install -D knip
```
</TabItem>
<TabItem label="pnpm">
```shell
pnpm add -D knip
```
</TabItem>
<TabItem label="bun">
```shell
bun add -D knip
```
</TabItem>
<TabItem label="yarn">
```shell
yarn add -D knip
```
</TabItem>
</Tabs>
Remember, Knip it before you ship it! Have a great day ☀️
[1]: ./slim-down-to-speed-up.md
[2]: ../features/compilers.md
[3]: ../guides/issue-reproduction.md
[4]: https://github.com/sponsors/webpro
[5]: ../reference/cli.md#--tags
================================================
FILE: packages/docs/src/content/docs/blog/knip-v5.mdx
================================================
---
title: Announcing Knip v5
date: 2024-02-10
sidebar:
order: 5
---
import { Tabs, TabItem } from '@astrojs/starlight/components';
_Published: 2024-02-10_
Today brings the smallest major release so far. Tiny yet mighty!
Below are two cases to demonstrate the change in how unused exports are
reported.
## Case 1
The first case shows two exports with a namespaced import that references one of
those exports explicitly:
```ts title="knip.j
gitextract_6vmhc_sa/
├── .agents/
│ ├── MODULE_GRAPH.md
│ └── PLUGINS.md
├── .gitattributes
├── .github/
│ ├── CODE_OF_CONDUCT.md
│ ├── CONTRIBUTING.md
│ ├── DEVELOPMENT.md
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── 01-bug_report.yaml
│ │ ├── 02-regression.yaml
│ │ ├── 03-feature_request.yaml
│ │ ├── 04-documentation.yaml
│ │ ├── 05-everything-else.yaml
│ │ └── config.yml
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── copilot-instructions.md
│ └── workflows/
│ ├── ci-bun.yml
│ ├── ci-ts-latest.yml
│ ├── ci-ts-next.yml
│ ├── ci.yml
│ ├── integration.yml
│ ├── markdown-link-check.json
│ ├── markdown-link-check.yml
│ └── patches/
│ ├── .gitkeep
│ ├── TypeScript.patch
│ ├── argos.patch
│ ├── create-typescript-app.patch
│ └── npmx.dev.patch
├── .gitignore
├── .idea/
│ └── runConfigurations/
│ ├── Debug_Bun_test.xml
│ └── Debug_Node_test.xml
├── .oxfmtrc.json
├── .oxlintrc.json
├── .prettierignore
├── .release-it.json
├── .vscode/
│ ├── extensions.json
│ ├── launch.json
│ └── settings.json
├── AGENTS.md
├── knip.json
├── license
├── package.json
├── packages/
│ ├── create-config/
│ │ ├── README.md
│ │ ├── index.js
│ │ └── package.json
│ ├── docs/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── astro.config.ts
│ │ ├── mock/
│ │ │ └── contributors.json
│ │ ├── package.json
│ │ ├── public/
│ │ │ ├── fonts/
│ │ │ │ ├── SourceSansPro-Regular.otf
│ │ │ │ └── fonts.conf
│ │ │ ├── manifest.json
│ │ │ ├── robots.txt
│ │ │ └── screenshots/
│ │ │ ├── fix.webm
│ │ │ └── watch-fix.webm
│ │ ├── remark/
│ │ │ ├── fixInternalLinks.ts
│ │ │ └── transformDirectives.ts
│ │ ├── scripts/
│ │ │ ├── generate-plugin-docs.ts
│ │ │ ├── get-monthly-sponsorships-github.ts
│ │ │ ├── get-monthly-sponsorships-opencollective.ts
│ │ │ └── get-monthly-sponsorships.ts
│ │ ├── src/
│ │ │ ├── assets/
│ │ │ │ └── testimonials.json
│ │ │ ├── components/
│ │ │ │ ├── Contributors.astro
│ │ │ │ ├── EmojiBlastButton.astro
│ │ │ │ ├── Footer.astro
│ │ │ │ ├── Head.astro
│ │ │ │ ├── Post.astro
│ │ │ │ ├── Posts.astro
│ │ │ │ ├── Projects.astro
│ │ │ │ ├── Sponsors.astro
│ │ │ │ └── SponsorsChart.astro
│ │ │ ├── content/
│ │ │ │ └── docs/
│ │ │ │ ├── blog/
│ │ │ │ │ ├── brief-history.md
│ │ │ │ │ ├── for-editors-and-agents.md
│ │ │ │ │ ├── knip-v3.mdx
│ │ │ │ │ ├── knip-v4.mdx
│ │ │ │ │ ├── knip-v5.mdx
│ │ │ │ │ ├── knip-v6.md
│ │ │ │ │ ├── migration-to-v1.md
│ │ │ │ │ ├── release-notes-v2.md
│ │ │ │ │ ├── slim-down-to-speed-up.md
│ │ │ │ │ ├── state-of-knip.md
│ │ │ │ │ └── two-years.mdx
│ │ │ │ ├── explanations/
│ │ │ │ │ ├── comparison-and-migration.md
│ │ │ │ │ ├── entry-files.md
│ │ │ │ │ ├── plugins.md
│ │ │ │ │ └── why-use-knip.md
│ │ │ │ ├── features/
│ │ │ │ │ ├── auto-fix.mdx
│ │ │ │ │ ├── compilers.md
│ │ │ │ │ ├── integrated-monorepos.md
│ │ │ │ │ ├── monorepos-and-workspaces.md
│ │ │ │ │ ├── production-mode.md
│ │ │ │ │ ├── reporters.md
│ │ │ │ │ ├── rules-and-filters.md
│ │ │ │ │ ├── script-parser.md
│ │ │ │ │ └── source-mapping.md
│ │ │ │ ├── guides/
│ │ │ │ │ ├── configuring-project-files.md
│ │ │ │ │ ├── contributing.md
│ │ │ │ │ ├── handling-issues.mdx
│ │ │ │ │ ├── issue-reproduction.md
│ │ │ │ │ ├── namespace-imports.md
│ │ │ │ │ ├── performance.md
│ │ │ │ │ ├── troubleshooting.md
│ │ │ │ │ ├── using-knip-in-ci.md
│ │ │ │ │ └── working-with-commonjs.md
│ │ │ │ ├── index.mdx
│ │ │ │ ├── overview/
│ │ │ │ │ ├── configuration.md
│ │ │ │ │ ├── features.md
│ │ │ │ │ ├── getting-started.mdx
│ │ │ │ │ └── screenshots-videos.md
│ │ │ │ ├── playground.mdx
│ │ │ │ ├── reference/
│ │ │ │ │ ├── cli.md
│ │ │ │ │ ├── configuration-hints.md
│ │ │ │ │ ├── configuration.md
│ │ │ │ │ ├── dynamic-configuration.mdx
│ │ │ │ │ ├── faq.md
│ │ │ │ │ ├── integrations.md
│ │ │ │ │ ├── issue-types.md
│ │ │ │ │ ├── jsdoc-tsdoc-tags.md
│ │ │ │ │ ├── known-issues.md
│ │ │ │ │ ├── plugins/
│ │ │ │ │ │ └── .gitkeep
│ │ │ │ │ ├── plugins.md
│ │ │ │ │ └── related-tooling.md
│ │ │ │ ├── sponsors.mdx
│ │ │ │ ├── typescript/
│ │ │ │ │ ├── unused-dependencies.md
│ │ │ │ │ └── unused-exports.md
│ │ │ │ └── writing-a-plugin/
│ │ │ │ ├── argument-parsing.md
│ │ │ │ ├── index.md
│ │ │ │ └── inputs.md
│ │ │ ├── content.config.ts
│ │ │ ├── fonts/
│ │ │ │ └── font-face.css
│ │ │ ├── pages/
│ │ │ │ ├── og/
│ │ │ │ │ └── [...route].ts
│ │ │ │ └── sitemap.txt.ts
│ │ │ ├── styles/
│ │ │ │ ├── cards.css
│ │ │ │ ├── content.css
│ │ │ │ ├── custom.css
│ │ │ │ ├── expressive-code.css
│ │ │ │ ├── hero.css
│ │ │ │ ├── links.css
│ │ │ │ ├── sponsors.css
│ │ │ │ ├── theme-dark.css
│ │ │ │ └── theme-light.css
│ │ │ └── util/
│ │ │ └── post.ts
│ │ └── tsconfig.json
│ ├── knip/
│ │ ├── .gitignore
│ │ ├── .release-it.json
│ │ ├── README.md
│ │ ├── bin/
│ │ │ ├── knip-bun.js
│ │ │ └── knip.js
│ │ ├── fixtures/
│ │ │ ├── barrel-namespace-chain/
│ │ │ │ ├── consumer.ts
│ │ │ │ ├── fn-consumer.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── lib.ts
│ │ │ │ ├── opaque-consumer.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── protocol.ts
│ │ │ │ ├── server.ts
│ │ │ │ └── utils.ts
│ │ │ ├── binaries/
│ │ │ │ ├── dir/
│ │ │ │ │ └── index.js
│ │ │ │ ├── main.ts
│ │ │ │ ├── require.js
│ │ │ │ └── script.js
│ │ │ ├── catalog-named/
│ │ │ │ ├── index.js
│ │ │ │ ├── package.json
│ │ │ │ └── pnpm-workspace.yaml
│ │ │ ├── catalog-named-empty/
│ │ │ │ ├── index.js
│ │ │ │ ├── package.json
│ │ │ │ └── pnpm-workspace.yaml
│ │ │ ├── catalog-named-package-json/
│ │ │ │ ├── index.js
│ │ │ │ └── package.json
│ │ │ ├── catalog-named-package-json-root/
│ │ │ │ ├── index.js
│ │ │ │ └── package.json
│ │ │ ├── catalog-pnpm/
│ │ │ │ ├── package.json
│ │ │ │ ├── packages/
│ │ │ │ │ └── app/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── package.json
│ │ │ │ └── pnpm-workspace.yaml
│ │ │ ├── catalog-yarn/
│ │ │ │ ├── .yarnrc.yml
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ └── app/
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── cli/
│ │ │ │ ├── index.js
│ │ │ │ └── package.json
│ │ │ ├── cli-preprocessor/
│ │ │ │ ├── index.js
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── cli-reporter/
│ │ │ │ ├── index.js
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── commonjs/
│ │ │ │ ├── dir/
│ │ │ │ │ ├── exports.js
│ │ │ │ │ ├── mod.js
│ │ │ │ │ ├── mod1.js
│ │ │ │ │ ├── mod2.js
│ │ │ │ │ └── mod3.js
│ │ │ │ ├── index.js
│ │ │ │ ├── odd.js
│ │ │ │ ├── package.json
│ │ │ │ └── ts-ext.ts
│ │ │ ├── commonjs-tsconfig/
│ │ │ │ ├── dir/
│ │ │ │ │ ├── exports.js
│ │ │ │ │ ├── module1.ts
│ │ │ │ │ ├── module2.ts
│ │ │ │ │ ├── module3.js
│ │ │ │ │ ├── script1.js
│ │ │ │ │ ├── script2.js
│ │ │ │ │ └── script3.js
│ │ │ │ ├── index.js
│ │ │ │ ├── main.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── ts-ext.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── compact-reporter/
│ │ │ │ ├── knip.json
│ │ │ │ └── package.json
│ │ │ ├── compilers/
│ │ │ │ ├── Component.vue
│ │ │ │ ├── component.tsx
│ │ │ │ ├── enum.ts
│ │ │ │ ├── grid.css
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.ts
│ │ │ │ ├── module.mdx
│ │ │ │ ├── package.json
│ │ │ │ ├── readme.md
│ │ │ │ ├── styles.css
│ │ │ │ ├── tsconfig.json
│ │ │ │ ├── unused.css
│ │ │ │ └── unused.md
│ │ │ ├── compilers-manual/
│ │ │ │ ├── component.tsx
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.ts
│ │ │ │ ├── module.mdx
│ │ │ │ ├── package.json
│ │ │ │ ├── styles.scss
│ │ │ │ └── tsconfig.json
│ │ │ ├── compilers-prisma/
│ │ │ │ ├── package.json
│ │ │ │ └── prisma/
│ │ │ │ └── schema.prisma
│ │ │ ├── compilers-scss/
│ │ │ │ ├── _grid.scss
│ │ │ │ ├── _partial.scss
│ │ │ │ ├── buttons.scss
│ │ │ │ ├── cards.sass
│ │ │ │ ├── components.scss
│ │ │ │ ├── indented.sass
│ │ │ │ ├── index.ts
│ │ │ │ ├── legacy.scss
│ │ │ │ ├── mixins.scss
│ │ │ │ ├── package.json
│ │ │ │ ├── styles.scss
│ │ │ │ ├── theme.scss
│ │ │ │ ├── unused.scss
│ │ │ │ ├── utils.scss
│ │ │ │ └── variables.scss
│ │ │ ├── compilers-tailwind/
│ │ │ │ ├── components.css
│ │ │ │ ├── index.ts
│ │ │ │ ├── local-js-plugin.js
│ │ │ │ ├── local-ts-plugin.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── styles.css
│ │ │ │ └── unused.css
│ │ │ ├── config-js-async/
│ │ │ │ ├── dangling.js
│ │ │ │ ├── index.js
│ │ │ │ ├── knip.config.js
│ │ │ │ ├── my-namespace.js
│ │ │ │ └── package.json
│ │ │ ├── config-js-flat/
│ │ │ │ ├── dangling.js
│ │ │ │ ├── index.js
│ │ │ │ ├── knip.js
│ │ │ │ ├── my-namespace.js
│ │ │ │ └── package.json
│ │ │ ├── config-json/
│ │ │ │ ├── dangling.js
│ │ │ │ ├── index.js
│ │ │ │ ├── knip.json
│ │ │ │ ├── my-namespace.js
│ │ │ │ └── package.json
│ │ │ ├── config-mjs-async/
│ │ │ │ ├── dangling.js
│ │ │ │ ├── index.js
│ │ │ │ ├── knip.mjs
│ │ │ │ ├── my-namespace.js
│ │ │ │ └── package.json
│ │ │ ├── config-mjs-flat/
│ │ │ │ ├── dangling.js
│ │ │ │ ├── index.js
│ │ │ │ ├── knip.mjs
│ │ │ │ ├── my-namespace.js
│ │ │ │ └── package.json
│ │ │ ├── config-package-json/
│ │ │ │ ├── dangling.js
│ │ │ │ ├── index.js
│ │ │ │ ├── my-namespace.js
│ │ │ │ └── package.json
│ │ │ ├── config-ts-async/
│ │ │ │ ├── dangling.js
│ │ │ │ ├── index.js
│ │ │ │ ├── knip.ts
│ │ │ │ ├── my-namespace.js
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── config-ts-flat/
│ │ │ │ ├── dangling.js
│ │ │ │ ├── index.js
│ │ │ │ ├── knip.config.ts
│ │ │ │ ├── my-namespace.js
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── config-ts-function/
│ │ │ │ ├── dangling.js
│ │ │ │ ├── index.js
│ │ │ │ ├── knip.ts
│ │ │ │ ├── my-namespace.js
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── config-yaml/
│ │ │ │ ├── dangling.js
│ │ │ │ ├── index.js
│ │ │ │ ├── knip.yaml
│ │ │ │ ├── my-namespace.js
│ │ │ │ └── package.json
│ │ │ ├── configuration-hints/
│ │ │ │ ├── knip.json
│ │ │ │ ├── lib/
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── package.json
│ │ │ │ └── src/
│ │ │ │ └── entry.js
│ │ │ ├── configuration-hints-plugin/
│ │ │ │ ├── create-typescript-app.config.js
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── svgo.config.mjs
│ │ │ ├── configuration-hints-plugin-override/
│ │ │ │ ├── create-typescript-app.config.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ ├── svgo.config.js
│ │ │ │ └── yarn.config.cjs
│ │ │ ├── configuration-hints2/
│ │ │ │ ├── knip.json
│ │ │ │ ├── lib/
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── package.json
│ │ │ │ └── src/
│ │ │ │ └── entry.js
│ │ │ ├── cross-workspace-inputs/
│ │ │ │ ├── .github/
│ │ │ │ │ └── workflows/
│ │ │ │ │ └── test.yml
│ │ │ │ ├── components/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── vitest.components.config.ts
│ │ │ │ ├── e2e/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── playwright.e2e.config.ts
│ │ │ │ │ └── tests/
│ │ │ │ │ └── feature.ts
│ │ │ │ ├── knip.json
│ │ │ │ └── package.json
│ │ │ ├── custom-paths-workspaces/
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── lib/
│ │ │ │ │ ├── fn.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── my-module.ts
│ │ │ │ ├── package.json
│ │ │ │ └── ws/
│ │ │ │ ├── index.ts
│ │ │ │ ├── lib/
│ │ │ │ │ └── main.ts
│ │ │ │ ├── package.json
│ │ │ │ └── util/
│ │ │ │ └── lang.ts
│ │ │ ├── definitely-typed/
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── dependencies/
│ │ │ │ ├── entry.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── my-module.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── tsconfig.json
│ │ │ │ └── unused-module.ts
│ │ │ ├── dependencies-types/
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── dts/
│ │ │ │ ├── assets.d.ts
│ │ │ │ ├── block.html
│ │ │ │ ├── index.ts
│ │ │ │ ├── module-augmentation.ts
│ │ │ │ ├── normal.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── svg.d.ts
│ │ │ │ ├── tsconfig.json
│ │ │ │ └── types.d.ts
│ │ │ ├── dts-baseurl-implicit-relative/
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ ├── components/
│ │ │ │ │ │ ├── Button.d.ts
│ │ │ │ │ │ └── Button.jsx
│ │ │ │ │ ├── dir/
│ │ │ │ │ │ └── subdir/
│ │ │ │ │ │ ├── index.d.ts
│ │ │ │ │ │ └── index.js
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── utils/
│ │ │ │ │ ├── fn.d.ts
│ │ │ │ │ ├── fn.js
│ │ │ │ │ ├── obj.cjs
│ │ │ │ │ ├── obj.d.cts
│ │ │ │ │ ├── str.d.mts
│ │ │ │ │ └── str.mjs
│ │ │ │ └── tsconfig.json
│ │ │ ├── dts-compiled/
│ │ │ │ ├── knip.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ ├── App.tsx
│ │ │ │ │ ├── ExampleQuery.graphql
│ │ │ │ │ ├── ExampleQuery.graphql.d.ts
│ │ │ │ │ ├── UnusedQuery.graphql
│ │ │ │ │ ├── UnusedQuery.graphql.d.ts
│ │ │ │ │ ├── main.tsx
│ │ │ │ │ └── types.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── duplicate-dependencies/
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.json
│ │ │ │ └── package.json
│ │ │ ├── duplicate-exports-alias/
│ │ │ │ ├── helpers.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── reexported.ts
│ │ │ │ └── specifier-default.ts
│ │ │ ├── empty-main/
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.json
│ │ │ │ └── package.json
│ │ │ ├── entry-exports-enum-members/
│ │ │ │ ├── fruit.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── main.ts
│ │ │ │ ├── package.json
│ │ │ │ └── tree.ts
│ │ │ ├── entry-exports-namespace/
│ │ │ │ ├── index.ts
│ │ │ │ ├── main.ts
│ │ │ │ ├── mid.ts
│ │ │ │ ├── ns.ts
│ │ │ │ └── package.json
│ │ │ ├── entry-files/
│ │ │ │ ├── cli.js
│ │ │ │ ├── export-index.js
│ │ │ │ ├── local-default.js
│ │ │ │ ├── local-import.js
│ │ │ │ ├── local-node.js
│ │ │ │ ├── local-require.js
│ │ │ │ ├── main.js
│ │ │ │ └── package.json
│ │ │ ├── entry-js/
│ │ │ │ ├── dangling.js
│ │ │ │ ├── index.js
│ │ │ │ ├── my-module.ts
│ │ │ │ ├── my-namespace.ts
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── enum-members/
│ │ │ │ ├── index.ts
│ │ │ │ ├── members.ts
│ │ │ │ └── package.json
│ │ │ ├── enum-members-enumerated/
│ │ │ │ ├── directions.ts
│ │ │ │ ├── fruits.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── export-default-type/
│ │ │ │ ├── class.js
│ │ │ │ ├── const.js
│ │ │ │ ├── function.js
│ │ │ │ ├── index.js
│ │ │ │ ├── let.js
│ │ │ │ ├── package.json
│ │ │ │ └── var.js
│ │ │ ├── export-spread/
│ │ │ │ ├── array.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── object.ts
│ │ │ │ └── package.json
│ │ │ ├── exports/
│ │ │ │ ├── default-arrow-function.ts
│ │ │ │ ├── default-class.ts
│ │ │ │ ├── default-function.ts
│ │ │ │ ├── default-generator-function.ts
│ │ │ │ ├── default-named-class.ts
│ │ │ │ ├── default-named-function.ts
│ │ │ │ ├── default-named-generator-function.ts
│ │ │ │ ├── default.ts
│ │ │ │ ├── dynamic-import.ts
│ │ │ │ ├── export-is.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── my-mix.ts
│ │ │ │ ├── my-module.ts
│ │ │ │ ├── my-namespace.ts
│ │ │ │ ├── named-exports.ts
│ │ │ │ ├── odd.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── tsconfig.json
│ │ │ │ └── types.ts
│ │ │ ├── exports-default-interface/
│ │ │ │ ├── enum.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── interface.ts
│ │ │ │ ├── package.json
│ │ │ │ └── type.ts
│ │ │ ├── exports-special-characters/
│ │ │ │ ├── exports.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── exports-value-refs/
│ │ │ │ ├── index.ts
│ │ │ │ ├── package.json
│ │ │ │ └── refs.ts
│ │ │ ├── exports-value-refs-default/
│ │ │ │ ├── index.ts
│ │ │ │ ├── package.json
│ │ │ │ └── refs.ts
│ │ │ ├── extensions-css-ts/
│ │ │ │ ├── index.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── styles1.css.ts
│ │ │ │ ├── styles1a.css.ts
│ │ │ │ ├── styles2.css.ts
│ │ │ │ ├── styles2a.css.ts
│ │ │ │ ├── styles3.css.ts
│ │ │ │ └── styles3a.css.ts
│ │ │ ├── fix/
│ │ │ │ ├── .prettierrc
│ │ │ │ ├── access.js
│ │ │ │ ├── default-x.mjs
│ │ │ │ ├── default.mjs
│ │ │ │ ├── exports.js
│ │ │ │ ├── ignored.ts
│ │ │ │ ├── index.mjs
│ │ │ │ ├── knip.ts
│ │ │ │ ├── mod.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── reexported.ts
│ │ │ │ └── reexports.mjs
│ │ │ ├── fix-members/
│ │ │ │ ├── class.ts
│ │ │ │ ├── enums.ts
│ │ │ │ ├── index.js
│ │ │ │ ├── namespaces.ts
│ │ │ │ └── package.json
│ │ │ ├── fix-workspaces/
│ │ │ │ ├── exports.ts
│ │ │ │ ├── ignored.ts
│ │ │ │ ├── index.js
│ │ │ │ ├── knip.ts
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ ├── ignored/
│ │ │ │ │ ├── exports.ts
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── package.json
│ │ │ │ └── lib/
│ │ │ │ ├── exports.ts
│ │ │ │ ├── ignored.ts
│ │ │ │ ├── index.js
│ │ │ │ └── package.json
│ │ │ ├── git-branch-file/
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── gitignore/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ └── a/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── index.ts
│ │ │ │ ├── libs/
│ │ │ │ │ ├── .gitignore
│ │ │ │ │ └── util/
│ │ │ │ │ └── type/
│ │ │ │ │ └── .gitignore
│ │ │ │ └── package.json
│ │ │ ├── glob/
│ │ │ │ ├── .gitignore
│ │ │ │ └── a/
│ │ │ │ ├── .gitignore
│ │ │ │ └── b/
│ │ │ │ ├── .gitignore
│ │ │ │ └── c/
│ │ │ │ └── .gitignore
│ │ │ ├── glob-worktree/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── mock-git-dir/
│ │ │ │ │ └── info/
│ │ │ │ │ └── exclude
│ │ │ │ └── root/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── dot-git
│ │ │ │ └── subdir/
│ │ │ │ └── .gitignore
│ │ │ ├── ignore-dependencies-binaries/
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.ts
│ │ │ │ └── package.json
│ │ │ ├── ignore-dependencies-binaries-json/
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── ignore-dependencies-eslint/
│ │ │ │ ├── .eslintrc.js
│ │ │ │ ├── knip.json
│ │ │ │ └── package.json
│ │ │ ├── ignore-exports-used-in-file/
│ │ │ │ ├── computed-access.ts
│ │ │ │ ├── control-flow.ts
│ │ │ │ ├── expressions.ts
│ │ │ │ ├── imported.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── jsx.tsx
│ │ │ │ ├── knip.json
│ │ │ │ ├── loops.ts
│ │ │ │ ├── more.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── tagged-template.ts
│ │ │ │ ├── tsconfig.json
│ │ │ │ └── type-assertions.ts
│ │ │ ├── ignore-exports-used-in-file-alias-exclude/
│ │ │ │ ├── exports.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── more.ts
│ │ │ │ └── package.json
│ │ │ ├── ignore-exports-used-in-file-false/
│ │ │ │ ├── imported.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── ignore-exports-used-in-file-id-chars/
│ │ │ │ ├── imported.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.json
│ │ │ │ └── package.json
│ │ │ ├── ignore-exports-used-in-file-id-underscores/
│ │ │ │ ├── imported.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── namespace.ts
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── ignore-exports-used-in-file-re-export/
│ │ │ │ ├── component.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── interface.ts
│ │ │ │ ├── knip.json
│ │ │ │ └── package.json
│ │ │ ├── ignore-exports-used-in-file-shorthand/
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── src/
│ │ │ │ ├── antecedents.js
│ │ │ │ ├── fn.js
│ │ │ │ ├── index.js
│ │ │ │ └── slice.js
│ │ │ ├── ignore-exports-used-in-file-some/
│ │ │ │ ├── imported.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── ignore-exports-used-in-file-typeof-class/
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── src/
│ │ │ │ ├── api.ts
│ │ │ │ └── index.ts
│ │ │ ├── ignore-files/
│ │ │ │ ├── apples/
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── rooted.js
│ │ │ │ │ ├── unused.js
│ │ │ │ │ └── used.js
│ │ │ │ ├── bananas/
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── rooted.js
│ │ │ │ │ ├── unused.js
│ │ │ │ │ └── used.js
│ │ │ │ ├── index.js
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ ├── rooted.js
│ │ │ │ ├── unused.js
│ │ │ │ └── used.js
│ │ │ ├── ignore-issues/
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── src/
│ │ │ │ ├── generated/
│ │ │ │ │ └── types.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── model.generated.ts
│ │ │ │ └── regular.ts
│ │ │ ├── ignore-members/
│ │ │ │ ├── MyClass.ts
│ │ │ │ ├── enums.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.ts
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── ignore-negated/
│ │ │ │ ├── index.js
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── src/
│ │ │ │ └── modules/
│ │ │ │ ├── A/
│ │ │ │ │ └── unusedFileA.js
│ │ │ │ └── B/
│ │ │ │ └── unusedFileB.js
│ │ │ ├── ignore-patterns/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── scripts/
│ │ │ │ └── build.ts
│ │ │ ├── ignore-patterns-monorepo/
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ └── lib/
│ │ │ │ ├── index.ts
│ │ │ │ ├── output/
│ │ │ │ │ └── generated.ts
│ │ │ │ └── package.json
│ │ │ ├── ignore-unresolved/
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.ts
│ │ │ │ └── package.json
│ │ │ ├── ignore-unresolved2/
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ └── client/
│ │ │ │ ├── package.json
│ │ │ │ └── src/
│ │ │ │ └── index.ts
│ │ │ ├── import-equals/
│ │ │ │ ├── index.ts
│ │ │ │ ├── local.ts
│ │ │ │ ├── my-module.ts
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── import-errors/
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── import-meta-glob/
│ │ │ │ ├── animals/
│ │ │ │ │ ├── cat.ts
│ │ │ │ │ ├── dog.ts
│ │ │ │ │ └── horse.ts
│ │ │ │ ├── flowers/
│ │ │ │ │ ├── rose.astro
│ │ │ │ │ └── tulip.astro
│ │ │ │ ├── index.ts
│ │ │ │ ├── package.json
│ │ │ │ └── shapes/
│ │ │ │ ├── circle.vue
│ │ │ │ └── square.vue
│ │ │ ├── import-named-default-id/
│ │ │ │ ├── index.ts
│ │ │ │ ├── package.json
│ │ │ │ └── utils.ts
│ │ │ ├── import-star-iteration/
│ │ │ │ ├── fruit.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── tsconfig.json
│ │ │ │ └── vegetables.ts
│ │ │ ├── imports/
│ │ │ │ ├── aliased-binding.ts
│ │ │ │ ├── await-import-call.ts
│ │ │ │ ├── await-import.ts
│ │ │ │ ├── catch.ts
│ │ │ │ ├── default-and-named-binding.ts
│ │ │ │ ├── default-identifier.ts
│ │ │ │ ├── default-prop-access.ts
│ │ │ │ ├── dir/
│ │ │ │ │ ├── import-b.ts
│ │ │ │ │ ├── import-f.ts
│ │ │ │ │ └── mod.ts
│ │ │ │ ├── empty-named-bindings.ts
│ │ │ │ ├── import-a.ts
│ │ │ │ ├── import-c.ts
│ │ │ │ ├── import-d.ts
│ │ │ │ ├── import-e.ts
│ │ │ │ ├── import-g.ts
│ │ │ │ ├── import-meta-resolve.js
│ │ │ │ ├── index.ts
│ │ │ │ ├── named-object-binding.ts
│ │ │ │ ├── no-substitution-tpl-literal.ts
│ │ │ │ ├── object-bindings.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── promise-like.ts
│ │ │ │ ├── prop-access.ts
│ │ │ │ ├── side-effects-call.ts
│ │ │ │ ├── side-effects.ts
│ │ │ │ ├── string-literal.ts
│ │ │ │ ├── top-level-await-import.ts
│ │ │ │ ├── top-level-side-effects-call.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── imports-destructure-spread/
│ │ │ │ ├── index.js
│ │ │ │ ├── package.json
│ │ │ │ └── trees.js
│ │ │ ├── imports-dynamic-access/
│ │ │ │ ├── fruits.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── imports-namespace/
│ │ │ │ ├── index.ts
│ │ │ │ ├── namespace.ts
│ │ │ │ ├── namespace10.ts
│ │ │ │ ├── namespace2.ts
│ │ │ │ ├── namespace3-opaque.ts
│ │ │ │ ├── namespace3.ts
│ │ │ │ ├── namespace4.ts
│ │ │ │ ├── namespace5-opaque.ts
│ │ │ │ ├── namespace5.ts
│ │ │ │ ├── namespace6-opaque.ts
│ │ │ │ ├── namespace6.ts
│ │ │ │ ├── namespace7.ts
│ │ │ │ ├── namespace8.ts
│ │ │ │ ├── namespace9.ts
│ │ │ │ ├── package.json
│ │ │ │ └── re-exported-module.ts
│ │ │ ├── imports-namespace-jsx/
│ │ │ │ ├── components.tsx
│ │ │ │ ├── index.tsx
│ │ │ │ └── package.json
│ │ │ ├── imports-namespace-with-nsexports/
│ │ │ │ ├── index.ts
│ │ │ │ ├── namespace.ts
│ │ │ │ ├── namespace2.ts
│ │ │ │ ├── namespace3.ts
│ │ │ │ ├── namespace4.ts
│ │ │ │ ├── namespace5.ts
│ │ │ │ ├── namespace6.ts
│ │ │ │ ├── package.json
│ │ │ │ └── re-exported-module.ts
│ │ │ ├── imports-opaque/
│ │ │ │ ├── arrow.ts
│ │ │ │ ├── assignment.ts
│ │ │ │ ├── awaited-arrow.ts
│ │ │ │ ├── awaited-assignment.ts
│ │ │ │ ├── awaited-fn-arg.ts
│ │ │ │ ├── awaited-return.ts
│ │ │ │ ├── direct.ts
│ │ │ │ ├── fn-arg.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── obj-spread.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── return.ts
│ │ │ │ ├── tsconfig.json
│ │ │ │ └── variable.ts
│ │ │ ├── imports-prop-access-call/
│ │ │ │ ├── exists.js
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── imports-self/
│ │ │ │ ├── exports.js
│ │ │ │ ├── index.js
│ │ │ │ └── package.json
│ │ │ ├── imports-typeof/
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── include-entry-exports/
│ │ │ │ ├── cli.js
│ │ │ │ ├── index.ts
│ │ │ │ ├── main.ts
│ │ │ │ ├── mod.ts
│ │ │ │ └── package.json
│ │ │ ├── include-entry-exports-scripts/
│ │ │ │ ├── knip.json
│ │ │ │ ├── next.config.js
│ │ │ │ ├── package.json
│ │ │ │ └── src/
│ │ │ │ ├── pages/
│ │ │ │ │ └── index.js
│ │ │ │ ├── script1.ts
│ │ │ │ ├── script2.ts
│ │ │ │ └── script3.ts
│ │ │ ├── include-entry-reexports/
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ ├── app/
│ │ │ │ │ ├── index.mjs
│ │ │ │ │ └── package.json
│ │ │ │ └── shared/
│ │ │ │ ├── index.mjs
│ │ │ │ ├── module-a.mjs
│ │ │ │ ├── module-b.mjs
│ │ │ │ └── package.json
│ │ │ ├── include-libs/
│ │ │ │ ├── components.ts
│ │ │ │ ├── index.tsx
│ │ │ │ ├── loadable.ts
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── js-only/
│ │ │ │ ├── dangling.js
│ │ │ │ ├── index.js
│ │ │ │ ├── my-namespace.js
│ │ │ │ └── package.json
│ │ │ ├── jsdoc/
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── jsdoc-exports/
│ │ │ │ ├── index.ts
│ │ │ │ ├── module.test.js
│ │ │ │ ├── module.ts
│ │ │ │ └── package.json
│ │ │ ├── jsx/
│ │ │ │ ├── App.tsx
│ │ │ │ ├── Component.tsx
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── load-cjs/
│ │ │ │ ├── index.js
│ │ │ │ └── package.json
│ │ │ ├── load-esm/
│ │ │ │ ├── index.js
│ │ │ │ └── package.json
│ │ │ ├── load-esm-ts/
│ │ │ │ ├── index.ts
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── load-json5/
│ │ │ │ └── config.json5
│ │ │ ├── module-block/
│ │ │ │ ├── index.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── tsconfig.json
│ │ │ │ └── types.ts
│ │ │ ├── module-register/
│ │ │ │ ├── ignored-loader.js
│ │ │ │ ├── index.ts
│ │ │ │ ├── loader.js
│ │ │ │ └── package.json
│ │ │ ├── module-resolution-baseurl-implicit-relative/
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ ├── dir/
│ │ │ │ │ │ └── main.ts
│ │ │ │ │ ├── hello/
│ │ │ │ │ │ └── world.ts
│ │ │ │ │ └── index.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── module-resolution-non-std/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ ├── globals.css
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── styles/
│ │ │ │ │ │ ├── aliased.css
│ │ │ │ │ │ └── base.css
│ │ │ │ │ └── unused.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── module-resolution-non-std-absolute/
│ │ │ │ ├── package.json
│ │ │ │ ├── tsconfig.json
│ │ │ │ ├── x-other/
│ │ │ │ │ ├── absolute.css
│ │ │ │ │ └── package.json
│ │ │ │ └── x-self/
│ │ │ │ ├── absolute.css
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── module-resolution-non-std-implicit/
│ │ │ │ ├── package.json
│ │ │ │ └── src/
│ │ │ │ ├── dir/
│ │ │ │ │ └── main.ts
│ │ │ │ ├── global.css
│ │ │ │ ├── index.ts
│ │ │ │ └── styles/
│ │ │ │ └── base.css
│ │ │ ├── module-resolution-tsconfig-paths/
│ │ │ │ ├── aliased-dir/
│ │ │ │ │ └── a.ts
│ │ │ │ ├── components/
│ │ │ │ │ ├── IndexComponent/
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ └── MyComponent.tsx
│ │ │ │ ├── index.ts
│ │ │ │ ├── internal-package/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── tsconfig.json
│ │ │ │ └── unprefixed/
│ │ │ │ └── module.ts
│ │ │ ├── negated-production-paths/
│ │ │ │ ├── index.test.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.json
│ │ │ │ └── package.json
│ │ │ ├── npm-scripts/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── entry.ts
│ │ │ │ ├── ignore.js
│ │ │ │ ├── package.json
│ │ │ │ └── script.js
│ │ │ ├── ns-spread-reexport/
│ │ │ │ ├── aliased-import.ts
│ │ │ │ ├── animals.ts
│ │ │ │ ├── colors.ts
│ │ │ │ ├── consumer.ts
│ │ │ │ ├── destructured.ts
│ │ │ │ ├── fruits.ts
│ │ │ │ ├── hello.resolver.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── member-access.ts
│ │ │ │ ├── mixed-usage.ts
│ │ │ │ ├── ns-alias-reexport.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── resolvers.barrel.ts
│ │ │ │ ├── resolvers.ts
│ │ │ │ └── utils.ts
│ │ │ ├── package-entry-points/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── feature/
│ │ │ │ │ ├── internal/
│ │ │ │ │ │ ├── no-entry.js
│ │ │ │ │ │ └── system/
│ │ │ │ │ │ ├── unused.ts
│ │ │ │ │ │ └── used.ts
│ │ │ │ │ └── my-feature.js
│ │ │ │ ├── lib/
│ │ │ │ │ ├── deep/
│ │ │ │ │ │ ├── er/
│ │ │ │ │ │ │ └── file.js
│ │ │ │ │ │ └── main.js
│ │ │ │ │ └── index.js
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ ├── app.ts
│ │ │ │ │ ├── public/
│ │ │ │ │ │ └── lib/
│ │ │ │ │ │ └── rary/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── lost.js
│ │ │ │ │ └── runtime/
│ │ │ │ │ ├── deep/
│ │ │ │ │ │ └── deno.ts
│ │ │ │ │ └── node.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── path-aliases/
│ │ │ │ ├── abc/
│ │ │ │ │ └── main.js
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── lib/
│ │ │ │ │ ├── data.ext
│ │ │ │ │ ├── fn.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── my-module.ts
│ │ │ │ └── package.json
│ │ │ ├── path-aliases2/
│ │ │ │ ├── index.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── ts/
│ │ │ │ │ ├── components/
│ │ │ │ │ │ └── file.ts
│ │ │ │ │ └── shared/
│ │ │ │ │ └── file.ts
│ │ │ │ ├── tsconfig.json
│ │ │ │ ├── vite/
│ │ │ │ │ ├── component/
│ │ │ │ │ │ └── file.ts
│ │ │ │ │ ├── dir/
│ │ │ │ │ │ └── file.ts
│ │ │ │ │ └── file.ts
│ │ │ │ ├── vite.config.ts
│ │ │ │ ├── vitest/
│ │ │ │ │ ├── component/
│ │ │ │ │ │ └── file.ts
│ │ │ │ │ ├── dir/
│ │ │ │ │ │ └── file.ts
│ │ │ │ │ └── file.ts
│ │ │ │ ├── webpack/
│ │ │ │ │ ├── components/
│ │ │ │ │ │ └── file.ts
│ │ │ │ │ ├── file.ts
│ │ │ │ │ ├── match.ts
│ │ │ │ │ ├── shared/
│ │ │ │ │ │ └── file.ts
│ │ │ │ │ └── wild/
│ │ │ │ │ └── file.ts
│ │ │ │ └── webpack.config.ts
│ │ │ ├── pathless/
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ ├── dir/
│ │ │ │ │ │ └── module-a.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── same.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── peer-dependencies/
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── peer-dependencies-circular/
│ │ │ │ └── package.json
│ │ │ ├── peer-dependencies-optional/
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── peer-dependencies-optional-host/
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── peer-dependencies-optional-ignored/
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.json
│ │ │ │ └── package.json
│ │ │ ├── peer-dependencies-optional-strict/
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── peer-dependencies-optional-strict-unreferenced/
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── plugin-config/
│ │ │ │ ├── index.ts
│ │ │ │ ├── index.vitest.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── vitest.config.ts
│ │ │ ├── plugin-disable/
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ ├── vite.config.ts
│ │ │ │ └── ws/
│ │ │ │ ├── package.json
│ │ │ │ └── playwright.config.ts
│ │ │ ├── plugin-negated-entry-globs/
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── src/
│ │ │ │ └── pages/
│ │ │ │ ├── _stories/
│ │ │ │ │ └── index.stories.ts
│ │ │ │ ├── _util.ts
│ │ │ │ ├── about/
│ │ │ │ │ └── index.astro
│ │ │ │ ├── blog/
│ │ │ │ │ ├── _util/
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── _util.ts
│ │ │ │ │ └── index.astro
│ │ │ │ └── index.astro
│ │ │ ├── plugin-overlap/
│ │ │ │ ├── package.json
│ │ │ │ ├── tsconfig.json
│ │ │ │ └── typedoc.json
│ │ │ ├── plugins/
│ │ │ │ ├── _template/
│ │ │ │ │ └── package.json
│ │ │ │ ├── angular/
│ │ │ │ │ ├── angular.json
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── app.component.spec.ts
│ │ │ │ │ │ ├── main.ts
│ │ │ │ │ │ ├── polyfill.js
│ │ │ │ │ │ └── script.js
│ │ │ │ │ ├── tsconfig.app.json
│ │ │ │ │ ├── tsconfig.json
│ │ │ │ │ └── tsconfig.spec.json
│ │ │ │ ├── angular2/
│ │ │ │ │ ├── angular.json
│ │ │ │ │ ├── another-karma.conf.js
│ │ │ │ │ ├── karma.conf.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── browser.ts
│ │ │ │ │ │ ├── environments/
│ │ │ │ │ │ │ ├── environment.development.ts
│ │ │ │ │ │ │ └── environment.ts
│ │ │ │ │ │ ├── main.server.ts
│ │ │ │ │ │ └── server.ts
│ │ │ │ │ └── tsconfig.app.json
│ │ │ │ ├── angular3/
│ │ │ │ │ ├── angular.json
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ ├── main-for-non-prod.ts
│ │ │ │ │ ├── main-for-testing.ts
│ │ │ │ │ ├── main.server-for-non-prod.ts
│ │ │ │ │ ├── main.server.ts
│ │ │ │ │ ├── main.ts
│ │ │ │ │ ├── polyfill-for-non-prod.js
│ │ │ │ │ ├── polyfill.js
│ │ │ │ │ ├── script-for-non-prod.js
│ │ │ │ │ ├── script.js
│ │ │ │ │ └── server.ts
│ │ │ │ ├── astro/
│ │ │ │ │ ├── .astro/
│ │ │ │ │ │ └── types.d.ts
│ │ │ │ │ ├── astro.config.mjs
│ │ │ │ │ ├── knip.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── components/
│ │ │ │ │ │ │ ├── BaseHead.astro
│ │ │ │ │ │ │ ├── Footer.astro
│ │ │ │ │ │ │ ├── FormattedDate.astro
│ │ │ │ │ │ │ ├── Header.astro
│ │ │ │ │ │ │ └── HeaderLink.astro
│ │ │ │ │ │ ├── consts.ts
│ │ │ │ │ │ ├── content/
│ │ │ │ │ │ │ ├── blog/
│ │ │ │ │ │ │ │ ├── first-post.md
│ │ │ │ │ │ │ │ └── using-mdx.mdx
│ │ │ │ │ │ │ └── config.ts
│ │ │ │ │ │ ├── env.d.ts
│ │ │ │ │ │ ├── layouts/
│ │ │ │ │ │ │ ├── BlogPost.astro
│ │ │ │ │ │ │ └── Layout.astro
│ │ │ │ │ │ ├── pages/
│ │ │ │ │ │ │ ├── _top-level-dir-unused/
│ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ ├── _top-level-file-unused.ts
│ │ │ │ │ │ │ ├── about/
│ │ │ │ │ │ │ │ └── mdx-with-layout.mdx
│ │ │ │ │ │ │ ├── about.astro
│ │ │ │ │ │ │ ├── blog/
│ │ │ │ │ │ │ │ ├── [...slug].astro
│ │ │ │ │ │ │ │ ├── _nested-unused-file.ts
│ │ │ │ │ │ │ │ ├── _util/
│ │ │ │ │ │ │ │ │ ├── nested/
│ │ │ │ │ │ │ │ │ │ └── deeply-nested-unused-file.ts
│ │ │ │ │ │ │ │ │ └── unused-component.astro
│ │ │ │ │ │ │ │ └── index.astro
│ │ │ │ │ │ │ ├── index.astro
│ │ │ │ │ │ │ └── rss.xml.js
│ │ │ │ │ │ └── styles/
│ │ │ │ │ │ └── global.css
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── astro-db/
│ │ │ │ │ ├── astro.config.mjs
│ │ │ │ │ ├── db/
│ │ │ │ │ │ ├── config.ts
│ │ │ │ │ │ └── seed.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ └── pages/
│ │ │ │ │ │ └── index.astro
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── astro-og-canvas/
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── astro-sharp-image-service/
│ │ │ │ │ ├── astro.config.mjs
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ └── pages/
│ │ │ │ │ └── index.astro
│ │ │ │ ├── ava/
│ │ │ │ │ ├── ava.config.mjs
│ │ │ │ │ └── package.json
│ │ │ │ ├── ava2/
│ │ │ │ │ ├── __tests__/
│ │ │ │ │ │ ├── __helpers__/
│ │ │ │ │ │ │ └── index.cjs
│ │ │ │ │ │ └── mod.cjs
│ │ │ │ │ ├── ava.config.mjs
│ │ │ │ │ ├── index.cjs
│ │ │ │ │ ├── mod.cjs
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── test.js
│ │ │ │ ├── ava3/
│ │ │ │ │ ├── ava.config.mjs
│ │ │ │ │ ├── index.cjs
│ │ │ │ │ ├── mod.cjs
│ │ │ │ │ ├── mod.test.js
│ │ │ │ │ ├── mod.test.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── mod.test.js
│ │ │ │ │ │ └── mod.test.ts
│ │ │ │ │ ├── test.js
│ │ │ │ │ └── test.ts
│ │ │ │ ├── babel/
│ │ │ │ │ ├── .babelrc
│ │ │ │ │ ├── .babelrc.js
│ │ │ │ │ ├── babel.config.cts
│ │ │ │ │ ├── babel.config.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── biome/
│ │ │ │ │ ├── biome.json
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── shared/
│ │ │ │ │ └── base.json
│ │ │ │ ├── biome-workspace/
│ │ │ │ │ ├── biome.jsonc
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── packages/
│ │ │ │ │ └── stub/
│ │ │ │ │ ├── biome.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── bumpp/
│ │ │ │ │ ├── bump.config.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── bun/
│ │ │ │ │ ├── index.spec.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── bun2/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ ├── index.check.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── bun3/
│ │ │ │ │ ├── bunfig.toml
│ │ │ │ │ ├── index.spec.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── preload.ts
│ │ │ │ │ ├── setup-env.ts
│ │ │ │ │ └── setup.ts
│ │ │ │ ├── bun4/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── test/
│ │ │ │ │ └── index.test.ts
│ │ │ │ ├── capacitor/
│ │ │ │ │ ├── android/
│ │ │ │ │ │ └── capacitor.settings.gradle
│ │ │ │ │ ├── capacitor.config.json
│ │ │ │ │ ├── capacitor.config.ts
│ │ │ │ │ ├── ios/
│ │ │ │ │ │ └── App/
│ │ │ │ │ │ └── Podfile
│ │ │ │ │ └── package.json
│ │ │ │ ├── changelogen/
│ │ │ │ │ ├── changelog.config.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── changelogithub/
│ │ │ │ │ ├── changelogithub.config.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── changesets/
│ │ │ │ │ ├── .changeset/
│ │ │ │ │ │ └── config.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── commitizen/
│ │ │ │ │ ├── .czrc
│ │ │ │ │ └── package.json
│ │ │ │ ├── commitlint/
│ │ │ │ │ ├── .commitlintrc.json
│ │ │ │ │ ├── commitlint.config.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── convex/
│ │ │ │ │ ├── convex/
│ │ │ │ │ │ ├── _generated/
│ │ │ │ │ │ │ └── dataModel.d.ts
│ │ │ │ │ │ ├── auth.config.ts
│ │ │ │ │ │ └── schema.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── create-typescript-app/
│ │ │ │ │ ├── create-typescript-app.config.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── cspell/
│ │ │ │ │ ├── .cspell.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── cucumber/
│ │ │ │ │ ├── cucumber.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── steps/
│ │ │ │ │ └── step.ts
│ │ │ │ ├── cypress/
│ │ │ │ │ ├── cypress/
│ │ │ │ │ │ └── support/
│ │ │ │ │ │ ├── commands.ts
│ │ │ │ │ │ └── e2e.ts
│ │ │ │ │ ├── cypress.config.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── cypress-multi-reporter/
│ │ │ │ │ ├── cypress/
│ │ │ │ │ │ └── support/
│ │ │ │ │ │ ├── commands.ts
│ │ │ │ │ │ └── e2e.ts
│ │ │ │ │ ├── cypress.config.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── reporter-config.json
│ │ │ │ ├── cypress2/
│ │ │ │ │ ├── cypress/
│ │ │ │ │ │ └── support/
│ │ │ │ │ │ ├── commands.ts
│ │ │ │ │ │ ├── component.ts
│ │ │ │ │ │ └── e2e.ts
│ │ │ │ │ ├── cypress.config.js
│ │ │ │ │ ├── e2e/
│ │ │ │ │ │ └── mod.e2e.js
│ │ │ │ │ ├── mod.component.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── danger/
│ │ │ │ │ ├── dangerfile.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── dependency-cruiser/
│ │ │ │ │ ├── .dependency-cruiser.js
│ │ │ │ │ ├── baseline.config.js
│ │ │ │ │ ├── custom-depcruise-config.js
│ │ │ │ │ ├── dependency-cruise.config.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── docusaurus/
│ │ │ │ │ ├── blog/
│ │ │ │ │ │ └── 2021-08-01-mdx-blog-post.mdx
│ │ │ │ │ ├── docs/
│ │ │ │ │ │ └── tutorial-basics/
│ │ │ │ │ │ └── markdown-features.mdx
│ │ │ │ │ ├── docusaurus.config.js
│ │ │ │ │ ├── docusaurus.config.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── sidebars.js
│ │ │ │ │ ├── sidebars.ts
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── components/
│ │ │ │ │ │ │ └── HomepageFeatures/
│ │ │ │ │ │ │ └── index.js
│ │ │ │ │ │ └── pages/
│ │ │ │ │ │ └── index.js
│ │ │ │ │ └── static/
│ │ │ │ │ ├── css/
│ │ │ │ │ │ ├── custom.css
│ │ │ │ │ │ └── theme.css
│ │ │ │ │ └── js/
│ │ │ │ │ ├── analytics.js
│ │ │ │ │ └── custom.js
│ │ │ │ ├── drizzle/
│ │ │ │ │ ├── drizzle.config.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ ├── schema/
│ │ │ │ │ │ └── users.ts
│ │ │ │ │ └── schema.ts
│ │ │ │ ├── eleventy/
│ │ │ │ │ ├── _data/
│ │ │ │ │ │ └── global.cjs
│ │ │ │ │ ├── _includes/
│ │ │ │ │ │ └── footer.njk
│ │ │ │ │ ├── eleventy.config.cjs
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── pages/
│ │ │ │ │ └── index.njk
│ │ │ │ ├── eleventy2/
│ │ │ │ │ ├── _data/
│ │ │ │ │ │ └── global.cjs
│ │ │ │ │ ├── _includes/
│ │ │ │ │ │ └── footer.njk
│ │ │ │ │ ├── eleventy.config.cjs
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── pages/
│ │ │ │ │ └── index.njk
│ │ │ │ ├── eleventy3/
│ │ │ │ │ ├── .eleventy.js
│ │ │ │ │ ├── _includes/
│ │ │ │ │ │ └── footer.njk
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── pages/
│ │ │ │ │ │ └── index.njk
│ │ │ │ │ └── src/
│ │ │ │ │ ├── _includes/
│ │ │ │ │ │ └── abc.js
│ │ │ │ │ ├── _plugins/
│ │ │ │ │ │ └── syntax-highlighter.js
│ │ │ │ │ ├── assets/
│ │ │ │ │ │ └── index.js
│ │ │ │ │ └── static/
│ │ │ │ │ └── index.js
│ │ │ │ ├── eleventy4/
│ │ │ │ │ ├── .eleventy.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ ├── _siteData/
│ │ │ │ │ │ └── global.cjs
│ │ │ │ │ └── assets/
│ │ │ │ │ └── index.js
│ │ │ │ ├── eslint/
│ │ │ │ │ ├── .eslintrc.cjs
│ │ │ │ │ ├── .eslintrc.js
│ │ │ │ │ ├── .eslintrc.json
│ │ │ │ │ ├── .eslintrc.yml
│ │ │ │ │ ├── base.eslint.json
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── eslint2/
│ │ │ │ │ ├── eslint.config.ts
│ │ │ │ │ ├── knip.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── eslint3/
│ │ │ │ │ ├── eslint.config.js
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── eslint4/
│ │ │ │ │ ├── eslint.config.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── eslint5/
│ │ │ │ │ ├── eslint.config.ts
│ │ │ │ │ ├── knip.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── expo/
│ │ │ │ │ ├── app.config.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ └── app/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── expo2/
│ │ │ │ │ ├── app.config.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ └── routes/
│ │ │ │ │ └── index.js
│ │ │ │ ├── expo3/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── _layout.ts
│ │ │ │ │ ├── app.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── expressive-code/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── page.tsx
│ │ │ │ │ ├── next.config.mjs
│ │ │ │ │ └── package.json
│ │ │ │ ├── expressive-code2/
│ │ │ │ │ ├── astro.config.mjs
│ │ │ │ │ ├── ec.config.mjs
│ │ │ │ │ └── package.json
│ │ │ │ ├── expressive-code3/
│ │ │ │ │ ├── astro.config.mjs
│ │ │ │ │ ├── ec.config.mjs
│ │ │ │ │ └── package.json
│ │ │ │ ├── gatsby/
│ │ │ │ │ ├── gatsby-config.js
│ │ │ │ │ ├── gatsby-node.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── github-action/
│ │ │ │ │ ├── action.yml
│ │ │ │ │ ├── dist/
│ │ │ │ │ │ └── index.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ └── main.ts
│ │ │ │ ├── github-actions/
│ │ │ │ │ ├── .github/
│ │ │ │ │ │ ├── actions/
│ │ │ │ │ │ │ ├── composite/
│ │ │ │ │ │ │ │ └── action.yml
│ │ │ │ │ │ │ ├── node-a/
│ │ │ │ │ │ │ │ ├── action.yml
│ │ │ │ │ │ │ │ ├── dist/
│ │ │ │ │ │ │ │ │ └── pre.js
│ │ │ │ │ │ │ │ ├── main.js
│ │ │ │ │ │ │ │ └── post.js
│ │ │ │ │ │ │ └── node-b/
│ │ │ │ │ │ │ ├── action.yaml
│ │ │ │ │ │ │ └── main.js
│ │ │ │ │ │ └── workflows/
│ │ │ │ │ │ ├── test.yml
│ │ │ │ │ │ └── working-directory.yml
│ │ │ │ │ ├── comment.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── scripts/
│ │ │ │ │ ├── check-dependencies.js
│ │ │ │ │ ├── from-working-dir-with-path.js
│ │ │ │ │ ├── from-working-dir.js
│ │ │ │ │ ├── get-release-notes.js
│ │ │ │ │ └── no-working-dir.js
│ │ │ │ ├── github-actions-workspaces/
│ │ │ │ │ ├── .github/
│ │ │ │ │ │ └── workflows/
│ │ │ │ │ │ └── dir.yml
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── packages/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── lib/
│ │ │ │ │ └── package.json
│ │ │ │ ├── graphql-codegen/
│ │ │ │ │ ├── codegen.ts
│ │ │ │ │ ├── codegen.yaml
│ │ │ │ │ └── package.json
│ │ │ │ ├── graphql-codegen-graphql-config/
│ │ │ │ │ ├── .graphqlrc
│ │ │ │ │ ├── graphql.config.toml
│ │ │ │ │ ├── graphql.config.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── graphql-codegen-graphql-config2/
│ │ │ │ │ └── package.json
│ │ │ │ ├── hardhat/
│ │ │ │ │ ├── hardhat.config.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── husky-lint-staged/
│ │ │ │ │ └── package.json
│ │ │ │ ├── husky-v8/
│ │ │ │ │ ├── .husky/
│ │ │ │ │ │ ├── post-checkout
│ │ │ │ │ │ ├── pre-commit
│ │ │ │ │ │ ├── pre-push
│ │ │ │ │ │ └── pre-rebase
│ │ │ │ │ └── package.json
│ │ │ │ ├── husky-v9/
│ │ │ │ │ ├── .husky/
│ │ │ │ │ │ ├── post-checkout
│ │ │ │ │ │ ├── pre-commit
│ │ │ │ │ │ ├── pre-push
│ │ │ │ │ │ └── pre-rebase
│ │ │ │ │ └── package.json
│ │ │ │ ├── husky-v9-1/
│ │ │ │ │ ├── .husky/
│ │ │ │ │ │ └── pre-commit
│ │ │ │ │ └── package.json
│ │ │ │ ├── i18next-parser/
│ │ │ │ │ ├── custom.config.js
│ │ │ │ │ ├── i18next-parser.config.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── jest/
│ │ │ │ │ ├── customSuiteProperties.cjs
│ │ │ │ │ ├── jest.config.js
│ │ │ │ │ ├── jest.config.shared.js
│ │ │ │ │ ├── jest.setup.js
│ │ │ │ │ ├── jest.transform.js
│ │ │ │ │ ├── local-preset/
│ │ │ │ │ │ └── jest-preset.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── snapshotResolver.js
│ │ │ │ ├── jest2/
│ │ │ │ │ ├── jest.config.js
│ │ │ │ │ ├── jest.environment.js
│ │ │ │ │ ├── knip.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── project1/
│ │ │ │ │ ├── customProperties.cjs
│ │ │ │ │ ├── jest.config.js
│ │ │ │ │ └── setupFiles/
│ │ │ │ │ └── setup.js
│ │ │ │ ├── jest3/
│ │ │ │ │ ├── __mocks__/
│ │ │ │ │ │ └── used.js
│ │ │ │ │ ├── index.spec.ts
│ │ │ │ │ ├── jest.config.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── karma/
│ │ │ │ │ ├── karma.conf.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── karma2/
│ │ │ │ │ ├── karma.conf.js
│ │ │ │ │ ├── out-of-base-path/
│ │ │ │ │ │ └── example.spec.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ ├── another-example.spec.js
│ │ │ │ │ ├── example.spec.js
│ │ │ │ │ └── excluded.spec.js
│ │ │ │ ├── karma3/
│ │ │ │ │ ├── karma-plugin.js
│ │ │ │ │ ├── karma.conf.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── knex/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── knexfile.js
│ │ │ │ │ ├── migrations/
│ │ │ │ │ │ └── 20231201_create_users_table.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── seeds/
│ │ │ │ │ └── 01_users.js
│ │ │ │ ├── ladle/
│ │ │ │ │ ├── .ladle/
│ │ │ │ │ │ ├── components.tsx
│ │ │ │ │ │ ├── config.mjs
│ │ │ │ │ │ └── vite.config.ts
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── basic.stories.tsx
│ │ │ │ │ │ └── control.stories.tsx
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── lefthook/
│ │ │ │ │ ├── example.mjs
│ │ │ │ │ ├── lefthook.yml
│ │ │ │ │ └── package.json
│ │ │ │ ├── lefthook-ci/
│ │ │ │ │ ├── lefthook.yml
│ │ │ │ │ └── package.json
│ │ │ │ ├── lefthook-v1/
│ │ │ │ │ ├── _git/
│ │ │ │ │ │ ├── HEAD
│ │ │ │ │ │ ├── config
│ │ │ │ │ │ ├── hooks/
│ │ │ │ │ │ │ └── prepare-commit-msg
│ │ │ │ │ │ ├── objects/
│ │ │ │ │ │ │ └── .gitkeep
│ │ │ │ │ │ └── refs/
│ │ │ │ │ │ └── heads/
│ │ │ │ │ │ └── .gitkeep
│ │ │ │ │ ├── lefthook.yml
│ │ │ │ │ └── package.json
│ │ │ │ ├── lint-staged/
│ │ │ │ │ ├── .lintstagedrc.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── lint-staged-comment/
│ │ │ │ │ ├── .lintstagedrc.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── linthtml/
│ │ │ │ │ ├── .linthtmlrc.js
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── package.json
│ │ │ │ ├── lockfile-lint/
│ │ │ │ │ ├── .lockfile-lintrc.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── lost-pixel/
│ │ │ │ │ ├── lostpixel.config.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── markdownlint/
│ │ │ │ │ ├── .markdownlint.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── mdx/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── mdxlint/
│ │ │ │ │ ├── .mdxlintrc.mjs
│ │ │ │ │ └── package.json
│ │ │ │ ├── metro/
│ │ │ │ │ ├── custom-metro-transformer.js
│ │ │ │ │ ├── metro.config.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ └── app/
│ │ │ │ │ └── index.js
│ │ │ │ ├── metro-defaults/
│ │ │ │ │ ├── metro.config.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ └── app/
│ │ │ │ │ └── index.js
│ │ │ │ ├── metro-react-native/
│ │ │ │ │ ├── metro.config.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ └── app/
│ │ │ │ │ └── index.js
│ │ │ │ ├── mocha/
│ │ │ │ │ ├── .mocharc.json
│ │ │ │ │ ├── .mocharc.yml
│ │ │ │ │ ├── example.test.ts
│ │ │ │ │ ├── hooks.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── moonrepo/
│ │ │ │ │ ├── .moon/
│ │ │ │ │ │ ├── tasks/
│ │ │ │ │ │ │ └── typescript.yml
│ │ │ │ │ │ └── tasks.yml
│ │ │ │ │ ├── apps/
│ │ │ │ │ │ └── a/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── libs/
│ │ │ │ │ │ └── b/
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── server/
│ │ │ │ │ │ └── server.ts
│ │ │ │ │ ├── moon.yml
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── pnpm-workspace.yaml
│ │ │ │ │ ├── tools/
│ │ │ │ │ │ ├── build.ts
│ │ │ │ │ │ └── linters/
│ │ │ │ │ │ └── lint-readme.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── msw/
│ │ │ │ │ ├── bob/
│ │ │ │ │ │ └── mockServiceWorker.js
│ │ │ │ │ ├── mocks/
│ │ │ │ │ │ ├── browser.ts
│ │ │ │ │ │ ├── handlers.ts
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── server.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── nano-staged/
│ │ │ │ │ ├── .nano-staged.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── nest/
│ │ │ │ │ ├── knip.json
│ │ │ │ │ ├── nest-cli.json
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── app.controller.spec.ts
│ │ │ │ │ │ ├── app.controller.ts
│ │ │ │ │ │ ├── app.module.ts
│ │ │ │ │ │ ├── app.service.ts
│ │ │ │ │ │ └── main.ts
│ │ │ │ │ └── test/
│ │ │ │ │ ├── app.e2e-spec.ts
│ │ │ │ │ └── jest-e2e.json
│ │ │ │ ├── netlify/
│ │ │ │ │ ├── netlify.toml
│ │ │ │ │ └── package.json
│ │ │ │ ├── next/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── api/
│ │ │ │ │ │ │ └── auth/
│ │ │ │ │ │ │ ├── route.ts
│ │ │ │ │ │ │ └── util.ts
│ │ │ │ │ │ ├── home/
│ │ │ │ │ │ │ ├── page.tsx
│ │ │ │ │ │ │ └── sitemap.ts
│ │ │ │ │ │ ├── layout.tsx
│ │ │ │ │ │ ├── sitemap.ts
│ │ │ │ │ │ └── unused.ts
│ │ │ │ │ ├── instrumentation.ts
│ │ │ │ │ ├── middleware.ts
│ │ │ │ │ ├── next.config.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── pages/
│ │ │ │ │ ├── [[...route]].tsx
│ │ │ │ │ ├── home.tsx
│ │ │ │ │ └── unused.jsx
│ │ │ │ ├── next-intl/
│ │ │ │ │ ├── i18n/
│ │ │ │ │ │ └── request.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── next-mdx/
│ │ │ │ │ ├── mdx-components.tsx
│ │ │ │ │ ├── next.config.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── next-middleware/
│ │ │ │ │ ├── next.config.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ └── page.tsx
│ │ │ │ │ │ └── middleware.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── next-page-extensions/
│ │ │ │ │ ├── next.config.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ ├── instrumentation.page.ts
│ │ │ │ │ ├── middleware.page.ts
│ │ │ │ │ └── unused.ts
│ │ │ │ ├── nitro/
│ │ │ │ │ ├── .nitro/
│ │ │ │ │ │ └── types/
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ ├── nitro.config.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── server/
│ │ │ │ │ │ ├── routes/
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ └── utils/
│ │ │ │ │ │ └── fn.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── node/
│ │ │ │ │ └── package.json
│ │ │ │ ├── node-modules-inspector/
│ │ │ │ │ ├── .nmrc.js
│ │ │ │ │ ├── node-modules-inspector.config.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── node-test-runner/
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── index.test.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── nodemon/
│ │ │ │ │ └── package.json
│ │ │ │ ├── npm-package-json-lint/
│ │ │ │ │ ├── .npmpackagejsonlintrc.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── nuxt/
│ │ │ │ │ ├── .gitignore
│ │ │ │ │ ├── app.tsx
│ │ │ │ │ ├── app.vue
│ │ │ │ │ ├── nuxt.config.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── server/
│ │ │ │ │ │ ├── api/
│ │ │ │ │ │ │ └── health.get.ts
│ │ │ │ │ │ └── utils/
│ │ │ │ │ │ └── db.ts
│ │ │ │ │ ├── shared/
│ │ │ │ │ │ ├── types/
│ │ │ │ │ │ │ └── api.ts
│ │ │ │ │ │ └── utils/
│ │ │ │ │ │ └── capitalize.ts
│ │ │ │ │ ├── tsconfig.json
│ │ │ │ │ └── utils/
│ │ │ │ │ └── fn.ts
│ │ │ │ ├── nuxt-auto-import/
│ │ │ │ │ ├── .gitignore
│ │ │ │ │ ├── app.vue
│ │ │ │ │ ├── components/
│ │ │ │ │ │ ├── AppHeader.vue
│ │ │ │ │ │ └── StatusBadge.vue
│ │ │ │ │ ├── composables/
│ │ │ │ │ │ ├── useCounter.ts
│ │ │ │ │ │ └── useTheme.ts
│ │ │ │ │ ├── nuxt.config.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── tsconfig.json
│ │ │ │ │ └── utils/
│ │ │ │ │ └── format.ts
│ │ │ │ ├── nuxt-auto-import-disabled/
│ │ │ │ │ ├── .gitignore
│ │ │ │ │ ├── app.vue
│ │ │ │ │ ├── components/
│ │ │ │ │ │ ├── AppHeader.vue
│ │ │ │ │ │ └── StatusBadge.vue
│ │ │ │ │ ├── composables/
│ │ │ │ │ │ ├── useCounter.ts
│ │ │ │ │ │ └── useTheme.ts
│ │ │ │ │ ├── nuxt.config.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── tsconfig.json
│ │ │ │ │ └── utils/
│ │ │ │ │ └── format.ts
│ │ │ │ ├── nuxt-config/
│ │ │ │ │ ├── .gitignore
│ │ │ │ │ ├── app.vue
│ │ │ │ │ ├── components/
│ │ │ │ │ │ └── Button.vue
│ │ │ │ │ ├── custom-utils/
│ │ │ │ │ │ └── logger.ts
│ │ │ │ │ ├── local-module/
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── my-plugins/
│ │ │ │ │ │ └── auth.ts
│ │ │ │ │ ├── nuxt.config.ts
│ │ │ │ │ ├── other-components/
│ │ │ │ │ │ └── Card.vue
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── some-layer/
│ │ │ │ │ │ └── nuxt.config.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── nx/
│ │ │ │ │ ├── apps/
│ │ │ │ │ │ ├── a/
│ │ │ │ │ │ │ ├── project.json
│ │ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ │ └── b/
│ │ │ │ │ │ ├── project.json
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ ├── knip.json
│ │ │ │ │ ├── libs/
│ │ │ │ │ │ └── b/
│ │ │ │ │ │ ├── .eslintrc.json
│ │ │ │ │ │ ├── jest.config.ts
│ │ │ │ │ │ ├── project.json
│ │ │ │ │ │ ├── tsconfig.build.json
│ │ │ │ │ │ ├── tsconfig.lib.json
│ │ │ │ │ │ ├── vitest.config.ts
│ │ │ │ │ │ └── webpack.config.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── tsconfig.base.json
│ │ │ │ ├── nx-crystal/
│ │ │ │ │ ├── nx.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── nyc/
│ │ │ │ │ ├── .nycrc.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── oclif/
│ │ │ │ │ └── package.json
│ │ │ │ ├── openapi-ts/
│ │ │ │ │ ├── openapi-ts.config.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── oxfmt/
│ │ │ │ │ ├── .oxfmtrc-1.jsonc
│ │ │ │ │ ├── .oxfmtrc.json
│ │ │ │ │ ├── .oxfmtrc.jsonc
│ │ │ │ │ └── package.json
│ │ │ │ ├── oxlint/
│ │ │ │ │ ├── .oxlintrc-0.json
│ │ │ │ │ ├── .oxlintrc-3.json
│ │ │ │ │ ├── .oxlintrc-4.json
│ │ │ │ │ ├── oxlint-5.config.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── parcel/
│ │ │ │ │ ├── .parcelrc
│ │ │ │ │ └── package.json
│ │ │ │ ├── payload/
│ │ │ │ │ ├── migrations/
│ │ │ │ │ │ └── 20260218.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── payload-types.ts
│ │ │ │ │ ├── payload.config.ts
│ │ │ │ │ └── src/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── (payload)/
│ │ │ │ │ │ └── importMap.js
│ │ │ │ │ └── components/
│ │ │ │ │ └── ImportMapComponent.tsx
│ │ │ │ ├── playwright/
│ │ │ │ │ ├── custom-reporter.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── playwright.config.ts
│ │ │ │ │ └── test/
│ │ │ │ │ └── some.spec.ts
│ │ │ │ ├── playwright-ct/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── playwright/
│ │ │ │ │ │ ├── common.css
│ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── playwright-ct.config.ts
│ │ │ │ │ └── test/
│ │ │ │ │ └── some.spec.ts
│ │ │ │ ├── playwright-ct2/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── playwright-ct.config.ts
│ │ │ │ │ ├── src/
│ │ │ │ │ │ └── unused.spec.ts
│ │ │ │ │ └── tests/
│ │ │ │ │ └── component/
│ │ │ │ │ └── some.spec.ts
│ │ │ │ ├── playwright2/
│ │ │ │ │ ├── integration/
│ │ │ │ │ │ └── some-test.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── playwright.config.ts
│ │ │ │ ├── plop/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── plopfile.js
│ │ │ │ │ └── template.hbs
│ │ │ │ ├── pm2/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── pm2.config.json
│ │ │ │ │ └── src/
│ │ │ │ │ ├── another.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── unused.js
│ │ │ │ ├── pm2-ecosystem/
│ │ │ │ │ ├── ecosystem.config.json
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ ├── another.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── unused.js
│ │ │ │ ├── pnpm/
│ │ │ │ │ ├── .pnpmfile.cjs
│ │ │ │ │ └── package.json
│ │ │ │ ├── pnpm2/
│ │ │ │ │ ├── .pnpmfile.cjs
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── pnpm-workspace.yaml
│ │ │ │ ├── postcss/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── postcss.config.js
│ │ │ │ ├── postcss-cjs/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── postcss.config.cjs
│ │ │ │ ├── postcss-next/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── postcss.config.json
│ │ │ │ ├── postcss-tailwindcss/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── postcss.config.js
│ │ │ │ ├── postcss-tailwindcss2/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── postcss.config.mjs
│ │ │ │ ├── preconstruct/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── other.js
│ │ │ │ ├── prettier/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── prettier.config.js
│ │ │ │ ├── prettier-json5/
│ │ │ │ │ ├── .prettierrc.json5
│ │ │ │ │ └── package.json
│ │ │ │ ├── prettier-reexport/
│ │ │ │ │ ├── knip.json
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── prettier.config.js
│ │ │ │ ├── prisma/
│ │ │ │ │ ├── .config/
│ │ │ │ │ │ └── prisma.ts
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── prisma.custom-config.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── prisma/
│ │ │ │ │ │ ├── schema-dot-config.prisma
│ │ │ │ │ │ ├── schema-package-json.prisma
│ │ │ │ │ │ ├── schema-root-config.prisma
│ │ │ │ │ │ ├── schema-script.prisma
│ │ │ │ │ │ ├── seed-dot-config.ts
│ │ │ │ │ │ ├── seed-package-json.ts
│ │ │ │ │ │ └── seed-root-config.ts
│ │ │ │ │ ├── prisma-multi-schema/
│ │ │ │ │ │ ├── model/
│ │ │ │ │ │ │ ├── post.prisma
│ │ │ │ │ │ │ └── user.prisma
│ │ │ │ │ │ └── schema.prisma
│ │ │ │ │ └── prisma.config.ts
│ │ │ │ ├── prisma2/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── prisma/
│ │ │ │ │ │ └── schema.prisma
│ │ │ │ │ └── schema.prisma
│ │ │ │ ├── qwik/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── components/
│ │ │ │ │ │ │ └── router-head.tsx
│ │ │ │ │ │ ├── entry.dev.tsx
│ │ │ │ │ │ ├── entry.preview.tsx
│ │ │ │ │ │ ├── entry.ssr.tsx
│ │ │ │ │ │ ├── root.tsx
│ │ │ │ │ │ └── routes/
│ │ │ │ │ │ ├── index.tsx
│ │ │ │ │ │ └── layout.tsx
│ │ │ │ │ └── vite.config.ts
│ │ │ │ ├── qwik-custom-dirs/
│ │ │ │ │ ├── docs/
│ │ │ │ │ │ ├── components/
│ │ │ │ │ │ │ └── mdx-note.tsx
│ │ │ │ │ │ ├── entry.dev.tsx
│ │ │ │ │ │ ├── entry.preview.tsx
│ │ │ │ │ │ ├── entry.ssr.tsx
│ │ │ │ │ │ ├── extra-pages/
│ │ │ │ │ │ │ └── index.tsx
│ │ │ │ │ │ ├── pages/
│ │ │ │ │ │ │ ├── guide.mdx
│ │ │ │ │ │ │ └── index.tsx
│ │ │ │ │ │ └── root.tsx
│ │ │ │ │ ├── knip.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── vite.config.ts
│ │ │ │ ├── raycast/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ ├── search-bookmarks.tsx
│ │ │ │ │ ├── shared/
│ │ │ │ │ │ └── load-bookmarks.ts
│ │ │ │ │ ├── tools/
│ │ │ │ │ │ └── organize-tabs.ts
│ │ │ │ │ └── unused.ts
│ │ │ │ ├── react-cosmos/
│ │ │ │ │ ├── __fixtures__/
│ │ │ │ │ │ └── any.mdx
│ │ │ │ │ ├── cosmos.config.json
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ ├── cosmos.decorator.tsx
│ │ │ │ │ └── my-cosmos-plugin.ts
│ │ │ │ ├── react-native/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── react-native.config.js
│ │ │ │ ├── react-router/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── root.tsx
│ │ │ │ │ │ ├── routes/
│ │ │ │ │ │ │ ├── $/
│ │ │ │ │ │ │ │ └── route.tsx
│ │ │ │ │ │ │ ├── $.tsx
│ │ │ │ │ │ │ ├── another-route.tsx
│ │ │ │ │ │ │ ├── home.tsx
│ │ │ │ │ │ │ ├── layout.tsx
│ │ │ │ │ │ │ ├── main+/
│ │ │ │ │ │ │ │ └── nested+/
│ │ │ │ │ │ │ │ └── _index.tsx
│ │ │ │ │ │ │ └── route.(with).$special[.chars].tsx
│ │ │ │ │ │ └── routes.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── react-router.config.ts
│ │ │ │ ├── react-router-with-server-entry/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── entry.server.tsx
│ │ │ │ │ │ ├── root.tsx
│ │ │ │ │ │ ├── routes/
│ │ │ │ │ │ │ └── home.tsx
│ │ │ │ │ │ └── routes.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── react-router.config.ts
│ │ │ │ ├── relay/
│ │ │ │ │ ├── __generated__/
│ │ │ │ │ │ └── artifact.graphql.ts
│ │ │ │ │ ├── myrelay.config.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── unused.ts
│ │ │ │ │ ├── used.ts
│ │ │ │ │ └── vite.config.ts
│ │ │ │ ├── relay2/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── relay.config.js
│ │ │ │ │ ├── src/
│ │ │ │ │ │ └── __generated__/
│ │ │ │ │ │ └── artifact.graphql.ts
│ │ │ │ │ ├── unused.ts
│ │ │ │ │ ├── used.ts
│ │ │ │ │ └── vite.config.ts
│ │ │ │ ├── release-it/
│ │ │ │ │ ├── .release-it.json
│ │ │ │ │ ├── bin/
│ │ │ │ │ │ └── release-notes.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── remark/
│ │ │ │ │ └── package.json
│ │ │ │ ├── remix/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── entry.client.tsx
│ │ │ │ │ │ ├── entry.server.tsx
│ │ │ │ │ │ ├── root.tsx
│ │ │ │ │ │ ├── routes/
│ │ │ │ │ │ │ └── index.tsx
│ │ │ │ │ │ └── utils.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── remix.config.js
│ │ │ │ │ ├── remix.init/
│ │ │ │ │ │ └── index.js
│ │ │ │ │ ├── server.js
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── rollup/
│ │ │ │ │ ├── do-not-bundle.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── rollup.config.js
│ │ │ │ ├── rsbuild/
│ │ │ │ │ ├── entry-1.ts
│ │ │ │ │ ├── entry-2.ts
│ │ │ │ │ ├── entry-3.ts
│ │ │ │ │ ├── entry-4.ts
│ │ │ │ │ ├── entry-5.ts
│ │ │ │ │ ├── entry-6.ts
│ │ │ │ │ ├── entry-7.ts
│ │ │ │ │ ├── entry-8.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── pre-entry-1.ts
│ │ │ │ │ ├── pre-entry-2.ts
│ │ │ │ │ ├── pre-entry-3.ts
│ │ │ │ │ └── rsbuild.config.ts
│ │ │ │ ├── rslib/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── rslib.config.ts
│ │ │ │ ├── rspack/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── rspack.config.js
│ │ │ │ │ ├── src/
│ │ │ │ │ │ └── entry.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── rstest/
│ │ │ │ │ ├── included.test.ts
│ │ │ │ │ ├── not-included.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── rstest.config.ts
│ │ │ │ ├── rstest2/
│ │ │ │ │ ├── __mocks__/
│ │ │ │ │ │ └── lodash.ts
│ │ │ │ │ ├── excluded.test.ts
│ │ │ │ │ ├── included.test.ts
│ │ │ │ │ ├── not-included.spec.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── rstest.config.ts
│ │ │ │ ├── sanity/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── sanity.blueprint.ts
│ │ │ │ │ ├── sanity.cli.ts
│ │ │ │ │ ├── sanity.config.ts
│ │ │ │ │ └── schema.ts
│ │ │ │ ├── semantic-release/
│ │ │ │ │ ├── .releaserc
│ │ │ │ │ └── package.json
│ │ │ │ ├── sentry/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── sentry.client.config.ts
│ │ │ │ │ ├── sentry.edge.config.ts
│ │ │ │ │ └── sentry.server.config.ts
│ │ │ │ ├── simple-git-hooks/
│ │ │ │ │ └── package.json
│ │ │ │ ├── size-limit/
│ │ │ │ │ ├── .size-limit.cjs
│ │ │ │ │ └── package.json
│ │ │ │ ├── sst/
│ │ │ │ │ ├── handlers/
│ │ │ │ │ │ ├── auth.ts
│ │ │ │ │ │ ├── other-auth.ts
│ │ │ │ │ │ └── some-route.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── sst.config.ts
│ │ │ │ │ └── stacks/
│ │ │ │ │ ├── AuthHandlerStack.ts
│ │ │ │ │ └── AuthStack.ts
│ │ │ │ ├── sst2/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── route.ts
│ │ │ │ │ └── sst.config.ts
│ │ │ │ ├── starlight/
│ │ │ │ │ ├── astro.config.mjs
│ │ │ │ │ ├── components/
│ │ │ │ │ │ ├── Footer.astro
│ │ │ │ │ │ └── Head.astro
│ │ │ │ │ └── package.json
│ │ │ │ ├── storybook/
│ │ │ │ │ ├── .storybook/
│ │ │ │ │ │ ├── main.js
│ │ │ │ │ │ ├── preview.js
│ │ │ │ │ │ └── vitest.setup.ts
│ │ │ │ │ ├── addon/
│ │ │ │ │ │ └── register.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── storybook2/
│ │ │ │ │ ├── .rnstorybook/
│ │ │ │ │ │ ├── index.tsx
│ │ │ │ │ │ ├── main.ts
│ │ │ │ │ │ ├── preview.tsx
│ │ │ │ │ │ └── storybook.requires.ts
│ │ │ │ │ ├── components/
│ │ │ │ │ │ └── Button/
│ │ │ │ │ │ ├── Button.stories.tsx
│ │ │ │ │ │ └── Button.tsx
│ │ │ │ │ └── package.json
│ │ │ │ ├── stryker/
│ │ │ │ │ ├── .stryker.conf.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── stryker.conf.cjs
│ │ │ │ │ ├── stryker.conf.json
│ │ │ │ │ └── stryker.conf.mjs
│ │ │ │ ├── stylelint/
│ │ │ │ │ ├── .stylelintrc
│ │ │ │ │ └── package.json
│ │ │ │ ├── stylelint2/
│ │ │ │ │ ├── .stylelintrc.cjs
│ │ │ │ │ ├── .stylelintrc.mjs
│ │ │ │ │ ├── myCustomPlugin.js
│ │ │ │ │ ├── myExtendableConfig.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── stylelint.config.js
│ │ │ │ ├── stylelint3/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── stylelint.config.mjs
│ │ │ │ ├── svelte/
│ │ │ │ │ ├── .svelte-kit/
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ ├── knip.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── app.d.ts
│ │ │ │ │ │ ├── app.html
│ │ │ │ │ │ ├── hooks.client.ts
│ │ │ │ │ │ ├── hooks.server.ts
│ │ │ │ │ │ ├── instrumentation.server.ts
│ │ │ │ │ │ ├── lib/
│ │ │ │ │ │ │ ├── component.svelte
│ │ │ │ │ │ │ └── store.svelte.ts
│ │ │ │ │ │ ├── params/
│ │ │ │ │ │ │ └── lang.ts
│ │ │ │ │ │ ├── routes/
│ │ │ │ │ │ │ ├── +layout.svelte
│ │ │ │ │ │ │ ├── +page.svelte
│ │ │ │ │ │ │ ├── +page.ts
│ │ │ │ │ │ │ ├── Counter.svelte
│ │ │ │ │ │ │ ├── Header.svelte
│ │ │ │ │ │ │ ├── login/
│ │ │ │ │ │ │ │ └── +server.ts
│ │ │ │ │ │ │ └── styles.css
│ │ │ │ │ │ └── service-worker.ts
│ │ │ │ │ ├── svelte.config.js
│ │ │ │ │ ├── tsconfig.json
│ │ │ │ │ └── vite.config.ts
│ │ │ │ ├── sveltekit/
│ │ │ │ │ ├── .svelte-kit/
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ ├── knip.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── app.d.ts
│ │ │ │ │ │ ├── app.html
│ │ │ │ │ │ ├── hooks.client.ts
│ │ │ │ │ │ ├── hooks.server.ts
│ │ │ │ │ │ ├── instrumentation.server.ts
│ │ │ │ │ │ ├── lib/
│ │ │ │ │ │ │ ├── component.svelte
│ │ │ │ │ │ │ └── store.svelte.ts
│ │ │ │ │ │ ├── params/
│ │ │ │ │ │ │ └── lang.ts
│ │ │ │ │ │ ├── routes/
│ │ │ │ │ │ │ ├── +layout.svelte
│ │ │ │ │ │ │ ├── +page.svelte
│ │ │ │ │ │ │ ├── +page.ts
│ │ │ │ │ │ │ ├── Counter.svelte
│ │ │ │ │ │ │ ├── Header.svelte
│ │ │ │ │ │ │ ├── login/
│ │ │ │ │ │ │ │ └── +server.ts
│ │ │ │ │ │ │ └── styles.css
│ │ │ │ │ │ └── service-worker.ts
│ │ │ │ │ ├── svelte.config.js
│ │ │ │ │ ├── tsconfig.json
│ │ │ │ │ └── vite.config.ts
│ │ │ │ ├── sveltekit2/
│ │ │ │ │ ├── knip.ts
│ │ │ │ │ ├── lib/
│ │ │ │ │ │ └── helper.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ └── routes/
│ │ │ │ │ │ └── +page.svelte
│ │ │ │ │ └── svelte.config.js
│ │ │ │ ├── svgo/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── svgo.config.js
│ │ │ │ ├── svgr/
│ │ │ │ │ ├── .svgrrc
│ │ │ │ │ └── package.json
│ │ │ │ ├── swc/
│ │ │ │ │ ├── .swcrc
│ │ │ │ │ └── package.json
│ │ │ │ ├── syncpack/
│ │ │ │ │ └── package.json
│ │ │ │ ├── tailwind/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── tailwind.config.js
│ │ │ │ ├── tailwind2/
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── knip.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── styles.css
│ │ │ │ ├── tanstack-router/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── routeTree.gen.ts
│ │ │ │ │ │ └── routes/
│ │ │ │ │ │ ├── __root.tsx
│ │ │ │ │ │ ├── index.tsx
│ │ │ │ │ │ └── posts/
│ │ │ │ │ │ └── $postId.tsx
│ │ │ │ │ ├── tsconfig.json
│ │ │ │ │ └── tsr.config.json
│ │ │ │ ├── taskfile/
│ │ │ │ │ ├── Taskfile.yml
│ │ │ │ │ ├── check.ts
│ │ │ │ │ ├── nested/
│ │ │ │ │ │ └── Taskfile.yml
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── scripts/
│ │ │ │ │ │ ├── build.js
│ │ │ │ │ │ ├── deep.js
│ │ │ │ │ │ ├── deploy.js
│ │ │ │ │ │ ├── dev.js
│ │ │ │ │ │ ├── nested.js
│ │ │ │ │ │ └── shared.js
│ │ │ │ │ └── shared/
│ │ │ │ │ ├── Taskfile.yml
│ │ │ │ │ └── deep/
│ │ │ │ │ └── Taskfile.yml
│ │ │ │ ├── taskfile2/
│ │ │ │ │ ├── custom-taskfile.yml
│ │ │ │ │ ├── knip.json
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── scripts/
│ │ │ │ │ │ ├── custom-build.js
│ │ │ │ │ │ ├── custom-test.js
│ │ │ │ │ │ └── subtask.js
│ │ │ │ │ └── tasks/
│ │ │ │ │ └── subtask.yml
│ │ │ │ ├── travis/
│ │ │ │ │ ├── .travis.yml
│ │ │ │ │ └── package.json
│ │ │ │ ├── tsdown/
│ │ │ │ │ ├── entry-1.ts
│ │ │ │ │ ├── entry-2.ts
│ │ │ │ │ ├── entry-3.ts
│ │ │ │ │ ├── entry-4.ts
│ │ │ │ │ ├── entry-5.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── tsdown.config-3.ts
│ │ │ │ │ ├── tsdown.config-4.ts
│ │ │ │ │ ├── tsdown.config.json
│ │ │ │ │ └── tsdown.config.ts
│ │ │ │ ├── tsgo/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── tsup/
│ │ │ │ │ ├── entry-1.ts
│ │ │ │ │ ├── entry-2.ts
│ │ │ │ │ ├── entry-3.ts
│ │ │ │ │ ├── entry-4.ts
│ │ │ │ │ ├── entry-5.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── tsup.config-3.ts
│ │ │ │ │ ├── tsup.config-4.ts
│ │ │ │ │ ├── tsup.config.json
│ │ │ │ │ └── tsup.config.ts
│ │ │ │ ├── tsx/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── test/
│ │ │ │ │ ├── a.ts
│ │ │ │ │ └── dir/
│ │ │ │ │ └── b.ts
│ │ │ │ ├── typedoc/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── tsconfig.json
│ │ │ │ │ └── typedoc.json
│ │ │ │ ├── typescript/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── tsconfig.app.json
│ │ │ │ │ ├── tsconfig.base.json
│ │ │ │ │ ├── tsconfig.ext.json
│ │ │ │ │ ├── tsconfig.json
│ │ │ │ │ ├── tsconfig.jsx-import-source-preact.json
│ │ │ │ │ ├── tsconfig.jsx-import-source-react.json
│ │ │ │ │ ├── tsconfig.jsx-preserve.json
│ │ │ │ │ └── tsconfig.jsx.json
│ │ │ │ ├── typescript2/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── packages/
│ │ │ │ │ │ ├── lib/
│ │ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ │ ├── src/
│ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── unbuild/
│ │ │ │ │ ├── build.config.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── unocss/
│ │ │ │ │ ├── main.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── unocss.config.ts
│ │ │ │ ├── vercel-og/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ └── api/
│ │ │ │ │ │ └── og/
│ │ │ │ │ │ └── route.jsx
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ └── pages/
│ │ │ │ │ └── api/
│ │ │ │ │ └── og.tsx
│ │ │ │ ├── vike/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── pages/
│ │ │ │ │ │ ├── _error/
│ │ │ │ │ │ │ └── +Page.tsx
│ │ │ │ │ │ ├── about/
│ │ │ │ │ │ │ ├── +Page.tsx
│ │ │ │ │ │ │ └── code.css
│ │ │ │ │ │ ├── index/
│ │ │ │ │ │ │ ├── +Page.tsx
│ │ │ │ │ │ │ └── Counter.tsx
│ │ │ │ │ │ └── star-wars/
│ │ │ │ │ │ ├── @id/
│ │ │ │ │ │ │ ├── +Page.tsx
│ │ │ │ │ │ │ └── +data.ts
│ │ │ │ │ │ ├── index/
│ │ │ │ │ │ │ ├── +Page.tsx
│ │ │ │ │ │ │ └── +data.ts
│ │ │ │ │ │ └── types.ts
│ │ │ │ │ ├── renderer/
│ │ │ │ │ │ ├── +config.ts
│ │ │ │ │ │ ├── +onPageTransitionEnd.ts
│ │ │ │ │ │ ├── +onPageTransitionStart.ts
│ │ │ │ │ │ ├── +onRenderClient.tsx
│ │ │ │ │ │ ├── +onRenderHtml.tsx
│ │ │ │ │ │ ├── Layout.css
│ │ │ │ │ │ ├── Layout.tsx
│ │ │ │ │ │ ├── Link.tsx
│ │ │ │ │ │ ├── getPageTitle.ts
│ │ │ │ │ │ ├── useData.ts
│ │ │ │ │ │ └── usePageContext.tsx
│ │ │ │ │ ├── server/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── root.ts
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ └── vite.config.ts
│ │ │ │ ├── vite/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ └── vite-env.d.ts
│ │ │ │ │ └── vite.config.ts
│ │ │ │ ├── vite2/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── mock.desktop.js
│ │ │ │ │ │ └── mock.desktop.ts
│ │ │ │ │ └── vite.config.ts
│ │ │ │ ├── vite3/
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ ├── App.tsx
│ │ │ │ │ └── unused.ts
│ │ │ │ ├── vite4/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── component.ts
│ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ └── main.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── vite.config.ts
│ │ │ │ ├── vitepress/
│ │ │ │ │ ├── .vitepress/
│ │ │ │ │ │ ├── config.mts
│ │ │ │ │ │ └── theme/
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── index.md
│ │ │ │ │ └── package.json
│ │ │ │ ├── vitest/
│ │ │ │ │ ├── __mocks__/
│ │ │ │ │ │ └── mockedModule.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── setupTests.ts
│ │ │ │ │ │ └── vite-env.d.ts
│ │ │ │ │ ├── test/
│ │ │ │ │ │ ├── basic.bench.ts
│ │ │ │ │ │ ├── basic.spec-d.ts
│ │ │ │ │ │ ├── basic.spec.ts
│ │ │ │ │ │ └── basic.test-d.ts
│ │ │ │ │ ├── vite.config.ts
│ │ │ │ │ ├── vitest-default-coverage.config.ts
│ │ │ │ │ ├── vitest.config.ts
│ │ │ │ │ └── vitest.workspace.ts
│ │ │ │ ├── vitest-npm-script/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── vitest.config.ts
│ │ │ │ ├── vitest2/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── basic.spec.ts
│ │ │ │ │ │ └── unit.vitest.ts
│ │ │ │ │ └── vitest.config.ts
│ │ │ │ ├── vitest3/
│ │ │ │ │ ├── knip.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── basic.test.ts
│ │ │ │ │ │ └── unit.test.tsx
│ │ │ │ │ ├── vite.config.ts
│ │ │ │ │ └── vitest.config.ts
│ │ │ │ ├── vitest4/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ └── unused.test.ts
│ │ │ │ │ ├── tests/
│ │ │ │ │ │ ├── adder.test.ts
│ │ │ │ │ │ └── setup.ts
│ │ │ │ │ └── vitest.config.ts
│ │ │ │ ├── vitest5/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── index.test.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ └── vite.config.ts
│ │ │ │ ├── vitest6/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── fiep.ts
│ │ │ │ │ │ └── setup.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ └── unused.test.ts
│ │ │ │ │ └── tests/
│ │ │ │ │ └── adder.test.ts
│ │ │ │ ├── vitest7/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── index.test.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ └── vitest.config.ts
│ │ │ │ ├── vitest8/
│ │ │ │ │ ├── my-env.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── custom-env.test.ts
│ │ │ │ │ │ ├── index.test.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ └── vitest.config.ts
│ │ │ │ ├── vitest9/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── packages/
│ │ │ │ │ │ └── client/
│ │ │ │ │ │ ├── e2e/
│ │ │ │ │ │ │ ├── another-setup.js
│ │ │ │ │ │ │ └── client.test.ts
│ │ │ │ │ │ ├── e2e-setup.ts
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── vitest.config.e2e.ts
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── example.test.ts
│ │ │ │ │ │ └── unit.setup.ts
│ │ │ │ │ └── vitest.config.ts
│ │ │ │ ├── vue/
│ │ │ │ │ ├── index.vue
│ │ │ │ │ ├── knip.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── vue.config.js
│ │ │ │ ├── vue-webpack/
│ │ │ │ │ ├── child1.vue
│ │ │ │ │ ├── child2.vue
│ │ │ │ │ ├── child3.vue
│ │ │ │ │ ├── knip.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── parent.vue
│ │ │ │ │ ├── tsconfig.json
│ │ │ │ │ └── vue.config.js
│ │ │ │ ├── webdriver-io/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── wdio.conf.js
│ │ │ │ ├── webpack/
│ │ │ │ │ ├── merge.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── app-dep.ts
│ │ │ │ │ │ ├── app.tsx
│ │ │ │ │ │ ├── components/
│ │ │ │ │ │ │ ├── button.js
│ │ │ │ │ │ │ └── input.js
│ │ │ │ │ │ ├── entry.js
│ │ │ │ │ │ ├── module1.js
│ │ │ │ │ │ ├── my-custom-loader.js
│ │ │ │ │ │ ├── routes.ts
│ │ │ │ │ │ ├── subpath-entry.ts
│ │ │ │ │ │ ├── unused.ts
│ │ │ │ │ │ └── vendor.js
│ │ │ │ │ ├── webpack.babel.js
│ │ │ │ │ ├── webpack.common.js
│ │ │ │ │ ├── webpack.config.js
│ │ │ │ │ ├── webpack.dev.js
│ │ │ │ │ └── webpack.prod.js
│ │ │ │ ├── webpack-cli/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── webpack.config.js
│ │ │ │ ├── webpack-reexport/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ └── index.js
│ │ │ │ │ └── webpack.config.js
│ │ │ │ ├── webpack2/
│ │ │ │ │ ├── entry.dev.js
│ │ │ │ │ ├── entry.prod.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── webpack.dev.js
│ │ │ │ │ └── webpack.prod.js
│ │ │ │ ├── wireit/
│ │ │ │ │ ├── apps/
│ │ │ │ │ │ ├── example-configuration/
│ │ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ │ ├── rollup.config.json
│ │ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ │ └── missing/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── package.json
│ │ │ │ ├── wrangler/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── worker-test-entry.ts
│ │ │ │ │ └── wrangler.toml
│ │ │ │ ├── xo/
│ │ │ │ │ ├── .xo-config.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── xo.config.cjs
│ │ │ │ ├── yarn/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── yarn.config.cjs
│ │ │ │ ├── yarn-berry/
│ │ │ │ │ ├── .gitgnore
│ │ │ │ │ ├── .yarn/
│ │ │ │ │ │ ├── plugins/
│ │ │ │ │ │ │ └── @yarnpkg/
│ │ │ │ │ │ │ ├── plugin-bar.cjs
│ │ │ │ │ │ │ └── plugin-foo.cjs
│ │ │ │ │ │ └── releases/
│ │ │ │ │ │ └── yarn-4.12.0.cjs
│ │ │ │ │ ├── .yarnrc.yml
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── yarn.config.cjs
│ │ │ │ └── yorkie/
│ │ │ │ └── package.json
│ │ │ ├── pragma/
│ │ │ │ ├── index.test.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── jsx.tsx
│ │ │ │ ├── local-env.js
│ │ │ │ ├── package.json
│ │ │ │ ├── reference-types.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── preprocessors/
│ │ │ │ ├── identity.ts
│ │ │ │ └── minimal.ts
│ │ │ ├── re-exports/
│ │ │ │ ├── 1-entry.ts
│ │ │ │ ├── 2-re-export-star.ts
│ │ │ │ ├── 3-re-export-named.ts
│ │ │ │ ├── 4-my-module.ts
│ │ │ │ └── package.json
│ │ │ ├── re-exports-aliased-ns/
│ │ │ │ ├── 1-first.ts
│ │ │ │ ├── 2-second.ts
│ │ │ │ ├── 3-barrel.ts
│ │ │ │ ├── 4-collect.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── re-exports-cjs/
│ │ │ │ ├── 1-entry.js
│ │ │ │ ├── 2-re-export-star.js
│ │ │ │ ├── 3-my-module.js
│ │ │ │ └── package.json
│ │ │ ├── re-exports-deep/
│ │ │ │ ├── 1-entry.ts
│ │ │ │ ├── 2-re-export-star.ts
│ │ │ │ ├── 3-re-export-named.ts
│ │ │ │ ├── 4-re-export-star.ts
│ │ │ │ ├── 5-re-export-named.ts
│ │ │ │ ├── 6-re-export-star.ts
│ │ │ │ ├── 7-my-module.ts
│ │ │ │ └── package.json
│ │ │ ├── re-exports-default-renamed/
│ │ │ │ ├── default-reexported/
│ │ │ │ │ ├── blueberry.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── pear.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── named-reexported/
│ │ │ │ │ ├── apricot.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── peach.ts
│ │ │ │ ├── not-reexported/
│ │ │ │ │ └── index.ts
│ │ │ │ └── package.json
│ │ │ ├── re-exports-default-renamed-deep/
│ │ │ │ ├── deep.ts
│ │ │ │ ├── default-reexported/
│ │ │ │ │ ├── blueberry.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── pear.ts
│ │ │ │ │ └── pineapple.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── intermediate.ts
│ │ │ │ ├── named-reexported/
│ │ │ │ │ ├── apricot.ts
│ │ │ │ │ ├── coconut.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── peach.ts
│ │ │ │ ├── not-reexported/
│ │ │ │ │ └── index.ts
│ │ │ │ └── package.json
│ │ │ ├── re-exports-destructure-spread/
│ │ │ │ ├── animal.ts
│ │ │ │ ├── animals.ts
│ │ │ │ ├── farm.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── re-exports-enum/
│ │ │ │ ├── index.ts
│ │ │ │ ├── mid.ts
│ │ │ │ ├── myEnum.ts
│ │ │ │ ├── myNextEnum.ts
│ │ │ │ └── package.json
│ │ │ ├── re-exports-enum-members-workspace/
│ │ │ │ ├── index.ts
│ │ │ │ ├── lib/
│ │ │ │ │ ├── enums.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── package.json
│ │ │ │ └── package.json
│ │ │ ├── re-exports-enum-unused/
│ │ │ │ ├── index.ts
│ │ │ │ ├── mid.ts
│ │ │ │ ├── myEnum.ts
│ │ │ │ └── package.json
│ │ │ ├── re-exports-export-declaration/
│ │ │ │ ├── package.json
│ │ │ │ └── src/
│ │ │ │ ├── exporter/
│ │ │ │ │ ├── exporterA.ts
│ │ │ │ │ ├── exporterB.ts
│ │ │ │ │ ├── exporterC.ts
│ │ │ │ │ ├── exporterD.ts
│ │ │ │ │ └── index.ts
│ │ │ │ └── index.ts
│ │ │ ├── re-exports-export-ns/
│ │ │ │ ├── 1-root.ts
│ │ │ │ ├── 2-psuedo-re-exporter.ts
│ │ │ │ ├── 3-branch.ts
│ │ │ │ ├── 4-leaf-A.ts
│ │ │ │ ├── 4-leaf-B.ts
│ │ │ │ ├── 4-leaf-C.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── re-exports-ignore-exports-used-in-file/
│ │ │ │ ├── export.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── package.json
│ │ │ │ └── reexport.ts
│ │ │ ├── re-exports-ns-member/
│ │ │ │ ├── index.ts
│ │ │ │ ├── member-ab.ts
│ │ │ │ ├── member-cd.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── sub2-pseudo.ts
│ │ │ │ ├── sub2-sub.ts
│ │ │ │ └── sub3.ts
│ │ │ ├── re-exports-ns-type/
│ │ │ │ ├── assets.tsx
│ │ │ │ ├── barrel.ts
│ │ │ │ ├── index.tsx
│ │ │ │ ├── package.json
│ │ │ │ ├── pluginA.ts
│ │ │ │ ├── pluginB.ts
│ │ │ │ ├── styled.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── re-exports-ns-type2/
│ │ │ │ ├── index.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── schema.ts
│ │ │ │ └── types.ts
│ │ │ ├── re-exports-pseudo/
│ │ │ │ ├── index.ts
│ │ │ │ ├── left.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── pseudo.ts
│ │ │ │ └── right.ts
│ │ │ ├── re-exports-public/
│ │ │ │ ├── index.ts
│ │ │ │ ├── module.ts
│ │ │ │ └── package.json
│ │ │ ├── re-exports-recursive/
│ │ │ │ ├── barrel.ts
│ │ │ │ ├── cycle-a.ts
│ │ │ │ ├── cycle-b.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── module.ts
│ │ │ │ └── package.json
│ │ │ ├── re-exports-renamed/
│ │ │ │ ├── fileA.ts
│ │ │ │ ├── fileB.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── re-exports-spread/
│ │ │ │ ├── animal.ts
│ │ │ │ ├── animals.ts
│ │ │ │ ├── farm.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── re-exports-twice/
│ │ │ │ ├── dir/
│ │ │ │ │ ├── default.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── named.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── re-exports-with-decorator/
│ │ │ │ ├── barrel.ts
│ │ │ │ ├── decorator.ts
│ │ │ │ ├── entry.ts
│ │ │ │ ├── my-module.ts
│ │ │ │ └── package.json
│ │ │ ├── rules/
│ │ │ │ ├── exports.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── ns.ts
│ │ │ │ ├── package.json
│ │ │ │ └── unused.ts
│ │ │ ├── script-visitors-bun/
│ │ │ │ ├── index.ts
│ │ │ │ ├── package.json
│ │ │ │ └── script.ts
│ │ │ ├── script-visitors-execa/
│ │ │ │ ├── execa-docs.mjs
│ │ │ │ ├── main.js
│ │ │ │ ├── methods.mjs
│ │ │ │ ├── node.mjs
│ │ │ │ ├── options.mjs
│ │ │ │ ├── package.json
│ │ │ │ └── script.js
│ │ │ ├── script-visitors-zx/
│ │ │ │ ├── main.js
│ │ │ │ ├── node.mjs
│ │ │ │ ├── package.json
│ │ │ │ ├── script.js
│ │ │ │ └── zx-docs.mjs
│ │ │ ├── self-reference/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── entry.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── lib/
│ │ │ │ │ └── module.js
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── self-reference-from-plugin/
│ │ │ │ ├── .eslintrc.json
│ │ │ │ ├── .gitignore
│ │ │ │ ├── data.json
│ │ │ │ ├── entry.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── lokal.js
│ │ │ │ └── package.json
│ │ │ ├── session/
│ │ │ │ ├── Harness.Parallel.Host.ts
│ │ │ │ ├── Harness.Parallel.Worker.ts
│ │ │ │ ├── Harness.Parallel.ts
│ │ │ │ ├── Harness.ts
│ │ │ │ ├── a.ts
│ │ │ │ ├── b.ts
│ │ │ │ ├── c.ts
│ │ │ │ ├── default-export.ts
│ │ │ │ ├── diamond-base.ts
│ │ │ │ ├── diamond-left.ts
│ │ │ │ ├── diamond-right.ts
│ │ │ │ ├── diamond-top.ts
│ │ │ │ ├── flowers.ts
│ │ │ │ ├── host.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── overload-1.ts
│ │ │ │ ├── overload-2.ts
│ │ │ │ ├── overload-3.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── rose.ts
│ │ │ │ ├── runner.ts
│ │ │ │ ├── src/
│ │ │ │ │ ├── core/
│ │ │ │ │ │ └── app/
│ │ │ │ │ │ └── types.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types/
│ │ │ │ │ └── public/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── internal.ts
│ │ │ │ ├── theme-reexport.ts
│ │ │ │ ├── theme.ts
│ │ │ │ └── worker.ts
│ │ │ ├── session-dependencies/
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── utils.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── session-re-exports/
│ │ │ │ ├── app/
│ │ │ │ │ ├── consumer-2.ts
│ │ │ │ │ ├── consumer-3.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── pkg/
│ │ │ │ ├── internal/
│ │ │ │ │ └── consumer-1.ts
│ │ │ │ ├── package.json
│ │ │ │ └── public/
│ │ │ │ ├── barrel.ts
│ │ │ │ └── implementation.ts
│ │ │ ├── skip-exports-analysis/
│ │ │ │ ├── e2e/
│ │ │ │ │ └── used.e2e.js
│ │ │ │ ├── lib/
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── used.js
│ │ │ │ │ └── used.test.js
│ │ │ │ ├── package.json
│ │ │ │ └── src/
│ │ │ │ ├── index.js
│ │ │ │ ├── used.js
│ │ │ │ └── used.test.js
│ │ │ ├── subpath-import/
│ │ │ │ ├── entry.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── lib/
│ │ │ │ │ ├── dep-polyfill.d.ts
│ │ │ │ │ └── dep-polyfill.js
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── subpath-import-from-plugin/
│ │ │ │ ├── .eslintrc.json
│ │ │ │ ├── entry.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── lib/
│ │ │ │ │ ├── dep-polyfill.d.ts
│ │ │ │ │ └── dep-polyfill.js
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── subpath-imports-outdir/
│ │ │ │ ├── dist/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── index.d.ts
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── test/
│ │ │ │ │ ├── test1.d.ts
│ │ │ │ │ ├── test1.js
│ │ │ │ │ ├── test2.d.ts
│ │ │ │ │ └── test2.js
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── test/
│ │ │ │ │ ├── test1.ts
│ │ │ │ │ └── test2.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── subpath-patterns/
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ ├── entry.ts
│ │ │ │ │ └── internals/
│ │ │ │ │ ├── unused.ts
│ │ │ │ │ ├── used.alt
│ │ │ │ │ ├── used.ext
│ │ │ │ │ └── used.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── tagged-template-literal/
│ │ │ │ ├── Component.astro
│ │ │ │ ├── ScriptTag.astro
│ │ │ │ ├── app.ts
│ │ │ │ ├── index.astro
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── tags-cli/
│ │ │ │ ├── index.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── tags.ts
│ │ │ │ └── unimported.ts
│ │ │ ├── tags-exclude/
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── tags.ts
│ │ │ ├── tags-include/
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── tags.ts
│ │ │ ├── trace/
│ │ │ │ ├── barrel.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── module.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── require.ts
│ │ │ │ ├── shared.ts
│ │ │ │ └── string.ts
│ │ │ ├── treat-config-hints-as-errors/
│ │ │ │ ├── index.js
│ │ │ │ └── package.json
│ │ │ ├── treat-config-hints-as-errors2/
│ │ │ │ ├── index.js
│ │ │ │ └── package.json
│ │ │ ├── ts-namespace/
│ │ │ │ ├── index.ts
│ │ │ │ ├── members.ts
│ │ │ │ ├── merged.ts
│ │ │ │ ├── modules.ts
│ │ │ │ ├── package.json
│ │ │ │ └── types.ts
│ │ │ ├── tsc-files-mode/
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ ├── declare-global.ts
│ │ │ │ │ ├── declare-module.ts
│ │ │ │ │ ├── excluded.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── module.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── tsconfig-extends/
│ │ │ │ ├── boilerplate/
│ │ │ │ │ └── tsconfig.base.json
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ └── frontend/
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ └── index.tsx
│ │ │ │ └── tsconfig.json
│ │ │ ├── tsconfig-include-dir/
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ ├── helper.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.d.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── tsconfig-nested-paths/
│ │ │ │ ├── package.json
│ │ │ │ ├── shared/
│ │ │ │ │ └── utils.ts
│ │ │ │ ├── src/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── server/
│ │ │ │ │ │ ├── handler.ts
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ └── ui/
│ │ │ │ │ ├── button.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── tsconfig-paths-extends/
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ ├── cli.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── lib/
│ │ │ │ │ │ └── main.ts
│ │ │ │ │ └── util/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── tsconfig.base.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── tsconfig-preset-strict/
│ │ │ │ ├── index.ts
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── tsconfig-rootdirs/
│ │ │ │ ├── generated/
│ │ │ │ │ └── src/
│ │ │ │ │ └── index.generated.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── tsconfig.json
│ │ │ │ └── tsconfig.source.json
│ │ │ ├── type-in-type/
│ │ │ │ ├── index.ts
│ │ │ │ ├── module.ts
│ │ │ │ ├── package.json
│ │ │ │ └── types.ts
│ │ │ ├── type-in-value-export/
│ │ │ │ ├── package.json
│ │ │ │ └── src/
│ │ │ │ ├── api.ts
│ │ │ │ └── index.ts
│ │ │ ├── types/
│ │ │ │ ├── index.ts
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── url-import-meta-url/
│ │ │ │ ├── file.css
│ │ │ │ ├── file.js
│ │ │ │ ├── index.ts
│ │ │ │ ├── knip.js
│ │ │ │ └── package.json
│ │ │ ├── workspaces/
│ │ │ │ ├── apps/
│ │ │ │ │ ├── backend/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ ├── frontend/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ └── ignored-workspace/
│ │ │ │ │ └── package.json
│ │ │ │ ├── docs/
│ │ │ │ │ ├── dangling.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── local/
│ │ │ │ │ └── tsconfig/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── tsconfig.base.json
│ │ │ │ ├── package.json
│ │ │ │ ├── packages/
│ │ │ │ │ ├── shared/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ ├── tsconfig.json
│ │ │ │ │ │ └── types.ts
│ │ │ │ │ └── tools/
│ │ │ │ │ ├── ignored/
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── tsconfig.json
│ │ │ │ │ └── utils.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── workspaces-bun-test/
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ └── lib/
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── tests/
│ │ │ │ │ └── index.test.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── workspaces-circular/
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ ├── lib-a/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── lib-b/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── package.json
│ │ │ │ └── lib-c/
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── workspaces-circular-symlinks/
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ ├── lib-a/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── package.json
│ │ │ │ └── lib-b/
│ │ │ │ ├── index.ts
│ │ │ │ └── package.json
│ │ │ ├── workspaces-cross-reference/
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ ├── lib-a/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── mod-a.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── tsconfig.json
│ │ │ │ └── lib-b/
│ │ │ │ ├── index.ts
│ │ │ │ ├── mod-b.ts
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── workspaces-dts/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── knip.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── packages/
│ │ │ │ │ ├── client/
│ │ │ │ │ │ ├── client.d.ts
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ ├── server/
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ ├── server.d.ts
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ └── shared/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ ├── unused-function.js
│ │ │ │ │ │ └── used-function.js
│ │ │ │ │ ├── tsconfig.build.json
│ │ │ │ │ └── tsconfig.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── workspaces-entry-files/
│ │ │ │ ├── .storybook/
│ │ │ │ │ └── main.ts
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ ├── client/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── index.stories.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ └── shared/
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ └── index.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── workspaces-ignored/
│ │ │ │ ├── package.json
│ │ │ │ ├── packages/
│ │ │ │ │ ├── a/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── b1/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── b2/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── c/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── d1/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── d2/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── deep/
│ │ │ │ │ │ ├── er/
│ │ │ │ │ │ │ └── h2/
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ └── unignored/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── e/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── flat/
│ │ │ │ │ │ └── i1/
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── g/
│ │ │ │ │ │ └── main.c
│ │ │ │ │ └── production/
│ │ │ │ │ └── package.json
│ │ │ │ └── pnpm-workspace.yaml
│ │ │ ├── workspaces-include-entry-exports/
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ ├── app/
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── package.json
│ │ │ │ └── lib/
│ │ │ │ ├── index.js
│ │ │ │ └── package.json
│ │ │ ├── workspaces-module-resolution/
│ │ │ │ ├── package.json
│ │ │ │ ├── packages/
│ │ │ │ │ ├── workspace-a/
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ ├── src/
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ └── workspace-b/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── exports.ts
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── self.ts
│ │ │ │ │ │ └── used-fn.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── workspaces-nested/
│ │ │ │ ├── L-1-1/
│ │ │ │ │ ├── L-1-2/
│ │ │ │ │ │ ├── L-1-3/
│ │ │ │ │ │ │ ├── .eslintrc.json
│ │ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ │ └── package.json
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── package.json
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── package.json
│ │ │ │ └── package.json
│ │ │ ├── workspaces-noconfig-plugin/
│ │ │ │ ├── lib/
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src/
│ │ │ │ │ ├── util.test.ts
│ │ │ │ │ └── util.ts
│ │ │ │ ├── package.json
│ │ │ │ └── src/
│ │ │ │ ├── index.ts
│ │ │ │ └── util.test.ts
│ │ │ ├── workspaces-node-test/
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ └── lib/
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── tests/
│ │ │ │ │ └── index.test.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── workspaces-paths/
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ ├── lib-a/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── dir/
│ │ │ │ │ │ │ └── module-a.ts
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── same.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── lib-b/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── dir/
│ │ │ │ │ │ │ └── module-b.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── lib-c/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── dir/
│ │ │ │ │ │ │ └── module.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── lib-d/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── dir/
│ │ │ │ │ │ │ └── module.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── lib-e/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── dir/
│ │ │ │ │ │ │ └── module-e.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── lib-f/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── same.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ └── lib-g/
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── same.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── workspaces-paths-compilers/
│ │ │ │ ├── knip.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── packages/
│ │ │ │ │ └── app/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ ├── components/
│ │ │ │ │ │ │ ├── App.vue
│ │ │ │ │ │ │ ├── Child.vue
│ │ │ │ │ │ │ └── Sub.vue
│ │ │ │ │ │ ├── main.ts
│ │ │ │ │ │ ├── pages/
│ │ │ │ │ │ │ └── Home.vue
│ │ │ │ │ │ └── router.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── workspaces-plugin-circular/
│ │ │ │ ├── package.json
│ │ │ │ ├── packages/
│ │ │ │ │ └── lib/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── tsconfig.app.json
│ │ │ │ │ ├── tsconfig.json
│ │ │ │ │ └── tsconfig.spec.json
│ │ │ │ └── tsconfig.base.json
│ │ │ ├── workspaces-plugin-config/
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ ├── backend/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── vitest.config.ts
│ │ │ │ │ ├── eslint.config.js
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── index.vitest.ts
│ │ │ │ │ ├── jest.config.js
│ │ │ │ │ └── package.json
│ │ │ │ ├── frontend/
│ │ │ │ │ ├── .eslintrc.js
│ │ │ │ │ ├── components/
│ │ │ │ │ │ ├── component.js
│ │ │ │ │ │ └── component.test.js
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── vitest.config.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── index.vitest.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── postcss.config.js
│ │ │ │ │ └── rollup.config.ts
│ │ │ │ ├── shared/
│ │ │ │ │ ├── ava.config.js
│ │ │ │ │ ├── components/
│ │ │ │ │ │ ├── component.ava.js
│ │ │ │ │ │ ├── component.js
│ │ │ │ │ │ ├── component.tales.js
│ │ │ │ │ │ ├── epic/
│ │ │ │ │ │ │ ├── component.fable.tsx
│ │ │ │ │ │ │ └── component.stories.mdx
│ │ │ │ │ │ └── storybook/
│ │ │ │ │ │ ├── main.ts
│ │ │ │ │ │ ├── manager.ts
│ │ │ │ │ │ └── preview.ts
│ │ │ │ │ ├── dev-entry.js
│ │ │ │ │ ├── jest-setup.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── production-entry.js
│ │ │ │ │ └── webpack.config.js
│ │ │ │ └── tailwind/
│ │ │ │ ├── package.json
│ │ │ │ └── postcss.js
│ │ │ ├── workspaces-plugin-overlap/
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ └── workspace-a/
│ │ │ │ ├── package.json
│ │ │ │ ├── tsconfig.json
│ │ │ │ └── typedoc.json
│ │ │ ├── workspaces-pnpm/
│ │ │ │ ├── apps/
│ │ │ │ │ ├── app-a/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── app-b/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── docs/
│ │ │ │ │ ├── dangling.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── package.json
│ │ │ │ ├── packages/
│ │ │ │ │ ├── lib-a/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── package.json
│ │ │ │ │ └── lib-b/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── package.json
│ │ │ │ └── pnpm-workspace.yaml
│ │ │ ├── workspaces-root/
│ │ │ │ ├── app/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── package.json
│ │ │ │ ├── scripts/
│ │ │ │ │ └── index.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── workspaces-self-and-cross-ref/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── package.json
│ │ │ │ ├── packages/
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ ├── src/
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ ├── lib/
│ │ │ │ │ │ ├── package.json
│ │ │ │ │ │ ├── src/
│ │ │ │ │ │ │ ├── alpha.ts
│ │ │ │ │ │ │ ├── beta.ts
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ └── shared/
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── src/
│ │ │ │ │ │ └── polyfills/
│ │ │ │ │ │ └── polyfills.client.ts
│ │ │ │ │ └── tsconfig.json
│ │ │ │ ├── pnpm-workspace.yaml
│ │ │ │ ├── tsconfig.base.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── workspaces-self-reference/
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ ├── eslint-config-x-self-reference/
│ │ │ │ │ ├── .gitignore
│ │ │ │ │ ├── entry.ts
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── tsconfig.json
│ │ │ │ └── from-plugin/
│ │ │ │ ├── .eslintrc.json
│ │ │ │ ├── data.json
│ │ │ │ ├── entry.ts
│ │ │ │ ├── file.js
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ ├── workspaces-tooling/
│ │ │ │ ├── knip.json
│ │ │ │ ├── package.json
│ │ │ │ └── packages/
│ │ │ │ ├── backend/
│ │ │ │ │ ├── .eslintrc.js
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── package.json
│ │ │ │ ├── eslint-config-custom/
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── package.json
│ │ │ │ └── frontend/
│ │ │ │ ├── .eslintrc.js
│ │ │ │ ├── index.ts
│ │ │ │ ├── jest.config.js
│ │ │ │ ├── jest.setup.js
│ │ │ │ └── package.json
│ │ │ ├── zero-config/
│ │ │ │ ├── exclude.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── my-module.ts
│ │ │ │ ├── my-namespace.ts
│ │ │ │ ├── package.json
│ │ │ │ └── tsconfig.json
│ │ │ └── מסמכים/
│ │ │ ├── .gitignore
│ │ │ ├── package.json
│ │ │ └── src/
│ │ │ └── index.ts
│ │ ├── package.json
│ │ ├── rmdir.js
│ │ ├── schema-jsonc.json
│ │ ├── schema.json
│ │ ├── scripts/
│ │ │ ├── create-new-plugin.ts
│ │ │ ├── generate-plugin-defs.js
│ │ │ ├── run-test.ts
│ │ │ ├── tsconfig.json
│ │ │ └── verify-fixtures.ts
│ │ ├── src/
│ │ │ ├── CacheConsultant.ts
│ │ │ ├── CatalogCounselor.ts
│ │ │ ├── ConfigurationChief.ts
│ │ │ ├── ConsoleStreamer.ts
│ │ │ ├── DependencyDeputy.ts
│ │ │ ├── IssueCollector.ts
│ │ │ ├── IssueFixer.ts
│ │ │ ├── JsonCatalogPeeker.ts
│ │ │ ├── PackagePeeker.ts
│ │ │ ├── ProjectPrincipal.ts
│ │ │ ├── WorkspaceWorker.ts
│ │ │ ├── YamlCatalogPeeker.ts
│ │ │ ├── binaries/
│ │ │ │ ├── bash-parser.ts
│ │ │ │ ├── fallback.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── plugins.ts
│ │ │ │ ├── resolvers/
│ │ │ │ │ ├── bun.ts
│ │ │ │ │ ├── bunx.ts
│ │ │ │ │ ├── find.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── npm.ts
│ │ │ │ │ ├── npx.ts
│ │ │ │ │ ├── pnpm.ts
│ │ │ │ │ ├── pnpx.ts
│ │ │ │ │ └── yarn.ts
│ │ │ │ └── util.ts
│ │ │ ├── cli.ts
│ │ │ ├── compilers/
│ │ │ │ ├── compilers.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── mdx.ts
│ │ │ │ ├── scss.ts
│ │ │ │ └── types.ts
│ │ │ ├── constants.ts
│ │ │ ├── graph/
│ │ │ │ ├── analyze.ts
│ │ │ │ └── build.ts
│ │ │ ├── graph-explorer/
│ │ │ │ ├── cache.ts
│ │ │ │ ├── constants.ts
│ │ │ │ ├── explorer.ts
│ │ │ │ ├── operations/
│ │ │ │ │ ├── build-exports-tree.ts
│ │ │ │ │ ├── find-cycles.ts
│ │ │ │ │ ├── get-contention.ts
│ │ │ │ │ ├── get-dependency-usage.ts
│ │ │ │ │ ├── get-usage.ts
│ │ │ │ │ ├── has-strictly-ns-references.ts
│ │ │ │ │ ├── is-referenced.ts
│ │ │ │ │ └── resolve-definition.ts
│ │ │ │ ├── utils.ts
│ │ │ │ ├── visitors.ts
│ │ │ │ ├── walk-down.ts
│ │ │ │ └── walk-up.ts
│ │ │ ├── index.ts
│ │ │ ├── manifest/
│ │ │ │ ├── helpers.ts
│ │ │ │ └── index.ts
│ │ │ ├── plugins/
│ │ │ │ ├── _template/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── angular/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── types.ts
│ │ │ │ │ └── update-types.sh
│ │ │ │ ├── astro/
│ │ │ │ │ ├── compiler-mdx.ts
│ │ │ │ │ ├── compiler.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── resolveFromAST.ts
│ │ │ │ ├── astro-db/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── astro-og-canvas/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── ava/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── babel/
│ │ │ │ │ ├── helpers.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── biome/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── bumpp/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── bun/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── c8/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── capacitor/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── changelogen/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── changelogithub/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── changesets/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── commitizen/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── commitlint/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── convex/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── create-typescript-app/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── cspell/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── cucumber/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── cypress/
│ │ │ │ │ ├── helpers.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── danger/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── dependency-cruiser/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── docusaurus/
│ │ │ │ │ ├── helpers.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── dotenv/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── drizzle/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── eleventy/
│ │ │ │ │ ├── helpers.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── eslint/
│ │ │ │ │ ├── helpers.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── resolveFromAST.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── execa/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── visitors/
│ │ │ │ │ └── execa.ts
│ │ │ │ ├── expo/
│ │ │ │ │ ├── helpers.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── expressive-code/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── gatsby/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── github-action/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── github-actions/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── glob/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── graphql-codegen/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── hardhat/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── husky/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── i18next-parser/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── jest/
│ │ │ │ │ ├── helpers.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── karma/
│ │ │ │ │ ├── helpers.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── knex/
│ │ │ │ │ ├── helpers.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── ladle/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── lefthook/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── lint-staged/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── linthtml/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── lockfile-lint/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── lost-pixel/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── markdownlint/
│ │ │ │ │ ├── helpers.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── mdx/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── mdxlint/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── metro/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── mocha/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── moonrepo/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── msw/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── nano-staged/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── nest/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── netlify/
│ │ │ │ │ ├── helpers.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── next/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── resolveFromAST.ts
│ │ │ │ ├── next-intl/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── next-mdx/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── resolveFromAST.ts
│ │ │ │ ├── nitro/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── node/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── node-modules-inspector/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── nodemon/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── npm-package-json-lint/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── nuxt/
│ │ │ │ │ ├── helpers.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── nx/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── nyc/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── oclif/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── openapi-ts/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── oxfmt/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── oxlint/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── parcel/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── payload/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── playwright/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── playwright-ct/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── playwright-test/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── plop/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── pm2/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── pnpm/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── postcss/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── preconstruct/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── prettier/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── prisma/
│ │ │ │ │ ├── compiler.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── qwik/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── resolveFromAST.ts
│ │ │ │ ├── raycast/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── react-cosmos/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── react-native/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── react-router/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── relay/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── release-it/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── remark/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── remix/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── rollup/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── rsbuild/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── rslib/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── rspack/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── rstest/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── sanity/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── semantic-release/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── sentry/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── simple-git-hooks/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── size-limit/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── sst/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── resolveFromAST.ts
│ │ │ │ ├── starlight/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── resolveFromAST.ts
│ │ │ │ ├── storybook/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── stryker/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── stylelint/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── svelte/
│ │ │ │ │ ├── compiler.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── sveltekit/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── svgo/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── svgr/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── swc/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── syncpack/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── tailwind/
│ │ │ │ │ ├── compiler.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── tanstack-router/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── taskfile/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── travis/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── ts-node/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── tsdown/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── resolveFromAST.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── tsup/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── resolveFromAST.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── tsx/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── typedoc/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── typescript/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── unbuild/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── unocss/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── vercel-og/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── vike/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── vite/
│ │ │ │ │ ├── helpers.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── visitors/
│ │ │ │ │ └── importMetaGlob.ts
│ │ │ │ ├── vitepress/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── vitest/
│ │ │ │ │ ├── helpers.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── vue/
│ │ │ │ │ ├── compiler.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── webdriver-io/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── webpack/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── types.ts
│ │ │ │ │ └── visitors/
│ │ │ │ │ └── requireContext.ts
│ │ │ │ ├── wireit/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── wrangler/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── xo/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── yarn/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── yorkie/
│ │ │ │ │ └── index.ts
│ │ │ │ └── zx/
│ │ │ │ ├── index.ts
│ │ │ │ └── visitors/
│ │ │ │ └── zx.ts
│ │ │ ├── plugins.ts
│ │ │ ├── reporters/
│ │ │ │ ├── codeclimate.ts
│ │ │ │ ├── codeowners.ts
│ │ │ │ ├── compact.ts
│ │ │ │ ├── disclosure.ts
│ │ │ │ ├── github-actions.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── json.ts
│ │ │ │ ├── markdown.ts
│ │ │ │ ├── symbols.ts
│ │ │ │ ├── trace.ts
│ │ │ │ ├── util/
│ │ │ │ │ ├── configuration-hints.ts
│ │ │ │ │ └── util.ts
│ │ │ │ └── watch.ts
│ │ │ ├── run.ts
│ │ │ ├── schema/
│ │ │ │ ├── configuration.ts
│ │ │ │ └── plugins.ts
│ │ │ ├── session/
│ │ │ │ ├── build-maps.ts
│ │ │ │ ├── file-descriptor.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── package-json-descriptor.ts
│ │ │ │ ├── session.ts
│ │ │ │ └── types.ts
│ │ │ ├── types/
│ │ │ │ ├── PluginNames.ts
│ │ │ │ ├── args.ts
│ │ │ │ ├── config.ts
│ │ │ │ ├── entries.ts
│ │ │ │ ├── exports.ts
│ │ │ │ ├── issues.ts
│ │ │ │ ├── module-graph.ts
│ │ │ │ ├── options.ts
│ │ │ │ ├── package-json.ts
│ │ │ │ ├── project.ts
│ │ │ │ ├── tsconfig-json.ts
│ │ │ │ └── workspace.ts
│ │ │ ├── types.ts
│ │ │ ├── typescript/
│ │ │ │ ├── SourceFileManager.ts
│ │ │ │ ├── ast-helpers.ts
│ │ │ │ ├── follow-imports.ts
│ │ │ │ ├── get-imports-and-exports.ts
│ │ │ │ ├── resolve-module-names.ts
│ │ │ │ └── visitors/
│ │ │ │ ├── calls.ts
│ │ │ │ ├── exports.ts
│ │ │ │ ├── helpers.ts
│ │ │ │ ├── imports.ts
│ │ │ │ ├── jsdoc.ts
│ │ │ │ ├── local-refs.ts
│ │ │ │ ├── members.ts
│ │ │ │ ├── script-visitors.ts
│ │ │ │ └── walk.ts
│ │ │ ├── util/
│ │ │ │ ├── Performance.ts
│ │ │ │ ├── array.ts
│ │ │ │ ├── catalog.ts
│ │ │ │ ├── cli-arguments.ts
│ │ │ │ ├── codeowners.ts
│ │ │ │ ├── create-input-handler.ts
│ │ │ │ ├── create-options.ts
│ │ │ │ ├── create-workspace-graph.ts
│ │ │ │ ├── debug.ts
│ │ │ │ ├── empty.ts
│ │ │ │ ├── errors.ts
│ │ │ │ ├── file-entry-cache.ts
│ │ │ │ ├── fs.ts
│ │ │ │ ├── get-included-issue-types.ts
│ │ │ │ ├── git.ts
│ │ │ │ ├── glob-core.ts
│ │ │ │ ├── glob.ts
│ │ │ │ ├── graph-sequencer.ts
│ │ │ │ ├── input.ts
│ │ │ │ ├── issue-initializers.ts
│ │ │ │ ├── jiti.ts
│ │ │ │ ├── load-config.ts
│ │ │ │ ├── load-tsconfig.ts
│ │ │ │ ├── loader.ts
│ │ │ │ ├── log.ts
│ │ │ │ ├── map-workspaces.ts
│ │ │ │ ├── math.ts
│ │ │ │ ├── module-graph.ts
│ │ │ │ ├── modules.ts
│ │ │ │ ├── object.ts
│ │ │ │ ├── package-json.ts
│ │ │ │ ├── package-name.ts
│ │ │ │ ├── parse-and-convert-gitignores.ts
│ │ │ │ ├── path.ts
│ │ │ │ ├── plugin-config.ts
│ │ │ │ ├── plugin.ts
│ │ │ │ ├── regex.ts
│ │ │ │ ├── remove-export.ts
│ │ │ │ ├── reporter.ts
│ │ │ │ ├── require.ts
│ │ │ │ ├── resolve.ts
│ │ │ │ ├── string.ts
│ │ │ │ ├── table.ts
│ │ │ │ ├── tag.ts
│ │ │ │ ├── to-source-path.ts
│ │ │ │ ├── trace.ts
│ │ │ │ ├── watch.ts
│ │ │ │ ├── workspace-file-filter.ts
│ │ │ │ ├── workspace-selectors.ts
│ │ │ │ └── workspace.ts
│ │ │ └── version.ts
│ │ ├── test/
│ │ │ ├── barrel-namespace-chain.test.ts
│ │ │ ├── catalog.empty.test.ts
│ │ │ ├── catalog.package-json.test.ts
│ │ │ ├── catalog.pnpm.test.ts
│ │ │ ├── catalog.yarn.test.ts
│ │ │ ├── cli/
│ │ │ │ ├── cli-config.test.ts
│ │ │ │ ├── cli-include.test.ts
│ │ │ │ ├── cli-preprocessor.test.ts
│ │ │ │ ├── cli-reporter-codeclimate.test.ts
│ │ │ │ ├── cli-reporter-codeclimate2.test.ts
│ │ │ │ ├── cli-reporter-codeclimate3.test.ts
│ │ │ │ ├── cli-reporter-codeclimate4.test.ts
│ │ │ │ ├── cli-reporter-compact.test.ts
│ │ │ │ ├── cli-reporter-github-actions.test.ts
│ │ │ │ ├── cli-reporter-json-catalog.test.ts
│ │ │ │ ├── cli-reporter-json.test.ts
│ │ │ │ ├── cli-reporter-json2.test.ts
│ │ │ │ ├── cli-reporter-json3.test.ts
│ │ │ │ ├── cli-reporter-json4.test.ts
│ │ │ │ ├── cli-reporter-markdown.test.ts
│ │ │ │ ├── cli-reporter-symbols-catalog.test.ts
│ │ │ │ ├── cli-reporter-symbols-pathlike.test.ts
│ │ │ │ ├── cli-reporter.test.ts
│ │ │ │ ├── cli-trace.test.ts
│ │ │ │ ├── cli-treat-config-hints-as-errors.test.ts
│ │ │ │ └── cli.test.ts
│ │ │ ├── commonjs-tsconfig.test.ts
│ │ │ ├── commonjs.test.ts
│ │ │ ├── compilers.manual.test.ts
│ │ │ ├── compilers.prisma.test.ts
│ │ │ ├── compilers.scss.test.ts
│ │ │ ├── compilers.tailwind.test.ts
│ │ │ ├── compilers.test.ts
│ │ │ ├── configuration-hints.test.ts
│ │ │ ├── configuration-hints2.test.ts
│ │ │ ├── cross-workspace-inputs.test.ts
│ │ │ ├── custom-paths-workspaces.test.ts
│ │ │ ├── definitely-typed.test.ts
│ │ │ ├── dependencies-types.test.ts
│ │ │ ├── dependencies.test.ts
│ │ │ ├── dts-baseurl-implicit-relative.test.ts
│ │ │ ├── dts-compiled.test.ts
│ │ │ ├── dts.test.ts
│ │ │ ├── duplicate-dependencies.test.ts
│ │ │ ├── duplicate-exports-alias.test.ts
│ │ │ ├── empty-main.test.ts
│ │ │ ├── entry-exports-enum-members.test.ts
│ │ │ ├── entry-exports-namespace.test.ts
│ │ │ ├── entry-files.test.ts
│ │ │ ├── entry-js.test.ts
│ │ │ ├── enum-members-enumerated.test.ts
│ │ │ ├── enum-members.test.ts
│ │ │ ├── export-spread.test.ts
│ │ │ ├── exports-default-interface.test.ts
│ │ │ ├── exports-default-type.test.ts
│ │ │ ├── exports-special-characters.test.ts
│ │ │ ├── exports-value-refs-default.test.ts
│ │ │ ├── exports-value-refs.test.ts
│ │ │ ├── exports.test.ts
│ │ │ ├── extensions-css-ts.test.ts
│ │ │ ├── fix/
│ │ │ │ ├── fix-catalog-json-root.test.ts
│ │ │ │ ├── fix-catalog-json.test.ts
│ │ │ │ ├── fix-catalog-yaml.test.ts
│ │ │ │ ├── fix-exclude-dependencies.test.ts
│ │ │ │ ├── fix-members.test.ts
│ │ │ │ ├── fix-workspaces.test.ts
│ │ │ │ ├── fix.test.ts
│ │ │ │ └── format.test.ts
│ │ │ ├── git-branch-file.test.ts
│ │ │ ├── gitignore.test.ts
│ │ │ ├── graph-explorer/
│ │ │ │ ├── contention.test.ts
│ │ │ │ ├── cycles.test.ts
│ │ │ │ ├── trace-export.test.ts
│ │ │ │ ├── walk-down.test.ts
│ │ │ │ └── walk-up.test.ts
│ │ │ ├── helpers/
│ │ │ │ ├── assertAndRemoveProperty.ts
│ │ │ │ ├── baseCounters.ts
│ │ │ │ ├── baseNodeObjects.ts
│ │ │ │ ├── copy-fixture.ts
│ │ │ │ ├── create-options.ts
│ │ │ │ ├── diff.ts
│ │ │ │ ├── exec.ts
│ │ │ │ └── resolve.ts
│ │ │ ├── ignore-dependencies-binaries-json.test.ts
│ │ │ ├── ignore-dependencies-binaries.test.ts
│ │ │ ├── ignore-exports-used-in-file-alias-exclude.test.ts
│ │ │ ├── ignore-exports-used-in-file-id-chars.test.ts
│ │ │ ├── ignore-exports-used-in-file-id-underscores.test.ts
│ │ │ ├── ignore-exports-used-in-file-re-export.test.ts
│ │ │ ├── ignore-exports-used-in-file-shorthand.test.ts
│ │ │ ├── ignore-exports-used-in-file-some.test.ts
│ │ │ ├── ignore-exports-used-in-file-typeof-class.test.ts
│ │ │ ├── ignore-exports-used-in-file.test.ts
│ │ │ ├── ignore-files.test.ts
│ │ │ ├── ignore-issues.test.ts
│ │ │ ├── ignore-members.test.ts
│ │ │ ├── ignore-negated.test.ts
│ │ │ ├── ignore-patterns.test.ts
│ │ │ ├── ignore-unresolved.test.ts
│ │ │ ├── ignore-unresolved2.test.ts
│ │ │ ├── import-equals.test.ts
│ │ │ ├── import-errors.test.ts
│ │ │ ├── import-meta-glob.test.ts
│ │ │ ├── import-named-default-id.test.ts
│ │ │ ├── import-star-iteration.test.ts
│ │ │ ├── imports-destructure-spread.test.ts
│ │ │ ├── imports-dynamic-access.test.ts
│ │ │ ├── imports-namespace-jsx.test.ts
│ │ │ ├── imports-namespace-with-nsexports.test.ts
│ │ │ ├── imports-namespace.test.ts
│ │ │ ├── imports-opaque.test.ts
│ │ │ ├── imports-prop-access-call.test.ts
│ │ │ ├── imports-self.test.ts
│ │ │ ├── imports-typeof.test.ts
│ │ │ ├── imports.test.ts
│ │ │ ├── include-entry-exports-scripts.test.ts
│ │ │ ├── include-entry-exports.test.ts
│ │ │ ├── include-entry-reexports.test.ts
│ │ │ ├── include-libs.test.ts
│ │ │ ├── js-only.test.ts
│ │ │ ├── jsdoc-exports.test.ts
│ │ │ ├── jsdoc.test.ts
│ │ │ ├── jsx.test.ts
│ │ │ ├── module-block.test.ts
│ │ │ ├── module-register.test.ts
│ │ │ ├── module-resolution-baseurl-implicit-relative.test.ts
│ │ │ ├── module-resolution-non-std-absolute.test.ts
│ │ │ ├── module-resolution-non-std-implicit.test.ts
│ │ │ ├── module-resolution-non-std.test.ts
│ │ │ ├── module-resolution-tsconfig-paths.test.ts
│ │ │ ├── negated-production-paths.test.ts
│ │ │ ├── npm-scripts.test.ts
│ │ │ ├── ns-spread-reexport.test.ts
│ │ │ ├── package-entry-points.test.ts
│ │ │ ├── path-aliases.test.ts
│ │ │ ├── path-aliases2.test.ts
│ │ │ ├── pathless.test.ts
│ │ │ ├── peer-dependencies-circular.test.ts
│ │ │ ├── peer-dependencies-optional-host.test.ts
│ │ │ ├── peer-dependencies-optional-ignored.test.ts
│ │ │ ├── peer-dependencies-optional-strict.test.ts
│ │ │ ├── peer-dependencies-optional.test.ts
│ │ │ ├── peer-dependencies.test.ts
│ │ │ ├── plugin-config.test.ts
│ │ │ ├── plugin-disable.test.ts
│ │ │ ├── plugin-negated-entry-globs.test.ts
│ │ │ ├── plugin-overlap.test.ts
│ │ │ ├── plugins/
│ │ │ │ ├── _template.test.ts
│ │ │ │ ├── angular.test.ts
│ │ │ │ ├── angular2.test.ts
│ │ │ │ ├── angular3.test.ts
│ │ │ │ ├── astro-db.test.ts
│ │ │ │ ├── astro-og-canvas.test.ts
│ │ │ │ ├── astro-sharp-image-service.test.ts
│ │ │ │ ├── astro.test.ts
│ │ │ │ ├── ava.test.ts
│ │ │ │ ├── ava2.test.ts
│ │ │ │ ├── ava3.test.ts
│ │ │ │ ├── babel.test.ts
│ │ │ │ ├── biome-workspace.test.ts
│ │ │ │ ├── biome.test.ts
│ │ │ │ ├── bumpp.test.ts
│ │ │ │ ├── bun.test.ts
│ │ │ │ ├── bun2.test.ts
│ │ │ │ ├── bun3.test.ts
│ │ │ │ ├── bun4.test.ts
│ │ │ │ ├── capacitor.test.ts
│ │ │ │ ├── changelogen.test.ts
│ │ │ │ ├── changelogithub.test.ts
│ │ │ │ ├── changesets.test.ts
│ │ │ │ ├── commitizen.test.ts
│ │ │ │ ├── commitlint.test.ts
│ │ │ │ ├── convex.test.ts
│ │ │ │ ├── create-typescript-app.test.ts
│ │ │ │ ├── cspell.test.ts
│ │ │ │ ├── cucumber.test.ts
│ │ │ │ ├── cypress-multi-reporter.test.ts
│ │ │ │ ├── cypress.test.ts
│ │ │ │ ├── cypress2.test.ts
│ │ │ │ ├── danger.test.ts
│ │ │ │ ├── dependency-cruiser.test.ts
│ │ │ │ ├── docusaurus.test.ts
│ │ │ │ ├── drizzle.test.ts
│ │ │ │ ├── eleventy.test.ts
│ │ │ │ ├── eleventy2.test.ts
│ │ │ │ ├── eleventy3.test.ts
│ │ │ │ ├── eleventy4.test.ts
│ │ │ │ ├── eslint.test.ts
│ │ │ │ ├── eslint2.test.ts
│ │ │ │ ├── eslint3.test.ts
│ │ │ │ ├── eslint4.test.ts
│ │ │ │ ├── eslint5.test.ts
│ │ │ │ ├── expo.test.ts
│ │ │ │ ├── expo2.test.ts
│ │ │ │ ├── expo3.test.ts
│ │ │ │ ├── expressive-code.test.ts
│ │ │ │ ├── fooi.test.ts
│ │ │ │ ├── gatsby.test.ts
│ │ │ │ ├── github-action.test.ts
│ │ │ │ ├── github-actions-workspaces.test.ts
│ │ │ │ ├── github-actions.test.ts
│ │ │ │ ├── graphql-codegen-graphql-config.test.ts
│ │ │ │ ├── graphql-codegen-graphql-config2.test.ts
│ │ │ │ ├── graphql-codegen.test.ts
│ │ │ │ ├── hardhat.test.ts
│ │ │ │ ├── husky-legacy.test.ts
│ │ │ │ ├── husky-v8.test.ts
│ │ │ │ ├── husky-v9-1.test.ts
│ │ │ │ ├── husky-v9.test.ts
│ │ │ │ ├── i18next-parser.test.ts
│ │ │ │ ├── jest.test.ts
│ │ │ │ ├── jest2.test.ts
│ │ │ │ ├── jest3.test.ts
│ │ │ │ ├── karma.test.ts
│ │ │ │ ├── karma2.test.ts
│ │ │ │ ├── karma3.test.ts
│ │ │ │ ├── knex.test.ts
│ │ │ │ ├── ladle.test.ts
│ │ │ │ ├── lefthook-ci.test.ts
│ │ │ │ ├── lefthook-v1.test.ts
│ │ │ │ ├── lefthook.test.ts
│ │ │ │ ├── lint-staged.test.ts
│ │ │ │ ├── linthtml.test.ts
│ │ │ │ ├── lockfile-lint.test.ts
│ │ │ │ ├── lost-pixel.test.ts
│ │ │ │ ├── markdownlint.test.ts
│ │ │ │ ├── mdx.test.ts
│ │ │ │ ├── mdxlint.test.ts
│ │ │ │ ├── metro-defaults.test.ts
│ │ │ │ ├── metro-react-native.test.ts
│ │ │ │ ├── metro.test.ts
│ │ │ │ ├── mocha.test.ts
│ │ │ │ ├── moonrepo.test.ts
│ │ │ │ ├── msw.test.ts
│ │ │ │ ├── nano-staged.test.ts
│ │ │ │ ├── nest.test.ts
│ │ │ │ ├── netlify.test.ts
│ │ │ │ ├── next-intl.test.ts
│ │ │ │ ├── next-mdx.test.ts
│ │ │ │ ├── next-middleware.test.ts
│ │ │ │ ├── next-page-extensions.test.ts
│ │ │ │ ├── next.test.ts
│ │ │ │ ├── nitro.test.ts
│ │ │ │ ├── node-modules-inspector.test.ts
│ │ │ │ ├── node-test-runner.test.ts
│ │ │ │ ├── node.test.ts
│ │ │ │ ├── nodemon.test.ts
│ │ │ │ ├── npm-package-json-lint.test.ts
│ │ │ │ ├── nuxt-auto-import-disabled.test.ts
│ │ │ │ ├── nuxt-auto-import.test.ts
│ │ │ │ ├── nuxt-config.test.ts
│ │ │ │ ├── nuxt.test.ts
│ │ │ │ ├── nx-crystal.test.ts
│ │ │ │ ├── nx.test.ts
│ │ │ │ ├── nyc.test.ts
│ │ │ │ ├── oclif.test.ts
│ │ │ │ ├── openapi-ts.test.ts
│ │ │ │ ├── oxfmt.test.ts
│ │ │ │ ├── oxlint.test.ts
│ │ │ │ ├── parcel.test.ts
│ │ │ │ ├── payload.test.ts
│ │ │ │ ├── playwright-ct.test.ts
│ │ │ │ ├── playwright-ct2.test.ts
│ │ │ │ ├── playwright.test.ts
│ │ │ │ ├── playwright2.test.ts
│ │ │ │ ├── plop.test.ts
│ │ │ │ ├── pm2.test.ts
│ │ │ │ ├── pnpm.test.ts
│ │ │ │ ├── pnpm2.test.ts
│ │ │ │ ├── postcss-cjs.test.ts
│ │ │ │ ├── postcss-next.test.ts
│ │ │ │ ├── postcss-tailwindcss.test.ts
│ │ │ │ ├── postcss-tailwindcss2.test.ts
│ │ │ │ ├── postcss.test.ts
│ │ │ │ ├── preconstruct.test.ts
│ │ │ │ ├── prettier-re-exports.test.ts
│ │ │ │ ├── prettier.test.ts
│ │ │ │ ├── prisma.test.ts
│ │ │ │ ├── prisma2.test.ts
│ │ │ │ ├── qwik.test.ts
│ │ │ │ ├── raycast.test.ts
│ │ │ │ ├── react-cosmos.test.ts
│ │ │ │ ├── react-native.test.ts
│ │ │ │ ├── react-router.test.ts
│ │ │ │ ├── relay.test.ts
│ │ │ │ ├── relay2.test.ts
│ │ │ │ ├── release-it.test.ts
│ │ │ │ ├── remark.test.ts
│ │ │ │ ├── remix.test.ts
│ │ │ │ ├── rollup.test.ts
│ │ │ │ ├── rsbuild.test.ts
│ │ │ │ ├── rslib.test.ts
│ │ │ │ ├── rspack.test.ts
│ │ │ │ ├── rstest.test.ts
│ │ │ │ ├── rstest2.test.ts
│ │ │ │ ├── sanity.test.ts
│ │ │ │ ├── semantic-release.test.ts
│ │ │ │ ├── sentry.test.ts
│ │ │ │ ├── simple-git-hooks.test.ts
│ │ │ │ ├── size-limit.test.ts
│ │ │ │ ├── sst.test.ts
│ │ │ │ ├── sst2.test.ts
│ │ │ │ ├── starlight.test.ts
│ │ │ │ ├── storybook.test.ts
│ │ │ │ ├── storybook2.test.ts
│ │ │ │ ├── stryker.test.ts
│ │ │ │ ├── stylelint.test.ts
│ │ │ │ ├── stylelint2.test.ts
│ │ │ │ ├── stylelint3.test.ts
│ │ │ │ ├── svelte.test.ts
│ │ │ │ ├── sveltekit.test.ts
│ │ │ │ ├── svgo.test.ts
│ │ │ │ ├── svgr.test.ts
│ │ │ │ ├── swc.test.ts
│ │ │ │ ├── syncpack.test.ts
│ │ │ │ ├── tailwind.test.ts
│ │ │ │ ├── tailwind2.test.ts
│ │ │ │ ├── tanstack-router.test.ts
│ │ │ │ ├── taskfile.test.ts
│ │ │ │ ├── taskfile2.test.ts
│ │ │ │ ├── travis.test.ts
│ │ │ │ ├── tsdown.test.ts
│ │ │ │ ├── tsgo.test.ts
│ │ │ │ ├── tsup.test.ts
│ │ │ │ ├── tsx.test.ts
│ │ │ │ ├── typedoc.test.ts
│ │ │ │ ├── typescript.test.ts
│ │ │ │ ├── typescript2.test.ts
│ │ │ │ ├── unbuild.test.ts
│ │ │ │ ├── unocss.test.ts
│ │ │ │ ├── vercel-og.test.ts
│ │ │ │ ├── vike.test.ts
│ │ │ │ ├── vite.test.ts
│ │ │ │ ├── vite2.test.ts
│ │ │ │ ├── vite3.test.ts
│ │ │ │ ├── vite4.test.ts
│ │ │ │ ├── vitepress.test.ts
│ │ │ │ ├── vitest-npm-script.test.ts
│ │ │ │ ├── vitest.test.ts
│ │ │ │ ├── vitest2.test.ts
│ │ │ │ ├── vitest3.test.ts
│ │ │ │ ├── vitest4.test.ts
│ │ │ │ ├── vitest5.test.ts
│ │ │ │ ├── vitest6.test.ts
│ │ │ │ ├── vitest7.test.ts
│ │ │ │ ├── vitest8.test.ts
│ │ │ │ ├── vitest9.test.ts
│ │ │ │ ├── vue-webpack.test.ts
│ │ │ │ ├── vue.test.ts
│ │ │ │ ├── webdriver-io.test.ts
│ │ │ │ ├── webpack-cli.test.ts
│ │ │ │ ├── webpack-re-exports.test.ts
│ │ │ │ ├── webpack.test.ts
│ │ │ │ ├── webpack2.test.ts
│ │ │ │ ├── wireit.test.ts
│ │ │ │ ├── wrangler.test.ts
│ │ │ │ ├── xo.test.ts
│ │ │ │ ├── yarn-berry.test.ts
│ │ │ │ ├── yarn.test.ts
│ │ │ │ └── yorkie.test.ts
│ │ │ ├── pragma.test.ts
│ │ │ ├── re-exports-aliased-ns.test.ts
│ │ │ ├── re-exports-cjs.test.ts
│ │ │ ├── re-exports-deep.test.ts
│ │ │ ├── re-exports-default-renamed-deep.test.ts
│ │ │ ├── re-exports-default-renamed.test.ts
│ │ │ ├── re-exports-destructure-spread.test.ts
│ │ │ ├── re-exports-enum-members-workspace.test.ts
│ │ │ ├── re-exports-enum-unused.test.ts
│ │ │ ├── re-exports-enum.test.ts
│ │ │ ├── re-exports-export-declaration.test.ts
│ │ │ ├── re-exports-export-ns.test.ts
│ │ │ ├── re-exports-ignore-exports-used-in-file.test.ts
│ │ │ ├── re-exports-ns-member.test.ts
│ │ │ ├── re-exports-pseudo.test.ts
│ │ │ ├── re-exports-public.test.ts
│ │ │ ├── re-exports-recursive.test.ts
│ │ │ ├── re-exports-renamed.test.ts
│ │ │ ├── re-exports-spread.test.ts
│ │ │ ├── re-exports-twice.test.ts
│ │ │ ├── re-exports-with-decorator.test.ts
│ │ │ ├── re-exports.test.ts
│ │ │ ├── rules.test.ts
│ │ │ ├── script-visitors-bun.test.ts
│ │ │ ├── script-visitors-execa.test.ts
│ │ │ ├── script-visitors-zx.test.ts
│ │ │ ├── self-reference-from-plugin.test.ts
│ │ │ ├── self-reference.test.ts
│ │ │ ├── session/
│ │ │ │ ├── session.contention.test.ts
│ │ │ │ ├── session.file-changes.test.ts
│ │ │ │ ├── session.re-exports.test.ts
│ │ │ │ ├── session.test.ts
│ │ │ │ └── util.ts
│ │ │ ├── session-dependencies.test.ts
│ │ │ ├── skip-exports-analysis.test.ts
│ │ │ ├── subpath-import-from-plugin.test.ts
│ │ │ ├── subpath-import.test.ts
│ │ │ ├── subpath-imports-outdir.test.ts
│ │ │ ├── subpath-patterns.test.ts
│ │ │ ├── tagged-template-literal.test.ts
│ │ │ ├── tags-cli.test.ts
│ │ │ ├── tags-exclude.test.ts
│ │ │ ├── tags-include.test.ts
│ │ │ ├── ts-namespace.test.ts
│ │ │ ├── tsc-files-mode.test.ts
│ │ │ ├── tsconfig-extends.test.ts
│ │ │ ├── tsconfig-include-dir.test.ts
│ │ │ ├── tsconfig-nested-paths.test.ts
│ │ │ ├── tsconfig-paths-extends.test.ts
│ │ │ ├── tsconfig-preset-strict.test.ts
│ │ │ ├── tsconfig-rootdirs.test.ts
│ │ │ ├── tsconfig.json
│ │ │ ├── type-in-type.test.ts
│ │ │ ├── type-in-value-export.test.ts
│ │ │ ├── types.test.ts
│ │ │ ├── unresolved-rtl.test.ts
│ │ │ ├── url-import-meta-url.test.ts
│ │ │ ├── util/
│ │ │ │ ├── codeowners.test.ts
│ │ │ │ ├── convert-gitignore-patterns.test.ts
│ │ │ │ ├── find-and-parse-gitignores.test.ts
│ │ │ │ ├── get-included-issue-types.test.ts
│ │ │ │ ├── get-inputs-from-scripts.test.ts
│ │ │ │ ├── graph-sequencer.test.ts
│ │ │ │ ├── has-strictly-ns-references.test.ts
│ │ │ │ ├── load.test.ts
│ │ │ │ ├── modules.test.ts
│ │ │ │ ├── remove-export.test.ts
│ │ │ │ ├── serialize.test.ts
│ │ │ │ ├── string.test.ts
│ │ │ │ ├── table.test.ts
│ │ │ │ ├── workspace-selectors.test.ts
│ │ │ │ └── workspace.test.ts
│ │ │ ├── workspace-selectors-errors.test.ts
│ │ │ ├── workspace-selectors-root.test.ts
│ │ │ ├── workspace-selectors.test.ts
│ │ │ ├── workspaces-circular-symlinks.test.ts
│ │ │ ├── workspaces-circular.test.ts
│ │ │ ├── workspaces-cross-reference.test.ts
│ │ │ ├── workspaces-dts.test.ts
│ │ │ ├── workspaces-entry-files.test.ts
│ │ │ ├── workspaces-ignored.test.ts
│ │ │ ├── workspaces-include-entry-exports.test.ts
│ │ │ ├── workspaces-module-resolution.test.ts
│ │ │ ├── workspaces-nested.test.ts
│ │ │ ├── workspaces-noconfig-plugin.test.ts
│ │ │ ├── workspaces-paths-compilers.test.ts
│ │ │ ├── workspaces-paths.test.ts
│ │ │ ├── workspaces-plugin-circular.test.ts
│ │ │ ├── workspaces-plugin-config.test.ts
│ │ │ ├── workspaces-plugin-overlap.test.ts
│ │ │ ├── workspaces-pnpm.test.ts
│ │ │ ├── workspaces-self-reference.test.ts
│ │ │ ├── workspaces-tooling.test.ts
│ │ │ ├── workspaces.test.ts
│ │ │ └── zero-config.test.ts
│ │ └── tsconfig.json
│ ├── language-server/
│ │ ├── README.md
│ │ ├── license
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── cli.js
│ │ │ ├── code-actions.js
│ │ │ ├── constants.js
│ │ │ ├── diagnostics.js
│ │ │ ├── index.js
│ │ │ ├── server.js
│ │ │ └── types.d.ts
│ │ └── tsconfig.json
│ ├── mcp-server/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── license
│ │ ├── package.json
│ │ └── src/
│ │ ├── cli.js
│ │ ├── curated-resources.js
│ │ ├── server.js
│ │ ├── texts.js
│ │ └── tools.js
│ └── vscode-knip/
│ ├── .gitignore
│ ├── .release-it.json
│ ├── README.md
│ ├── license
│ ├── package.json
│ ├── scripts/
│ │ ├── publish.js
│ │ └── sync-from-mcp.js
│ ├── src/
│ │ ├── collect-dependency-hover-snippets.js
│ │ ├── collect-export-hover-snippets.js
│ │ ├── index.js
│ │ ├── render-dependency-hover.js
│ │ ├── render-export-hover.js
│ │ ├── tools.js
│ │ ├── tree-view-base.js
│ │ ├── tree-view-exports.js
│ │ └── tree-view-imports.js
│ ├── test/
│ │ ├── extension.test.mjs
│ │ ├── index.mjs
│ │ └── run.mjs
│ └── tsconfig.json
├── pnpm-workspace.yaml
├── release.sh
└── templates/
├── demo/
│ ├── monorepo/
│ │ ├── .gitignore
│ │ ├── knip.ts
│ │ ├── package.json
│ │ ├── packages/
│ │ │ ├── client/
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ └── index.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── server/
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ └── index.ts
│ │ │ │ └── tsconfig.json
│ │ │ └── shared/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── exports.ts
│ │ │ │ ├── import-numbers.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── numbers.ts
│ │ │ │ └── used-fn.ts
│ │ │ └── tsconfig.json
│ │ └── tsconfig.json
│ └── script/
│ └── demo.lua
├── issue-reproduction/
│ ├── basic/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── index.ts
│ │ ├── knip.json
│ │ ├── package.json
│ │ └── tsconfig.json
│ └── monorepo/
│ ├── .gitignore
│ ├── README.md
│ ├── knip.json
│ ├── package.json
│ ├── packages/
│ │ ├── client/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ └── index.ts
│ │ │ └── tsconfig.json
│ │ └── lib/
│ │ ├── package.json
│ │ ├── src/
│ │ │ └── index.ts
│ │ └── tsconfig.json
│ └── tsconfig.json
├── language-server-client/
│ ├── .gitignore
│ ├── knip.json
│ ├── package.json
│ ├── packages/
│ │ ├── client/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── blend.js
│ │ │ │ ├── index.ts
│ │ │ │ ├── pick.js
│ │ │ │ └── reap.js
│ │ │ └── tsconfig.json
│ │ ├── server/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── branch-definition.ts
│ │ │ │ ├── branch-left.ts
│ │ │ │ ├── branch-right.ts
│ │ │ │ ├── branch.ts
│ │ │ │ ├── circular-a.ts
│ │ │ │ ├── circular-b.ts
│ │ │ │ ├── circular-c.ts
│ │ │ │ ├── conflict-1.ts
│ │ │ │ ├── conflict-2.ts
│ │ │ │ ├── conflict-3.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── overload-1.ts
│ │ │ │ ├── overload-2.ts
│ │ │ │ └── overload-3.ts
│ │ │ └── tsconfig.json
│ │ └── shared/
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── constants.ts
│ │ │ ├── fruits.ts
│ │ │ ├── helpers.ts
│ │ │ ├── index.ts
│ │ │ └── unused.ts
│ │ └── tsconfig.json
│ └── tsconfig.json
└── playground/
├── basic/
│ ├── README.md
│ ├── clutter.ts
│ ├── index.ts
│ ├── package.json
│ ├── tsconfig.json
│ └── util.ts
└── monorepo/
├── .gitignore
├── README.md
├── knip.ts
├── package.json
├── packages/
│ ├── client/
│ │ ├── package.json
│ │ ├── src/
│ │ │ └── index.ts
│ │ └── tsconfig.json
│ ├── server/
│ │ ├── package.json
│ │ ├── src/
│ │ │ └── index.ts
│ │ └── tsconfig.json
│ └── shared/
│ ├── package.json
│ ├── src/
│ │ ├── exports.ts
│ │ ├── index.ts
│ │ └── used-fn.ts
│ └── tsconfig.json
└── tsconfig.json
SYMBOL INDEX (1519 symbols across 463 files)
FILE: packages/docs/remark/fixInternalLinks.ts
type LinkNode (line 5) | interface LinkNode extends Node {
FILE: packages/docs/remark/transformDirectives.ts
type DirectiveNode (line 5) | interface DirectiveNode extends Node {
FILE: packages/docs/scripts/get-monthly-sponsorships-github.ts
type Options (line 5) | type Options = {
type SponsorActivity (line 12) | interface SponsorActivity {
type GraphQLResponse (line 24) | interface GraphQLResponse {
FILE: packages/docs/scripts/get-monthly-sponsorships-opencollective.ts
constant RATE_EUR_TO_USD (line 4) | const RATE_EUR_TO_USD = 1.08;
type Options (line 6) | type Options = {
type Transaction (line 13) | interface Transaction {
type Expense (line 27) | interface Expense {
type GraphQLResponse (line 36) | interface GraphQLResponse {
FILE: packages/docs/scripts/get-monthly-sponsorships.ts
constant START_DATE (line 5) | const START_DATE = new Date('2023-11-01');
constant END_DATE (line 6) | const END_DATE = new Date();
FILE: packages/docs/src/pages/og/[...route].ts
function encodeXML (line 53) | function encodeXML(text: string): string {
function balanceText (line 62) | function balanceText(text: string, maxLen: number): string[] {
FILE: packages/docs/src/pages/sitemap.txt.ts
type Page (line 3) | interface Page {
function GET (line 22) | async function GET(context: APIContext) {
FILE: packages/docs/src/util/post.ts
type Post (line 44) | interface Post {
type UrlEntity (line 69) | interface UrlEntity {
type MentionEntity (line 83) | interface MentionEntity {
type AnnotationEntity (line 90) | interface AnnotationEntity {
type ImageEntity (line 98) | interface ImageEntity {
type User (line 104) | interface User {
type Media (line 111) | interface Media {
type PostWithUser (line 118) | interface PostWithUser extends Post {
type PostResponse (line 123) | interface PostResponse {
FILE: packages/knip/fixtures/barrel-namespace-chain/fn-consumer.ts
function process (line 3) | function process(arg: unknown) { return arg; }
FILE: packages/knip/fixtures/barrel-namespace-chain/utils.ts
method log (line 2) | log(msg: string) { console.log(msg); }
method warn (line 3) | warn(msg: string) { console.warn(msg); }
FILE: packages/knip/fixtures/commonjs-tsconfig/dir/module1.ts
function fn1 (line 1) | function fn1() {
FILE: packages/knip/fixtures/commonjs-tsconfig/dir/module2.ts
function fn2 (line 1) | function fn2() {
FILE: packages/knip/fixtures/commonjs-tsconfig/dir/module3.js
function fn3 (line 1) | function fn3() {
FILE: packages/knip/fixtures/commonjs-tsconfig/dir/script2.js
function identifier (line 1) | function identifier() {}
FILE: packages/knip/fixtures/commonjs-tsconfig/dir/script3.js
function identifier5 (line 1) | function identifier5() {}
function identifier6 (line 2) | function identifier6() {}
FILE: packages/knip/fixtures/commonjs-tsconfig/ts-ext.ts
function fn (line 1) | function fn() {}
FILE: packages/knip/fixtures/commonjs/dir/mod1.js
function identifier (line 1) | function identifier() {}
FILE: packages/knip/fixtures/commonjs/dir/mod2.js
function identifier5 (line 1) | function identifier5() {}
function identifier6 (line 2) | function identifier6() {}
FILE: packages/knip/fixtures/commonjs/dir/mod3.js
function identifier9 (line 1) | function identifier9() {}
function identifier10 (line 2) | function identifier10() {}
FILE: packages/knip/fixtures/commonjs/ts-ext.ts
function fn (line 1) | function fn() {}
FILE: packages/knip/fixtures/compilers/enum.ts
type Enum (line 1) | enum Enum {
FILE: packages/knip/fixtures/dependencies/my-module.ts
function main (line 6) | async function main() {
FILE: packages/knip/fixtures/dts-compiled/src/App.tsx
function App (line 3) | function App() {
FILE: packages/knip/fixtures/dts-compiled/src/ExampleQuery.graphql.d.ts
type ExampleQueryQueryVariables (line 3) | type ExampleQueryQueryVariables = Types.Exact<{ [key: string]: never }>;
type ExampleQueryQuery (line 5) | type ExampleQueryQuery = {
FILE: packages/knip/fixtures/dts-compiled/src/UnusedQuery.graphql.d.ts
type UnusedQueryQueryVariables (line 3) | type UnusedQueryQueryVariables = Types.Exact<{ [key: string]: never }>;
type UnusedQueryQuery (line 5) | type UnusedQueryQuery = {
FILE: packages/knip/fixtures/dts-compiled/src/types.ts
type Exact (line 1) | type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K...
FILE: packages/knip/fixtures/dts/module-augmentation.ts
type AppTheme (line 1) | interface AppTheme {
type Theme (line 6) | interface Theme extends AppTheme {}
FILE: packages/knip/fixtures/dts/types.d.ts
type MyConfig (line 1) | interface MyConfig {
FILE: packages/knip/fixtures/duplicate-exports-alias/specifier-default.ts
function handler (line 1) | function handler() {
FILE: packages/knip/fixtures/entry-exports-enum-members/fruit.ts
type Fruit (line 3) | enum Fruit {
type Farmer (line 8) | interface Farmer {
FILE: packages/knip/fixtures/entry-exports-enum-members/tree.ts
type Tree (line 3) | interface Tree {
FILE: packages/knip/fixtures/entry-js/my-module.ts
type AnyType (line 10) | type AnyType = any;
FILE: packages/knip/fixtures/entry-js/my-namespace.ts
type MyNamespace (line 5) | interface MyNamespace {}
FILE: packages/knip/fixtures/enum-members-enumerated/directions.ts
type Direction (line 1) | enum Direction {
type Route (line 8) | interface Route {
FILE: packages/knip/fixtures/enum-members-enumerated/fruits.ts
type Fruits (line 1) | enum Fruits {
FILE: packages/knip/fixtures/enum-members/index.ts
type EntryEnum (line 7) | enum EntryEnum {
function setCategory (line 12) | function setCategory(cat: Category) {}
type CategoryKey (line 14) | type CategoryKey = keyof typeof Category;
FILE: packages/knip/fixtures/enum-members/members.ts
type UnexportedEnun (line 3) | enum UnexportedEnun {
type MyEnum (line 7) | enum MyEnum {
type Used (line 16) | type Used = EntryEnum;
type TestEnum (line 20) | enum TestEnum {
type Category (line 24) | enum Category {
FILE: packages/knip/fixtures/export-default-type/class.js
class MyClass (line 1) | class MyClass {}
FILE: packages/knip/fixtures/export-default-type/function.js
function fn (line 1) | function fn() {}
FILE: packages/knip/fixtures/exports-default-interface/enum.ts
type MyEnum (line 1) | enum MyEnum {
FILE: packages/knip/fixtures/exports-default-interface/interface.ts
type MyInterface (line 1) | interface MyInterface {
FILE: packages/knip/fixtures/exports-default-interface/type.ts
type MyType (line 1) | type MyType = unknown;
FILE: packages/knip/fixtures/exports-special-characters/exports.ts
class DollarMembers (line 6) | class DollarMembers {
class $Dollar (line 13) | class $Dollar {}
type $DollarType (line 15) | type $DollarType = string;
type Characters (line 17) | enum Characters {
FILE: packages/knip/fixtures/exports-special-characters/index.ts
type Ref (line 3) | type Ref = Characters;
FILE: packages/knip/fixtures/exports-value-refs-default/refs.ts
type Lizard (line 1) | interface Lizard {
class Reptile (line 5) | class Reptile {
type Bird (line 11) | type Bird = {
function logger (line 17) | function logger(s: string) {
function setLogger (line 21) | function setLogger(log: typeof logger): void {
type UnusedTypeInUnusedExport (line 25) | type UnusedTypeInUnusedExport = { id: number };
type UnusedInterface (line 27) | interface UnusedInterface {
class UnusedClass (line 31) | class UnusedClass {}
type UnusedTypeWithClass (line 33) | type UnusedTypeWithClass = typeof UnusedClass;
FILE: packages/knip/fixtures/exports-value-refs/refs.ts
type MyInterface (line 1) | interface MyInterface {
type MyType (line 8) | type MyType = {
class MyClass (line 12) | class MyClass {}
class NotInExportedType (line 14) | class NotInExportedType {}
type FnOptions (line 16) | interface FnOptions {
function fn (line 20) | function fn(n: unknown, options?: FnOptions) {}
type MyInterface2 (line 31) | interface MyInterface2 {
FILE: packages/knip/fixtures/exports/default-named-class.ts
class ClassName (line 1) | class ClassName {}
FILE: packages/knip/fixtures/exports/default-named-function.ts
function functionName (line 1) | function functionName() {}
FILE: packages/knip/fixtures/exports/index.ts
type Used (line 26) | type Used = MyNum | MyString | MyInterface;
function main (line 31) | async function main() {
type EntryFileExportType (line 38) | type EntryFileExportType = any;
FILE: packages/knip/fixtures/exports/my-mix.ts
type MixType (line 3) | interface MixType {}
class MixClass (line 5) | class MixClass {}
FILE: packages/knip/fixtures/exports/my-module.ts
type MyAnyType (line 28) | type MyAnyType = any;
FILE: packages/knip/fixtures/exports/my-namespace.ts
type MyNamespace (line 5) | interface MyNamespace {}
FILE: packages/knip/fixtures/exports/named-exports.ts
function functionName (line 3) | function functionName() {}
class className (line 4) | class className {}
function exportedA (line 9) | function exportedA() {}
function exportedB (line 10) | function exportedB() {}
FILE: packages/knip/fixtures/exports/types.ts
type MyNum (line 1) | type MyNum = number;
type MyString (line 2) | type MyString = string;
type MyEnum (line 3) | enum MyEnum {}
type MyInterface (line 4) | interface MyInterface {}
type MyType (line 6) | type MyType = 1;
FILE: packages/knip/fixtures/fix-members/class.ts
class Rectangle (line 1) | class Rectangle {
method constructor (line 2) | constructor(
method unusedGetter (line 9) | public get unusedGetter(): string {
method unusedSetter (line 13) | private set unusedSetter(w: number) {
method area (line 17) | area() {
FILE: packages/knip/fixtures/fix-members/enums.ts
type Directions (line 1) | enum Directions {
type Fruits (line 8) | enum Fruits {
FILE: packages/knip/fixtures/fix-members/namespaces.ts
function swim (line 4) | function swim() {}
FILE: packages/knip/fixtures/fix-workspaces/exports.ts
type T (line 4) | type T = number;
type U (line 7) | type U = number;
FILE: packages/knip/fixtures/fix-workspaces/ignored.ts
type T (line 4) | type T = number;
FILE: packages/knip/fixtures/fix-workspaces/packages/ignored/exports.ts
type T (line 4) | type T = number;
FILE: packages/knip/fixtures/fix-workspaces/packages/lib/exports.ts
type T (line 4) | type T = number;
type U (line 7) | type U = number;
FILE: packages/knip/fixtures/fix-workspaces/packages/lib/ignored.ts
type T (line 4) | type T = number;
FILE: packages/knip/fixtures/fix/ignored.ts
type T (line 4) | type T = number;
FILE: packages/knip/fixtures/fix/mod.ts
type McInterFace (line 4) | interface McInterFace {}
type McType (line 5) | type McType = {};
type McEnum (line 6) | enum McEnum {}
class MyClass (line 18) | class MyClass {}
type U (line 21) | type U = number;
FILE: packages/knip/fixtures/fix/reexported.ts
type Six (line 12) | type Six = any;
type Seven (line 13) | type Seven = unknown;
type Ten (line 16) | type Ten = unknown[];
FILE: packages/knip/fixtures/ignore-exports-used-in-file-false/imported.ts
type ReferencedInterfaceInternally (line 1) | interface ReferencedInterfaceInternally {
function referencedInternallyFunction (line 5) | function referencedInternallyFunction(value: unknown) {
function usedFunction (line 9) | function usedFunction(options: ReferencedInterfaceInternally) {
function declaredThenExportedDefault (line 13) | function declaredThenExportedDefault() {}
function DeclaredThenExportedNamed (line 16) | function DeclaredThenExportedNamed() {}
FILE: packages/knip/fixtures/ignore-exports-used-in-file-re-export/component.ts
function Wrapper (line 5) | function Wrapper(props: ComponentProps) {
FILE: packages/knip/fixtures/ignore-exports-used-in-file-re-export/interface.ts
type ComponentProps (line 1) | interface ComponentProps {
FILE: packages/knip/fixtures/ignore-exports-used-in-file-shorthand/src/fn.js
function fn (line 1) | function fn() {}
FILE: packages/knip/fixtures/ignore-exports-used-in-file-some/imported.ts
type ReferencedNeverInterface (line 1) | interface ReferencedNeverInterface {
type ReferencedInterfaceInternally (line 5) | interface ReferencedInterfaceInternally {
function referencedInternallyFunction (line 10) | function referencedInternallyFunction(value: unknown) {
function usedFunction (line 14) | function usedFunction(options: ReferencedInterfaceInternally) {
function referencedNeverFunction (line 18) | function referencedNeverFunction() {
FILE: packages/knip/fixtures/ignore-exports-used-in-file-typeof-class/src/api.ts
function logger (line 1) | function logger(): void {}
function setLogger (line 3) | function setLogger(fn: typeof logger): void {
class TreeNode (line 7) | class TreeNode {
class TreeLeaf (line 11) | class TreeLeaf {
function createTree (line 15) | function createTree(): TreeNode {
class Leaf (line 21) | class Leaf {
type Collection (line 25) | interface Collection {
class Node (line 29) | class Node {
type Walker (line 33) | interface Walker {
function internal (line 37) | function internal(w: Walker) {
FILE: packages/knip/fixtures/ignore-exports-used-in-file/computed-access.ts
constant QUERY_KEY (line 1) | const QUERY_KEY = 'live';
FILE: packages/knip/fixtures/ignore-exports-used-in-file/control-flow.ts
constant WARRIOR (line 1) | const WARRIOR = 'warrior';
constant MAGE (line 2) | const MAGE = 'mage';
function selectClass (line 4) | function selectClass(role: string) {
constant BASE_DAMAGE (line 13) | const BASE_DAMAGE = 10;
function computeDamage (line 15) | function computeDamage(multiplier = BASE_DAMAGE) {
FILE: packages/knip/fixtures/ignore-exports-used-in-file/expressions.ts
function embark (line 3) | async function embark() {
FILE: packages/knip/fixtures/ignore-exports-used-in-file/imported.ts
type ReferencedNeverInterface (line 1) | interface ReferencedNeverInterface {
type ReferencedInterfaceInternally (line 5) | interface ReferencedInterfaceInternally {
function referencedInternallyFunction (line 10) | function referencedInternallyFunction(value: unknown) {
function usedFunction (line 14) | function usedFunction(options: ReferencedInterfaceInternally) {
function referencedNeverFunction (line 18) | function referencedNeverFunction() {
function declaredThenExportedDefault (line 22) | function declaredThenExportedDefault() {}
function DeclaredThenExportedNamed (line 25) | function DeclaredThenExportedNamed() {}
class Paladin (line 31) | class Paladin {
FILE: packages/knip/fixtures/ignore-exports-used-in-file/tagged-template.ts
function enchant (line 1) | function enchant(strings: TemplateStringsArray, ...values: unknown[]) {
FILE: packages/knip/fixtures/ignore-issues/src/generated/types.ts
type UnusedType (line 3) | type UnusedType = string;
FILE: packages/knip/fixtures/ignore-issues/src/model.generated.ts
class GeneratedModel (line 2) | class GeneratedModel {
method unusedMethod (line 3) | unusedMethod() {
method anotherUnusedMethod (line 7) | anotherUnusedMethod() {
FILE: packages/knip/fixtures/ignore-issues/src/regular.ts
class RegularClass (line 4) | class RegularClass {
method unusedMethod (line 5) | unusedMethod() {
FILE: packages/knip/fixtures/ignore-members/MyClass.ts
class BaseClass (line 1) | class BaseClass {
method constructor (line 2) | constructor() {}
method init (line 3) | init() {}
method used (line 4) | used() {}
method unused (line 5) | unused() {}
class MyClass (line 8) | class MyClass extends BaseClass {
method constructor (line 9) | constructor() {
method ignored (line 12) | ignored() {}
method init (line 13) | init() {
method implemented (line 16) | implemented() {
FILE: packages/knip/fixtures/ignore-members/enums.ts
type Direction (line 1) | enum Direction {
FILE: packages/knip/fixtures/import-star-iteration/fruit.ts
class Orange (line 1) | class Orange {
class Apple (line 5) | class Apple {
FILE: packages/knip/fixtures/import-star-iteration/vegetables.ts
class Broccoli (line 1) | class Broccoli {
class Spinach (line 5) | class Spinach {
FILE: packages/knip/fixtures/imports-dynamic-access/index.ts
function fn (line 1) | async function fn() {
FILE: packages/knip/fixtures/imports-namespace-with-nsexports/index.ts
function usage (line 18) | function usage() {
FILE: packages/knip/fixtures/imports-namespace/index.ts
function usage (line 25) | function usage() {
FILE: packages/knip/fixtures/imports-opaque/index.ts
function fn (line 1) | function fn(a: any, b: any) {
function asyncFn (line 5) | async function asyncFn(a: any) {
function fnRun (line 24) | function fnRun(load: () => Promise<unknown>) {
FILE: packages/knip/fixtures/imports/import-g.ts
function func (line 1) | function func() {}
FILE: packages/knip/fixtures/imports/index.ts
function main (line 22) | async function main() {
function promiseAll (line 50) | function promiseAll() {
function promiseTail (line 64) | function promiseTail() {
FILE: packages/knip/fixtures/include-entry-exports-scripts/src/pages/index.js
function IndexPage (line 3) | function IndexPage() {
FILE: packages/knip/fixtures/include-entry-exports-scripts/src/script1.ts
function sum (line 1) | function sum(a: number, b: number) {
function multiply (line 5) | function multiply(a: number, b: number) {
FILE: packages/knip/fixtures/include-entry-exports-scripts/src/script2.ts
function subtract (line 1) | function subtract(a: number, b: number) {
FILE: packages/knip/fixtures/include-entry-exports-scripts/src/script3.ts
function calculate (line 3) | function calculate(a: number, b: number) {
FILE: packages/knip/fixtures/include-entry-exports/index.ts
type EntryType (line 5) | type EntryType = {};
type EntryInterface (line 6) | interface EntryInterface {}
type EntryEnum (line 7) | enum EntryEnum {}
FILE: packages/knip/fixtures/jsdoc-exports/module.test.js
function configure (line 6) | function configure(config) {}
FILE: packages/knip/fixtures/jsdoc-exports/module.ts
function overloadFn (line 24) | function overloadFn(x: number | boolean): string | number {
type UsedViaJSDoc (line 37) | interface UsedViaJSDoc {
type UnusedInterface (line 41) | interface UnusedInterface {
type InternalWithLineComment (line 47) | interface InternalWithLineComment {}
FILE: packages/knip/fixtures/jsdoc/index.ts
function fn (line 14) | function fn() {
function doSomething1 (line 24) | function doSomething1(myValue) {
function doSomething2 (line 33) | function doSomething2(myValue) {
function lazyLoad (line 48) | function lazyLoad() {}
FILE: packages/knip/fixtures/jsx/App.tsx
function MainComponent (line 5) | function MainComponent() {
FILE: packages/knip/fixtures/jsx/Component.tsx
function MyComponent (line 3) | function MyComponent() {
FILE: packages/knip/fixtures/load-esm-ts/index.ts
function meow (line 13) | function meow(target: unknown, _: unknown) {}
class Cat (line 16) | class Cat {
method constructor (line 17) | constructor() {
FILE: packages/knip/fixtures/module-block/types.ts
type Identifier (line 2) | type Identifier = number;
type NS_ID (line 6) | type NS_ID = MyNamespace.Identifier;
FILE: packages/knip/fixtures/ns-spread-reexport/aliased-import.ts
function useAliasedResolvers (line 4) | function useAliasedResolvers() {
FILE: packages/knip/fixtures/ns-spread-reexport/consumer.ts
function useUtils (line 4) | function useUtils() {
FILE: packages/knip/fixtures/ns-spread-reexport/destructured.ts
function useAnimal (line 6) | function useAnimal() {
FILE: packages/knip/fixtures/ns-spread-reexport/index.ts
function useResolvers (line 8) | function useResolvers() {
FILE: packages/knip/fixtures/ns-spread-reexport/member-access.ts
function useFruit (line 4) | function useFruit() {
FILE: packages/knip/fixtures/plugins/astro-db/db/seed.ts
function seed (line 4) | async function seed() {
FILE: packages/knip/fixtures/plugins/astro/.astro/types.d.ts
type Render (line 2) | interface Render {
type Render (line 12) | interface Render {
type Flatten (line 24) | type Flatten<T> = T extends { [K: string]: infer U } ? U : never;
type CollectionKey (line 26) | type CollectionKey = keyof AnyEntryMap;
type CollectionEntry (line 27) | type CollectionEntry<C extends CollectionKey> = Flatten<AnyEntryMap[C]>;
type ContentCollectionKey (line 29) | type ContentCollectionKey = keyof ContentEntryMap;
type DataCollectionKey (line 30) | type DataCollectionKey = keyof DataEntryMap;
type ImageFunction (line 33) | type ImageFunction = () => import('astro/zod').ZodObject
type BaseSchemaWithoutEffects (line 51) | type BaseSchemaWithoutEffects =
type BaseSchema (line 57) | type BaseSchema = BaseSchemaWithoutEffects | import('astro/zod').ZodEffects
type SchemaContext (line 59) | type SchemaContext = { image: ImageFunction };
type DataCollectionConfig (line 61) | type DataCollectionConfig<S extends BaseSchema> = {
type ContentCollectionConfig (line 66) | type ContentCollectionConfig<S extends BaseSchema> = {
type CollectionConfig (line 71) | type CollectionConfig<S> = ContentCollectionConfig<S> | DataCollectionCo...
type AllValuesOf (line 75) | type AllValuesOf<T> = T extends any ? T[keyof T] : never;
type ValidContentEntrySlug (line 76) | type ValidContentEntrySlug<C extends keyof ContentEntryMap> = AllValuesO...
type ReturnTypeOrOriginal (line 150) | type ReturnTypeOrOriginal<T> = T extends (...args: any[]) => infer R ? R...
type InferEntrySchema (line 151) | type InferEntrySchema<C extends keyof AnyEntryMap> = import('astro/zod')...
type ContentEntryMap (line 155) | type ContentEntryMap = {
type AnyEntryMap (line 174) | type AnyEntryMap = ContentEntryMap & DataEntryMap;
type ContentConfig (line 176) | type ContentConfig = typeof import('../src/content/config');
FILE: packages/knip/fixtures/plugins/astro/src/consts.ts
constant SITE_TITLE (line 4) | const SITE_TITLE = 'Astro Blog';
constant SITE_DESCRIPTION (line 5) | const SITE_DESCRIPTION = 'Welcome to my website!';
constant UNUSED (line 6) | const UNUSED = true;
FILE: packages/knip/fixtures/plugins/astro/src/pages/rss.xml.js
function GET (line 5) | async function GET(context) {
FILE: packages/knip/fixtures/plugins/cypress-multi-reporter/cypress/support/commands.ts
function login (line 3) | function login() {
FILE: packages/knip/fixtures/plugins/cypress/cypress/support/commands.ts
function login (line 3) | function login() {
FILE: packages/knip/fixtures/plugins/docusaurus/src/pages/index.js
function HomepageHeader (line 8) | function HomepageHeader() {
function Home (line 27) | function Home() {
FILE: packages/knip/fixtures/plugins/expressive-code/app/page.tsx
function Page (line 1) | function Page() {
FILE: packages/knip/fixtures/plugins/nest/src/app.controller.ts
class AppController (line 5) | class AppController {
method constructor (line 6) | constructor(private readonly appService: AppService) {}
method getHello (line 9) | getHello(): string {
FILE: packages/knip/fixtures/plugins/nest/src/app.module.ts
class AppModule (line 10) | class AppModule {}
FILE: packages/knip/fixtures/plugins/nest/src/app.service.ts
class AppService (line 4) | class AppService {
method getHello (line 5) | getHello(): string {
FILE: packages/knip/fixtures/plugins/nest/src/main.ts
function bootstrap (line 4) | async function bootstrap() {
FILE: packages/knip/fixtures/plugins/next-mdx/mdx-components.tsx
function useMDXComponents (line 1) | function useMDXComponents(components) {
FILE: packages/knip/fixtures/plugins/next-middleware/src/app/page.tsx
function Page (line 1) | function Page() {
FILE: packages/knip/fixtures/plugins/next-middleware/src/middleware.ts
function middleware (line 1) | function middleware() {
FILE: packages/knip/fixtures/plugins/next-page-extensions/src/instrumentation.page.ts
function register (line 1) | async function register() {}
FILE: packages/knip/fixtures/plugins/next-page-extensions/src/middleware.page.ts
function middleware (line 1) | function middleware() {}
FILE: packages/knip/fixtures/plugins/next/app/api/auth/route.ts
function GET (line 3) | function GET() {
FILE: packages/knip/fixtures/plugins/next/app/api/auth/util.ts
function helloWorld (line 1) | function helloWorld() {}
FILE: packages/knip/fixtures/plugins/next/app/home/sitemap.ts
function sitemap (line 1) | function sitemap() {
FILE: packages/knip/fixtures/plugins/next/app/sitemap.ts
function sitemap (line 1) | function sitemap() {
FILE: packages/knip/fixtures/plugins/next/app/unused.ts
function unused (line 1) | function unused() {}
FILE: packages/knip/fixtures/plugins/next/instrumentation.ts
function register (line 1) | function register() {}
FILE: packages/knip/fixtures/plugins/next/middleware.ts
function middleware (line 1) | function middleware() {}
FILE: packages/knip/fixtures/plugins/nuxt/shared/types/api.ts
type ApiResponse (line 1) | interface ApiResponse {
FILE: packages/knip/fixtures/plugins/payload/migrations/20260218.ts
function up (line 3) | async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {
function down (line 7) | async function down({ db, payload, req }: MigrateDownArgs): Promise<void> {
FILE: packages/knip/fixtures/plugins/payload/payload-types.ts
type GeneratedTypes (line 4) | interface GeneratedTypes extends Config {}
FILE: packages/knip/fixtures/plugins/plop/plopfile.js
method actions (line 12) | actions(prompts) {
function plopConfig (line 23) | function plopConfig(plop) {
FILE: packages/knip/fixtures/plugins/raycast/src/search-bookmarks.tsx
function Command (line 4) | async function Command() {
FILE: packages/knip/fixtures/plugins/raycast/src/tools/organize-tabs.ts
function organizeTabs (line 3) | async function organizeTabs() {
FILE: packages/knip/fixtures/plugins/react-cosmos/src/cosmos.decorator.tsx
function MyDecorator (line 1) | function MyDecorator() {}
FILE: packages/knip/fixtures/plugins/relay/__generated__/artifact.graphql.ts
type Artifact (line 3) | type Artifact = {
FILE: packages/knip/fixtures/plugins/relay/unused.ts
type Unused (line 1) | type Unused = string;
FILE: packages/knip/fixtures/plugins/relay/used.ts
type Used (line 1) | type Used = string;
FILE: packages/knip/fixtures/plugins/relay2/src/__generated__/artifact.graphql.ts
type Artifact (line 3) | type Artifact = {
FILE: packages/knip/fixtures/plugins/relay2/unused.ts
type Unused (line 1) | type Unused = string;
FILE: packages/knip/fixtures/plugins/relay2/used.ts
type Used (line 1) | type Used = string;
FILE: packages/knip/fixtures/plugins/remix/app/entry.server.tsx
function handleRequest (line 7) | function handleRequest(
FILE: packages/knip/fixtures/plugins/remix/app/root.tsx
function loader (line 17) | async function loader({ request }: LoaderArgs) {
function App (line 23) | function App() {
FILE: packages/knip/fixtures/plugins/remix/app/routes/index.tsx
function Index (line 4) | function Index() {
FILE: packages/knip/fixtures/plugins/remix/app/utils.ts
function useOptionalUser (line 4) | function useOptionalUser() {}
FILE: packages/knip/fixtures/plugins/sentry/sentry.client.config.ts
constant SENTRY_DSN (line 3) | const SENTRY_DSN = process.env.SENTRY_DSN || process.env.NEXT_PUBLIC_SEN...
FILE: packages/knip/fixtures/plugins/sst/sst.config.ts
method config (line 15) | config(_input) {
method stacks (line 22) | stacks(app) {
FILE: packages/knip/fixtures/plugins/sst/stacks/AuthHandlerStack.ts
function AuthHandlerStack (line 5) | function AuthHandlerStack({ stack, app }: StackContext) {
FILE: packages/knip/fixtures/plugins/sst/stacks/AuthStack.ts
function AuthStack (line 5) | function AuthStack({ stack, app }: StackContext) {
FILE: packages/knip/fixtures/plugins/sst2/sst.config.ts
method app (line 4) | app(input) {
method run (line 11) | async run() {
FILE: packages/knip/fixtures/plugins/storybook2/components/Button/Button.stories.tsx
type Story (line 11) | type Story = StoryObj<typeof meta>;
FILE: packages/knip/fixtures/plugins/tanstack-router/src/routeTree.gen.ts
type FileRoutesByPath (line 7) | interface FileRoutesByPath {
FILE: packages/knip/fixtures/plugins/tanstack-router/src/routes/index.tsx
function Index (line 7) | function Index() {
FILE: packages/knip/fixtures/plugins/tanstack-router/src/routes/posts/$postId.tsx
function PostComponent (line 7) | function PostComponent() {
FILE: packages/knip/fixtures/plugins/vercel-og/app/api/og/route.jsx
function GET (line 7) | async function GET() {
FILE: packages/knip/fixtures/plugins/vercel-og/src/pages/api/og.tsx
function handler (line 7) | async function handler() {
FILE: packages/knip/fixtures/plugins/vike/pages/_error/+Page.tsx
function Page (line 5) | function Page() {
function Center (line 18) | function Center({ children }: { children: React.ReactNode }) {
FILE: packages/knip/fixtures/plugins/vike/pages/about/+Page.tsx
function Page (line 5) | function Page() {
FILE: packages/knip/fixtures/plugins/vike/pages/index/+Page.tsx
function Page (line 5) | function Page() {
FILE: packages/knip/fixtures/plugins/vike/pages/index/Counter.tsx
function Counter (line 5) | function Counter() {
FILE: packages/knip/fixtures/plugins/vike/pages/star-wars/@id/+Page.tsx
function Page (line 6) | function Page() {
FILE: packages/knip/fixtures/plugins/vike/pages/star-wars/@id/+data.ts
type Data (line 3) | type Data = Awaited<ReturnType<typeof data>>;
function minimize (line 28) | function minimize(movie: MovieDetails & Record<string, unknown>): MovieD...
function sleep (line 34) | function sleep(milliseconds: number) {
FILE: packages/knip/fixtures/plugins/vike/pages/star-wars/index/+Page.tsx
function Page (line 6) | function Page() {
FILE: packages/knip/fixtures/plugins/vike/pages/star-wars/index/+data.ts
type Data (line 3) | type Data = Awaited<ReturnType<typeof data>>;
function minimize (line 29) | function minimize(movies: MovieDetails[]): Movie[] {
function sleep (line 36) | function sleep(milliseconds: number) {
FILE: packages/knip/fixtures/plugins/vike/pages/star-wars/types.ts
type Movie (line 1) | type Movie = {
type MovieDetails (line 6) | type MovieDetails = Movie & {
FILE: packages/knip/fixtures/plugins/vike/renderer/Layout.tsx
function Layout (line 11) | function Layout({ children, pageContext }: { children: React.ReactNode; ...
function Frame (line 29) | function Frame({ children }: { children: React.ReactNode }) {
function Sidebar (line 43) | function Sidebar({ children }: { children: React.ReactNode }) {
function Content (line 61) | function Content({ children }: { children: React.ReactNode }) {
function Logo (line 78) | function Logo() {
FILE: packages/knip/fixtures/plugins/vike/renderer/Link.tsx
function Link (line 5) | function Link(props: { href: string; className?: string; children: React...
FILE: packages/knip/fixtures/plugins/vike/renderer/getPageTitle.ts
function getPageTitle (line 5) | function getPageTitle(pageContext: PageContext): string {
FILE: packages/knip/fixtures/plugins/vike/renderer/useData.ts
function useData (line 7) | function useData<Data>() {
FILE: packages/knip/fixtures/plugins/vike/renderer/usePageContext.tsx
function PageContextProvider (line 11) | function PageContextProvider({ pageContext, children }: { pageContext: P...
function usePageContext (line 16) | function usePageContext() {
FILE: packages/knip/fixtures/plugins/vike/server/index.ts
function startServer (line 22) | async function startServer() {
FILE: packages/knip/fixtures/plugins/vite2/vite.config.ts
function getExtensions (line 5) | function getExtensions() {
FILE: packages/knip/fixtures/plugins/vitest7/vitest.config.ts
class ReporterClass (line 3) | class ReporterClass {}
FILE: packages/knip/fixtures/plugins/vitest9/packages/client/e2e-setup.ts
function setup (line 1) | function setup() {
FILE: packages/knip/fixtures/plugins/vitest9/src/unit.setup.ts
function setup (line 1) | function setup() {
FILE: packages/knip/fixtures/plugins/yarn/yarn.config.cjs
method constraints (line 7) | async constraints({ Yarn }) {
FILE: packages/knip/fixtures/preprocessors/identity.ts
function identity (line 3) | function identity(value: ReporterOptions): ReporterOptions {
FILE: packages/knip/fixtures/re-exports-enum-members-workspace/lib/enums.ts
type Density (line 1) | enum Density {
type Consistency (line 6) | enum Consistency {
FILE: packages/knip/fixtures/re-exports-enum-unused/myEnum.ts
type MyEnum (line 1) | enum MyEnum {
FILE: packages/knip/fixtures/re-exports-enum/myEnum.ts
type MyEnum (line 1) | enum MyEnum {
FILE: packages/knip/fixtures/re-exports-enum/myNextEnum.ts
type MyNextEnum (line 1) | enum MyNextEnum {
FILE: packages/knip/fixtures/re-exports-export-declaration/src/exporter/exporterB.ts
function cb (line 3) | function cb() {}
function fn (line 5) | function fn() {}
FILE: packages/knip/fixtures/re-exports-export-declaration/src/exporter/exporterC.ts
function cb (line 3) | function cb() {}
FILE: packages/knip/fixtures/re-exports-export-declaration/src/exporter/exporterD.ts
function cb (line 3) | function cb() {}
FILE: packages/knip/fixtures/re-exports-export-ns/1-root.ts
function exportedFnOnNs (line 5) | function exportedFnOnNs() {
FILE: packages/knip/fixtures/re-exports-export-ns/4-leaf-A.ts
function fnA (line 3) | function fnA() {
type EnumA (line 7) | enum EnumA {
FILE: packages/knip/fixtures/re-exports-export-ns/4-leaf-B.ts
function fnB (line 1) | function fnB() {}
FILE: packages/knip/fixtures/re-exports-export-ns/4-leaf-C.ts
function fnC (line 1) | function fnC() {}
FILE: packages/knip/fixtures/re-exports-ns-type/index.tsx
type Key (line 5) | type Key = keyof typeof NS;
type PictureKey (line 16) | type PictureKey = keyof typeof pictures;
type Props (line 18) | interface Props {
FILE: packages/knip/fixtures/re-exports-ns-type2/types.ts
type MySchemaType (line 3) | type MySchemaType = typeof Schema.MySchema;
FILE: packages/knip/fixtures/re-exports-with-decorator/decorator.ts
function MyDeco (line 1) | function MyDeco() {
class MyDecorated (line 6) | class MyDecorated {}
FILE: packages/knip/fixtures/re-exports-with-decorator/my-module.ts
type MyEnum (line 3) | enum MyEnum {
FILE: packages/knip/fixtures/rules/exports.ts
type UsedType (line 4) | type UsedType = unknown;
type UnusedType (line 5) | type UnusedType = unknown;
class MyClass (line 9) | class MyClass {
type MyEnum (line 13) | enum MyEnum {
FILE: packages/knip/fixtures/rules/ns.ts
type UsedType (line 4) | type UsedType = unknown;
type UnusedType (line 5) | type UnusedType = unknown;
FILE: packages/knip/fixtures/session-dependencies/src/index.ts
type Schema (line 7) | type Schema = Infer<typeof schema>;
FILE: packages/knip/fixtures/session/diamond-base.ts
constant DIAMOND (line 1) | const DIAMOND = 1;
FILE: packages/knip/fixtures/session/host.ts
function start (line 1) | function start() {}
FILE: packages/knip/fixtures/session/overload-1.ts
constant OVERLOAD (line 1) | const OVERLOAD = 1;
FILE: packages/knip/fixtures/session/overload-2.ts
constant OVERLOAD (line 1) | const OVERLOAD = 2;
FILE: packages/knip/fixtures/session/overload-3.ts
constant OVERLOAD (line 1) | const OVERLOAD = 3;
FILE: packages/knip/fixtures/session/src/core/app/types.ts
type SSRManifest (line 1) | type SSRManifest = {};
FILE: packages/knip/fixtures/session/worker.ts
function start (line 1) | function start() {}
FILE: packages/knip/fixtures/tags-cli/tags.ts
type MyEnum (line 22) | enum MyEnum {
class MyClass (line 44) | class MyClass {
class MyCustomClass (line 65) | class MyCustomClass {}
type MyCustomEnum (line 68) | enum MyCustomEnum {}
FILE: packages/knip/fixtures/trace/require.ts
function require (line 2) | function require() {}
FILE: packages/knip/fixtures/trace/shared.ts
constant CONTAINER (line 5) | const CONTAINER = { NS };
FILE: packages/knip/fixtures/ts-namespace/index.ts
type T (line 16) | type T = Types.UsedType;
FILE: packages/knip/fixtures/ts-namespace/merged.ts
class Validator (line 1) | class Validator {
method validate (line 2) | validate() {
function format (line 11) | function format(value: string) {
type Status (line 19) | enum Status {
function label (line 24) | function label(s: Status) {
FILE: packages/knip/fixtures/ts-namespace/types.ts
type UsedType (line 2) | type UsedType = string;
type UnusedType (line 3) | type UnusedType = number;
type UsedInterface (line 4) | interface UsedInterface {
type UnusedInterface (line 7) | interface UnusedInterface {
FILE: packages/knip/fixtures/tsconfig-rootdirs/generated/src/index.generated.ts
type NUM (line 1) | type NUM = number;
FILE: packages/knip/fixtures/type-in-type/types.ts
type SharedProps (line 1) | interface SharedProps {
type B (line 5) | type B = SharedProps;
type A (line 7) | interface A extends SharedProps {
type Union (line 11) | type Union = A | B;
type Wrapped (line 13) | type Wrapped = Array<A | B>;
type Mapped (line 15) | type Mapped = Map<string, A>;
type Tuple (line 17) | type Tuple = [A, B];
type Intersection (line 19) | type Intersection = A & B;
type Conditional (line 21) | type Conditional = A extends B ? A : B;
type Nested (line 23) | type Nested = Set<Array<A>>;
type Func (line 25) | type Func = () => void;
FILE: packages/knip/fixtures/type-in-value-export/src/api.ts
type PointsData (line 1) | interface PointsData {
type GetPoints (line 6) | type GetPoints = Promise<PointsData>;
type GetPointsResponse (line 7) | type GetPointsResponse = PointsData;
type GetPointsParams (line 8) | type GetPointsParams = { limit: number };
function fetchPoints (line 10) | async function fetchPoints(params: GetPointsParams): GetPoints {
FILE: packages/knip/fixtures/workspaces-noconfig-plugin/lib/src/util.ts
function funktion (line 1) | function funktion() {
FILE: packages/knip/fixtures/workspaces-root/scripts/index.ts
type ScriptUnUsedExport (line 3) | type ScriptUnUsedExport = unknown;
FILE: packages/knip/fixtures/workspaces-self-and-cross-ref/packages/lib/src/alpha.ts
function alpha (line 1) | function alpha() {}
FILE: packages/knip/fixtures/workspaces-self-and-cross-ref/packages/lib/src/beta.ts
function beta (line 1) | function beta() {}
FILE: packages/knip/fixtures/workspaces/packages/shared/types.ts
type UsedInt (line 1) | type UsedInt = number;
type UnusedEnum (line 3) | enum UnusedEnum {
FILE: packages/knip/fixtures/zero-config/my-module.ts
type AnyType (line 10) | type AnyType = any;
FILE: packages/knip/fixtures/zero-config/my-namespace.ts
type NS (line 5) | interface NS {}
FILE: packages/knip/scripts/generate-plugin-defs.js
constant HEADER (line 6) | const HEADER = '// This file is generated (no need to edit)';
FILE: packages/knip/scripts/verify-fixtures.ts
constant FIXTURES_DIR (line 5) | const FIXTURES_DIR = join(process.cwd(), 'fixtures');
function renderTree (line 7) | function renderTree(tree: Record<string, any>, prefix = ''): string[] {
function main (line 20) | async function main(isFix = false) {
FILE: packages/knip/src/CacheConsultant.ts
class CacheConsultant (line 8) | class CacheConsultant<T> {
method constructor (line 12) | constructor(name: string, options: MainOptions) {
method getFileDescriptor (line 21) | public getFileDescriptor(filePath: string): FileDescriptor<T> {
method reconcile (line 25) | public reconcile() {
FILE: packages/knip/src/CatalogCounselor.ts
type CatalogContainer (line 12) | type CatalogContainer = { filePath: string; catalog?: Catalog; catalogs?...
class CatalogCounselor (line 14) | class CatalogCounselor {
method constructor (line 20) | constructor(options: MainOptions) {
method addReferencedCatalogEntry (line 25) | private addReferencedCatalogEntry(entryName: string) {
method addWorkspace (line 29) | public addWorkspace(manifest: PackageJson) {
method settleCatalogIssues (line 35) | public async settleCatalogIssues(options: MainOptions) {
FILE: packages/knip/src/ConfigurationChief.ts
type Workspace (line 66) | type Workspace = {
class ConfigurationChief (line 84) | class ConfigurationChief {
method constructor (line 107) | constructor(options: MainOptions) {
method getConfigurationHints (line 118) | public getConfigurationHints() {
method normalize (line 137) | private normalize(rawConfig: RawConfiguration): Configuration {
method getWorkspaces (line 176) | public async getWorkspaces() {
method getListedWorkspaces (line 219) | private getListedWorkspaces() {
method getIgnoredWorkspaces (line 223) | private getIgnoredWorkspaces() {
method getIgnoredWorkspacePatterns (line 229) | private getIgnoredWorkspacePatterns() {
method getConfiguredWorkspaceKeys (line 236) | private getConfiguredWorkspaceKeys() {
method getAdditionalWorkspaceNames (line 244) | private async getAdditionalWorkspaceNames() {
method getAvailableWorkspaceNames (line 259) | private getAvailableWorkspaceNames(names: Iterable<string>) {
method getIncludedWorkspaces (line 271) | private getIncludedWorkspaces() {
method getManifestForWorkspace (line 334) | public getManifestForWorkspace(name: string) {
method getDescendentWorkspaces (line 338) | private getDescendentWorkspaces(name: string) {
method getIgnoredWorkspacesFor (line 345) | public getIgnoredWorkspacesFor(name: string) {
method createIgnoredWorkspaceMatcher (line 351) | public createIgnoredWorkspaceMatcher(name: string, dir: string) {
method getNegatedWorkspacePatterns (line 360) | public getNegatedWorkspacePatterns(name: string) {
method getConfigKeyForWorkspace (line 370) | private getConfigKeyForWorkspace(workspaceName: string) {
method getSelectedWorkspaces (line 377) | private getSelectedWorkspaces() {
method getWorkspaceConfig (line 383) | public getWorkspaceConfig(workspaceName: string) {
method getIgnores (line 395) | public getIgnores(workspaceName: string) {
method getConfigForWorkspace (line 415) | public getConfigForWorkspace(workspaceName: string, extensions?: strin...
method findWorkspaceByFilePath (line 441) | public findWorkspaceByFilePath(filePath: string) {
method getUnusedIgnoredWorkspaces (line 449) | public getUnusedIgnoredWorkspaces() {
FILE: packages/knip/src/ConsoleStreamer.ts
class ConsoleStreamer (line 6) | class ConsoleStreamer {
method constructor (line 11) | constructor(options: MainOptions) {
method clearLines (line 16) | private clearLines(count: number) {
method clearScreen (line 26) | private clearScreen() {
method update (line 30) | private update(messages: string[]) {
method cast (line 36) | cast(message: string | string[], sub?: string) {
method clear (line 42) | clear() {
FILE: packages/knip/src/DependencyDeputy.ts
class DependencyDeputy (line 41) | class DependencyDeputy {
method constructor (line 52) | constructor({ isProduction, isStrict, isReportDependencies }: MainOpti...
method addWorkspace (line 63) | public addWorkspace({
method getWorkspaceManifest (line 138) | getWorkspaceManifest(workspaceName: string) {
method getProductionDependencies (line 142) | getProductionDependencies(workspaceName: string): DependencyArray {
method getDevDependencies (line 149) | getDevDependencies(workspaceName: string): DependencyArray {
method getDependencies (line 153) | getDependencies(workspaceName: string): DependencySet {
method setInstalledBinaries (line 159) | setInstalledBinaries(workspaceName: string, installedBinaries: Map<str...
method getInstalledBinaries (line 163) | getInstalledBinaries(workspaceName: string) {
method setHasTypesIncluded (line 167) | setHasTypesIncluded(workspaceName: string, hasTypesIncluded: Set<strin...
method getHasTypesIncluded (line 171) | getHasTypesIncluded(workspaceName: string) {
method addReferencedDependency (line 175) | addReferencedDependency(workspaceName: string, packageName: string) {
method addReferencedBinary (line 182) | addReferencedBinary(workspaceName: string, binaryName: string) {
method setHostDependencies (line 189) | setHostDependencies(workspaceName: string, hostDependencies: HostDepen...
method getHostDependenciesFor (line 193) | getHostDependenciesFor(workspaceName: string, dependency: string) {
method getOptionalPeerDependencies (line 197) | getOptionalPeerDependencies(workspaceName: string): DependencySet {
method maybeAddReferencedExternalDependency (line 205) | public maybeAddReferencedExternalDependency(workspace: Workspace, pack...
method maybeAddReferencedBinary (line 232) | public maybeAddReferencedBinary(workspace: Workspace, binaryName: stri...
method isInDependencies (line 254) | private isInDependencies(workspaceName: string, packageName: string, i...
method settleDependencyIssues (line 261) | public settleDependencyIssues() {
method handleIgnoredDependencies (line 351) | handleIgnoredDependencies(issues: Issues, counters: Counters, type: Is...
method handleIgnoredBinaries (line 391) | handleIgnoredBinaries(issues: Issues, counters: Counters, type: IssueT...
method handleIgnoredUnresolved (line 424) | handleIgnoredUnresolved(issues: Issues, counters: Counters) {
method removeIgnoredIssues (line 452) | public removeIgnoredIssues({ issues, counters }: { issues: Issues; cou...
method getConfigurationHints (line 462) | public getConfigurationHints() {
method addIgnoredDependencies (line 482) | public addIgnoredDependencies(workspaceName: string, identifier: strin...
method addIgnoredBinaries (line 486) | public addIgnoredBinaries(workspaceName: string, identifier: string) {
method addIgnoredUnresolved (line 490) | public addIgnoredUnresolved(workspaceName: string, identifier: string) {
FILE: packages/knip/src/IssueCollector.ts
type CollectorIssues (line 19) | type CollectorIssues = ReturnType<IssueCollector['getIssues']>;
type TrackedPattern (line 21) | type TrackedPattern = { hint: ConfigurationHint; isMatch: (path: string)...
class IssueCollector (line 27) | class IssueCollector {
method constructor (line 45) | constructor(options: MainOptions) {
method setWorkspaceFilter (line 54) | setWorkspaceFilter(workspaceFilePathFilter: WorkspaceFilePathFilter | ...
method addIgnorePatterns (line 58) | addIgnorePatterns(entries: { pattern: string; id: string; workspaceNam...
method addIgnoreFilesPatterns (line 72) | addIgnoreFilesPatterns(entries: { pattern: string; id: string; workspa...
method markUsedPatterns (line 86) | private markUsedPatterns(filePath: string, unused: typeof this.unusedI...
method setIgnoreIssues (line 93) | setIgnoreIssues(ignoreIssues?: IgnoreIssues) {
method shouldIgnoreIssue (line 112) | private shouldIgnoreIssue(filePath: string, issueType: IssueType): boo...
method addFileCounts (line 118) | addFileCounts({ processed, unused }: { processed: number; unused: numb...
method addFilesIssues (line 123) | addFilesIssues(filePaths: string[]) {
method addIssue (line 147) | addIssue(issue: Issue) {
method addConfigurationHint (line 167) | addConfigurationHint(issue: ConfigurationHint) {
method addTagHint (line 172) | addTagHint(issue: TagHint) {
method purge (line 176) | purge() {
method getIssues (line 186) | getIssues() {
method getUnusedIgnorePatternHints (line 195) | getUnusedIgnorePatternHints(options: MainOptions) {
method retainIssue (line 205) | retainIssue(issue: Issue) {
method getRetainedIssues (line 208) | getRetainedIssues() {
FILE: packages/knip/src/IssueFixer.ts
class IssueFixer (line 34) | class IssueFixer {
method constructor (line 37) | constructor(options: MainOptions) {
method fixIssues (line 41) | public async fixIssues(issues: Issues) {
method removeUnusedFiles (line 50) | private async removeUnusedFiles(issues: Issues) {
method removeUnusedExports (line 59) | private async removeUnusedExports(issues: Issues) {
method removeUnusedDependencies (line 102) | private async removeUnusedDependencies(issues: Issues) {
method removeUnusedCatalogEntries (line 138) | private async removeUnusedCatalogEntries(issues: Issues) {
FILE: packages/knip/src/JsonCatalogPeeker.ts
class JsonCatalogPeeker (line 3) | class JsonCatalogPeeker {
method constructor (line 9) | constructor(fileContent: string) {
method init (line 13) | private init() {
method getLocation (line 55) | public getLocation(parentSymbol: string, symbol: string) {
FILE: packages/knip/src/PackagePeeker.ts
class PackagePeeker (line 1) | class PackagePeeker {
method constructor (line 7) | constructor(manifestStr: string) {
method init (line 11) | private init() {
method getLocation (line 32) | getLocation(type: 'dependencies' | 'devDependencies' | 'optionalPeerDe...
FILE: packages/knip/src/ProjectPrincipal.ts
class ProjectPrincipal (line 28) | class ProjectPrincipal {
method constructor (line 57) | constructor(options: MainOptions, toSourceFilePath: ToSourceFilePath) {
method addCompilers (line 66) | addCompilers(compilers: [SyncCompilers, AsyncCompilers]) {
method addPaths (line 81) | addPaths(paths: Paths, basePath: string) {
method init (line 93) | init() {
method readFile (line 107) | readFile(filePath: string): string {
method hasAcceptedExtension (line 111) | private hasAcceptedExtension(filePath: string) {
method addEntryPath (line 115) | addEntryPath(filePath: string, options?: { skipExportsAnalysis: boolea...
method addEntryPaths (line 123) | addEntryPaths(filePaths: Set<string> | string[], options?: { skipExpor...
method addProgramPath (line 127) | addProgramPath(filePath: string) {
method addProjectPath (line 133) | addProjectPath(filePath: string) {
method removeProjectPath (line 140) | removeProjectPath(filePath: string) {
method runAsyncCompilers (line 147) | async runAsyncCompilers() {
method walkAndAnalyze (line 156) | walkAndAnalyze(
method getUsedResolvedFiles (line 220) | getUsedResolvedFiles() {
method resolveSpecifier (line 250) | private resolveSpecifier(specifier: string, containingFile: string): s...
method getUnreferencedFiles (line 254) | getUnreferencedFiles() {
method analyzeSourceFile (line 258) | analyzeSourceFile(
method invalidateFile (line 294) | invalidateFile(filePath: string) {
method reconcileCache (line 298) | reconcileCache(graph: ModuleGraph) {
FILE: packages/knip/src/WorkspaceWorker.ts
type WorkspaceManagerOptions (line 45) | type WorkspaceManagerOptions = {
type CacheItem (line 62) | type CacheItem = { resolveConfig?: Input[]; resolveFromAST?: Input[]; co...
class WorkspaceWorker (line 77) | class WorkspaceWorker {
method constructor (line 100) | constructor({
method init (line 138) | public async init() {
method determineEnabledPlugins (line 142) | private async determineEnabledPlugins() {
method getConfigForPlugin (line 165) | private getConfigForPlugin(pluginName: PluginName): EnsuredPluginConfi...
method getEntryFilePatterns (line 170) | getEntryFilePatterns() {
method getProjectFilePatterns (line 177) | getProjectFilePatterns(projectFilePatterns: string[]) {
method getPluginProjectFilePatterns (line 184) | getPluginProjectFilePatterns(patterns: string[] = []) {
method getPluginConfig (line 195) | private getPluginConfig(plugin: Plugin) {
method getPluginConfigPatterns (line 199) | getPluginConfigPatterns() {
method getPluginEntryFilePatterns (line 210) | getPluginEntryFilePatterns(patterns: string[]) {
method getProductionEntryFilePatterns (line 215) | getProductionEntryFilePatterns(negatedTestFilePatterns: string[]) {
method getProductionProjectFilePatterns (line 222) | getProductionProjectFilePatterns(negatedTestFilePatterns: string[]) {
method getConfigurationFilePatterns (line 243) | private getConfigurationFilePatterns(pluginName: PluginName) {
method registerCompilers (line 249) | public async registerCompilers(registerCompiler: RegisterCompiler) {
method registerVisitors (line 260) | public registerVisitors(options: RegisterVisitorsOptions) {
method runPlugins (line 271) | public async runPlugins() {
method filterTransitiveDependencies (line 486) | private filterTransitiveDependencies(inputs: Input[], configFilePath: ...
method getConfigurationHints (line 508) | public getConfigurationHints(
method onDispose (line 543) | public onDispose() {
FILE: packages/knip/src/YamlCatalogPeeker.ts
function matchesKey (line 3) | function matchesKey(line: string, indent: string, key: string) {
class YamlCatalogPeeker (line 11) | class YamlCatalogPeeker {
method constructor (line 17) | constructor(fileContent: string) {
method init (line 21) | private init() {
method getLocation (line 34) | public getLocation(parentSymbol: string, symbol: string) {
FILE: packages/knip/src/binaries/bash-parser.ts
type KnownResolver (line 14) | type KnownResolver = keyof typeof KnownResolvers;
FILE: packages/knip/src/compilers/types.ts
type FileExtension (line 1) | type FileExtension = string;
type CompilerSync (line 3) | type CompilerSync = (source: string, path: string) => string;
type CompilerAsync (line 4) | type CompilerAsync = (source: string, path: string) => Promise<string>;
type RawSyncCompilers (line 6) | type RawSyncCompilers = Map<FileExtension, CompilerSync | true>;
type SyncCompilers (line 7) | type SyncCompilers = Map<FileExtension, CompilerSync>;
type AsyncCompilers (line 8) | type AsyncCompilers = Map<FileExtension, CompilerAsync>;
type Compilers (line 9) | type Compilers = [SyncCompilers, AsyncCompilers];
type HasDependency (line 11) | type HasDependency = (pkgName: string) => boolean;
FILE: packages/knip/src/constants.ts
constant ROOT_WORKSPACE_NAME (line 1) | const ROOT_WORKSPACE_NAME = '.';
constant IMPORT_STAR (line 3) | const IMPORT_STAR = '*';
constant KNIP_CONFIG_LOCATIONS (line 5) | const KNIP_CONFIG_LOCATIONS = [
constant DEFAULT_EXTENSIONS (line 16) | const DEFAULT_EXTENSIONS = new Set(['.js', '.mjs', '.cjs', '.jsx', '.ts'...
constant DTS_EXTENSIONS (line 18) | const DTS_EXTENSIONS = ['.d.ts', '.d.mts', '.d.cts'];
constant IS_DTS (line 20) | const IS_DTS = /\.d\.(c|m)?ts$/;
constant GLOBAL_IGNORE_PATTERNS (line 22) | const GLOBAL_IGNORE_PATTERNS: readonly string[] = ['**/node_modules/**',...
constant PUBLIC_TAG (line 24) | const PUBLIC_TAG = '@public';
constant INTERNAL_TAG (line 25) | const INTERNAL_TAG = '@internal';
constant BETA_TAG (line 26) | const BETA_TAG = '@beta';
constant ALIAS_TAG (line 27) | const ALIAS_TAG = '@alias';
constant DT_SCOPE (line 29) | const DT_SCOPE = '@types';
constant PROTOCOL_VIRTUAL (line 31) | const PROTOCOL_VIRTUAL = 'virtual:';
constant IGNORED_GLOBAL_BINARIES (line 38) | const IGNORED_GLOBAL_BINARIES = new Set([
constant IGNORED_DEPENDENCIES (line 150) | const IGNORED_DEPENDENCIES = new Set(['knip', 'typescript']);
constant IGNORED_RUNTIME_DEPENDENCIES (line 152) | const IGNORED_RUNTIME_DEPENDENCIES = new Set(['node', 'bun', 'deno']);
constant FOREIGN_FILE_EXTENSIONS (line 154) | const FOREIGN_FILE_EXTENSIONS = new Set([
constant IGNORE_DEFINITELY_TYPED (line 178) | const IGNORE_DEFINITELY_TYPED = new Set([
constant ISSUE_TYPES (line 186) | const ISSUE_TYPES = [
constant ISSUE_TYPE_TITLE (line 204) | const ISSUE_TYPE_TITLE = {
constant SYMBOL_TYPE (line 222) | const SYMBOL_TYPE = {
constant FIX_FLAGS (line 234) | const FIX_FLAGS = {
constant SIDE_EFFECTS (line 241) | const SIDE_EFFECTS = '__side-effects';
constant OPAQUE (line 243) | const OPAQUE = '__opaque';
constant IMPORT_FLAGS (line 245) | const IMPORT_FLAGS = {
FILE: packages/knip/src/graph-explorer/cache.ts
type ExplorerCache (line 5) | interface ExplorerCache {
FILE: packages/knip/src/graph-explorer/constants.ts
constant CONTINUE (line 1) | const CONTINUE = 'continue';
constant STOP (line 3) | const STOP = 'stop';
constant RE_EXPORT_KIND (line 5) | const RE_EXPORT_KIND = {
FILE: packages/knip/src/graph-explorer/explorer.ts
type GraphExplorer (line 33) | type GraphExplorer = ReturnType<typeof createGraphExplorer>;
FILE: packages/knip/src/graph-explorer/operations/build-exports-tree.ts
type ExportsTreeNode (line 7) | interface ExportsTreeNode {
FILE: packages/knip/src/graph-explorer/operations/get-contention.ts
type ReExportNetwork (line 7) | interface ReExportNetwork {
FILE: packages/knip/src/graph-explorer/operations/get-dependency-usage.ts
type DependencyNode (line 4) | interface DependencyNode {
type DependencyNodes (line 13) | interface DependencyNodes {
FILE: packages/knip/src/graph-explorer/operations/get-usage.ts
type UsageLocation (line 8) | interface UsageLocation extends Position {
type UsageResult (line 15) | interface UsageResult {
FILE: packages/knip/src/graph-explorer/operations/resolve-definition.ts
type TraversalStep (line 7) | interface TraversalStep {
type DefinitionResult (line 13) | interface DefinitionResult {
FILE: packages/knip/src/graph-explorer/visitors.ts
type PassThroughReExportCallback (line 5) | type PassThroughReExportCallback = (identifier: string, sources: Set<str...
type AliasReExportCallback (line 7) | type AliasReExportCallback = (identifier: string, alias: string, sources...
type NamespaceReExportCallback (line 9) | type NamespaceReExportCallback = (namespace: string, sources: Set<string...
FILE: packages/knip/src/graph-explorer/walk-down.ts
type Via (line 5) | type Via = 'import' | 'importAs' | 'importNS' | 'reExport' | 'reExportAs...
type Visitor (line 7) | type Visitor = (
FILE: packages/knip/src/graph-explorer/walk-up.ts
type ReExportKind (line 10) | type ReExportKind = (typeof RE_EXPORT_KIND)[keyof typeof RE_EXPORT_KIND];
type Visitor (line 12) | type Visitor = (filePath: string, identifier: string, via: ReExportKind)...
FILE: packages/knip/src/graph/analyze.ts
type AnalyzeOptions (line 16) | interface AnalyzeOptions {
FILE: packages/knip/src/graph/build.ts
type BuildOptions (line 41) | interface BuildOptions {
function build (line 53) | async function build({
FILE: packages/knip/src/manifest/helpers.ts
type LoadPackageManifestOptions (line 5) | type LoadPackageManifestOptions = { dir: string; packageName: string; cw...
FILE: packages/knip/src/manifest/index.ts
type Options (line 6) | type Options = {
FILE: packages/knip/src/plugins/_template/types.ts
type PluginConfig (line 1) | type PluginConfig = {
FILE: packages/knip/src/plugins/angular/index.ts
type TargetOptions (line 154) | type TargetOptions = Exclude<Target['options'], undefined>;
type Target (line 155) | type Target = Architect[string];
type Architect (line 156) | type Architect = Exclude<Project['architect'], undefined>;
type EntriesByOption (line 158) | type EntriesByOption = Map<string, readonly string[]>;
type FileReplacementsBuildOption (line 161) | type FileReplacementsBuildOption = Exclude<WebpackBrowserSchemaForBuildF...
type ScriptsBuildOption (line 162) | type ScriptsBuildOption = Exclude<WebpackBrowserSchemaForBuildFacade['sc...
constant PRODUCTION_CONFIG_NAME (line 164) | const PRODUCTION_CONFIG_NAME = 'production';
constant BUILD_TARGET_NAME (line 165) | const BUILD_TARGET_NAME = 'build';
FILE: packages/knip/src/plugins/angular/types.ts
type FileVersion (line 11) | type FileVersion = number;
type Project (line 16) | type Project = Project1 & {
type Project1 (line 444) | type Project1 = {
type PrerenderTarget (line 447) | type PrerenderTarget = {
type AngularCLIWorkspaceConfiguration (line 451) | interface AngularCLIWorkspaceConfiguration {
type CliOptions (line 464) | interface CliOptions {
type SchematicOptions (line 504) | interface SchematicOptions {
type AngularApplicationOptionsSchema (line 524) | interface AngularApplicationOptionsSchema {
type AngularClassOptionsSchema (line 597) | interface AngularClassOptionsSchema {
type AngularComponentOptionsSchema (line 622) | interface AngularComponentOptionsSchema {
type AngularDirectiveOptionsSchema (line 709) | interface AngularDirectiveOptionsSchema {
type AngularEnumOptionsSchema (line 760) | interface AngularEnumOptionsSchema {
type AngularGuardOptionsSchema (line 781) | interface AngularGuardOptionsSchema {
type AngularInterceptorOptionsSchema (line 819) | interface AngularInterceptorOptionsSchema {
type AngularInterfaceOptionsSchema (line 848) | interface AngularInterfaceOptionsSchema {
type LibraryOptionsSchema (line 873) | interface LibraryOptionsSchema {
type AngularPipeOptionsSchema (line 910) | interface AngularPipeOptionsSchema {
type AngularNgNewOptionsSchema (line 951) | interface AngularNgNewOptionsSchema {
type AngularResolverOptionsSchema (line 1051) | interface AngularResolverOptionsSchema {
type AngularServiceOptionsSchema (line 1080) | interface AngularServiceOptionsSchema {
type AngularWebWorkerOptionsSchema (line 1105) | interface AngularWebWorkerOptionsSchema {
type I18N (line 1126) | interface I18N {
type ApplicationSchemaForBuildFacade (line 1159) | interface ApplicationSchemaForBuildFacade {
type FileReplacement (line 1558) | interface FileReplacement {
type Budget (line 1562) | interface Budget {
type AppShellTarget (line 1603) | interface AppShellTarget {
type WebpackBrowserSchemaForBuildFacade (line 1632) | interface WebpackBrowserSchemaForBuildFacade {
type Budget1 (line 1928) | interface Budget1 {
type EsbuildBrowserSchemaForBuildFacade (line 1969) | interface EsbuildBrowserSchemaForBuildFacade {
type FileReplacement1 (line 2261) | interface FileReplacement1 {
type Budget2 (line 2265) | interface Budget2 {
type DevServerTarget (line 2306) | interface DevServerTarget {
type DevServerTarget1 (line 2388) | interface DevServerTarget1 {
type ExtractI18NTarget (line 2486) | interface ExtractI18NTarget {
type ExtractI18NTarget1 (line 2511) | interface ExtractI18NTarget1 {
type KarmaTarget (line 2536) | interface KarmaTarget {
type JestBrowserSchemaForBuildFacade (line 2717) | interface JestBrowserSchemaForBuildFacade {
type WebTestRunnerTarget (line 2738) | interface WebTestRunnerTarget {
type SSRDevServerTarget (line 2907) | interface SSRDevServerTarget {
type UniversalTarget (line 2965) | interface UniversalTarget {
type NgPackagrTarget (line 3146) | interface NgPackagrTarget {
FILE: packages/knip/src/plugins/ava/types.ts
type Config (line 1) | type Config = {
type AvaConfig (line 8) | type AvaConfig = Config | (() => Config);
FILE: packages/knip/src/plugins/babel/types.ts
type BabelConfigFn (line 3) | type BabelConfigFn = (options: typeof api) => BabelConfigObj;
type BabelConfigObj (line 5) | type BabelConfigObj = {
type BabelConfig (line 12) | type BabelConfig = BabelConfigObj | BabelConfigFn;
FILE: packages/knip/src/plugins/biome/types.ts
type BiomeConfig (line 1) | type BiomeConfig = {
FILE: packages/knip/src/plugins/bun/types.ts
type BunfigConfig (line 1) | type BunfigConfig = {
FILE: packages/knip/src/plugins/capacitor/types.ts
type CapacitorConfig (line 1) | type CapacitorConfig = {
FILE: packages/knip/src/plugins/changesets/types.ts
type ChangesetsConfig (line 1) | type ChangesetsConfig = {
FILE: packages/knip/src/plugins/commitizen/types.ts
type CommitizenConfig (line 1) | type CommitizenConfig = {
FILE: packages/knip/src/plugins/commitlint/types.ts
type CommitLintConfig (line 1) | type CommitLintConfig = {
type ParserPreset (line 8) | type ParserPreset = {
FILE: packages/knip/src/plugins/cspell/types.ts
type CSpellConfig (line 1) | type CSpellConfig = {
FILE: packages/knip/src/plugins/cucumber/types.ts
type CucumberConfig (line 1) | type CucumberConfig = {
FILE: packages/knip/src/plugins/cypress/helpers.ts
type ReporterConfig (line 6) | interface ReporterConfig {
FILE: packages/knip/src/plugins/cypress/index.ts
constant TEST_FILE_PATTERNS (line 17) | const TEST_FILE_PATTERNS = ['cypress/e2e/**/*.cy.{js,jsx,ts,tsx}'];
constant SUPPORT_FILE_PATTERNS (line 19) | const SUPPORT_FILE_PATTERNS = [
FILE: packages/knip/src/plugins/cypress/types.ts
type CypressConfig (line 1) | interface CypressConfig {
FILE: packages/knip/src/plugins/docusaurus/helpers.ts
constant FIRST_PARTY_MODULES (line 6) | const FIRST_PARTY_MODULES = new Set([
constant CORE_CLIENT_API (line 26) | const CORE_CLIENT_API = [
FILE: packages/knip/src/plugins/docusaurus/types.ts
type ModuleType (line 3) | type ModuleType = 'plugin' | 'theme' | 'preset';
type DocsConfig (line 5) | type DocsConfig = {
type PluginOptions (line 10) | type PluginOptions = {
type PresetOptions (line 15) | type PresetOptions = {
type Loader (line 20) | type Loader = unknown;
type PluginConfig (line 22) | type PluginConfig =
type PresetConfig (line 42) | type PresetConfig = string | [string, PresetOptions] | false | null;
type Config (line 44) | type Config = PresetConfig | PluginConfig;
type ConfigItem (line 46) | type ConfigItem = Config | (() => Config);
type ScriptTag (line 48) | type ScriptTag = { src: string; [key: string]: unknown };
type StylesheetLink (line 49) | type StylesheetLink = { href: string; [key: string]: unknown };
type DocusaurusConfig (line 51) | type DocusaurusConfig = {
FILE: packages/knip/src/plugins/drizzle/types.ts
type DrizzleConfig (line 1) | interface DrizzleConfig {
FILE: packages/knip/src/plugins/eleventy/helpers.ts
class DummyEleventyConfig (line 4) | class DummyEleventyConfig {
method _getUniqueId (line 5) | _getUniqueId() {}
method reset (line 6) | reset() {}
method versionCheck (line 7) | versionCheck() {}
method on (line 8) | on() {}
method emit (line 9) | emit() {}
method _enablePluginExecution (line 10) | _enablePluginExecution() {}
method addMarkdownHighlighter (line 11) | addMarkdownHighlighter() {}
method addLiquidTag (line 12) | addLiquidTag() {}
method addLiquidFilter (line 13) | addLiquidFilter() {}
method addNunjucksAsyncFilter (line 14) | addNunjucksAsyncFilter() {}
method addNunjucksFilter (line 15) | addNunjucksFilter() {}
method addHandlebarsHelper (line 16) | addHandlebarsHelper() {}
method addFilter (line 17) | addFilter() {}
method addAsyncFilter (line 18) | addAsyncFilter() {}
method getFilter (line 19) | getFilter() {}
method addNunjucksTag (line 20) | addNunjucksTag() {}
method addGlobalData (line 21) | addGlobalData() {}
method addNunjucksGlobal (line 22) | addNunjucksGlobal() {}
method addTransform (line 23) | addTransform() {}
method addLinter (line 24) | addLinter() {}
method addLayoutAlias (line 25) | addLayoutAlias() {}
method setLayoutResolution (line 26) | setLayoutResolution() {}
method enableLayoutResolution (line 27) | enableLayoutResolution() {}
method getCollections (line 28) | getCollections() {}
method addCollection (line 29) | addCollection() {}
method addPlugin (line 30) | addPlugin() {}
method _getPluginName (line 31) | _getPluginName() {}
method _executePlugin (line 32) | _executePlugin() {}
method getNamespacedName (line 33) | getNamespacedName() {}
method namespace (line 34) | namespace() {}
method addPassthroughCopy (line 35) | addPassthroughCopy(input: string | Record<string, string>) {
method _normalizeTemplateFormats (line 44) | _normalizeTemplateFormats() {}
method setTemplateFormats (line 45) | setTemplateFormats() {}
method addTemplateFormats (line 46) | addTemplateFormats() {}
method setLibrary (line 47) | setLibrary() {}
method amendLibrary (line 48) | amendLibrary() {}
method setPugOptions (line 49) | setPugOptions() {}
method setLiquidOptions (line 50) | setLiquidOptions() {}
method setNunjucksEnvironmentOptions (line 51) | setNunjucksEnvironmentOptions() {}
method setNunjucksPrecompiledTemplates (line 52) | setNunjucksPrecompiledTemplates() {}
method setEjsOptions (line 53) | setEjsOptions() {}
method setDynamicPermalinks (line 54) | setDynamicPermalinks() {}
method setUseGitIgnore (line 55) | setUseGitIgnore() {}
method addShortcode (line 56) | addShortcode() {}
method addAsyncShortcode (line 57) | addAsyncShortcode() {}
method addNunjucksAsyncShortcode (line 58) | addNunjucksAsyncShortcode() {}
method addNunjucksShortcode (line 59) | addNunjucksShortcode() {}
method addLiquidShortcode (line 60) | addLiquidShortcode() {}
method addHandlebarsShortcode (line 61) | addHandlebarsShortcode() {}
method addPairedShortcode (line 62) | addPairedShortcode() {}
method addPairedAsyncShortcode (line 63) | addPairedAsyncShortcode() {}
method addPairedNunjucksAsyncShortcode (line 64) | addPairedNunjucksAsyncShortcode() {}
method addPairedNunjucksShortcode (line 65) | addPairedNunjucksShortcode() {}
method addPairedLiquidShortcode (line 66) | addPairedLiquidShortcode() {}
method addPairedHandlebarsShortcode (line 67) | addPairedHandlebarsShortcode() {}
method addJavaScriptFunction (line 68) | addJavaScriptFunction() {}
method setDataDeepMerge (line 69) | setDataDeepMerge() {}
method isDataDeepMergeModified (line 70) | isDataDeepMergeModified() {}
method addWatchTarget (line 71) | addWatchTarget() {}
method setWatchJavaScriptDependencies (line 72) | setWatchJavaScriptDependencies() {}
method setServerOptions (line 73) | setServerOptions() {}
method setBrowserSyncConfig (line 74) | setBrowserSyncConfig() {}
method setChokidarConfig (line 75) | setChokidarConfig() {}
method setWatchThrottleWaitTime (line 76) | setWatchThrottleWaitTime() {}
method setFrontMatterParsingOptions (line 77) | setFrontMatterParsingOptions() {}
method setQuietMode (line 78) | setQuietMode() {}
method addExtension (line 79) | addExtension() {}
method addDataExtension (line 80) | addDataExtension() {}
method setUseTemplateCache (line 81) | setUseTemplateCache() {}
method setPrecompiledCollections (line 82) | setPrecompiledCollections() {}
method setServerPassthroughCopyBehavior (line 83) | setServerPassthroughCopyBehavior() {}
method addUrlTransform (line 84) | addUrlTransform() {}
method setDataFileSuffixes (line 85) | setDataFileSuffixes() {}
method setDataFileBaseName (line 86) | setDataFileBaseName() {}
method getMergingConfigObject (line 87) | getMergingConfigObject() {}
method isVirtualTemplate (line 88) | isVirtualTemplate() {}
method setInputDirectory (line 89) | setInputDirectory() {}
method setOutputDirectory (line 90) | setOutputDirectory() {}
method setDataDirectory (line 91) | setDataDirectory() {}
method setIncludesDirectory (line 92) | setIncludesDirectory() {}
method setLayoutsDirectory (line 93) | setLayoutsDirectory() {}
method setFreezeReservedData (line 94) | setFreezeReservedData() {}
method addDateParsing (line 95) | addDateParsing() {}
method addBundle (line 96) | addBundle() {}
FILE: packages/knip/src/plugins/eleventy/types.ts
type EleventyConfig (line 3) | type EleventyConfig = {
type EleventyConfigOrFn (line 14) | type EleventyConfigOrFn =
FILE: packages/knip/src/plugins/eslint/resolveFromAST.ts
method ObjectExpression (line 11) | ObjectExpression(node) {
FILE: packages/knip/src/plugins/eslint/types.ts
type ParserOptions (line 1) | type ParserOptions = {
type Settings (line 10) | type Settings = Record<string, Record<string, unknown> | string>;
type Rules (line 12) | type Rules = Record<string, string | number>;
type BaseConfig (line 14) | type BaseConfig = {
type ESLintConfig (line 24) | type ESLintConfig = BaseConfig[];
type OverrideConfigDeprecated (line 26) | type OverrideConfigDeprecated = BaseConfig & { files: string[]; override...
type ESLintConfigDeprecated (line 28) | type ESLintConfigDeprecated = BaseConfig & {
FILE: packages/knip/src/plugins/execa/visitors/execa.ts
function createExecaVisitor (line 7) | function createExecaVisitor(ctx: PluginVisitorContext): PluginVisitorObj...
FILE: packages/knip/src/plugins/expo/types.ts
type BaseConfig (line 4) | type BaseConfig = {
type ConfigContext (line 22) | type ConfigContext = {
type ExpoConfigOrProp (line 29) | type ExpoConfigOrProp = BaseConfig | { expo: BaseConfig };
type ExpoConfig (line 31) | type ExpoConfig = ExpoConfigOrProp | ((cfg: ConfigContext) => ExpoConfig...
FILE: packages/knip/src/plugins/gatsby/types.ts
type GatsbyConfig (line 1) | type GatsbyConfig = {
type GatsbyActions (line 5) | type GatsbyActions = {
type GatsbyNode (line 11) | type GatsbyNode = {
FILE: packages/knip/src/plugins/github-actions/types.ts
type Step (line 1) | type Step = {
type Steps (line 11) | type Steps = Step[];
type Job (line 13) | type Job = {
type Runs (line 17) | type Runs = {
FILE: packages/knip/src/plugins/graphql-codegen/types.ts
type PluginConfig (line 1) | type PluginConfig<T = unknown> = { [key: string]: T };
type ConfiguredPlugin (line 2) | interface ConfiguredPlugin {
type NamedPlugin (line 5) | type NamedPlugin = string;
type OutputConfig (line 7) | type OutputConfig = NamedPlugin | ConfiguredPlugin;
type PresetNamesBase (line 8) | type PresetNamesBase = 'client' | 'near-operation-file' | 'gql-tag-opera...
type PresetNames (line 9) | type PresetNames = `${PresetNamesBase}-preset` | PresetNamesBase;
type OutputPreset (line 11) | type OutputPreset = {
function isConfigurationOutput (line 16) | function isConfigurationOutput(config: ConfiguredOutput | ConfiguredPlug...
type ConfiguredOutput (line 20) | interface ConfiguredOutput {
type GraphqlCodegenTypes (line 44) | interface GraphqlCodegenTypes {
type GraphqlConfigTypes (line 62) | interface GraphqlConfigTypes {
type GraphqlProjectsConfigTypes (line 74) | interface GraphqlProjectsConfigTypes {
FILE: packages/knip/src/plugins/jest/types.ts
type JestInitialOptions (line 3) | type JestInitialOptions = Config.InitialOptions;
type JestConfig (line 5) | type JestConfig = JestInitialOptions | (() => JestInitialOptions) | (() ...
FILE: packages/knip/src/plugins/karma/helpers.ts
type ConfigFile (line 29) | type ConfigFile = (config: Config) => void;
class InMemoryConfig (line 42) | class InMemoryConfig implements Config {
method set (line 48) | set(config: ConfigOptions) {
FILE: packages/knip/src/plugins/karma/types.ts
type Config (line 7) | interface Config {
type ConfigOptions (line 12) | interface ConfigOptions {
type PluginName (line 46) | type PluginName = string;
type InlinePluginDef (line 47) | type InlinePluginDef = Record<PluginName, InlinePluginType>;
type InlinePluginType (line 48) | type InlinePluginType = FactoryFnType | ConstructorFnType | ValueType;
type FactoryFnType (line 49) | type FactoryFnType = ['factory', FactoryFn];
type FactoryFn (line 50) | type FactoryFn = (...params: any[]) => any;
type ConstructorFnType (line 51) | type ConstructorFnType = ['type', ConstructorFn];
type ConstructorFn (line 53) | type ConstructorFn = Function | (new (...params: any[]) => any);
type ValueType (line 54) | type ValueType = ['value', any];
type FilePattern (line 57) | interface FilePattern {
FILE: packages/knip/src/plugins/knex/helpers.ts
constant CLIENT_MAPPING (line 1) | const CLIENT_MAPPING: Record<string, string[]> = {
FILE: packages/knip/src/plugins/knex/types.ts
type KnexConfig (line 1) | interface KnexConfig {
FILE: packages/knip/src/plugins/ladle/types.ts
type LadleConfig (line 1) | type LadleConfig = {
FILE: packages/knip/src/plugins/lefthook/index.ts
type Command (line 16) | type Command = {
FILE: packages/knip/src/plugins/lint-staged/types.ts
type SyncGenerateTask (line 3) | type SyncGenerateTask = (stagedFileNames: readonly string[]) => string |...
type AsyncGenerateTask (line 5) | type AsyncGenerateTask = (stagedFileNames: readonly string[]) => Promise...
type GenerateTask (line 7) | type GenerateTask = SyncGenerateTask | AsyncGenerateTask;
type TaskFunction (line 9) | type TaskFunction = {
type Entry (line 14) | type Entry = string | TaskFunction | GenerateTask | (string | GenerateTa...
type LintStagedConfig (line 16) | type LintStagedConfig = Record<string, Entry> | GenerateTask;
FILE: packages/knip/src/plugins/linthtml/types.ts
type LintHTMLConfig (line 1) | type LintHTMLConfig = {
FILE: packages/knip/src/plugins/markdownlint/types.ts
type MarkdownlintConfig (line 1) | type MarkdownlintConfig = {
FILE: packages/knip/src/plugins/mdx/types.ts
type MdxConfig (line 1) | type MdxConfig = {
FILE: packages/knip/src/plugins/mdxlint/types.ts
type MdxlintConfig (line 1) | type MdxlintConfig = {
FILE: packages/knip/src/plugins/metro/index.ts
constant DEFAULT_PLATFORMS (line 18) | const DEFAULT_PLATFORMS = ['ios', 'android', 'windows', 'web'];
constant PLATFORMS (line 19) | const PLATFORMS = [...DEFAULT_PLATFORMS, 'native', 'default'];
constant DEFAULT_EXTENSIONS (line 20) | const DEFAULT_EXTENSIONS = ['js', 'jsx', 'json', 'ts', 'tsx'];
constant DEFAULT_TRANSFORMER_PACKAGE (line 21) | const DEFAULT_TRANSFORMER_PACKAGE = 'metro-transform-worker';
constant DEFAULT_MINIFIER_PACKAGE (line 22) | const DEFAULT_MINIFIER_PACKAGE = 'metro-minify-terser';
FILE: packages/knip/src/plugins/metro/types.ts
type MetroConfig (line 3) | type MetroConfig = {
FILE: packages/knip/src/plugins/mocha/types.ts
type MochaConfig (line 1) | interface MochaConfig {
FILE: packages/knip/src/plugins/moonrepo/types.ts
type MoonConfiguration (line 1) | interface MoonConfiguration {
FILE: packages/knip/src/plugins/msw/types.ts
type MSWConfig (line 1) | interface MSWConfig {
FILE: packages/knip/src/plugins/nano-staged/types.ts
type Script (line 1) | type Script = string | string[];
type Entry (line 3) | type Entry = Script | ((api: { filenames: string[] }) => Script | Promis...
type Config (line 5) | type Config = Record<string, Entry>;
type NanoStagedConfig (line 7) | type NanoStagedConfig = Config | (() => Config);
FILE: packages/knip/src/plugins/nest/types.ts
type NestConfig (line 1) | type NestConfig = {
FILE: packages/knip/src/plugins/netlify/index.ts
constant NETLIFY_FUNCTIONS_DIR (line 19) | const NETLIFY_FUNCTIONS_DIR = 'netlify/functions';
constant NETLIFY_FUNCTIONS_EXTS (line 20) | const NETLIFY_FUNCTIONS_EXTS = 'js,mjs,cjs,ts,mts,cts';
FILE: packages/knip/src/plugins/netlify/types.ts
type NetlifyConfig (line 1) | type NetlifyConfig = {
type FunctionsConfig (line 8) | type FunctionsConfig = {
FILE: packages/knip/src/plugins/next-mdx/resolveFromAST.ts
method CallExpression (line 13) | CallExpression(node) {
FILE: packages/knip/src/plugins/nitro/types.ts
type NitroConfig (line 1) | interface NitroConfig {
FILE: packages/knip/src/plugins/npm-package-json-lint/types.ts
type NpmPkgJsonLintConfig (line 1) | type NpmPkgJsonLintConfig = {
FILE: packages/knip/src/plugins/nuxt/helpers.ts
method Identifier (line 33) | Identifier(node) {
method TSImportType (line 72) | TSImportType(node) {
function buildAutoImportMap (line 81) | function buildAutoImportMap(filePath: string, result: ParseResult) {
FILE: packages/knip/src/plugins/nuxt/types.ts
type NuxtConfig (line 1) | interface NuxtConfig {
type TemplateExpressionNode (line 23) | interface TemplateExpressionNode {
type TemplateAstProp (line 28) | interface TemplateAstProp {
type TemplateAstNode (line 34) | interface TemplateAstNode {
type Descriptor (line 42) | interface Descriptor {
type VueSfc (line 48) | type VueSfc = { parse: (source: string, path: string) => { descriptor: D...
FILE: packages/knip/src/plugins/nx/types.ts
type NxProjectConfiguration (line 1) | interface NxProjectConfiguration {
type NxConfigRoot (line 20) | interface NxConfigRoot {
FILE: packages/knip/src/plugins/nyc/types.ts
type NycConfig (line 1) | type NycConfig = {
FILE: packages/knip/src/plugins/oclif/types.ts
type OclifConfig (line 1) | type OclifConfig = {
FILE: packages/knip/src/plugins/parcel/types.ts
type ParcelConfig (line 1) | type ParcelConfig = {
FILE: packages/knip/src/plugins/payload/types.ts
type PayloadConfig (line 1) | type PayloadConfig = Promise<{
FILE: packages/knip/src/plugins/playwright/types.ts
type LiteralUnion (line 3) | type LiteralUnion<T extends U, U = string> = T | (U & { zz_IGNORE_ME?: n...
type BlobReporterOptions (line 5) | type BlobReporterOptions = { outputDir?: string; fileName?: string };
type ListReporterOptions (line 6) | type ListReporterOptions = { printSteps?: boolean };
type JUnitReporterOptions (line 7) | type JUnitReporterOptions = {
type JsonReporterOptions (line 12) | type JsonReporterOptions = { outputFile?: string };
type HtmlReporterOptions (line 13) | type HtmlReporterOptions = {
type ReporterDescription (line 23) | type ReporterDescription = Readonly<
type Project (line 42) | type Project = {
type PlaywrightTestConfig (line 48) | type PlaywrightTestConfig = {
FILE: packages/knip/src/plugins/pm2/types.ts
type PM2Application (line 1) | type PM2Application = {
type PM2Applications (line 5) | type PM2Applications = PM2Application | PM2Application[];
type PM2RootConfig (line 7) | type PM2RootConfig = PM2Application & {
type PM2Config (line 11) | type PM2Config = PM2RootConfig | PM2Application[];
FILE: packages/knip/src/plugins/postcss/types.ts
type PostCSSConfig (line 1) | type PostCSSConfig = {
FILE: packages/knip/src/plugins/preconstruct/types.ts
type PreconstructConfig (line 1) | type PreconstructConfig = {
FILE: packages/knip/src/plugins/prettier/types.ts
type PrettierConfig (line 1) | type PrettierConfig = {
FILE: packages/knip/src/plugins/prisma/types.ts
type PrismaConfig (line 1) | type PrismaConfig = {
FILE: packages/knip/src/plugins/raycast/types.ts
type RaycastManifestCommand (line 1) | type RaycastManifestCommand = {
type RaycastManifestTool (line 5) | type RaycastManifestTool = {
type RaycastManifest (line 9) | type RaycastManifest = {
FILE: packages/knip/src/plugins/react-cosmos/types.ts
type ReactCosmosConfig (line 1) | type ReactCosmosConfig = {
FILE: packages/knip/src/plugins/react-native/index.ts
constant RN_CLI_PACKAGES (line 16) | const RN_CLI_PACKAGES = [
FILE: packages/knip/src/plugins/react-native/types.ts
type ReactNativeConfig (line 3) | type ReactNativeConfig = {
FILE: packages/knip/src/plugins/react-router/types.ts
type PluginConfig (line 1) | type PluginConfig = {
type RouteConfigEntry (line 5) | interface RouteConfigEntry {
FILE: packages/knip/src/plugins/relay/types.ts
type RelayProject (line 1) | type RelayProject = {
type RelayConfig (line 14) | type RelayConfig =
FILE: packages/knip/src/plugins/release-it/types.ts
type ReleaseItConfig (line 1) | type ReleaseItConfig = {
FILE: packages/knip/src/plugins/remark/types.ts
type RemarkConfig (line 1) | type RemarkConfig = {
FILE: packages/knip/src/plugins/rsbuild/types.ts
type EntryDescription (line 1) | type EntryDescription = Record<string, unknown>;
type Entry (line 3) | type Entry = Record<string, string | string[] | (EntryDescription & { ht...
type RsbuildConfig (line 5) | type RsbuildConfig = {
FILE: packages/knip/src/plugins/rslib/types.ts
type RslibConfig (line 2) | type RslibConfig = {};
FILE: packages/knip/src/plugins/rstest/index.ts
function testEnvironment (line 23) | function testEnvironment(config: RstestConfig) {
FILE: packages/knip/src/plugins/rstest/types.ts
type RstestConfig (line 1) | type RstestConfig = {
FILE: packages/knip/src/plugins/semantic-release/types.ts
type SemanticReleaseConfig (line 1) | type SemanticReleaseConfig = {
FILE: packages/knip/src/plugins/simple-git-hooks/types.ts
type Config (line 6) | type Config = Record<string, string>;
type SimpleGitHooksConfig (line 8) | type SimpleGitHooksConfig = Config | (() => Config);
FILE: packages/knip/src/plugins/sst/resolveFromAST.ts
method CallExpression (line 22) | CallExpression(node) {
FILE: packages/knip/src/plugins/storybook/types.ts
type Stories (line 1) | type Stories = (string | { directory: string; files?: string; titlePrefi...
type StorybookConfig (line 3) | type StorybookConfig = {
FILE: packages/knip/src/plugins/stryker/types.ts
type StrykerConfig (line 1) | type StrykerConfig = {
FILE: packages/knip/src/plugins/stylelint/types.ts
type BaseStyleLintConfig (line 1) | interface BaseStyleLintConfig {
type StyleLintConfig (line 7) | interface StyleLintConfig extends BaseStyleLintConfig {
FILE: packages/knip/src/plugins/svgr/types.ts
type SvgrConfig (line 1) | type SvgrConfig = {
FILE: packages/knip/src/plugins/swc/types.ts
type SWCConfig (line 1) | type SWCConfig = {
FILE: packages/knip/src/plugins/tanstack-router/types.ts
type TanStackRouterConfig (line 1) | interface TanStackRouterConfig {
FILE: packages/knip/src/plugins/taskfile/types.ts
type TaskfileCommand (line 2) | type TaskfileCommand =
type TaskfileTask (line 13) | type TaskfileTask =
type TaskfileInclude (line 23) | type TaskfileInclude = string | { taskfile: string; [key: string]: unkno...
type TaskfileConfig (line 26) | type TaskfileConfig = {
FILE: packages/knip/src/plugins/tsdown/types.ts
type Entry (line 2) | type Entry = (string | Record<string, string[] | string>)[] | string | R...
type Options (line 4) | type Options = {
type MaybePromise (line 8) | type MaybePromise<T> = T | Promise<T>;
type TsdownConfig (line 10) | type TsdownConfig = Options | Options[] | ((overrideOptions: Options) =>...
FILE: packages/knip/src/plugins/tsup/types.ts
type Entry (line 1) | type Entry = string[] | Record<string, string>;
type Options (line 3) | type Options = {
type MaybePromise (line 7) | type MaybePromise<T> = T | Promise<T>;
type TsupConfig (line 9) | type TsupConfig = Options | Options[] | ((overrideOptions: Options) => M...
FILE: packages/knip/src/plugins/typedoc/types.ts
type TypeDocConfig (line 1) | type TypeDocConfig = {
FILE: packages/knip/src/plugins/unbuild/types.ts
type UnbuildConfigObject (line 1) | type UnbuildConfigObject = Partial<{
type UnbuildConfig (line 15) | type UnbuildConfig = UnbuildConfigObject | UnbuildConfigObject[];
FILE: packages/knip/src/plugins/vite/helpers.ts
method CallExpression (line 25) | CallExpression(node) {
FILE: packages/knip/src/plugins/vite/visitors/importMetaGlob.ts
function createImportMetaGlobVisitor (line 7) | function createImportMetaGlobVisitor(ctx: PluginVisitorContext): PluginV...
FILE: packages/knip/src/plugins/vitest/helpers.ts
type KnownEnvironment (line 9) | type KnownEnvironment = 'node' | 'jsdom' | 'happy-dom' | 'edge-runtime';
FILE: packages/knip/src/plugins/vitest/types.ts
type Alias (line 1) | interface Alias {
type AliasOptions (line 7) | type AliasOptions = readonly Alias[] | { [find: string]: string };
type VitestConfig (line 9) | interface VitestConfig {
type ViteConfig (line 27) | interface ViteConfig extends VitestConfig {
type COMMAND (line 41) | type COMMAND = 'dev' | 'serve' | 'build';
type MODE (line 42) | type MODE = 'development' | 'production';
type Options (line 44) | interface Options {
type ViteConfigOrFn (line 50) | type ViteConfigOrFn =
type VitestWorkspaceConfig (line 55) | type VitestWorkspaceConfig = (string | ViteConfig)[];
FILE: packages/knip/src/plugins/vue/types.ts
type VueConfig (line 3) | type VueConfig = {
FILE: packages/knip/src/plugins/webdriver-io/types.ts
type WebdriverIOConfig (line 3) | type WebdriverIOConfig = {
FILE: packages/knip/src/plugins/webpack/types.ts
type Mode (line 3) | type Mode = 'none' | 'development' | 'production';
type Env (line 4) | type Env = { production: boolean; mode: Mode };
type Argv (line 5) | type Argv = { mode: Mode };
type Configurations (line 8) | type Configurations = Configuration | Configuration[];
type WebpackConfig (line 10) | type WebpackConfig =
FILE: packages/knip/src/plugins/webpack/visitors/requireContext.ts
function createRequireContextVisitor (line 7) | function createRequireContextVisitor(ctx: PluginVisitorContext): PluginV...
FILE: packages/knip/src/plugins/wireit/types.ts
type WireitConfig (line 1) | type WireitConfig = Record<string, { command?: string }>;
FILE: packages/knip/src/plugins/wrangler/types.ts
type WranglerConfig (line 1) | type WranglerConfig = {
FILE: packages/knip/src/plugins/xo/types.ts
type XOConfig (line 3) | type XOConfig = ESLintConfigDeprecated & {
FILE: packages/knip/src/plugins/yarn/index.ts
type YarnConfig (line 20) | type YarnConfig = {
FILE: packages/knip/src/plugins/zx/visitors/zx.ts
function createZxVisitor (line 3) | function createZxVisitor(ctx: PluginVisitorContext): PluginVisitorObject {
FILE: packages/knip/src/reporters/codeclimate.ts
function convertSeverity (line 53) | function convertSeverity(severity?: IssueSeverity): codeclimate.Severity {
function getIssueDescription (line 64) | function getIssueDescription({ type, symbol, symbols, parentSymbol }: Is...
function getSymbolDescription (line 69) | function getSymbolDescription({
function createLocation (line 81) | function createLocation(filePath: string, cwd: string, line?: number, co...
function createFingerprint (line 107) | function createFingerprint(filePath: string, cwd: string, message: strin...
FILE: packages/knip/src/reporters/codeowners.ts
type OwnedIssue (line 7) | type OwnedIssue = Issue & { owner: string };
type ExtraReporterOptions (line 9) | type ExtraReporterOptions = {
FILE: packages/knip/src/reporters/json.ts
type ExtraReporterOptions (line 8) | type ExtraReporterOptions = {
type BaseItem (line 12) | interface BaseItem {
type Item (line 16) | interface Item extends BaseItem {
type BaseItems (line 23) | type BaseItems = Array<BaseItem>;
type Items (line 24) | type Items = Array<Item>;
type Row (line 26) | type Row = {
FILE: packages/knip/src/reporters/trace.ts
type TraceReporterOptions (line 12) | interface TraceReporterOptions {
FILE: packages/knip/src/reporters/util/configuration-hints.ts
type PrintHintOptions (line 8) | interface PrintHintOptions {
type TableRow (line 17) | type TableRow = ConfigurationHint & { message: string };
type ProcessedHint (line 96) | interface ProcessedHint extends ConfigurationHint {
FILE: packages/knip/src/reporters/util/util.ts
type LogIssueLine (line 20) | type LogIssueLine = {
FILE: packages/knip/src/reporters/watch.ts
type WatchReporter (line 10) | interface WatchReporter {
FILE: packages/knip/src/run.ts
type Results (line 17) | type Results = Awaited<ReturnType<typeof run>>['results'];
FILE: packages/knip/src/schema/configuration.ts
type SyncCompiler (line 7) | type SyncCompiler = (filename: string, contents: string) => string;
type AsyncCompiler (line 8) | type AsyncCompiler = (filename: string, contents: string) => Promise<str...
FILE: packages/knip/src/session/build-maps.ts
constant FALLBACK_LOCATION (line 14) | const FALLBACK_LOCATION = { identifier: undefined, pos: 0, line: 0, col:...
FILE: packages/knip/src/session/file-descriptor.ts
type FileDescriptorOptions (line 7) | interface FileDescriptorOptions {
FILE: packages/knip/src/session/package-json-descriptor.ts
type PackageJsonFile (line 5) | interface PackageJsonFile {
FILE: packages/knip/src/session/session.ts
type WatchUpdate (line 9) | type WatchUpdate = { duration: number; mem: number };
type Session (line 11) | interface Session {
FILE: packages/knip/src/session/types.ts
type SourceLocation (line 4) | interface SourceLocation extends Position {
type InternalImport (line 9) | interface InternalImport extends SourceLocation {
type Export (line 14) | interface Export extends SourceLocation {
type ContentionDetails (line 20) | interface ContentionDetails {
type FileMetrics (line 25) | interface FileMetrics {
type File (line 32) | interface File {
type ImportLookup (line 40) | type ImportLookup = Map<string, Map<string, Import[]>>;
type Cycle (line 42) | type Cycle = string[];
type ReExportKind (line 44) | type ReExportKind = (typeof RE_EXPORT_KIND)[keyof typeof RE_EXPORT_KIND];
FILE: packages/knip/src/types/PluginNames.ts
type PluginName (line 2) | type PluginName =
FILE: packages/knip/src/types/args.ts
type ConfigArg (line 4) | type ConfigArg = boolean | (string | [string, (id: string) => string])[];
type Args (line 6) | type Args = {
FILE: packages/knip/src/types/config.ts
type GetInputsFromScriptsOptions (line 14) | interface GetInputsFromScriptsOptions extends BaseOptions {
type GetInputsFromScripts (line 19) | type GetInputsFromScripts<T = GetInputsFromScriptsOptions> = (
type GetInputsFromScriptsPartial (line 24) | type GetInputsFromScriptsPartial = (
type FromArgs (line 29) | type FromArgs = (args: string[], options?: Partial<GetInputsFromScriptsO...
type BinaryResolverOptions (line 31) | interface BinaryResolverOptions extends GetInputsFromScriptsOptions {
type BinaryResolver (line 35) | type BinaryResolver = (binary: string, args: string[], options: BinaryRe...
type RawConfiguration (line 37) | type RawConfiguration = z.infer<typeof knipConfigurationSchema>;
type RawConfigurationOrFn (line 39) | type RawConfigurationOrFn =
type RawPluginConfiguration (line 43) | type RawPluginConfiguration = z.infer<typeof pluginSchema>;
type WorkspaceProjectConfig (line 45) | type WorkspaceProjectConfig = z.infer<typeof workspaceConfigurationSchema>;
type IgnorePatterns (line 47) | type IgnorePatterns = (string | RegExp)[];
type IgnorableExport (line 49) | type IgnorableExport = Exclude<SymbolType, 'unknown'>;
type IgnoreExportsUsedInFile (line 51) | type IgnoreExportsUsedInFile = boolean | Partial<Record<IgnorableExport,...
type IgnoreIssues (line 53) | type IgnoreIssues = Record<string, IssueType[]>;
type GetImportsAndExportsOptions (line 55) | type GetImportsAndExportsOptions = {
type Configuration (line 63) | interface Configuration {
type NormalizedGlob (line 79) | type NormalizedGlob = string[];
type EnsuredPluginConfiguration (line 81) | type EnsuredPluginConfiguration = {
type BaseWorkspaceConfiguration (line 87) | interface BaseWorkspaceConfiguration {
type PluginConfiguration (line 96) | type PluginConfiguration = EnsuredPluginConfiguration | boolean;
type PluginsConfiguration (line 98) | type PluginsConfiguration = Record<PluginName, PluginConfiguration>;
type WorkspaceConfiguration (line 100) | interface WorkspaceConfiguration extends BaseWorkspaceConfiguration, Par...
type BaseOptions (line 102) | interface BaseOptions {
type IsPluginEnabledOptions (line 109) | type IsPluginEnabledOptions = {
type IsPluginEnabled (line 116) | type IsPluginEnabled = (options: IsPluginEnabledOptions) => boolean | Pr...
type PluginOptions (line 118) | interface PluginOptions extends BaseOptions {
type PluginSetup (line 129) | type PluginSetup = () => Promise<void> | void;
type IsLoadConfig (line 131) | type IsLoadConfig = (options: PluginOptions, dependencies: Set<string>) ...
type ResolveConfig (line 133) | type ResolveConfig<T = any> = (config: T, options: PluginOptions) => Pro...
type Resolve (line 135) | type Resolve = (options: PluginOptions) => Promise<Input[]> | Input[];
type HandleInput (line 137) | type HandleInput = (input: Input) => string | undefined;
type RegisterCompilerInput (line 139) | type RegisterCompilerInput = {
type RegisterCompiler (line 144) | type RegisterCompiler = (input: RegisterCompilerInput) => void;
type ResolveFromAST (line 146) | type ResolveFromAST = (
type RegisterCompilersOptions (line 153) | type RegisterCompilersOptions = {
type RegisterCompilers (line 160) | type RegisterCompilers = (options: RegisterCompilersOptions) => Promise<...
type PluginVisitorContext (line 162) | type PluginVisitorContext = {
type PluginVisitorObject (line 169) | type PluginVisitorObject = VisitorObject;
type RegisterVisitorsOptions (line 171) | type RegisterVisitorsOptions = {
type RegisterVisitors (line 177) | type RegisterVisitors = (options: RegisterVisitorsOptions) => void;
type Plugin (line 179) | interface Plugin {
type PluginMap (line 200) | type PluginMap = Record<PluginName, Plugin>;
type Entries (line 202) | type Entries = [PluginName, Plugin][];
FILE: packages/knip/src/types/entries.ts
type Entries (line 1) | type Entries<T> = Array<{ [K in keyof T]: [K, T[K]] }[keyof T]>;
FILE: packages/knip/src/types/exports.ts
type ExportPosTuple (line 1) | type ExportPosTuple = [number, number, number];
type Fix (line 2) | type Fix = ExportPosTuple | undefined;
type Fixes (line 3) | type Fixes = Array<ExportPosTuple>;
FILE: packages/knip/src/types/issues.ts
type SymbolType (line 4) | type SymbolType = (typeof SYMBOL_TYPE)[keyof typeof SYMBOL_TYPE];
type IssueSymbol (line 6) | interface IssueSymbol {
type Issue (line 13) | interface Issue {
type IssueRecords (line 30) | type IssueRecords = Record<string, Record<string, Issue>>;
type Issues (line 32) | type Issues = {
type IssueType (line 50) | type IssueType = keyof Issues;
type Report (line 52) | type Report = {
type Counters (line 56) | type Counters = Record<IssueType | 'processed' | 'total', number>;
type ReporterOptions (line 58) | type ReporterOptions = {
type Reporter (line 78) | type Reporter = (options: ReporterOptions) => void;
type Preprocessor (line 80) | type Preprocessor = (options: ReporterOptions) => ReporterOptions;
type IssueSeverity (line 82) | type IssueSeverity = 'error' | 'warn' | 'off';
type Rules (line 84) | type Rules = Record<IssueType, IssueSeverity>;
type ConfigurationHints (line 86) | type ConfigurationHints = Map<string, ConfigurationHint>;
type ConfigurationHintType (line 88) | type ConfigurationHintType =
type ConfigurationHint (line 105) | type ConfigurationHint = {
type TagHints (line 113) | type TagHints = Set<TagHint>;
type TagHint (line 115) | type TagHint = {
FILE: packages/knip/src/types/module-graph.ts
type Identifier (line 4) | type Identifier = string;
type FilePath (line 5) | type FilePath = string;
type NamespaceOrAlias (line 6) | type NamespaceOrAlias = string;
type Reference (line 8) | type Reference = string;
type References (line 9) | type References = Set<Reference>;
type Tags (line 11) | type Tags = Set<string>;
type Position (line 13) | interface Position {
type IdToFileMap (line 19) | type IdToFileMap = Map<Identifier, Set<FilePath>>;
type IdToNsToFileMap (line 20) | type IdToNsToFileMap = Map<Identifier, Map<NamespaceOrAlias, Set<FilePat...
type ImportMaps (line 22) | type ImportMaps = {
type ImportMap (line 39) | type ImportMap = Map<FilePath, ImportMaps>;
type Import (line 41) | interface Import extends Position {
type ExternalRef (line 48) | interface ExternalRef {
type Export (line 53) | interface Export extends Position {
type ExportMember (line 64) | interface ExportMember extends Position {
type ExportMap (line 73) | type ExportMap = Map<Identifier, Export>;
type Imports (line 75) | type Imports = Set<Import>;
type FileNode (line 77) | type FileNode = {
type ModuleGraph (line 95) | type ModuleGraph = Map<FilePath, FileNode>;
FILE: packages/knip/src/types/options.ts
type Options (line 1) | interface Options {
type Tags (line 29) | type Tags = [string[], string[]];
FILE: packages/knip/src/types/package-json.ts
type Primitive (line 3) | type Primitive = null | undefined | string | number | boolean | symbol |...
type LiteralUnion (line 5) | type LiteralUnion<LiteralType, BaseType extends Primitive> = LiteralType...
type Dependencies (line 7) | type Dependencies = Record<string, string>;
type C (line 9) | type C = 'import' | 'require' | 'node' | 'node-addons' | 'deno' | 'brows...
type ExportCondition (line 10) | type ExportCondition = LiteralUnion<C, string>;
type Exports (line 11) | type Exports = null | string | string[] | { [key in ExportCondition]: Ex...
type Imports (line 13) | type Imports = {
type PackageJsonPath (line 17) | type PackageJsonPath<T> = T extends { packageJsonPath: infer P } ? (P ex...
type WithPackageJsonPathAsKey (line 19) | type WithPackageJsonPathAsKey<T> = {
type PluginConfig (line 23) | type PluginConfig<P> = {
type Plugins (line 27) | type Plugins = PluginConfig<PluginMap>;
type Scripts (line 29) | type Scripts = Record<string, string>;
type Catalog (line 31) | type Catalog = Record<string, string>;
type Catalogs (line 32) | type Catalogs = Record<string, Catalog>;
type PackageJson (line 34) | type PackageJson = {
type WorkspacePackage (line 62) | type WorkspacePackage = {
FILE: packages/knip/src/types/project.ts
type Paths (line 1) | type Paths = Record<string, string[]> | undefined;
type CompilerOptions (line 3) | interface CompilerOptions {
FILE: packages/knip/src/types/tsconfig-json.ts
type TsConfigJson (line 1) | interface TsConfigJson {
FILE: packages/knip/src/types/workspace.ts
type DependencySet (line 1) | type DependencySet = Set<string>;
type DependencyArray (line 2) | type DependencyArray = Array<string>;
type WorkspaceManifest (line 4) | type WorkspaceManifest = {
type WorkspaceManifests (line 22) | type WorkspaceManifests = Map<string, WorkspaceManifest>;
type HostDependencies (line 24) | type HostDependencies = Map<string, Array<{ name: string; isPeerOptional...
type PackageName (line 26) | type PackageName = string;
type BinaryName (line 27) | type BinaryName = string;
type InstalledBinaries (line 29) | type InstalledBinaries = Map<PackageName, Set<BinaryName>>;
FILE: packages/knip/src/typescript/SourceFileManager.ts
type SourceFileManagerOptions (line 7) | interface SourceFileManagerOptions {
class SourceFileManager (line 11) | class SourceFileManager {
method constructor (line 16) | constructor({ compilers }: SourceFileManagerOptions) {
method readFile (line 21) | readFile(filePath: string): string {
method invalidate (line 41) | invalidate(filePath: string) {
method compileAndAddSourceFile (line 45) | async compileAndAddSourceFile(filePath: string) {
method readRawFile (line 57) | private readRawFile(filePath: string): string | undefined {
FILE: packages/knip/src/typescript/ast-helpers.ts
method ObjectExpression (line 78) | ObjectExpression(node) {
method CallExpression (line 90) | CallExpression(node) {
method Literal (line 173) | Literal(node: any) {
FILE: packages/knip/src/typescript/follow-imports.ts
method CallExpression (line 7) | CallExpression(node) {
method TSImportEqualsDeclaration (line 23) | TSImportEqualsDeclaration(node) {
function extractSpecifiers (line 33) | function extractSpecifiers(result: ParseResult, sourceText: string, file...
FILE: packages/knip/src/typescript/get-imports-and-exports.ts
type AddInternalImportOptions (line 31) | interface AddInternalImportOptions {
FILE: packages/knip/src/typescript/resolve-module-names.ts
function createCustomModuleResolver (line 11) | function createCustomModuleResolver(
FILE: packages/knip/src/typescript/visitors/calls.ts
function handleCallExpression (line 7) | function handleCallExpression(node: CallExpression, s: WalkState) {
function handleNewExpression (line 140) | function handleNewExpression(node: NewExpression, s: WalkState) {
FILE: packages/knip/src/typescript/visitors/exports.ts
function handleExportNamed (line 26) | function handleExportNamed(node: ExportNamedDeclaration, s: WalkState) {
function handleExportDefault (line 228) | function handleExportDefault(node: ExportDefaultDeclaration, s: WalkStat...
function handleExportAssignment (line 291) | function handleExportAssignment(node: TSExportAssignment, s: WalkState) {
function handleExpressionStatement (line 311) | function handleExpressionStatement(node: ExpressionStatement, s: WalkSta...
FILE: packages/knip/src/typescript/visitors/helpers.ts
type ResolveModule (line 26) | type ResolveModule = (specifier: string, containingFile: string) => Reso...
type ResolvedModule (line 28) | interface ResolvedModule {
function extractNamespaceMembers (line 78) | function extractNamespaceMembers(
function extractEnumMembers (line 128) | function extractEnumMembers(
FILE: packages/knip/src/typescript/visitors/imports.ts
function handleVariableDeclarator (line 8) | function handleVariableDeclarator(node: VariableDeclarator, s: WalkState) {
function handleImportExpression (line 291) | function handleImportExpression(node: ImportExpression, s: WalkState) {
FILE: packages/knip/src/typescript/visitors/jsdoc.ts
constant EMPTY_TAGS (line 3) | const EMPTY_TAGS: Set<string> = new Set();
function buildJSDocTagLookup (line 5) | function buildJSDocTagLookup(comments: Comment[], sourceText: string) {
FILE: packages/knip/src/typescript/visitors/local-refs.ts
method ClassDeclaration (line 13) | ClassDeclaration(node) {
method TSInterfaceDeclaration (line 19) | TSInterfaceDeclaration(node) {
method Property (line 24) | Property(node) {
method ReturnStatement (line 27) | ReturnStatement(node) {
method AssignmentExpression (line 30) | AssignmentExpression(node) {
method SpreadElement (line 33) | SpreadElement(node) {
method ConditionalExpression (line 36) | ConditionalExpression(node) {
method ArrayExpression (line 41) | ArrayExpression(node) {
method TemplateLiteral (line 46) | TemplateLiteral(node) {
method BinaryExpression (line 51) | BinaryExpression(node) {
method LogicalExpression (line 55) | LogicalExpression(node) {
method UnaryExpression (line 59) | UnaryExpression(node) {
method SwitchStatement (line 62) | SwitchStatement(node) {
method IfStatement (line 68) | IfStatement(node) {
method ThrowStatement (line 71) | ThrowStatement(node) {
method WhileStatement (line 74) | WhileStatement(node) {
method DoWhileStatement (line 77) | DoWhileStatement(node) {
method YieldExpression (line 80) | YieldExpression(node) {
method AwaitExpression (line 83) | AwaitExpression(node) {
method ArrowFunctionExpression (line 86) | ArrowFunctionExpression(node) {
method AssignmentPattern (line 89) | AssignmentPattern(node) {
method SequenceExpression (line 92) | SequenceExpression(node) {
method TSAsExpression (line 97) | TSAsExpression(node) {
method TSSatisfiesExpression (line 100) | TSSatisfiesExpression(node) {
method TSNonNullExpression (line 103) | TSNonNullExpression(node) {
method TSTypeAssertion (line 106) | TSTypeAssertion(node) {
method ParenthesizedExpression (line 109) | ParenthesizedExpression(node) {
method PropertyDefinition (line 112) | PropertyDefinition(node) {
method ForInStatement (line 115) | ForInStatement(node) {
method ForOfStatement (line 118) | ForOfStatement(node) {
method JSXOpeningElement (line 121) | JSXOpeningElement(node) {
method JSXExpressionContainer (line 127) | JSXExpressionContainer(node) {
method VariableDeclarator (line 130) | VariableDeclarator(node) {
method ExpressionStatement (line 133) | ExpressionStatement(node) {
method CallExpression (line 136) | CallExpression(node) {
method NewExpression (line 142) | NewExpression(node) {
method MemberExpression (line 148) | MemberExpression(node) {
method TaggedTemplateExpression (line 152) | TaggedTemplateExpression(node) {
method TSQualifiedName (line 155) | TSQualifiedName(node) {
method TSTypeReference (line 175) | TSTypeReference(node) {
method TSTypeQuery (line 181) | TSTypeQuery(node) {
function collectLocalRefs (line 189) | function collectLocalRefs(
FILE: packages/knip/src/typescript/visitors/members.ts
function handleMemberExpression (line 7) | function handleMemberExpression(node: MemberExpression, s: WalkState) {
function handleJSXMemberExpression (line 171) | function handleJSXMemberExpression(node: JSXMemberExpression, s: WalkSta...
FILE: packages/knip/src/typescript/visitors/script-visitors.ts
function createBunShellVisitor (line 3) | function createBunShellVisitor(ctx: PluginVisitorContext): PluginVisitor...
FILE: packages/knip/src/typescript/visitors/walk.ts
type WalkContext (line 22) | interface WalkContext {
type WalkState (line 60) | interface WalkState extends WalkContext {
method TSModuleDeclaration (line 169) | TSModuleDeclaration(node) {
method ClassDeclaration (line 172) | ClassDeclaration(node) {
method FunctionDeclaration (line 175) | FunctionDeclaration(node) {
method VariableDeclaration (line 178) | VariableDeclaration(node) {
method TSEnumDeclaration (line 184) | TSEnumDeclaration(node) {
method ExportNamedDeclaration (line 187) | ExportNamedDeclaration(node) {
method ExportDefaultDeclaration (line 190) | ExportDefaultDeclaration(node) {
method TSExportAssignment (line 193) | TSExportAssignment(node) {
method ExpressionStatement (line 196) | ExpressionStatement(node) {
method VariableDeclarator (line 199) | VariableDeclarator(node) {
method ImportExpression (line 202) | ImportExpression(node) {
method CallExpression (line 205) | CallExpression(node) {
method NewExpression (line 208) | NewExpression(node) {
method MemberExpression (line 211) | MemberExpression(node) {
method JSXMemberExpression (line 214) | JSXMemberExpression(node) {
method ForInStatement (line 217) | ForInStatement(node) {
method ForOfStatement (line 226) | ForOfStatement(node) {
method TSQualifiedName (line 235) | TSQualifiedName(node) {
method TSTypeReference (line 272) | TSTypeReference(node) {
method TSTypeQuery (line 282) | TSTypeQuery(node) {
method TSImportType (line 292) | TSImportType(node) {
method TSImportEqualsDeclaration (line 300) | TSImportEqualsDeclaration(node) {
function buildVisitor (line 333) | function buildVisitor(pluginVisitorObjects: PluginVisitorObject[]): Visi...
function walkAST (line 367) | function walkAST(program: Program, sourceText: string, filePath: string,...
FILE: packages/knip/src/util/Performance.ts
type MemInfo (line 28) | type MemInfo = {
type MemoryEntry (line 35) | interface MemoryEntry extends PerformanceEntry {
class Performance (line 55) | class Performance {
method constructor (line 68) | constructor({ isTimerifyFunctions = false, isMemoryUsageEnabled = fals...
method setMark (line 100) | private setMark(name: string) {
method clearMark (line 105) | private clearMark(name: string) {
method flush (line 113) | private async flush() {
method getPerfEntriesByName (line 119) | private getPerfEntriesByName() {
method getTimerifiedFunctionsTable (line 131) | getTimerifiedFunctionsTable() {
method addMemoryMark (line 150) | addMemoryMark(label: string) {
method getMemoryUsageTable (line 158) | getMemoryUsageTable() {
method getCurrentDurationInMs (line 184) | getCurrentDurationInMs() {
method getMemHeapUsage (line 188) | getMemHeapUsage() {
method getCurrentMemUsageInMb (line 192) | getCurrentMemUsageInMb() {
method finalize (line 196) | public async finalize() {
method reset (line 202) | public reset() {
FILE: packages/knip/src/util/array.ts
type Collection (line 1) | type Collection<T> = Array<T> | Set<T>;
FILE: packages/knip/src/util/catalog.ts
constant DEFAULT_CATALOG (line 7) | const DEFAULT_CATALOG = 'default';
FILE: packages/knip/src/util/cli-arguments.ts
type ParsedCLIArgs (line 80) | type ParsedCLIArgs = ReturnType<typeof parseCLIArgs>;
function parseCLIArgs (line 82) | function parseCLIArgs() {
FILE: packages/knip/src/util/codeowners.ts
function parseCodeowners (line 7) | function parseCodeowners(content: string) {
function createOwnershipEngine (line 27) | function createOwnershipEngine(filePath: string) {
FILE: packages/knip/src/util/create-input-handler.ts
type ExternalRefsFromInputs (line 22) | type ExternalRefsFromInputs = Map<string, Set<ExternalRef>>;
FILE: packages/knip/src/util/create-options.ts
type CreateOptions (line 21) | interface CreateOptions extends Partial<Options> {
type MainOptions (line 199) | type MainOptions = Awaited<ReturnType<typeof createOptions>>;
FILE: packages/knip/src/util/create-workspace-graph.ts
type WorkspaceGraph (line 4) | type WorkspaceGraph = Map<string, Set<string>>;
function createWorkspaceGraph (line 8) | function createWorkspaceGraph(
FILE: packages/knip/src/util/debug.ts
constant IS_DEBUG_ENABLED (line 7) | const IS_DEBUG_ENABLED = values.debug ?? false;
constant IS_COLORS (line 9) | const IS_COLORS = !process.env.NO_COLOR;
FILE: packages/knip/src/util/errors.ts
type ErrorWithCause (line 5) | interface ErrorWithCause extends Error {
class ConfigurationError (line 9) | class ConfigurationError extends Error {}
class LoaderError (line 11) | class LoaderError extends Error {}
FILE: packages/knip/src/util/file-entry-cache.ts
type MetaData (line 15) | type MetaData<T> = { size: number; mtime: number; data?: T };
type FileDescriptor (line 17) | type FileDescriptor<T> = {
class FileEntryCache (line 35) | class FileEntryCache<T> {
method constructor (line 40) | constructor(cacheId: string, _path: string) {
method removeNotFoundFiles (line 46) | removeNotFoundFiles() {
method getFileDescriptor (line 57) | getFileDescriptor(filePath: string): FileDescriptor<T> {
method _getFileDescriptorUsingMtimeAndSize (line 71) | _getFileDescriptorUsingMtimeAndSize(filePath: string, fstat: fs.Stats) {
method removeEntry (line 99) | removeEntry(entryName: string) {
method _getMetaForFileUsingMtimeAndSize (line 105) | _getMetaForFileUsingMtimeAndSize(cacheEntry: FileDescriptor<T>) {
method reconcile (line 114) | reconcile() {
FILE: packages/knip/src/util/get-included-issue-types.ts
type GetIncludedIssueTypesOptions (line 5) | type GetIncludedIssueTypesOptions = {
FILE: packages/knip/src/util/glob-core.ts
type Options (line 16) | type Options = { gitignore: boolean; cwd: string };
type GlobOptions (line 18) | interface GlobOptions extends FastGlobOptions {
type Gitignores (line 25) | type Gitignores = { ignores: Set<string>; unignores: Set<string> };
function glob (line 208) | async function glob(_patterns: string[], options: GlobOptions): Promise<...
function getGitIgnoredHandler (line 254) | async function getGitIgnoredHandler(
FILE: packages/knip/src/util/glob.ts
type GlobOptions (line 7) | interface GlobOptions {
FILE: packages/knip/src/util/graph-sequencer.ts
type Graph (line 6) | type Graph<T> = Map<T, Set<T>>;
type Groups (line 7) | type Groups<T> = T[][];
type Result (line 9) | interface Result<T> {
function graphSequencer (line 22) | function graphSequencer<T>(graph: Graph<T>, includedNodes: T[] = [...gra...
FILE: packages/knip/src/util/input.ts
type InputType (line 5) | type InputType =
type Input (line 16) | interface Input {
type ConfigInput (line 28) | interface ConfigInput extends Input {
type AliasInput (line 34) | interface AliasInput extends Input {
type IgnoreInput (line 39) | interface IgnoreInput extends Input {
type Options (line 44) | type Options = {
FILE: packages/knip/src/util/load-config.ts
function loadResolvedConfigFile (line 18) | async function loadResolvedConfigFile(configPath: string, options: Parse...
FILE: packages/knip/src/util/load-tsconfig.ts
constant DEFAULT_INCLUDE (line 24) | const DEFAULT_INCLUDE = ['**/*'];
constant TS_EXTENSIONS (line 26) | const TS_EXTENSIONS = new Set(['.ts', '.tsx', '.mts', '.cts', '.js', '.j...
FILE: packages/knip/src/util/map-workspaces.ts
type Packages (line 9) | type Packages = Map<string, WorkspacePackage>;
type WorkspacePkgNames (line 10) | type WorkspacePkgNames = Set<string>;
function mapWorkspaces (line 12) | async function mapWorkspaces(cwd: string, workspaces: string[]): Promise...
FILE: packages/knip/src/util/math.ts
function getStats (line 1) | function getStats(values: number[]) {
FILE: packages/knip/src/util/modules.ts
constant CHAR_EXCLAMATION (line 67) | const CHAR_EXCLAMATION = 33;
constant CHAR_DASH (line 68) | const CHAR_DASH = 45;
constant CHAR_SLASH (line 69) | const CHAR_SLASH = 47;
constant CHAR_COLON (line 70) | const CHAR_COLON = 58;
constant CHAR_HASH (line 71) | const CHAR_HASH = 35;
constant CHAR_QUESTION (line 72) | const CHAR_QUESTION = 63;
FILE: packages/knip/src/util/package-json.ts
constant INDENT (line 5) | const INDENT = Symbol.for('indent');
constant NEWLINE (line 6) | const NEWLINE = Symbol.for('newline');
constant DEFAULT_NEWLINE (line 7) | const DEFAULT_NEWLINE = '\n';
constant DEFAULT_INDENT (line 8) | const DEFAULT_INDENT = ' ';
constant BOM (line 9) | const BOM = /^\uFEFF/;
constant FORMAT (line 10) | const FORMAT = /^\s*[{[]((?:\r?\n)+)([\s\t]*)/;
constant EMPTY (line 11) | const EMPTY = /^(?:\{\}|\[\])((?:\r?\n)+)?$/;
type ExtendedPackageJson (line 13) | interface ExtendedPackageJson extends PackageJson {
FILE: packages/knip/src/util/package-name.ts
function getPackageName (line 8) | function getPackageName(pkg: PackageJson, pathname: string) {
FILE: packages/knip/src/util/remove-export.ts
type FixerOptions (line 3) | interface FixerOptions {
FILE: packages/knip/src/util/resolve.ts
function convertPathsToAlias (line 50) | function convertPathsToAlias(paths: Record<string, string[]> | undefined...
function clearResolverCache (line 76) | function clearResolverCache() {
FILE: packages/knip/src/util/string.ts
constant CONTROL_CHARACTERS (line 4) | const CONTROL_CHARACTERS = /\u001b\[[0-9;]+m/g;
constant ELLIPSIS (line 5) | const ELLIPSIS = '…';
FILE: packages/knip/src/util/table.ts
type Value (line 4) | type Value = string | number | undefined | false | null;
type Align (line 5) | type Align = 'left' | 'center' | 'right';
type Row (line 6) | type Row = Record<string, Cell>;
type Cell (line 7) | type Cell = { value: Value; formatted?: string; fill?: string; align?: A...
constant DEFAULT_MAX_WIDTH (line 9) | const DEFAULT_MAX_WIDTH = process.stdout.columns || 120;
constant MIN_TRUNCATED_WIDTH (line 10) | const MIN_TRUNCATED_WIDTH = 4;
constant COLUMN_SEPARATOR (line 11) | const COLUMN_SEPARATOR = ' ';
class Table (line 13) | class Table {
method constructor (line 21) | constructor(options?: { maxWidth?: number; header?: boolean; truncateS...
method row (line 28) | row() {
method cell (line 33) | cell(column: string, value: Value, formatter?: (value: Value) => strin...
method sort (line 42) | sort(column: string) {
method toCells (line 54) | toCells() {
method toRows (line 119) | toRows() {
method toString (line 123) | toString() {
FILE: packages/knip/src/util/to-source-path.ts
type ToSourceFilePath (line 66) | type ToSourceFilePath = ReturnType<typeof getModuleSourcePathHandler>;
FILE: packages/knip/src/util/watch.ts
type OnFileChange (line 16) | type OnFileChange = (options: { issues: Issues; duration?: number; mem?:...
type WatchChange (line 18) | type WatchChange = {
type SessionHandler (line 23) | type SessionHandler = Awaited<ReturnType<typeof getSessionHandler>>;
type WatchOptions (line 25) | type WatchOptions = {
FILE: packages/knip/src/util/workspace-file-filter.ts
type WorkspaceFilePathFilter (line 4) | type WorkspaceFilePathFilter = (filePath: string) => boolean;
FILE: packages/knip/src/util/workspace-selectors.ts
type WorkspaceSelectorType (line 8) | type WorkspaceSelectorType = 'pkg-name' | 'dir-path' | 'dir-glob';
type ParsedSelector (line 10) | interface ParsedSelector {
function parseWorkspaceSelector (line 20) | function parseWorkspaceSelector(token: string, cwd: string): ParsedSelec...
function matchWorkspacesByPkgName (line 68) | function matchWorkspacesByPkgName(
function matchWorkspacesByDirGlob (line 85) | function matchWorkspacesByDirGlob(pattern: string, availableWorkspaceNam...
function selectWorkspaces (line 93) | function selectWorkspaces(
FILE: packages/knip/test/graph-explorer/walk-up.test.ts
type ReExportKind (line 10) | type ReExportKind = (typeof RE_EXPORT_KIND)[keyof typeof RE_EXPORT_KIND];
FILE: packages/knip/test/helpers/assertAndRemoveProperty.ts
function assertAndRemoveProperty (line 4) | function assertAndRemoveProperty<TIn extends object, TProp extends keyof...
function assertAndRemoveFingerprint (line 14) | function assertAndRemoveFingerprint(issue: Issue) {
function orderByPos (line 21) | function orderByPos(a: Issue, b: Issue): number {
FILE: packages/knip/test/util/get-inputs-from-scripts.test.ts
type T (line 20) | type T = (script: string | string[], dependencies: Input[], options?: { ...
FILE: packages/language-server/src/code-actions.js
function createAddJSDocTagEdit (line 69) | function createAddJSDocTagEdit(document, issue, tag) {
FILE: packages/language-server/src/constants.js
constant DEFAULT_JSDOC_TAGS (line 1) | const DEFAULT_JSDOC_TAGS = ['@public', '@internal', '@lintignore'];
constant REQUEST_START (line 3) | const REQUEST_START = 'knip.start';
constant REQUEST_STOP (line 5) | const REQUEST_STOP = 'knip.stop';
constant REQUEST_RESTART (line 7) | const REQUEST_RESTART = 'knip.restart';
constant REQUEST_FILE_NODE (line 9) | const REQUEST_FILE_NODE = 'knip.getFileNode';
constant REQUEST_PACKAGE_JSON (line 11) | const REQUEST_PACKAGE_JSON = 'knip.getPackageJson';
constant REQUEST_RESULTS (line 13) | const REQUEST_RESULTS = 'knip.getResults';
constant NOTIFICATION_MODULE_GRAPH_BUILT (line 15) | const NOTIFICATION_MODULE_GRAPH_BUILT = 'knip.moduleGraphBuilt';
constant SESSION_LOADING (line 17) | const SESSION_LOADING = 'session-loading';
FILE: packages/language-server/src/diagnostics.js
constant SEVERITY (line 19) | const SEVERITY = {
FILE: packages/language-server/src/server.js
constant RESTART_FOR (line 29) | const RESTART_FOR = new Set(['package.json', ...KNIP_CONFIG_LOCATIONS]);
function readKnipVersion (line 32) | function readKnipVersion(resolvedPath) {
constant DEFAULT_CONFIG (line 43) | const DEFAULT_CONFIG = {
constant FILE_CHANGE_TYPES (line 76) | const FILE_CHANGE_TYPES = new Map([
constant ISSUE_DESC (line 82) | const ISSUE_DESC = {
class LanguageServer (line 89) | class LanguageServer {
method constructor (line 117) | constructor() {
method setupHandlers (line 129) | setupHandlers() {
method getConfig (line 183) | async getConfig() {
method buildDiagnostics (line 196) | buildDiagnostics(issues, config, rules) {
method publishDiagnostics (line 219) | publishDiagnostics(newDiags) {
method #resolveKnipSession (line 229) | async #resolveKnipSession() {
method start (line 245) | async start() {
method stop (line 275) | stop() {
method restart (line 282) | restart() {
method getResults (line 287) | getResults() {
method handleFileChanges (line 296) | async handleFileChanges(params) {
method getFileDescriptor (line 338) | getFileDescriptor(filePath, options) {
method getPackageJsonDescriptor (line 365) | getPackageJsonDescriptor() {
method handleCodeAction (line 378) | async handleCodeAction(params) {
FILE: packages/language-server/src/types.d.ts
type Config (line 3) | type Config = {
type IssueForFile (line 41) | type IssueForFile = {
type IssuesForFile (line 47) | type IssuesForFile = Map<string, IssueForFile>;
type IssuesByUri (line 49) | type IssuesByUri = Map<string, IssuesForFile>;
FILE: packages/mcp-server/src/cli.js
function disconnect (line 5) | function disconnect() {
FILE: packages/mcp-server/src/curated-resources.js
constant CURATED_RESOURCES (line 1) | const CURATED_RESOURCES = {
FILE: packages/mcp-server/src/server.js
constant DOCS (line 21) | const DOCS = 'knip://docs';
class MCP (line 23) | class MCP {
method constructor (line 24) | constructor() {
method #registerPrompts (line 31) | #registerPrompts() {
method #registerResources (line 59) | #registerResources() {
method #registerTools (line 83) | #registerTools() {
method connect (line 118) | connect(transport) {
method close (line 122) | close() {
FILE: packages/mcp-server/src/texts.js
constant WORKFLOW (line 3) | const WORKFLOW = `Workflow:
constant RUN_KNIP_TOOL_DESCRIPTION (line 24) | const RUN_KNIP_TOOL_DESCRIPTION = `Run Knip and return configuration hin...
constant DOC_TOOL_DESCRIPTION (line 37) | const DOC_TOOL_DESCRIPTION = `Get Knip documentation by topic.
constant DOC_TOOL_TOPIC_DESCRIPTION (line 50) | const DOC_TOOL_TOPIC_DESCRIPTION =
constant ERROR_HINT (line 53) | const ERROR_HINT = `For unexpected errors (exit code 2) such as "error l...
constant CONFIG_REVIEW_HINT (line 59) | const CONFIG_REVIEW_HINT = `Review the existing configuration for potent...
FILE: packages/mcp-server/src/tools.js
function getErrorMessage (line 14) | function getErrorMessage(error) {
function buildResults (line 32) | function buildResults(results, options) {
function getResults (line 48) | async function getResults(cwd) {
function readContent (line 55) | function readContent(filePath) {
function getDocs (line 68) | function getDocs(topic) {
function findDocPage (line 75) | function findDocPage(topic) {
FILE: packages/vscode-knip/src/collect-dependency-hover-snippets.js
function collectDependencySnippets (line 7) | async function collectDependencySnippets(imports) {
FILE: packages/vscode-knip/src/collect-export-hover-snippets.js
function collectExportHoverSnippets (line 18) | async function collectExportHoverSnippets(identifier, locations, options...
FILE: packages/vscode-knip/src/index.js
class Extension (line 37) | class Extension {
method constructor (line 65) | constructor(context) {
method create (line 74) | static create(context) {
method init (line 79) | async init() {
method stop (line 96) | async stop() {
method #getClientForUri (line 104) | #getClientForUri(uri) {
method #getActiveClient (line 113) | #getActiveClient() {
method #startClients (line 119) | async #startClients() {
method #startClientForFolder (line 134) | async #startClientForFolder(folder) {
method #stopClientForFolder (line 182) | async #stopClientForFolder(folder) {
method #stopClients (line 198) | async #stopClients() {
method #updateToolsClient (line 212) | #updateToolsClient() {
method #logManagedWorkspaces (line 217) | #logManagedWorkspaces() {
method #detectPackageManager (line 228) | #detectPackageManager(startDir) {
method #registerCommands (line 258) | #registerCommands() {
method #requestFileDescriptor (line 325) | async #requestFileDescriptor(document) {
method #registerHoverProvider (line 332) | #registerHoverProvider() {
method #registerCodeLensProvider (line 348) | #registerCodeLensProvider() {
method #provideCodeLenses (line 361) | async #provideCodeLenses(document, _token) {
method #refresh (line 388) | async #refresh(editor) {
method #getFileForTreeViews (line 407) | async #getFileForTreeViews(editor) {
method #getHoverContent (line 442) | async #getHoverContent(document, position) {
method #getDependencyHoverContent (line 500) | async #getDependencyHoverContent(document, position, root, client) {
method #findDependencyAtPosition (line 532) | #findDependencyAtPosition(document, position) {
method #findExportAtPosition (line 588) | #findExportAtPosition(file, position) {
method #hasKnipConfig (line 603) | async #hasKnipConfig(folder) {
method #setupTreeViews (line 619) | #setupTreeViews() {
method #setupEventHandlers (line 687) | #setupEventHandlers() {
function activate (line 740) | async function activate(context) {
function deactivate (line 745) | async function deactivate() {
FILE: packages/vscode-knip/src/render-dependency-hover.js
constant MAX_TOTAL_SNIPPETS (line 22) | const MAX_TOTAL_SNIPPETS = 30;
constant MAX_SNIPPETS_PER_FILE (line 23) | const MAX_SNIPPETS_PER_FILE = 3;
function renderDependencyHover (line 31) | function renderDependencyHover(usage, root, snippets) {
FILE: packages/vscode-knip/src/render-export-hover.js
function renderExportHover (line 25) | function renderExportHover(_export, root, snippets, maxSnippets) {
function renderExportHoverEntryPaths (line 101) | function renderExportHoverEntryPaths(_export, filePath, root) {
FILE: packages/vscode-knip/src/tools.js
function setLanguageClient (line 22) | function setLanguageClient(client) {
function setOutputChannel (line 29) | function setOutputChannel(channel) {
function findKnipConfig (line 36) | function findKnipConfig(cwd) {
class KnipDocsTool (line 44) | class KnipDocsTool {
method invoke (line 50) | async invoke(options, _token) {
class KnipConfigureTool (line 58) | class KnipConfigureTool {
method invoke (line 64) | async invoke(options, _token) {
function registerKnipTools (line 95) | function registerKnipTools(context) {
FILE: packages/vscode-knip/src/tree-view-base.js
class BaseTreeViewProvider (line 27) | class BaseTreeViewProvider {
method constructor (line 28) | constructor() {
method setTreeView (line 47) | setTreeView(treeView) {
method getTreeItem (line 55) | getTreeItem(element) {
method refresh (line 63) | async refresh(data, position) {
method updatePosition (line 92) | updatePosition(position) {
method createMessageItem (line 110) | createMessageItem(label, tooltip) {
method clear (line 119) | clear(message) {
method revealItemAtCursor (line 130) | async revealItemAtCursor(position) {
method getChildren (line 153) | getChildren(element) {
method getParent (line 185) | getParent(element) {
method getManifestItems (line 190) | getManifestItems() {
method getFileItems (line 198) | getFileItems(_file) {
method createTreeViewItems (line 220) | createTreeViewItems(options) {
method createTreeViewItem (line 292) | createTreeViewItem(options) {
FILE: packages/vscode-knip/src/tree-view-exports.js
constant CONTENTION_ICONS (line 3) | const CONTENTION_ICONS = {
constant CONTENTION_TOOLTIPS (line 10) | const CONTENTION_TOOLTIPS = {
class ExportsTreeViewProvider (line 18) | class ExportsTreeViewProvider extends BaseTreeViewProvider {
method getFileItems (line 20) | getFileItems(fileNode) {
method createExportNode (line 32) | createExportNode(_export, isDeferChildren, contention) {
method createContentionDescriptors (line 70) | createContentionDescriptors(contentionDetails) {
method getManifestItems (line 89) | getManifestItems() {
FILE: packages/vscode-knip/src/tree-view-imports.js
class ImportsTreeViewProvider (line 8) | class ImportsTreeViewProvider extends BaseTreeViewProvider {
method getFileItems (line 10) | getFileItems(fileNode) {
method getManifestItems (line 37) | getManifestItems(manifest = this.manifest) {
FILE: packages/vscode-knip/test/extension.test.mjs
function extensionActivates (line 4) | async function extensionActivates() {
function knipRestartCommandExists (line 11) | async function knipRestartCommandExists() {
FILE: packages/vscode-knip/test/index.mjs
function run (line 7) | async function run() {
FILE: packages/vscode-knip/test/run.mjs
function main (line 7) | async function main() {
FILE: templates/demo/monorepo/packages/shared/src/numbers.ts
constant ONE (line 1) | const ONE = 1;
constant TWO (line 2) | const TWO = 2;
constant THREE (line 6) | const THREE = ONE + TWO;
type NUMBERS (line 8) | enum NUMBERS {
FILE: templates/language-server-client/packages/client/src/index.ts
constant FRUITS (line 14) | const FRUITS = [APPLE, BANANA, CHERRY];
FILE: templates/language-server-client/packages/server/src/branch-definition.ts
constant DIAMOND (line 1) | const DIAMOND = 1;
FILE: templates/language-server-client/packages/server/src/conflict-1.ts
constant CONFLICT (line 1) | const CONFLICT = 1;
FILE: templates/language-server-client/packages/server/src/conflict-2.ts
constant CONFLICT (line 1) | const CONFLICT = 2;
FILE: templates/language-server-client/packages/server/src/conflict-3.ts
constant CONFLICT (line 1) | const CONFLICT = 3;
FILE: templates/language-server-client/packages/server/src/overload-1.ts
constant OVERLOAD (line 1) | const OVERLOAD = 1;
FILE: templates/language-server-client/packages/server/src/overload-2.ts
constant OVERLOAD (line 1) | const OVERLOAD = 2;
FILE: templates/language-server-client/packages/server/src/overload-3.ts
constant OVERLOAD (line 1) | const OVERLOAD = 3;
FILE: templates/language-server-client/packages/shared/src/constants.ts
constant DESCRIPTION (line 1) | const DESCRIPTION = 'unused';
constant TEXT (line 3) | const TEXT = 'used';
constant FIRST (line 5) | const FIRST = 1;
constant SECOND (line 6) | const SECOND = 2;
FILE: templates/language-server-client/packages/shared/src/fruits.ts
constant APPLE (line 1) | const APPLE = 'A';
constant BANANA (line 2) | const BANANA = 'B';
constant CHERRY (line 3) | const CHERRY = 'C';
constant DATE (line 4) | const DATE = 'D';
constant ELDERBERRY (line 5) | const ELDERBERRY = 'E';
Condensed preview — 3658 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,900K chars).
[
{
"path": ".agents/MODULE_GRAPH.md",
"chars": 1442,
"preview": "# Module Graph\n\nConcise walk-through from CLI to reporter output.\n\nCore module graph and AST traversal.\n\n## Implementati"
},
{
"path": ".agents/PLUGINS.md",
"chars": 916,
"preview": "# Plugins\n\n## General\n\nRead [Writing A Plugin][1] first to understand:\n\n- Plugin responsibilities\n- Functions like `reso"
},
{
"path": ".gitattributes",
"chars": 330,
"preview": "# Convert all files to use \"\\n\" line endings.\n* text eol=lf\n\n# Specify the file type for some binary files to prevent Gi"
},
{
"path": ".github/CODE_OF_CONDUCT.md",
"chars": 972,
"preview": "# Code of Conduct\n\n- **Be kind & respectful**: Treat everyone with kindness, empathy, and respect. No personal attacks, "
},
{
"path": ".github/CONTRIBUTING.md",
"chars": 2458,
"preview": "# Contributing\n\nThank you for investing your time in contributing to Knip!\n\nRead our [Code of Conduct][1] to keep our co"
},
{
"path": ".github/DEVELOPMENT.md",
"chars": 6116,
"preview": "# Development\n\nDevelopment in this repository is using:\n\n- pnpm\n- TypeScript\n- Biome\n\nThis document describes commands a"
},
{
"path": ".github/FUNDING.yml",
"chars": 37,
"preview": "github: webpro\nopen_collective: knip\n"
},
{
"path": ".github/ISSUE_TEMPLATE/01-bug_report.yaml",
"chars": 1803,
"preview": "name: 🐛 Bug report\ndescription: Create a report to help us improve\ntitle: '🐛 '\nlabels: ['bug']\nbody:\n - type: markdown\n"
},
{
"path": ".github/ISSUE_TEMPLATE/02-regression.yaml",
"chars": 2137,
"preview": "name: 🔄 Regression\ndescription: Something that worked a certain way before, but no longer does\ntitle: '🔄 '\nlabels: ['reg"
},
{
"path": ".github/ISSUE_TEMPLATE/03-feature_request.yaml",
"chars": 423,
"preview": "name: 💡 Feature Request (RFC)\ndescription: Suggest an idea for Knip\ntitle: '💡 '\nlabels: ['feature request']\nbody:\n - ty"
},
{
"path": ".github/ISSUE_TEMPLATE/04-documentation.yaml",
"chars": 553,
"preview": "name: 📘 Documentation\ndescription: An idea for or issue with the documentation website (knip.dev)\ntitle: '📘 '\nlabels: ['"
},
{
"path": ".github/ISSUE_TEMPLATE/05-everything-else.yaml",
"chars": 385,
"preview": "name: 🧩 Everything Else\ndescription: Discuss anything related to Knip\ntitle: '🧩 '\nlabels: ['discussion']\nbody:\n - type:"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 28,
"preview": "blank_issues_enabled: false\n"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 535,
"preview": "<!--\n\n- Try to author code and/or docs similar to the rest of the repository\n- See [DEVELOPMENT.md][1] for development a"
},
{
"path": ".github/copilot-instructions.md",
"chars": 39,
"preview": "See [AGENTS.md][1].\n\n[1]: ../AGENTS.md\n"
},
{
"path": ".github/workflows/ci-bun.yml",
"chars": 935,
"preview": "name: Tests (Bun)\n\non:\n workflow_dispatch:\n pull_request:\n push:\n branches:\n - '**'\n tags:\n - '!**'\n\n"
},
{
"path": ".github/workflows/ci-ts-latest.yml",
"chars": 941,
"preview": "name: Tests (against typescript@latest in Node.js v22)\n\non:\n workflow_dispatch:\n pull_request:\n push:\n branches:\n "
},
{
"path": ".github/workflows/ci-ts-next.yml",
"chars": 937,
"preview": "name: Tests (against typescript@next in Node.js v24)\n\non:\n workflow_dispatch:\n pull_request:\n push:\n branches:\n "
},
{
"path": ".github/workflows/ci.yml",
"chars": 1493,
"preview": "name: Tests (against typescript@5.0.4 in Node.js v20)\n\non:\n workflow_dispatch:\n pull_request:\n push:\n branches:\n "
},
{
"path": ".github/workflows/integration.yml",
"chars": 6615,
"preview": "name: Publish preview & run ecosystem tests\n\non:\n workflow_dispatch:\n pull_request:\n push:\n branches:\n - '**'"
},
{
"path": ".github/workflows/markdown-link-check.json",
"chars": 144,
"preview": "{\n \"aliveStatusCodes\": [0, 200, 429],\n \"ignorePatterns\": [\n { \"generated\": \"packages/docs/src/content/docs/referenc"
},
{
"path": ".github/workflows/markdown-link-check.yml",
"chars": 442,
"preview": "name: Check Markdown links\n\non:\n push:\n branches:\n - '**'\n tags:\n - '!**'\n\njobs:\n markdown-link-check:"
},
{
"path": ".github/workflows/patches/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": ".github/workflows/patches/TypeScript.patch",
"chars": 288,
"preview": "diff --git a/knip.jsonc b/knip.jsonc\nindex f471ada9b2..83844be8aa 100644\n--- a/knip.jsonc\n+++ b/knip.jsonc\n@@ -32,6 +32,"
},
{
"path": ".github/workflows/patches/argos.patch",
"chars": 360,
"preview": "diff --git a/knip.json b/knip.json\n--- a/knip.json\n+++ b/knip.json\n@@ -11,7 +11,8 @@\n \"src/graphql/definitions/*"
},
{
"path": ".github/workflows/patches/create-typescript-app.patch",
"chars": 335,
"preview": "diff --git a/knip.json b/knip.json\nindex 8bbe72d..23921d7 100644\n--- a/knip.json\n+++ b/knip.json\n@@ -1,6 +1,6 @@\n {\n \t\"$"
},
{
"path": ".github/workflows/patches/npmx.dev.patch",
"chars": 2689,
"preview": "diff --git a/knip.ts b/knip.ts\nindex f885994f..27d68897 100644\n--- a/knip.ts\n+++ b/knip.ts\n@@ -4,18 +4,6 @@ const config"
},
{
"path": ".gitignore",
"chars": 81,
"preview": "node_modules\n/.idea/*\n!/.idea/runConfigurations\n.DS_Store\n.npmrc\npackages/*/dist\n"
},
{
"path": ".idea/runConfigurations/Debug_Bun_test.xml",
"chars": 421,
"preview": "<component name=\"ProjectRunConfigurationManager\">\n <configuration default=\"false\" name=\"Debug Bun test\" type=\"BunRunCon"
},
{
"path": ".idea/runConfigurations/Debug_Node_test.xml",
"chars": 328,
"preview": "<component name=\"ProjectRunConfigurationManager\">\n <configuration default=\"false\" name=\"Debug Node test\" type=\"NodeJSCo"
},
{
"path": ".oxfmtrc.json",
"chars": 424,
"preview": "{\n \"printWidth\": 120,\n \"singleQuote\": true,\n \"arrowParens\": \"avoid\",\n \"trailingComma\": \"es5\",\n \"overrides\": [\n {"
},
{
"path": ".oxlintrc.json",
"chars": 2434,
"preview": "{\n \"$schema\": \"./node_modules/oxlint/configuration_schema.json\",\n \"plugins\": [\"typescript\", \"import\"],\n \"categories\":"
},
{
"path": ".prettierignore",
"chars": 98,
"preview": "**/dist\n**/tmp\n**/fixtures\n**/*.md\n**/*.mdx\ntemplates/language-server-client\npackages/docs/.astro\n"
},
{
"path": ".release-it.json",
"chars": 277,
"preview": "{\n \"$schema\": \"https://unpkg.com/release-it@19/schema/release-it.json\",\n \"git\": {\n \"commitMessage\": \"Release ${npm."
},
{
"path": ".vscode/extensions.json",
"chars": 118,
"preview": "{\n \"recommendations\": [\n \"oxc.oxc-vscode\",\n \"remcohaszing.vscode-mdxlint\",\n \"unifiedjs.vscode-remark\"\n ]\n}\n"
},
{
"path": ".vscode/launch.json",
"chars": 2415,
"preview": "{\n \"version\": \"0.2.0\",\n \"configurations\": [\n {\n \"type\": \"node\",\n \"request\": \"launch\",\n \"name\": \"Debu"
},
{
"path": ".vscode/settings.json",
"chars": 903,
"preview": "{\n \"[javascript]\": {\n \"editor.defaultFormatter\": \"oxc.oxc-vscode\"\n },\n \"[json]\": {\n \"editor.defaultFormatter\": "
},
{
"path": "AGENTS.md",
"chars": 6911,
"preview": "# Knip\n\nKnip is a tool to find and fix unused dependencies, exports and files in\nJavaScript and TypeScript projects.\n\n##"
},
{
"path": "knip.json",
"chars": 547,
"preview": "{\n \"$schema\": \"https://unpkg.com/knip@6/schema.json\",\n \"workspaces\": {\n \".\": {\n \"project\": [\"!templates/**\"]\n "
},
{
"path": "license",
"chars": 750,
"preview": "ISC License (ISC)\n\nCopyright 2022-2025 Lars Kappert\n\nPermission to use, copy, modify, and/or distribute this software fo"
},
{
"path": "package.json",
"chars": 1448,
"preview": "{\n \"name\": \"@knip/root\",\n \"version\": \"0.0.0\",\n \"private\": true,\n \"description\": \"Find unused dependencies, exports a"
},
{
"path": "packages/create-config/README.md",
"chars": 354,
"preview": "# @knip/create-config\n\nAdd Knip to a repository.\n\n```shell\nnpm init @knip/config\n```\n\nThis adds Knip and its peer depend"
},
{
"path": "packages/create-config/index.js",
"chars": 5474,
"preview": "#!/usr/bin/env node\nimport { execSync } from 'node:child_process';\nimport fs from 'node:fs';\nimport { EOL } from 'node:o"
},
{
"path": "packages/create-config/package.json",
"chars": 737,
"preview": "{\n \"name\": \"@knip/create-config\",\n \"version\": \"1.2.1\",\n \"homepage\": \"https://knip.dev\",\n \"bugs\": \"https://github.com"
},
{
"path": "packages/docs/.gitignore",
"chars": 79,
"preview": ".astro/\n.DS_Store\n.env\ndist/\nnode_modules/\nsrc/content/docs/reference/plugins/\n"
},
{
"path": "packages/docs/README.md",
"chars": 64,
"preview": "# knip.dev\n\nThe source of [knip.dev][1].\n\n[1]: https://knip.dev\n"
},
{
"path": "packages/docs/astro.config.ts",
"chars": 3533,
"preview": "import starlight from '@astrojs/starlight';\nimport type { ExpressiveCodeTheme } from '@astrojs/starlight/expressive-code"
},
{
"path": "packages/docs/mock/contributors.json",
"chars": 1024,
"preview": "[\n {\n \"login\": \"webpro\",\n \"id\": 456426,\n \"node_id\": \"MDQ6VXNlcjQ1NjQyNg==\",\n \"avatar_url\": \"https://avatars"
},
{
"path": "packages/docs/package.json",
"chars": 1492,
"preview": "{\n \"name\": \"@knip/docs\",\n \"version\": \"0.0.0\",\n \"private\": true,\n \"description\": \"Documentation for Knip, hosted at k"
},
{
"path": "packages/docs/public/fonts/fonts.conf",
"chars": 206,
"preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE fontconfig SYSTEM \"fonts.dtd\">\n<fontconfig>\n <dir>/vercel/path0/docs/public/fonts/</dir"
},
{
"path": "packages/docs/public/manifest.json",
"chars": 507,
"preview": "{\n \"name\": \"Knip\",\n \"short_name\": \"Knip\",\n \"icons\": [\n {\n \"src\": \"/favicon.svg\",\n \"type\": \"image/svg+xml"
},
{
"path": "packages/docs/public/robots.txt",
"chars": 62,
"preview": "User-agent: *\nAllow: /\n\nSitemap: https://knip.dev/sitemap.txt\n"
},
{
"path": "packages/docs/remark/fixInternalLinks.ts",
"chars": 875,
"preview": "import pc from 'picocolors';\nimport type { Node, Parent } from 'unist';\nimport { type Visitor, visit } from 'unist-util-"
},
{
"path": "packages/docs/remark/transformDirectives.ts",
"chars": 887,
"preview": "import { h } from 'hastscript';\nimport type { Node, Parent } from 'unist';\nimport { type Visitor, visit } from 'unist-ut"
},
{
"path": "packages/docs/scripts/generate-plugin-docs.ts",
"chars": 6906,
"preview": "import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport type {"
},
{
"path": "packages/docs/scripts/get-monthly-sponsorships-github.ts",
"chars": 3088,
"preview": "import { graphql } from '@octokit/graphql';\n\nconst token = process.env.GITHUB_TOKEN_SPONSORSHIPS;\n\ntype Options = {\n to"
},
{
"path": "packages/docs/scripts/get-monthly-sponsorships-opencollective.ts",
"chars": 3162,
"preview": "import { graphql } from '@octokit/graphql';\n\nconst token = process.env.OPENCOLLECTIVE_TOKEN;\nconst RATE_EUR_TO_USD = 1.0"
},
{
"path": "packages/docs/scripts/get-monthly-sponsorships.ts",
"chars": 2969,
"preview": "import { Table } from '../../knip/src/util/table.ts';\nimport { getGitHubTotals } from './get-monthly-sponsorships-github"
},
{
"path": "packages/docs/src/assets/testimonials.json",
"chars": 36572,
"preview": "{\n \"data\": [\n {\n \"entities\": {\n \"urls\": [\n {\n \"url\": \"cdn.bsky.app/img/dummy-02\",\n "
},
{
"path": "packages/docs/src/components/Contributors.astro",
"chars": 2064,
"preview": "---\nimport { readFile } from 'node:fs/promises';\n\nconst ENVIRONMENT = import.meta.env.ENVIRONMENT;\nconst GITHUB_TOKEN = "
},
{
"path": "packages/docs/src/components/EmojiBlastButton.astro",
"chars": 949,
"preview": "<style>\n div {\n display: none;\n justify-content: center;\n }\n\n button {\n color: var(--sl-color-text-accent);\n"
},
{
"path": "packages/docs/src/components/Footer.astro",
"chars": 712,
"preview": "---\nimport Default from '@astrojs/starlight/components/Footer.astro';\n---\n\n<style>\n p {\n border-top: 1px solid var(-"
},
{
"path": "packages/docs/src/components/Head.astro",
"chars": 675,
"preview": "---\nimport Default from '@astrojs/starlight/components/Head.astro';\n\nconst slug = Astro.locals.starlightRoute.slug;\n\ncon"
},
{
"path": "packages/docs/src/components/Post.astro",
"chars": 1535,
"preview": "---\nimport { formatTimestamp, type PostWithUser, replaceShortenedUrls } from '../util/post.js';\n\nconst post: PostWithUse"
},
{
"path": "packages/docs/src/components/Posts.astro",
"chars": 972,
"preview": "---\nimport { readFile } from 'node:fs/promises';\nimport { Card, CardGrid } from '@astrojs/starlight/components';\nimport "
},
{
"path": "packages/docs/src/components/Projects.astro",
"chars": 5655,
"preview": "---\nimport Adobe from '../assets/projects/adobe.svg';\nimport AGGrid from '../assets/projects/ag-grid.svg';\nimport AGGrid"
},
{
"path": "packages/docs/src/components/Sponsors.astro",
"chars": 46059,
"preview": "---\nconst { showAll = true } = Astro.props;\n---\n\n<div class=`sponsors ${showAll ? '' : 'front'}`>\n <a class=\"smaller\" h"
},
{
"path": "packages/docs/src/components/SponsorsChart.astro",
"chars": 65,
"preview": "---\nimport Chart from '../assets/venz-chart.svg';\n---\n\n<Chart />\n"
},
{
"path": "packages/docs/src/content/docs/blog/brief-history.md",
"chars": 1084,
"preview": "---\ntitle: A Brief History Of Knip\ndate: 2023-10-15\nsidebar:\n order: 8\n---\n\n_Published: 2023-10-15_\n\nIf you are fond of"
},
{
"path": "packages/docs/src/content/docs/blog/for-editors-and-agents.md",
"chars": 4198,
"preview": "---\ntitle: Knip for Editors & Agents\ndate: 2025-12-17\nsidebar:\n order: 2\n---\n\n_Published: 2025-12-17_\n\nThree years in, "
},
{
"path": "packages/docs/src/content/docs/blog/knip-v3.mdx",
"chars": 2628,
"preview": "---\ntitle: Announcing Knip v3\ndate: 2023-10-15\nsidebar:\n order: 9\n---\n\nimport { Tabs, TabItem } from '@astrojs/starligh"
},
{
"path": "packages/docs/src/content/docs/blog/knip-v4.mdx",
"chars": 4174,
"preview": "---\ntitle: Announcing Knip v4\ndate: 2024-01-16\nsidebar:\n order: 6\n---\n\nimport { Tabs, TabItem } from '@astrojs/starligh"
},
{
"path": "packages/docs/src/content/docs/blog/knip-v5.mdx",
"chars": 4650,
"preview": "---\ntitle: Announcing Knip v5\ndate: 2024-02-10\nsidebar:\n order: 5\n---\n\nimport { Tabs, TabItem } from '@astrojs/starligh"
},
{
"path": "packages/docs/src/content/docs/blog/knip-v6.md",
"chars": 5937,
"preview": "---\ntitle: Announcing Knip v6\ndate: 2026-03-20\nsidebar:\n order: 1\n---\n\n_Published: 2026-03-20_\n\n## Knip v6 is out!\n\nThi"
},
{
"path": "packages/docs/src/content/docs/blog/migration-to-v1.md",
"chars": 1676,
"preview": "---\ntitle: Migration to v1\n---\n\n_2023-01-04_\n\nWhen coming from version v0.13.3 or before, there are some breaking change"
},
{
"path": "packages/docs/src/content/docs/blog/release-notes-v2.md",
"chars": 1541,
"preview": "---\ntitle: Release Notes v2\nsidebar:\n order: 10\n---\n\n_2023-03-22_\n\n## Breaking changes\n\nWhen coming from v1, there are "
},
{
"path": "packages/docs/src/content/docs/blog/slim-down-to-speed-up.md",
"chars": 10744,
"preview": "---\ntitle: Slim down to speed up\ndate: 2023-12-14\nsidebar:\n order: 7\n---\n\n_Published: 2023-12-14_\n\n**tl;dr;** Memory us"
},
{
"path": "packages/docs/src/content/docs/blog/state-of-knip.md",
"chars": 6947,
"preview": "---\ntitle: The State of Knip\ndate: 2025-02-28\nsidebar:\n order: 3\n---\n\n_Published: 2025-02-28_\n\nHonestly, Knip was a bit"
},
{
"path": "packages/docs/src/content/docs/blog/two-years.mdx",
"chars": 3528,
"preview": "---\ntitle: Two Years\ndate: 2024-10-04\nsidebar:\n order: 4\n---\n\n_Published: 2024-10-04_\n\nimport EmojiBlastButton from '.."
},
{
"path": "packages/docs/src/content/docs/explanations/comparison-and-migration.md",
"chars": 4043,
"preview": "---\ntitle: Comparison & Migration\n---\n\nFirst of all, Knip owes a lot to the projects on this page and they've all been\ni"
},
{
"path": "packages/docs/src/content/docs/explanations/entry-files.md",
"chars": 2328,
"preview": "---\ntitle: Entry Files\nsidebar:\n order: 1\n---\n\nEntry files are the starting point for Knip to determine what files are "
},
{
"path": "packages/docs/src/content/docs/explanations/plugins.md",
"chars": 10117,
"preview": "---\ntitle: Plugins\nsidebar:\n order: 2\n---\n\nThis page describes why Knip uses plugins and the difference between `config"
},
{
"path": "packages/docs/src/content/docs/explanations/why-use-knip.md",
"chars": 4995,
"preview": "---\ntitle: Why use Knip?\nsidebar:\n order: 3\n---\n\nThe value of removing clutter is clear, but finding it manually is ted"
},
{
"path": "packages/docs/src/content/docs/features/auto-fix.mdx",
"chars": 6556,
"preview": "---\ntitle: Auto-fix\n---\n\nimport { Tabs, TabItem } from '@astrojs/starlight/components';\nimport { Badge } from '@astrojs/"
},
{
"path": "packages/docs/src/content/docs/features/compilers.md",
"chars": 4404,
"preview": "---\ntitle: Compilers\n---\n\nProjects may have source files that are not JavaScript or TypeScript, and thus\nrequire compila"
},
{
"path": "packages/docs/src/content/docs/features/integrated-monorepos.md",
"chars": 1694,
"preview": "---\ntitle: Integrated Monorepos\nsidebar:\n order: 3\n---\n\nSome repositories have a single `package.json`, but consist of "
},
{
"path": "packages/docs/src/content/docs/features/monorepos-and-workspaces.md",
"chars": 4015,
"preview": "---\ntitle: Monorepos & Workspaces\nsidebar:\n order: 2\n---\n\nWorkspaces are handled out-of-the-box by Knip.\n\nWorkspaces ar"
},
{
"path": "packages/docs/src/content/docs/features/production-mode.md",
"chars": 2758,
"preview": "---\ntitle: Production Mode\nsidebar:\n order: 1\n---\n\nThe default mode for Knip is comprehensive and targets all project c"
},
{
"path": "packages/docs/src/content/docs/features/reporters.md",
"chars": 6895,
"preview": "---\ntitle: Reporters & Preprocessors\n---\n\n## Built-in Reporters\n\nKnip provides the following built-in reporters:\n\n- `cod"
},
{
"path": "packages/docs/src/content/docs/features/rules-and-filters.md",
"chars": 2847,
"preview": "---\ntitle: Rules & Filters\nsidebar:\n order: 5\n---\n\nUse rules or filters to customize Knip's output. This has various us"
},
{
"path": "packages/docs/src/content/docs/features/script-parser.md",
"chars": 4227,
"preview": "---\ntitle: Script Parser\n---\n\nKnip parses shell commands and scripts to find additional dependencies, entry\nfiles and co"
},
{
"path": "packages/docs/src/content/docs/features/source-mapping.md",
"chars": 2880,
"preview": "---\ntitle: Source Mapping\nsidebar:\n order: 4\n---\n\nKnip is mostly interested in source code. Analyzing build artifacts h"
},
{
"path": "packages/docs/src/content/docs/guides/configuring-project-files.md",
"chars": 4884,
"preview": "---\ntitle: Configuring Project Files\nsidebar:\n order: 1\n---\n\nThe `entry` and `project` file patterns are the first and "
},
{
"path": "packages/docs/src/content/docs/guides/contributing.md",
"chars": 713,
"preview": "---\ntitle: Contributing to Knip\n---\n\nHere are some ways to contribute to Knip:\n\n- Spread the word!\n- [Star the project]["
},
{
"path": "packages/docs/src/content/docs/guides/handling-issues.mdx",
"chars": 22388,
"preview": "---\ntitle: Handling Issues\nsidebar:\n order: 3\n---\n\nimport { Tabs, TabItem } from '@astrojs/starlight/components';\n\nIssu"
},
{
"path": "packages/docs/src/content/docs/guides/issue-reproduction.md",
"chars": 3869,
"preview": "---\ntitle: Issue Reproduction\nsidebar:\n order: 4\n---\n\nIf you encounter an issue or false positives when using Knip, you"
},
{
"path": "packages/docs/src/content/docs/guides/namespace-imports.md",
"chars": 2948,
"preview": "---\ntitle: Namespace Imports\n---\n\nThe intention of exports used through namespace imports may not always be clear\nto Kni"
},
{
"path": "packages/docs/src/content/docs/guides/performance.md",
"chars": 1525,
"preview": "---\ntitle: Performance\n---\n\nThis page describes a few topics around Knip's performance, and how you might\nimprove it.\n\nK"
},
{
"path": "packages/docs/src/content/docs/guides/troubleshooting.md",
"chars": 4214,
"preview": "---\ntitle: Troubleshooting\nsidebar:\n order: 2\n---\n\nWe can distinguish two types of issues:\n\n- [Lint issues reported by "
},
{
"path": "packages/docs/src/content/docs/guides/using-knip-in-ci.md",
"chars": 1413,
"preview": "---\ntitle: Using Knip in CI\n---\n\nKnip is your companion during local development. But it is even more valuable in\na cont"
},
{
"path": "packages/docs/src/content/docs/guides/working-with-commonjs.md",
"chars": 1961,
"preview": "---\ntitle: Working with CommonJS\n---\n\nCommonJS is the JavaScript module system using `require()` and `module.exports`\nst"
},
{
"path": "packages/docs/src/content/docs/index.mdx",
"chars": 5191,
"preview": "---\ntitle: Declutter your JavaScript & TypeScript projects\ndescription: Project linter to find unused dependencies, expo"
},
{
"path": "packages/docs/src/content/docs/overview/configuration.md",
"chars": 2611,
"preview": "---\ntitle: Configuration\ndescription: config\n---\n\n## Defaults\n\nKnip has good defaults and aims for \"zero config\". Here's"
},
{
"path": "packages/docs/src/content/docs/overview/features.md",
"chars": 4119,
"preview": "---\ntitle: Features\n---\n\nOverview of capabilities in support of the core feature: find many [types of\nissues][1].\n\nAlso "
},
{
"path": "packages/docs/src/content/docs/overview/getting-started.mdx",
"chars": 3694,
"preview": "---\ntitle: Getting Started\nsidebar:\n order: 1\n---\n\nimport { Tabs, TabItem } from '@astrojs/starlight/components';\n\n## R"
},
{
"path": "packages/docs/src/content/docs/overview/screenshots-videos.md",
"chars": 1094,
"preview": "---\ntitle: Screenshots & videos\n---\n\n## Watch & auto-fix\n\nThis video demonstrates using the `--watch` and `--fix` option"
},
{
"path": "packages/docs/src/content/docs/playground.mdx",
"chars": 1191,
"preview": "---\ntitle: 'Playground'\ndescription: 'Playground for Knip'\ntemplate: splash\n---\n\nWelcome to the Knip playground. The cod"
},
{
"path": "packages/docs/src/content/docs/reference/cli.md",
"chars": 10176,
"preview": "---\ntitle: CLI Arguments\n---\n\n## General\n\n### `--help`\n\nShortcut: `-h`\n\nPrints a summary of this page.\n\n### `--version`\n"
},
{
"path": "packages/docs/src/content/docs/reference/configuration-hints.md",
"chars": 3458,
"preview": "---\ntitle: Configuration Hints\n---\n\nKnip emits configuration hints to help keep your configuration file tidy and\nreduce "
},
{
"path": "packages/docs/src/content/docs/reference/configuration.md",
"chars": 9679,
"preview": "---\ntitle: Configuration\n---\n\nThis page lists all configuration file options.\n\n## File Types\n\n### JSON Schema\n\nA `$schem"
},
{
"path": "packages/docs/src/content/docs/reference/dynamic-configuration.mdx",
"chars": 1467,
"preview": "---\ntitle: Dynamic Configuration\n---\n\nimport { Tabs, TabItem } from '@astrojs/starlight/components';\n\n## TypeScript\n\nIns"
},
{
"path": "packages/docs/src/content/docs/reference/faq.md",
"chars": 19716,
"preview": "---\ntitle: FAQ\ndate: 2024-08-20\n---\n\n## Introduction\n\nKnip finds and fixes unused dependencies, exports and files. As a "
},
{
"path": "packages/docs/src/content/docs/reference/integrations.md",
"chars": 2970,
"preview": "---\ntitle: Integrations\n---\n\n- [VS Code/VSX Extension][1]\n- [JetBrains Plugin][2]\n- [MCP Server][3]\n- [Language Server]["
},
{
"path": "packages/docs/src/content/docs/reference/issue-types.md",
"chars": 3153,
"preview": "---\ntitle: Issue Types\ntableOfContents: false\n---\n\nKnip reports the following types of issues:\n\n| Title "
},
{
"path": "packages/docs/src/content/docs/reference/jsdoc-tsdoc-tags.md",
"chars": 3116,
"preview": "---\ntitle: JSDoc & TSDoc Tags\n---\n\nJSDoc or TSDoc tags can be used to make exceptions for unused or duplicate\nexports.\n\n"
},
{
"path": "packages/docs/src/content/docs/reference/known-issues.md",
"chars": 2637,
"preview": "---\ntitle: Known Issues\n---\n\nList of known issues and workarounds for exceptions thrown during a Knip run.\n\nSee [handlin"
},
{
"path": "packages/docs/src/content/docs/reference/plugins/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "packages/docs/src/content/docs/reference/plugins.md",
"chars": 7283,
"preview": "---\ntitle: Plugins (137)\ntableOfContents: false\n---\n\n:::section{.columns.min200}\n- [Angular](/reference/plugins/angular "
},
{
"path": "packages/docs/src/content/docs/reference/related-tooling.md",
"chars": 1526,
"preview": "---\ntitle: Related Tooling\n---\n\nThis is an overview of related tooling for features Knip does not support.\n\n## Unused im"
},
{
"path": "packages/docs/src/content/docs/sponsors.mdx",
"chars": 2964,
"preview": "---\ntitle: 'Become a sponsor!'\ntemplate: splash\n---\n\nimport StarlightPage from '@astrojs/starlight/components/StarlightP"
},
{
"path": "packages/docs/src/content/docs/typescript/unused-dependencies.md",
"chars": 3551,
"preview": "---\ntitle: Unused dependencies\ndescription: Find and remove unused dependencies with Knip\nprev: false\nnext: false\n---\n\nO"
},
{
"path": "packages/docs/src/content/docs/typescript/unused-exports.md",
"chars": 3612,
"preview": "---\ntitle: Unused exports\ndescription: Find and remove unused exports with Knip\nprev: false\nnext: false\n---\n\nFinding unu"
},
{
"path": "packages/docs/src/content/docs/writing-a-plugin/argument-parsing.md",
"chars": 3571,
"preview": "---\ntitle: Argument Parsing\nsidebar:\n order: 3\n---\n\nSome plugins have an `arg` object in their implementation. It's a w"
},
{
"path": "packages/docs/src/content/docs/writing-a-plugin/index.md",
"chars": 10343,
"preview": "---\ntitle: Writing A Plugin\nsidebar:\n order: 1\n---\n\nPlugins provide Knip with entry files and dependencies it would be "
},
{
"path": "packages/docs/src/content/docs/writing-a-plugin/inputs.md",
"chars": 4957,
"preview": "---\ntitle: Inputs\nsidebar:\n order: 2\n---\n\nYou may have noticed functions like `toDeferResolve` and `toEntry`. They're a"
},
{
"path": "packages/docs/src/content.config.ts",
"chars": 368,
"preview": "import { defineCollection } from 'astro:content';\nimport { docsLoader, i18nLoader } from '@astrojs/starlight/loaders';\ni"
},
{
"path": "packages/docs/src/fonts/font-face.css",
"chars": 2096,
"preview": "/*!\n * Source Sans Pro https://fonts.adobe.com./source-sans\n * Copyright 2010, 2012, 2014 Adobe Systems Incorporated (ht"
},
{
"path": "packages/docs/src/pages/og/[...route].ts",
"chars": 3456,
"preview": "import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { createRequire } from 'node:module"
},
{
"path": "packages/docs/src/pages/sitemap.txt.ts",
"chars": 894,
"preview": "import type { APIContext } from 'astro';\n\ninterface Page {\n frontmatter: {\n draft: boolean;\n };\n}\n\nconst data: Reco"
},
{
"path": "packages/docs/src/styles/cards.css",
"chars": 304,
"preview": ".no-title-cards .card-grid .card {\n gap: 0;\n}\n\n:root {\n .card .title .icon {\n border: unset;\n background-color: "
},
{
"path": "packages/docs/src/styles/content.css",
"chars": 3360,
"preview": "html {\n scroll-behavior: smooth;\n}\n\n.content-panel + .content-panel {\n border: unset;\n}\n\n.sl-markdown-content h2 {\n m"
},
{
"path": "packages/docs/src/styles/custom.css",
"chars": 249,
"preview": "@import url(\"./theme-dark.css\");\n@import url(\"./theme-light.css\");\n@import url(\"./hero.css\");\n@import url(\"./content.css"
},
{
"path": "packages/docs/src/styles/expressive-code.css",
"chars": 454,
"preview": ".expressive-code figure {\n box-shadow: none;\n}\n\n.expressive-code .frame.has-title:not(.is-terminal) .header .title::aft"
},
{
"path": "packages/docs/src/styles/hero.css",
"chars": 910,
"preview": ".hero {\n padding-bottom: 1rem;\n}\n\n.hero img {\n border: 4px solid var(--sl-color-white);\n border-radius: 80px;\n}\n\n.her"
},
{
"path": "packages/docs/src/styles/links.css",
"chars": 1421,
"preview": ".sl-markdown-content a {\n text-decoration: none;\n padding-bottom: 0.0675rem;\n transition: border-color 300ms;\n}\n\n.sl-"
},
{
"path": "packages/docs/src/styles/sponsors.css",
"chars": 874,
"preview": "article.prose {\n max-width: 72ch;\n margin-bottom: 4rem;\n}\n\n.sl-markdown-content .sponsors-intro {\n font-style: italic"
},
{
"path": "packages/docs/src/styles/theme-dark.css",
"chars": 930,
"preview": "/* Colors borrowed from https://twitter.com/tushtisachdeva/status/1738940090628571177 */\n\n:root {\n --sl-font: \"Source S"
},
{
"path": "packages/docs/src/styles/theme-light.css",
"chars": 712,
"preview": ":root[data-theme=\"light\"] {\n --sl-color-white: hsl(224, 10%, 10%);\n --sl-color-black: hsl(0, 0%, 100%);\n --sl-color-g"
},
{
"path": "packages/docs/src/util/post.ts",
"chars": 2869,
"preview": "export const replaceShortenedUrls = (post: PostWithUser) => {\n let text = (post.note_tweet?.text ?? post.text).replace("
},
{
"path": "packages/docs/tsconfig.json",
"chars": 130,
"preview": "{\n \"extends\": \"astro/tsconfigs/strict\",\n \"mdx\": {\n \"plugins\": [\"remark-directive\", \"remark-frontmatter\", \"remark-gf"
},
{
"path": "packages/knip/.gitignore",
"chars": 100,
"preview": "/coverage\n/dist\n/tmp\n/node_modules\n!/fixtures/**\n/fixtures/**/.DS_Store\n.cache\nbin/knip\nbin/knip-bun"
},
{
"path": "packages/knip/.release-it.json",
"chars": 1048,
"preview": "{\n \"$schema\": \"https://unpkg.com/release-it@19/schema/release-it.json\",\n \"extends\": \"../../.release-it.json\",\n \"hooks"
},
{
"path": "packages/knip/README.md",
"chars": 2753,
"preview": "<h1 align=\"center\">\n <br />\n <a href=\"https://knip.dev\">\n <img height=\"200\" width=\"200\" src=\"https://knip.dev/favic"
},
{
"path": "packages/knip/bin/knip-bun.js",
"chars": 44,
"preview": "#!/usr/bin/env bun\nimport '../dist/cli.js';\n"
},
{
"path": "packages/knip/bin/knip.js",
"chars": 45,
"preview": "#!/usr/bin/env node\nimport '../dist/cli.js';\n"
},
{
"path": "packages/knip/fixtures/barrel-namespace-chain/consumer.ts",
"chars": 66,
"preview": "import * as lib from './lib.ts';\n\nlib.server.protocol.usedExport;\n"
},
{
"path": "packages/knip/fixtures/barrel-namespace-chain/fn-consumer.ts",
"chars": 95,
"preview": "import * as lib from './lib.ts';\n\nfunction process(arg: unknown) { return arg; }\nprocess(lib);\n"
},
{
"path": "packages/knip/fixtures/barrel-namespace-chain/index.ts",
"chars": 82,
"preview": "import './consumer.ts';\nimport './opaque-consumer.ts';\nimport './fn-consumer.ts';\n"
},
{
"path": "packages/knip/fixtures/barrel-namespace-chain/lib.ts",
"chars": 75,
"preview": "export * as server from './server.ts';\nexport { Debug } from './utils.ts';\n"
},
{
"path": "packages/knip/fixtures/barrel-namespace-chain/opaque-consumer.ts",
"chars": 55,
"preview": "import { Debug } from './lib.ts';\n\nObject.keys(Debug);\n"
},
{
"path": "packages/knip/fixtures/barrel-namespace-chain/package.json",
"chars": 94,
"preview": "{\n \"name\": \"@fixtures/barrel-namespace-chain\",\n \"knip\": {\n \"tags\": [\"-knipignore\"]\n }\n}\n"
},
{
"path": "packages/knip/fixtures/barrel-namespace-chain/protocol.ts",
"chars": 111,
"preview": "export const usedExport = 1;\nexport const unusedExport = 2;\n\n/** @knipignore */\nexport const taggedExport = 3;\n"
},
{
"path": "packages/knip/fixtures/barrel-namespace-chain/server.ts",
"chars": 43,
"preview": "export * as protocol from './protocol.ts';\n"
},
{
"path": "packages/knip/fixtures/barrel-namespace-chain/utils.ts",
"chars": 112,
"preview": "export const Debug = {\n log(msg: string) { console.log(msg); },\n warn(msg: string) { console.warn(msg); },\n};\n"
},
{
"path": "packages/knip/fixtures/binaries/dir/index.js",
"chars": 0,
"preview": ""
},
{
"path": "packages/knip/fixtures/binaries/main.ts",
"chars": 0,
"preview": ""
},
{
"path": "packages/knip/fixtures/binaries/require.js",
"chars": 0,
"preview": ""
},
{
"path": "packages/knip/fixtures/binaries/script.js",
"chars": 0,
"preview": ""
},
{
"path": "packages/knip/fixtures/catalog-named/index.js",
"chars": 50,
"preview": "import 'react';\nimport 'vue';\nimport '@ex/press';\n"
},
{
"path": "packages/knip/fixtures/catalog-named/package.json",
"chars": 215,
"preview": "{\n \"name\": \"@fixtures/catalog-named\",\n \"private\": true,\n \"workspaces\": [\n \"packages/*\"\n ],\n \"dependencies\": {\n "
},
{
"path": "packages/knip/fixtures/catalog-named/pnpm-workspace.yaml",
"chars": 189,
"preview": "packages:\n - 'packages/*'\n\ncatalog:\n react: ^18.0.0\n lodash: ^4.17.21\n\ncatalogs:\n frontend:\n vue: ^3.0.0\n \"@nu"
},
{
"path": "packages/knip/fixtures/catalog-named-empty/index.js",
"chars": 18,
"preview": "import 'express';\n"
},
{
"path": "packages/knip/fixtures/catalog-named-empty/package.json",
"chars": 160,
"preview": "{\n \"name\": \"@fixtures/catalog-named-empty\",\n \"private\": true,\n \"workspaces\": [\n \"packages/*\"\n ],\n \"dependencies\""
},
{
"path": "packages/knip/fixtures/catalog-named-empty/pnpm-workspace.yaml",
"chars": 95,
"preview": "packages:\n - 'packages/*'\n\ncatalogs:\n dev:\n prod:\n express: ^4.18.0\n lodash: ^4.17.21\n"
},
{
"path": "packages/knip/fixtures/catalog-named-package-json/index.js",
"chars": 48,
"preview": "import 'react';\nimport 'vue';\nimport 'express';\n"
},
{
"path": "packages/knip/fixtures/catalog-named-package-json/package.json",
"chars": 518,
"preview": "{\n \"name\": \"@fixtures/catalog-named-package-json\",\n \"private\": true,\n \"dependencies\": {\n \"react\": \"catalog:\",\n "
},
{
"path": "packages/knip/fixtures/catalog-named-package-json-root/index.js",
"chars": 48,
"preview": "import 'react';\nimport 'vue';\nimport 'express';\n"
},
{
"path": "packages/knip/fixtures/catalog-named-package-json-root/package.json",
"chars": 471,
"preview": "{\n \"name\": \"@fixtures/catalog-named-package-json-root\",\n \"private\": true,\n \"workspaces\": [\n \"packages/*\"\n ],\n \"d"
},
{
"path": "packages/knip/fixtures/catalog-pnpm/package.json",
"chars": 98,
"preview": "{\n \"name\": \"@fixtures/catalog-pnpm\",\n \"private\": true,\n \"workspaces\": [\n \"packages/*\"\n ]\n}\n"
},
{
"path": "packages/knip/fixtures/catalog-pnpm/packages/app/index.ts",
"chars": 102,
"preview": "import React from 'react';\n\nexport const App = () => React.createElement('div', null, 'Hello World');\n"
},
{
"path": "packages/knip/fixtures/catalog-pnpm/packages/app/package.json",
"chars": 126,
"preview": "{\n \"name\": \"app\",\n \"dependencies\": {\n \"react\": \"catalog:\"\n },\n \"devDependencies\": {\n \"typescript\": \"catalog:\"\n"
},
{
"path": "packages/knip/fixtures/catalog-pnpm/pnpm-workspace.yaml",
"chars": 94,
"preview": "packages:\n - 'packages/*'\n\ncatalog:\n react: ^18.0.0\n typescript: ^5.0.0\n lodash: ^4.17.21\n"
},
{
"path": "packages/knip/fixtures/catalog-yarn/.yarnrc.yml",
"chars": 100,
"preview": "packages:\n - \"packages/*\"\n\ncatalog:\n solid-js: 1.9.10\n typescript: ^5.0.0\n \"@lo/dash\": ^4.17.21\n"
},
{
"path": "packages/knip/fixtures/catalog-yarn/package.json",
"chars": 98,
"preview": "{\n \"name\": \"@fixtures/catalog-yarn\",\n \"private\": true,\n \"workspaces\": [\n \"packages/*\"\n ]\n}\n"
},
{
"path": "packages/knip/fixtures/catalog-yarn/packages/app/index.ts",
"chars": 41,
"preview": "import { createSignal } from 'solid-js';\n"
},
{
"path": "packages/knip/fixtures/catalog-yarn/packages/app/package.json",
"chars": 129,
"preview": "{\n \"name\": \"app\",\n \"dependencies\": {\n \"solid-js\": \"catalog:\"\n },\n \"devDependencies\": {\n \"typescript\": \"catalog"
},
{
"path": "packages/knip/fixtures/cli/index.js",
"chars": 0,
"preview": ""
},
{
"path": "packages/knip/fixtures/cli/package.json",
"chars": 30,
"preview": "{\n \"name\": \"@fixtures/cli\"\n}\n"
},
{
"path": "packages/knip/fixtures/cli-preprocessor/index.js",
"chars": 98,
"preview": "export default function (options) {\n console.log('hi from js preprocessor');\n return options;\n}\n"
},
{
"path": "packages/knip/fixtures/cli-preprocessor/index.ts",
"chars": 98,
"preview": "export default function (options) {\n console.log('hi from ts preprocessor');\n return options;\n}\n"
},
{
"path": "packages/knip/fixtures/cli-preprocessor/package.json",
"chars": 43,
"preview": "{\n \"name\": \"@fixtures/cli-preprocessor\"\n}\n"
},
{
"path": "packages/knip/fixtures/cli-reporter/index.js",
"chars": 69,
"preview": "export default function () {\n console.log('hi from js reporter');\n}\n"
},
{
"path": "packages/knip/fixtures/cli-reporter/index.ts",
"chars": 69,
"preview": "export default function () {\n console.log('hi from ts reporter');\n}\n"
},
{
"path": "packages/knip/fixtures/cli-reporter/package.json",
"chars": 39,
"preview": "{\n \"name\": \"@fixtures/cli-reporter\"\n}\n"
},
{
"path": "packages/knip/fixtures/commonjs/dir/exports.js",
"chars": 85,
"preview": "exports.add = () => {};\n\nexports.unused = () => {};\n\n// exports = { ignored: true };\n"
},
{
"path": "packages/knip/fixtures/commonjs/dir/mod.js",
"chars": 154,
"preview": "import 'another-unlisted'; // insane\n\nconst staticResolve = () => {\n return require('string-literal');\n};\n\nmodule.expor"
},
{
"path": "packages/knip/fixtures/commonjs/dir/mod1.js",
"chars": 144,
"preview": "function identifier() {}\nmodule.exports = function fn() {};\nmodule.exports.identifier = identifier;\nmodule.exports['iden"
},
{
"path": "packages/knip/fixtures/commonjs/dir/mod2.js",
"chars": 134,
"preview": "function identifier5() {}\nfunction identifier6() {}\n\nmodule.exports = { identifier5, identifier6, identifier7: 1, identi"
},
{
"path": "packages/knip/fixtures/commonjs/dir/mod3.js",
"chars": 102,
"preview": "function identifier9() {}\nfunction identifier10() {}\n\nmodule.exports = { identifier9, identifier10 };\n"
},
{
"path": "packages/knip/fixtures/commonjs/index.js",
"chars": 1261,
"preview": "require('side-effects');\nrequire('./odd');\nconst path = require('node:path');\nconst { named: renamed } = require('aliase"
},
{
"path": "packages/knip/fixtures/commonjs/odd.js",
"chars": 137,
"preview": "require(id);\nrequire('str' + id);\nrequire(`str${id}`);\nrequire.resolve(id);\nrequire.resolve(`str${id}`);\nrequire.resolve"
},
{
"path": "packages/knip/fixtures/commonjs/package.json",
"chars": 80,
"preview": "{\n \"name\": \"@fixtures/commonjs\",\n \"dependencies\": {\n \"resolved\": \"*\"\n }\n}\n"
},
{
"path": "packages/knip/fixtures/commonjs/ts-ext.ts",
"chars": 39,
"preview": "export default function fn() {}\n\nfn();\n"
},
{
"path": "packages/knip/fixtures/commonjs-tsconfig/dir/exports.js",
"chars": 52,
"preview": "exports.add = () => {};\n\nexports.unused = () => {};\n"
},
{
"path": "packages/knip/fixtures/commonjs-tsconfig/dir/module1.ts",
"chars": 64,
"preview": "export function fn1() {\n return 1;\n}\n\nexport const unused = 1;\n"
},
{
"path": "packages/knip/fixtures/commonjs-tsconfig/dir/module2.ts",
"chars": 64,
"preview": "export function fn2() {\n return 2;\n}\n\nexport const unused = 2;\n"
},
{
"path": "packages/knip/fixtures/commonjs-tsconfig/dir/module3.js",
"chars": 64,
"preview": "export function fn3() {\n return 3;\n}\n\nexport const unused = 3;\n"
},
{
"path": "packages/knip/fixtures/commonjs-tsconfig/dir/script1.js",
"chars": 154,
"preview": "import 'another-unlisted'; // insane\n\nconst staticResolve = () => {\n return require('string-literal');\n};\n\nmodule.expor"
},
{
"path": "packages/knip/fixtures/commonjs-tsconfig/dir/script2.js",
"chars": 144,
"preview": "function identifier() {}\nmodule.exports = function fn() {};\nmodule.exports.identifier = identifier;\nmodule.exports['iden"
},
{
"path": "packages/knip/fixtures/commonjs-tsconfig/dir/script3.js",
"chars": 134,
"preview": "function identifier5() {}\nfunction identifier6() {}\n\nmodule.exports = { identifier5, identifier6, identifier7: 1, identi"
}
]
// ... and 3458 more files (download for full content)
About this extraction
This page contains the full source code of the webpro-nl/knip GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 3658 files (2.4 MB), approximately 846.8k tokens, and a symbol index with 1519 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.