knip 0.0.0-graph.3 → 0.0.0-node-types.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/README.md +7 -915
  2. package/bin/knip.js +2 -0
  3. package/dist/ConfigurationChief.d.ts +14 -6
  4. package/dist/ConfigurationChief.js +104 -70
  5. package/dist/ConfigurationValidator.d.ts +553 -321
  6. package/dist/ConfigurationValidator.js +7 -1
  7. package/dist/DependencyDeputy.d.ts +4 -1
  8. package/dist/DependencyDeputy.js +13 -11
  9. package/dist/PrincipalFactory.d.ts +5 -2
  10. package/dist/PrincipalFactory.js +11 -7
  11. package/dist/ProjectPrincipal.d.ts +18 -15
  12. package/dist/ProjectPrincipal.js +43 -25
  13. package/dist/WorkspaceWorker.d.ts +9 -7
  14. package/dist/WorkspaceWorker.js +45 -63
  15. package/dist/binaries/bash-parser.js +1 -1
  16. package/dist/binaries/index.js +12 -3
  17. package/dist/binaries/resolvers/c8.js +2 -1
  18. package/dist/binaries/resolvers/dotenv.js +2 -1
  19. package/dist/binaries/resolvers/fallback.js +4 -2
  20. package/dist/binaries/resolvers/index.d.ts +1 -0
  21. package/dist/binaries/resolvers/index.js +1 -0
  22. package/dist/binaries/resolvers/node.js +1 -1
  23. package/dist/binaries/resolvers/nodemon.js +2 -1
  24. package/dist/binaries/resolvers/npx.js +2 -1
  25. package/dist/binaries/resolvers/nx.js +1 -1
  26. package/dist/binaries/resolvers/pnpm.js +1 -1
  27. package/dist/binaries/resolvers/rollup.js +2 -1
  28. package/dist/binaries/resolvers/tsx.d.ts +2 -0
  29. package/dist/binaries/resolvers/tsx.js +6 -0
  30. package/dist/binaries/resolvers/yarn.js +1 -1
  31. package/dist/binaries/util.d.ts +0 -3
  32. package/dist/binaries/util.js +1 -3
  33. package/dist/cli.d.ts +0 -1
  34. package/dist/cli.js +10 -9
  35. package/dist/constants.d.ts +0 -1
  36. package/dist/constants.js +5 -4
  37. package/dist/index.js +101 -65
  38. package/dist/manifest/index.js +8 -4
  39. package/dist/plugins/_template/index.js +15 -3
  40. package/dist/plugins/_template/types.d.ts +1 -0
  41. package/dist/plugins/angular/index.js +11 -11
  42. package/dist/plugins/astro/index.d.ts +7 -0
  43. package/dist/plugins/astro/index.js +19 -0
  44. package/dist/plugins/ava/index.d.ts +1 -1
  45. package/dist/plugins/ava/index.js +28 -7
  46. package/dist/plugins/ava/types.d.ts +5 -1
  47. package/dist/plugins/babel/helpers.d.ts +1 -2
  48. package/dist/plugins/babel/helpers.js +28 -20
  49. package/dist/plugins/babel/index.js +17 -14
  50. package/dist/plugins/capacitor/index.js +7 -3
  51. package/dist/plugins/changesets/index.js +10 -6
  52. package/dist/plugins/commitizen/index.d.ts +1 -0
  53. package/dist/plugins/commitizen/index.js +8 -4
  54. package/dist/plugins/commitizen/types.d.ts +1 -1
  55. package/dist/plugins/commitlint/index.js +7 -3
  56. package/dist/plugins/cspell/index.js +7 -3
  57. package/dist/plugins/cspell/types.d.ts +1 -1
  58. package/dist/plugins/cypress/index.d.ts +3 -1
  59. package/dist/plugins/cypress/index.js +17 -4
  60. package/dist/plugins/drizzle/index.js +5 -7
  61. package/dist/plugins/eslint/fallback.js +6 -1
  62. package/dist/plugins/eslint/helpers.d.ts +4 -11
  63. package/dist/plugins/eslint/helpers.js +24 -26
  64. package/dist/plugins/eslint/index.d.ts +1 -1
  65. package/dist/plugins/eslint/index.js +14 -4
  66. package/dist/plugins/gatsby/index.js +11 -5
  67. package/dist/plugins/github-actions/index.d.ts +1 -1
  68. package/dist/plugins/github-actions/index.js +7 -4
  69. package/dist/plugins/graphql-codegen/index.d.ts +7 -0
  70. package/dist/plugins/graphql-codegen/index.js +46 -0
  71. package/dist/plugins/graphql-codegen/types.d.ts +25 -0
  72. package/dist/plugins/graphql-codegen/types.js +3 -0
  73. package/dist/plugins/husky/index.js +9 -4
  74. package/dist/plugins/index.d.ts +4 -0
  75. package/dist/plugins/index.js +4 -0
  76. package/dist/plugins/jest/index.d.ts +1 -1
  77. package/dist/plugins/jest/index.js +21 -12
  78. package/dist/plugins/jest/types.d.ts +3 -0
  79. package/dist/plugins/lefthook/index.js +12 -8
  80. package/dist/plugins/lint-staged/index.d.ts +1 -0
  81. package/dist/plugins/lint-staged/index.js +10 -7
  82. package/dist/plugins/markdownlint/index.js +7 -4
  83. package/dist/plugins/mocha/index.d.ts +1 -0
  84. package/dist/plugins/mocha/index.js +12 -7
  85. package/dist/plugins/mocha/types.d.ts +4 -0
  86. package/dist/plugins/mocha/types.js +1 -0
  87. package/dist/plugins/next/index.d.ts +2 -1
  88. package/dist/plugins/next/index.js +7 -0
  89. package/dist/plugins/node-test-runner/index.d.ts +6 -0
  90. package/dist/plugins/node-test-runner/index.js +19 -0
  91. package/dist/plugins/npm-package-json-lint/index.d.ts +1 -0
  92. package/dist/plugins/npm-package-json-lint/index.js +8 -4
  93. package/dist/plugins/nx/index.js +13 -10
  94. package/dist/plugins/nyc/index.js +6 -3
  95. package/dist/plugins/nyc/types.d.ts +3 -0
  96. package/dist/plugins/nyc/types.js +1 -0
  97. package/dist/plugins/playwright/index.d.ts +5 -1
  98. package/dist/plugins/playwright/index.js +25 -2
  99. package/dist/plugins/playwright-ct/index.d.ts +3 -1
  100. package/dist/plugins/playwright-ct/index.js +18 -2
  101. package/dist/plugins/postcss/index.js +12 -9
  102. package/dist/plugins/prettier/index.js +11 -6
  103. package/dist/plugins/prettier/types.d.ts +8 -0
  104. package/dist/plugins/prettier/types.js +1 -0
  105. package/dist/plugins/release-it/index.d.ts +1 -0
  106. package/dist/plugins/release-it/index.js +14 -10
  107. package/dist/plugins/remark/index.d.ts +1 -0
  108. package/dist/plugins/remark/index.js +20 -4
  109. package/dist/plugins/remark/types.d.ts +3 -0
  110. package/dist/plugins/remark/types.js +1 -0
  111. package/dist/plugins/remix/index.d.ts +2 -1
  112. package/dist/plugins/remix/index.js +9 -0
  113. package/dist/plugins/rollup/index.d.ts +2 -1
  114. package/dist/plugins/rollup/index.js +8 -1
  115. package/dist/plugins/semantic-release/index.d.ts +1 -0
  116. package/dist/plugins/semantic-release/index.js +10 -4
  117. package/dist/plugins/semantic-release/types.d.ts +1 -1
  118. package/dist/plugins/sentry/index.d.ts +2 -1
  119. package/dist/plugins/sentry/index.js +7 -0
  120. package/dist/plugins/storybook/index.js +28 -10
  121. package/dist/plugins/storybook/types.d.ts +7 -0
  122. package/dist/plugins/stryker/index.js +13 -9
  123. package/dist/plugins/stylelint/index.js +8 -5
  124. package/dist/plugins/svelte/index.d.ts +2 -1
  125. package/dist/plugins/svelte/index.js +6 -0
  126. package/dist/plugins/tsup/index.d.ts +6 -0
  127. package/dist/plugins/tsup/index.js +23 -0
  128. package/dist/plugins/tsup/types.d.ts +7 -0
  129. package/dist/plugins/tsup/types.js +1 -0
  130. package/dist/plugins/typedoc/index.d.ts +1 -0
  131. package/dist/plugins/typedoc/index.js +8 -4
  132. package/dist/plugins/typedoc/types.d.ts +1 -1
  133. package/dist/plugins/typescript/index.js +16 -11
  134. package/dist/plugins/vite/index.js +7 -5
  135. package/dist/plugins/vitest/helpers.d.ts +2 -2
  136. package/dist/plugins/vitest/index.d.ts +4 -4
  137. package/dist/plugins/vitest/index.js +55 -26
  138. package/dist/plugins/vitest/types.d.ts +23 -2
  139. package/dist/plugins/webpack/index.js +31 -19
  140. package/dist/plugins/webpack/types.d.ts +2 -1
  141. package/dist/reporters/codeowners.js +2 -2
  142. package/dist/reporters/json.js +14 -9
  143. package/dist/reporters/symbols.js +3 -2
  144. package/dist/reporters/util.d.ts +8 -2
  145. package/dist/reporters/util.js +7 -1
  146. package/dist/types/cli.d.ts +1 -1
  147. package/dist/types/config.d.ts +9 -4
  148. package/dist/types/exports.d.ts +1 -0
  149. package/dist/types/imports.d.ts +6 -0
  150. package/dist/types/issues.d.ts +11 -1
  151. package/dist/types/package-json.d.ts +41 -0
  152. package/dist/types/package-json.js +1 -0
  153. package/dist/types/plugins.d.ts +5 -7
  154. package/dist/types/util.d.ts +16 -0
  155. package/dist/types/util.js +1 -0
  156. package/dist/types/workspace.d.ts +4 -1
  157. package/dist/typescript/SourceFile.d.ts +5 -0
  158. package/dist/typescript/SourceFileManager.js +3 -3
  159. package/dist/typescript/ast-helpers.d.ts +7 -14
  160. package/dist/typescript/ast-helpers.js +11 -9
  161. package/dist/typescript/createHosts.d.ts +1 -0
  162. package/dist/typescript/createHosts.js +1 -1
  163. package/dist/typescript/getImportsAndExports.d.ts +7 -5
  164. package/dist/typescript/getImportsAndExports.js +35 -18
  165. package/dist/typescript/resolveModuleNames.d.ts +1 -1
  166. package/dist/typescript/resolveModuleNames.js +38 -12
  167. package/dist/typescript/visitors/exports/exportDeclaration.js +14 -1
  168. package/dist/typescript/visitors/exports/exportKeyword.js +5 -2
  169. package/dist/typescript/visitors/exports/moduleExportsAccessExpression.js +29 -21
  170. package/dist/typescript/visitors/imports/importCall.js +1 -1
  171. package/dist/typescript/visitors/imports/importDeclaration.js +3 -3
  172. package/dist/typescript/visitors/imports/importEqualsDeclaration.js +1 -1
  173. package/dist/typescript/visitors/imports/jsDocType.js +37 -5
  174. package/dist/typescript/visitors/imports/propertyAccessCall.js +1 -1
  175. package/dist/typescript/visitors/imports/reExportDeclaration.js +8 -3
  176. package/dist/typescript/visitors/imports/requireCall.js +5 -5
  177. package/dist/util/array.d.ts +3 -1
  178. package/dist/util/cli-arguments.d.ts +3 -2
  179. package/dist/util/cli-arguments.js +6 -6
  180. package/dist/util/compilers.d.ts +122 -80
  181. package/dist/util/debug.d.ts +3 -3
  182. package/dist/util/debug.js +12 -18
  183. package/dist/util/fs.d.ts +2 -0
  184. package/dist/util/fs.js +22 -3
  185. package/dist/util/get-included-issue-types.js +14 -18
  186. package/dist/util/git.js +1 -1
  187. package/dist/util/glob.js +1 -1
  188. package/dist/util/loader.d.ts +2 -0
  189. package/dist/util/loader.js +23 -3
  190. package/dist/util/modules.d.ts +7 -1
  191. package/dist/util/modules.js +20 -10
  192. package/dist/util/object.d.ts +1 -0
  193. package/dist/util/object.js +3 -0
  194. package/dist/util/parse-args.d.ts +3 -0
  195. package/dist/util/parse-args.js +8 -0
  196. package/dist/util/path.d.ts +1 -0
  197. package/dist/util/path.js +5 -3
  198. package/dist/util/plugin.d.ts +4 -3
  199. package/dist/util/plugin.js +11 -4
  200. package/dist/util/protocols.d.ts +9 -0
  201. package/dist/util/protocols.js +9 -0
  202. package/dist/util/register.d.ts +2 -1
  203. package/dist/util/register.js +9 -13
  204. package/dist/util/require.js +7 -5
  205. package/dist/util/tsconfig-loader.js +2 -1
  206. package/dist/util/unwrap-function.d.ts +1 -0
  207. package/dist/util/unwrap-function.js +13 -0
  208. package/dist/version.d.ts +1 -1
  209. package/dist/version.js +1 -1
  210. package/package.json +86 -85
  211. package/schema-jsonc.json +11 -0
  212. package/schema.json +27 -3
  213. package/dist/plugins/vite/types.d.ts +0 -4
  214. /package/dist/plugins/{vite → jest}/types.js +0 -0
@@ -2,6 +2,7 @@ import { timerify } from '../../util/Performance.js';
2
2
  import { hasDependency, load } from '../../util/plugin.js';
3
3
  export const NAME = 'Remark';
4
4
  export const ENABLERS = ['remark-cli'];
5
+ export const PACKAGE_JSON_PATH = 'remarkConfig';
5
6
  export const isEnabled = ({ dependencies }) => hasDependency(dependencies, ENABLERS);
6
7
  export const CONFIG_FILE_PATTERNS = [
7
8
  'package.json',
@@ -10,9 +11,24 @@ export const CONFIG_FILE_PATTERNS = [
10
11
  '.remarkrc.{js,cjs,mjs}',
11
12
  '.remarkrc.{yml,yaml}',
12
13
  ];
13
- const findRemarkDependencies = async (configFilePath, { manifest }) => {
14
- const config = configFilePath.endsWith('package.json') ? manifest.remarkConfig : await load(configFilePath);
15
- const plugins = config?.plugins?.map(plugin => `remark-${plugin}`) ?? [];
16
- return [...plugins];
14
+ const findRemarkDependencies = async (configFilePath, options) => {
15
+ const { manifest, isProduction } = options;
16
+ if (isProduction)
17
+ return [];
18
+ const localConfig = configFilePath.endsWith('package.json')
19
+ ? manifest[PACKAGE_JSON_PATH]
20
+ : await load(configFilePath);
21
+ if (!localConfig)
22
+ return [];
23
+ const plugins = localConfig.plugins
24
+ ?.flatMap(plugin => {
25
+ if (typeof plugin === 'string')
26
+ return plugin;
27
+ if (Array.isArray(plugin) && typeof plugin[0] === 'string')
28
+ return plugin[0];
29
+ return [];
30
+ })
31
+ .map(plugin => (plugin.startsWith('remark-') ? plugin : `remark-${plugin}`)) ?? [];
32
+ return plugins;
17
33
  };
18
34
  export const findDependencies = timerify(findRemarkDependencies);
@@ -0,0 +1,3 @@
1
+ export type RemarkConfig = {
2
+ plugins?: (string | [string, boolean] | unknown)[];
3
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -1,6 +1,7 @@
1
- import type { IsPluginEnabledCallback } from '../../types/plugins.js';
1
+ import type { GenericPluginCallback, IsPluginEnabledCallback } from '../../types/plugins.js';
2
2
  export declare const NAME = "Remix";
3
3
  export declare const ENABLERS: RegExp[];
4
4
  export declare const isEnabled: IsPluginEnabledCallback;
5
5
  export declare const ENTRY_FILE_PATTERNS: string[];
6
6
  export declare const PRODUCTION_ENTRY_FILE_PATTERNS: string[];
7
+ export declare const findDependencies: GenericPluginCallback;
@@ -1,4 +1,6 @@
1
+ import { timerify } from '../../util/Performance.js';
1
2
  import { hasDependency } from '../../util/plugin.js';
3
+ import { toEntryPattern, toProductionEntryPattern } from '../../util/protocols.js';
2
4
  export const NAME = 'Remix';
3
5
  export const ENABLERS = [/^@remix-run\//];
4
6
  export const isEnabled = ({ dependencies }) => hasDependency(dependencies, ENABLERS);
@@ -9,3 +11,10 @@ export const PRODUCTION_ENTRY_FILE_PATTERNS = [
9
11
  'app/routes/**/*.{js,ts,tsx}',
10
12
  'server.{js,ts}',
11
13
  ];
14
+ const findRemixDependencies = async (configFilePath, options) => {
15
+ const { config } = options;
16
+ return config.entry
17
+ ? config.entry.map(toProductionEntryPattern)
18
+ : [...ENTRY_FILE_PATTERNS.map(toEntryPattern), ...PRODUCTION_ENTRY_FILE_PATTERNS.map(toProductionEntryPattern)];
19
+ };
20
+ export const findDependencies = timerify(findRemixDependencies);
@@ -1,5 +1,6 @@
1
- import type { IsPluginEnabledCallback } from '../../types/plugins.js';
1
+ import type { GenericPluginCallback, IsPluginEnabledCallback } from '../../types/plugins.js';
2
2
  export declare const NAME = "Rollup";
3
3
  export declare const ENABLERS: string[];
4
4
  export declare const isEnabled: IsPluginEnabledCallback;
5
5
  export declare const ENTRY_FILE_PATTERNS: string[];
6
+ export declare const findDependencies: GenericPluginCallback;
@@ -1,5 +1,12 @@
1
+ import { timerify } from '../../util/Performance.js';
1
2
  import { hasDependency } from '../../util/plugin.js';
3
+ import { toEntryPattern } from '../../util/protocols.js';
2
4
  export const NAME = 'Rollup';
3
5
  export const ENABLERS = ['rollup'];
4
6
  export const isEnabled = ({ dependencies }) => hasDependency(dependencies, ENABLERS);
5
- export const ENTRY_FILE_PATTERNS = ['rollup.config.{js,mjs,ts}'];
7
+ export const ENTRY_FILE_PATTERNS = ['rollup.config.{js,cjs,mjs,ts}'];
8
+ const findRollupDependencies = async () => {
9
+ const entryPatterns = ENTRY_FILE_PATTERNS.map(toEntryPattern);
10
+ return entryPatterns;
11
+ };
12
+ export const findDependencies = timerify(findRollupDependencies);
@@ -1,6 +1,7 @@
1
1
  import type { IsPluginEnabledCallback, GenericPluginCallback } from '../../types/plugins.js';
2
2
  export declare const NAME = "Semantic Release";
3
3
  export declare const ENABLERS: string[];
4
+ export declare const PACKAGE_JSON_PATH = "release";
4
5
  export declare const isEnabled: IsPluginEnabledCallback;
5
6
  export declare const CONFIG_FILE_PATTERNS: string[];
6
7
  export declare const findDependencies: GenericPluginCallback;
@@ -2,6 +2,7 @@ import { timerify } from '../../util/Performance.js';
2
2
  import { hasDependency, load } from '../../util/plugin.js';
3
3
  export const NAME = 'Semantic Release';
4
4
  export const ENABLERS = ['semantic-release'];
5
+ export const PACKAGE_JSON_PATH = 'release';
5
6
  export const isEnabled = ({ dependencies }) => hasDependency(dependencies, ENABLERS);
6
7
  export const CONFIG_FILE_PATTERNS = [
7
8
  '.releaserc',
@@ -9,9 +10,14 @@ export const CONFIG_FILE_PATTERNS = [
9
10
  'release.config.{js,cjs}',
10
11
  'package.json',
11
12
  ];
12
- const findSemanticReleaseDependencies = async (configFilePath, { manifest }) => {
13
- const config = configFilePath.endsWith('package.json') ? manifest.release : await load(configFilePath);
14
- const plugins = config?.plugins ?? [];
15
- return plugins.map(plugin => (Array.isArray(plugin) ? plugin[0] : plugin));
13
+ const findSemanticReleaseDependencies = async (configFilePath, options) => {
14
+ const { manifest, isProduction } = options;
15
+ if (isProduction)
16
+ return [];
17
+ const localConfig = configFilePath.endsWith('package.json')
18
+ ? manifest[PACKAGE_JSON_PATH]
19
+ : await load(configFilePath);
20
+ const plugins = (localConfig?.plugins ?? []).map(plugin => (Array.isArray(plugin) ? plugin[0] : plugin));
21
+ return plugins;
16
22
  };
17
23
  export const findDependencies = timerify(findSemanticReleaseDependencies);
@@ -1,3 +1,3 @@
1
- export type PluginConfig = {
1
+ export type SemanticReleaseConfig = {
2
2
  plugins?: (string | [string, Record<string, unknown>])[];
3
3
  };
@@ -1,5 +1,6 @@
1
- import type { IsPluginEnabledCallback } from '../../types/plugins.js';
1
+ import type { GenericPluginCallback, IsPluginEnabledCallback } from '../../types/plugins.js';
2
2
  export declare const NAME = "Sentry";
3
3
  export declare const ENABLERS: RegExp[];
4
4
  export declare const isEnabled: IsPluginEnabledCallback;
5
5
  export declare const ENTRY_FILE_PATTERNS: string[];
6
+ export declare const findDependencies: GenericPluginCallback;
@@ -1,5 +1,12 @@
1
+ import { timerify } from '../../util/Performance.js';
1
2
  import { hasDependency } from '../../util/plugin.js';
3
+ import { toEntryPattern } from '../../util/protocols.js';
2
4
  export const NAME = 'Sentry';
3
5
  export const ENABLERS = [/^@sentry\//];
4
6
  export const isEnabled = ({ dependencies }) => hasDependency(dependencies, ENABLERS);
5
7
  export const ENTRY_FILE_PATTERNS = ['sentry.{client,server,edge}.config.{js,ts}'];
8
+ const findSentryDependencies = async () => {
9
+ const entryPatterns = ENTRY_FILE_PATTERNS.map(toEntryPattern);
10
+ return entryPatterns;
11
+ };
12
+ export const findDependencies = timerify(findSentryDependencies);
@@ -1,19 +1,37 @@
1
+ import { dirname, join, relative } from '../../util/path.js';
1
2
  import { timerify } from '../../util/Performance.js';
2
3
  import { hasDependency, load } from '../../util/plugin.js';
4
+ import { toEntryPattern } from '../../util/protocols.js';
3
5
  export const NAME = 'Storybook';
4
6
  export const ENABLERS = [/^@storybook\//, '@nrwl/storybook'];
5
7
  export const isEnabled = ({ dependencies }) => hasDependency(dependencies, ENABLERS);
6
- export const CONFIG_FILE_PATTERNS = ['.storybook/{main,manager,test-runner}.{js,ts}'];
7
- export const ENTRY_FILE_PATTERNS = ['.storybook/preview.{js,jsx,ts,tsx}', '**/*.stories.{js,jsx,ts,tsx}'];
8
+ export const CONFIG_FILE_PATTERNS = ['.storybook/{main,test-runner}.{js,ts}'];
9
+ const STORIES_FILE_PATTERNS = ['**/*.@(mdx|stories.@(mdx|js|jsx|mjs|ts|tsx))'];
10
+ const REST_ENTRY_FILE_PATTERNS = ['.storybook/{manager,preview}.{js,jsx,ts,tsx}'];
11
+ export const ENTRY_FILE_PATTERNS = [...REST_ENTRY_FILE_PATTERNS, ...STORIES_FILE_PATTERNS];
8
12
  export const PROJECT_FILE_PATTERNS = ['.storybook/**/*.{js,jsx,ts,tsx}'];
9
- const findStorybookDependencies = async (configFilePath) => {
10
- const config = await load(configFilePath);
11
- if (!config)
12
- return [];
13
- const addons = config.addons?.map(addon => (typeof addon === 'string' ? addon : addon.name)) ?? [];
14
- const builder = config?.core?.builder;
13
+ const findStorybookDependencies = async (configFilePath, options) => {
14
+ const { isProduction, cwd, config } = options;
15
+ const localConfig = await load(configFilePath);
16
+ const stories = typeof localConfig?.stories === 'function'
17
+ ? await localConfig.stories(STORIES_FILE_PATTERNS)
18
+ : localConfig?.stories;
19
+ const relativePatterns = stories?.map(pattern => {
20
+ if (typeof pattern === 'string')
21
+ return relative(cwd, join(dirname(configFilePath), pattern));
22
+ return relative(cwd, join(dirname(configFilePath), pattern.directory, pattern.files ?? STORIES_FILE_PATTERNS[0]));
23
+ });
24
+ const patterns = [
25
+ ...(config?.entry ?? REST_ENTRY_FILE_PATTERNS),
26
+ ...(relativePatterns && relativePatterns.length > 0 ? relativePatterns : STORIES_FILE_PATTERNS),
27
+ ];
28
+ const entryPatterns = patterns.map(toEntryPattern);
29
+ if (!localConfig || isProduction)
30
+ return entryPatterns;
31
+ const addons = localConfig.addons?.map(addon => (typeof addon === 'string' ? addon : addon.name)) ?? [];
32
+ const builder = localConfig?.core?.builder;
15
33
  const builderPackages = builder && /webpack/.test(builder) ? [`@storybook/builder-${builder}`, `@storybook/manager-${builder}`] : [];
16
- const frameworks = config.framework?.name ? [config.framework.name] : [];
17
- return [...addons, ...builderPackages, ...frameworks];
34
+ const frameworks = localConfig.framework?.name ? [localConfig.framework.name] : [];
35
+ return [...entryPatterns, ...addons, ...builderPackages, ...frameworks];
18
36
  };
19
37
  export const findDependencies = timerify(findStorybookDependencies);
@@ -1,4 +1,10 @@
1
+ type Stories = (string | {
2
+ directory: string;
3
+ files?: string;
4
+ titlePrefix?: string;
5
+ })[];
1
6
  export type StorybookConfig = {
7
+ stories?: Stories | ((patterns: string[]) => Promise<string[]>);
2
8
  addons?: (string | {
3
9
  name: string;
4
10
  })[];
@@ -9,3 +15,4 @@ export type StorybookConfig = {
9
15
  name?: string;
10
16
  };
11
17
  };
18
+ export {};
@@ -4,14 +4,18 @@ export const NAME = 'Stryker';
4
4
  export const ENABLERS = ['@stryker-mutator/core'];
5
5
  export const isEnabled = ({ dependencies }) => hasDependency(dependencies, ENABLERS);
6
6
  export const CONFIG_FILE_PATTERNS = ['?(.)stryker.{conf,config}.{js,mjs,cjs,json}'];
7
- const findStrykerDependencies = async (configFilePath) => {
8
- const config = await load(configFilePath);
9
- if (config) {
10
- const runners = config.testRunner ? [`@stryker-mutator/${config.testRunner}-runner`] : [];
11
- const checkers = config.checkers ? config.checkers.map(checker => `@stryker-mutator/${checker}-checker`) : [];
12
- const plugins = config.plugins ?? [];
13
- return [...runners, ...checkers, ...plugins];
14
- }
15
- return [];
7
+ const findStrykerDependencies = async (configFilePath, options) => {
8
+ const { isProduction } = options;
9
+ if (isProduction)
10
+ return [];
11
+ const localConfig = await load(configFilePath);
12
+ if (!localConfig)
13
+ return [];
14
+ const runners = localConfig.testRunner ? [`@stryker-mutator/${localConfig.testRunner}-runner`] : [];
15
+ const checkers = localConfig.checkers
16
+ ? localConfig.checkers.map(checker => `@stryker-mutator/${checker}-checker`)
17
+ : [];
18
+ const plugins = localConfig.plugins ?? [];
19
+ return [...runners, ...checkers, ...plugins];
16
20
  };
17
21
  export const findDependencies = timerify(findStrykerDependencies);
@@ -9,14 +9,17 @@ export const CONFIG_FILE_PATTERNS = [
9
9
  '.stylelintrc.{cjs,js,json,yaml,yml}',
10
10
  'stylelint.config.{cjs,mjs,js}',
11
11
  ];
12
- const findPluginDependencies = async (configFilePath, { manifest }) => {
13
- const config = configFilePath.endsWith('package.json')
12
+ const findPluginDependencies = async (configFilePath, options) => {
13
+ const { manifest, isProduction } = options;
14
+ if (isProduction)
15
+ return [];
16
+ const localConfig = configFilePath.endsWith('package.json')
14
17
  ? manifest.stylelint
15
18
  : await load(configFilePath);
16
- if (!config)
19
+ if (!localConfig)
17
20
  return [];
18
- const extend = config.extends ? [config.extends].flat().filter(extend => !isInternal(extend)) : [];
19
- const plugins = config.plugins ? [config.plugins].flat().filter(plugin => !isInternal(plugin)) : [];
21
+ const extend = localConfig.extends ? [localConfig.extends].flat().filter(extend => !isInternal(extend)) : [];
22
+ const plugins = localConfig.plugins ? [localConfig.plugins].flat().filter(plugin => !isInternal(plugin)) : [];
20
23
  return [...extend, ...plugins];
21
24
  };
22
25
  export const findDependencies = timerify(findPluginDependencies);
@@ -1,7 +1,8 @@
1
- import type { IsPluginEnabledCallback } from '../../types/plugins.js';
1
+ import type { GenericPluginCallback, IsPluginEnabledCallback } from '../../types/plugins.js';
2
2
  export declare const NAME = "Svelte";
3
3
  export declare const ENABLERS: string[];
4
4
  export declare const isEnabled: IsPluginEnabledCallback;
5
5
  export declare const ENTRY_FILE_PATTERNS: string[];
6
6
  export declare const PRODUCTION_ENTRY_FILE_PATTERNS: string[];
7
7
  export declare const PROJECT_FILE_PATTERNS: string[];
8
+ export declare const findDependencies: GenericPluginCallback;
@@ -1,4 +1,6 @@
1
+ import { timerify } from '../../util/Performance.js';
1
2
  import { hasDependency } from '../../util/plugin.js';
3
+ import { toEntryPattern, toProductionEntryPattern } from '../../util/protocols.js';
2
4
  export const NAME = 'Svelte';
3
5
  export const ENABLERS = ['svelte'];
4
6
  export const isEnabled = ({ dependencies }) => hasDependency(dependencies, ENABLERS);
@@ -7,3 +9,7 @@ export const PRODUCTION_ENTRY_FILE_PATTERNS = [
7
9
  'src/routes/**/+{page,server,page.server,error,layout,layout.server}{,@*}.{js,ts,svelte}',
8
10
  ];
9
11
  export const PROJECT_FILE_PATTERNS = ['src/**/*.{js,ts,svelte}'];
12
+ const findSvelteDependencies = async () => {
13
+ return [...PRODUCTION_ENTRY_FILE_PATTERNS.map(toProductionEntryPattern), ...ENTRY_FILE_PATTERNS.map(toEntryPattern)];
14
+ };
15
+ export const findDependencies = timerify(findSvelteDependencies);
@@ -0,0 +1,6 @@
1
+ import type { IsPluginEnabledCallback, GenericPluginCallback } from '../../types/plugins.js';
2
+ export declare const NAME = "tsup";
3
+ export declare const ENABLERS: string[];
4
+ export declare const isEnabled: IsPluginEnabledCallback;
5
+ export declare const CONFIG_FILE_PATTERNS: string[];
6
+ export declare const findDependencies: GenericPluginCallback;
@@ -0,0 +1,23 @@
1
+ import { timerify } from '../../util/Performance.js';
2
+ import { hasDependency, load } from '../../util/plugin.js';
3
+ import { toEntryPattern } from '../../util/protocols.js';
4
+ export const NAME = 'tsup';
5
+ export const ENABLERS = ['tsup'];
6
+ export const isEnabled = ({ dependencies }) => hasDependency(dependencies, ENABLERS);
7
+ export const CONFIG_FILE_PATTERNS = ['tsup.config.js'];
8
+ const findTsupDependencies = async (configFilePath) => {
9
+ let localConfig = await load(configFilePath);
10
+ if (typeof localConfig === 'function')
11
+ localConfig = await localConfig({});
12
+ if (!localConfig)
13
+ return [];
14
+ const entryPatterns = [localConfig].flat().flatMap(config => {
15
+ if (!config.entry)
16
+ return [];
17
+ if (Array.isArray(config.entry))
18
+ return config.entry.map(toEntryPattern);
19
+ return Object.values(config.entry).map(toEntryPattern);
20
+ });
21
+ return entryPatterns;
22
+ };
23
+ export const findDependencies = timerify(findTsupDependencies);
@@ -0,0 +1,7 @@
1
+ type Entry = string[] | Record<string, string>;
2
+ type Options = {
3
+ entry?: Entry;
4
+ };
5
+ type MaybePromise<T> = T | Promise<T>;
6
+ export type TsupConfig = Options | Options[] | ((overrideOptions: Options) => MaybePromise<Options | Options[]>);
7
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -1,6 +1,7 @@
1
1
  import type { IsPluginEnabledCallback, GenericPluginCallback } from '../../types/plugins.js';
2
2
  export declare const NAME = "TypeDoc";
3
3
  export declare const ENABLERS: string[];
4
+ export declare const PACKAGE_JSON_PATH = "typedocOptions";
4
5
  export declare const isEnabled: IsPluginEnabledCallback;
5
6
  export declare const CONFIG_FILE_PATTERNS: string[];
6
7
  export declare const findDependencies: GenericPluginCallback;
@@ -2,6 +2,7 @@ import { timerify } from '../../util/Performance.js';
2
2
  import { hasDependency, load } from '../../util/plugin.js';
3
3
  export const NAME = 'TypeDoc';
4
4
  export const ENABLERS = ['typedoc'];
5
+ export const PACKAGE_JSON_PATH = 'typedocOptions';
5
6
  export const isEnabled = ({ dependencies }) => hasDependency(dependencies, ENABLERS);
6
7
  export const CONFIG_FILE_PATTERNS = [
7
8
  'typedoc.{js,cjs,json,jsonc}',
@@ -11,12 +12,15 @@ export const CONFIG_FILE_PATTERNS = [
11
12
  'package.json',
12
13
  'tsconfig.json',
13
14
  ];
14
- const findTypeDocDependencies = async (configFilePath, { manifest }) => {
15
- const config = configFilePath.endsWith('package.json')
16
- ? manifest.typedocOptions
15
+ const findTypeDocDependencies = async (configFilePath, options) => {
16
+ const { manifest, isProduction } = options;
17
+ if (isProduction)
18
+ return [];
19
+ const localConfig = configFilePath.endsWith('package.json')
20
+ ? manifest[PACKAGE_JSON_PATH]
17
21
  : configFilePath.endsWith('tsconfig.json')
18
22
  ? (await load(configFilePath)).typedocOptions
19
23
  : await load(configFilePath);
20
- return config?.plugin ?? [];
24
+ return localConfig?.plugin ?? [];
21
25
  };
22
26
  export const findDependencies = timerify(findTypeDocDependencies);
@@ -1,3 +1,3 @@
1
- export type PluginConfig = {
1
+ export type TypeDocConfig = {
2
2
  plugin?: string[];
3
3
  };
@@ -8,31 +8,36 @@ export const ENABLERS = ['typescript'];
8
8
  export const isEnabled = ({ dependencies }) => hasDependency(dependencies, ENABLERS);
9
9
  export const CONFIG_FILE_PATTERNS = ['tsconfig.json', 'tsconfig.*.json'];
10
10
  const resolveExtensibleConfig = async (configFilePath) => {
11
- const config = await load(configFilePath);
12
- config.extends = config.extends ? [config.extends].flat() : [];
13
- if (config?.extends) {
14
- for (const extend of [config.extends].flat()) {
11
+ const localConfig = await load(configFilePath);
12
+ if (!localConfig)
13
+ return;
14
+ localConfig.extends = localConfig.extends ? [localConfig.extends].flat() : [];
15
+ if (localConfig?.extends) {
16
+ for (const extend of [localConfig.extends].flat()) {
15
17
  if (isInternal(extend)) {
16
18
  const presetConfigPath = toAbsolute(extend, dirname(configFilePath));
17
19
  const presetConfig = await resolveExtensibleConfig(presetConfigPath);
18
- config.extends.push(...(presetConfig.extends ? [presetConfig.extends].flat() : []));
20
+ localConfig.extends.push(...(presetConfig?.extends ? [presetConfig.extends].flat() : []));
19
21
  }
20
22
  }
21
23
  }
22
- return config;
24
+ return localConfig;
23
25
  };
24
- export const findTypeScriptDependencies = async (configFilePath) => {
26
+ export const findTypeScriptDependencies = async (configFilePath, options) => {
27
+ const { isProduction } = options;
25
28
  const { compilerOptions } = await loadTSConfig(configFilePath);
26
- const config = await resolveExtensibleConfig(configFilePath);
27
- if (!compilerOptions || !config)
29
+ const localConfig = await resolveExtensibleConfig(configFilePath);
30
+ if (!compilerOptions || !localConfig)
28
31
  return [];
29
- const extend = config.extends ? [config.extends].flat().filter(extend => !isInternal(extend)) : [];
32
+ const jsx = compilerOptions?.jsxImportSource ? [compilerOptions.jsxImportSource] : [];
33
+ if (isProduction)
34
+ return [...jsx];
35
+ const extend = localConfig.extends ? [localConfig.extends].flat().filter(extend => !isInternal(extend)) : [];
30
36
  const types = compilerOptions.types ?? [];
31
37
  const plugins = Array.isArray(compilerOptions?.plugins)
32
38
  ? compilerOptions.plugins.map(plugin => (typeof plugin === 'object' && 'name' in plugin ? plugin.name : ''))
33
39
  : [];
34
40
  const importHelpers = compilerOptions?.importHelpers ? ['tslib'] : [];
35
- const jsx = compilerOptions?.jsxImportSource ? [compilerOptions.jsxImportSource] : [];
36
41
  return compact([...extend, ...types, ...plugins, ...importHelpers, ...jsx]);
37
42
  };
38
43
  export const findDependencies = timerify(findTypeScriptDependencies);
@@ -1,12 +1,14 @@
1
1
  import { timerify } from '../../util/Performance.js';
2
2
  import { hasDependency, load } from '../../util/plugin.js';
3
- import { findVitestDeps } from '../vitest/index.js';
3
+ import { findVitestDependencies } from '../vitest/index.js';
4
4
  export const NAME = 'Vite';
5
5
  export const ENABLERS = ['vite'];
6
6
  export const isEnabled = ({ dependencies }) => hasDependency(dependencies, ENABLERS);
7
- export const CONFIG_FILE_PATTERNS = ['vite.config.{js,ts}'];
8
- const findViteDependencies = async (configFilePath) => {
9
- const config = await load(configFilePath);
10
- return findVitestDeps(config);
7
+ export const CONFIG_FILE_PATTERNS = ['vite.config.{js,mjs,ts,cjs,mts,cts}'];
8
+ const findViteDependencies = async (configFilePath, options) => {
9
+ const localConfig = await load(configFilePath);
10
+ if (!localConfig)
11
+ return [];
12
+ return findVitestDependencies(configFilePath, localConfig, options);
11
13
  };
12
14
  export const findDependencies = timerify(findViteDependencies);
@@ -1,6 +1,6 @@
1
- import type { VitestConfig } from './types.js';
1
+ import type { ViteConfig } from './types.js';
2
2
  type BuiltinEnvironment = 'node' | 'jsdom' | 'happy-dom' | 'edge-runtime';
3
3
  type VitestEnvironment = BuiltinEnvironment | (string & Record<never, never>);
4
4
  export declare const getEnvPackageName: (env: VitestEnvironment) => any;
5
- export declare const getExternalReporters: (reporters?: VitestConfig['test']['reporters']) => unknown[];
5
+ export declare const getExternalReporters: (reporters?: ViteConfig['test']['reporters']) => unknown[];
6
6
  export {};
@@ -1,9 +1,9 @@
1
- import type { VitestConfig } from './types.js';
2
- import type { IsPluginEnabledCallback, GenericPluginCallback } from '../../types/plugins.js';
1
+ import type { ViteConfigOrFn } from './types.js';
2
+ import type { IsPluginEnabledCallback, GenericPluginCallback, GenericPluginCallbackOptions } from '../../types/plugins.js';
3
3
  export declare const NAME = "Vitest";
4
4
  export declare const ENABLERS: string[];
5
5
  export declare const isEnabled: IsPluginEnabledCallback;
6
6
  export declare const CONFIG_FILE_PATTERNS: string[];
7
- export declare const ENTRY_FILE_PATTERNS: never[];
8
- export declare const findVitestDeps: (config: VitestConfig) => any[];
7
+ export declare const ENTRY_FILE_PATTERNS: string[];
8
+ export declare const findVitestDependencies: (configFilePath: string, localConfig: ViteConfigOrFn, options: GenericPluginCallbackOptions) => Promise<any[]>;
9
9
  export declare const findDependencies: GenericPluginCallback;
@@ -1,37 +1,66 @@
1
1
  import { compact } from '../../util/array.js';
2
+ import { dirname, isAbsolute, join, relative } from '../../util/path.js';
2
3
  import { timerify } from '../../util/Performance.js';
3
- import { hasDependency, load } from '../../util/plugin.js';
4
+ import { hasDependency, load, tryResolve } from '../../util/plugin.js';
5
+ import { toEntryPattern } from '../../util/protocols.js';
4
6
  import { getEnvPackageName, getExternalReporters } from './helpers.js';
5
7
  export const NAME = 'Vitest';
6
8
  export const ENABLERS = ['vitest'];
7
9
  export const isEnabled = ({ dependencies }) => hasDependency(dependencies, ENABLERS);
8
- export const CONFIG_FILE_PATTERNS = ['vitest.config.ts', 'vitest.{workspace,projects}.{ts,js,json}'];
9
- export const ENTRY_FILE_PATTERNS = [];
10
- export const findVitestDeps = (config) => {
11
- if (!config || !config.test)
12
- return [];
13
- const cfg = config.test;
14
- const environments = cfg.environment ? [getEnvPackageName(cfg.environment)] : [];
15
- const reporters = getExternalReporters(cfg.reporters);
16
- const coverage = cfg.coverage ? [`@vitest/coverage-${cfg.coverage.provider ?? 'v8'}`] : [];
17
- const setupFiles = cfg.setupFiles ? [cfg.setupFiles].flat() : [];
18
- const globalSetup = cfg.globalSetup ? [cfg.globalSetup].flat() : [];
19
- return compact([...environments, ...reporters, ...coverage, ...setupFiles, ...globalSetup]);
10
+ export const CONFIG_FILE_PATTERNS = [
11
+ 'vitest.config.{js,mjs,ts,cjs,mts,cts}',
12
+ 'vitest.{workspace,projects}.{ts,js,json}',
13
+ ];
14
+ export const ENTRY_FILE_PATTERNS = ['**/*.{test,spec}.?(c|m)[jt]s?(x)'];
15
+ const resolveEntry = (containingFilePath, specifier) => {
16
+ const dir = dirname(containingFilePath);
17
+ const resolvedPath = isAbsolute(specifier) ? specifier : tryResolve(join(dir, specifier), containingFilePath);
18
+ if (resolvedPath)
19
+ return toEntryPattern(relative(dir, resolvedPath));
20
+ return specifier;
21
+ };
22
+ const findConfigDependencies = (configFilePath, localConfig, options) => {
23
+ const { isProduction, config } = options;
24
+ const testConfig = localConfig.test;
25
+ const entryPatterns = (config?.entry ?? testConfig?.include ?? ENTRY_FILE_PATTERNS).map(toEntryPattern);
26
+ if (!testConfig || isProduction)
27
+ return entryPatterns;
28
+ const environments = testConfig.environment ? [getEnvPackageName(testConfig.environment)] : [];
29
+ const reporters = getExternalReporters(testConfig.reporters);
30
+ const coverage = testConfig.coverage && testConfig.coverage.enabled !== false
31
+ ? [`@vitest/coverage-${testConfig.coverage.provider ?? 'v8'}`]
32
+ : [];
33
+ const setupFiles = [testConfig.setupFiles ?? []].flat().map(v => resolveEntry(configFilePath, v));
34
+ const globalSetup = [testConfig.globalSetup ?? []].flat().map(v => resolveEntry(configFilePath, v));
35
+ return [...entryPatterns, ...environments, ...reporters, ...coverage, ...setupFiles, ...globalSetup];
20
36
  };
21
- const findVitestWorkspaceDeps = (config) => {
22
- let deps = [];
23
- for (const cfg of config) {
24
- if (typeof cfg === 'string')
25
- continue;
26
- deps = [...deps, ...findVitestDeps(cfg)];
37
+ export const findVitestDependencies = async (configFilePath, localConfig, options) => {
38
+ if (!localConfig)
39
+ return [];
40
+ if (typeof localConfig === 'function') {
41
+ const dependencies = new Set();
42
+ for (const command of ['dev', 'serve', 'build']) {
43
+ for (const mode of ['development', 'production']) {
44
+ const config = await localConfig({ command, mode, ssrBuild: undefined });
45
+ findConfigDependencies(configFilePath, config, options).forEach(dependency => dependencies.add(dependency));
46
+ }
47
+ }
48
+ return Array.from(dependencies);
27
49
  }
28
- return compact(deps);
50
+ const entry = localConfig.build?.lib?.entry ?? [];
51
+ const dependencies = (typeof entry === 'string' ? [entry] : Object.values(entry)).map(specifier => resolveEntry(configFilePath, specifier));
52
+ if (!localConfig.test)
53
+ return dependencies;
54
+ return [...dependencies, ...findConfigDependencies(configFilePath, localConfig, options)];
29
55
  };
30
- const findVitestDependencies = async (configFilePath) => {
31
- const config = await load(configFilePath);
32
- if (Array.isArray(config)) {
33
- return findVitestWorkspaceDeps(config);
56
+ const findVitestWorkspaceDependencies = async (configFilePath, options) => {
57
+ const localConfig = await load(configFilePath);
58
+ const dependencies = new Set();
59
+ for (const config of [localConfig].flat()) {
60
+ if (config && typeof config !== 'string') {
61
+ (await findVitestDependencies(configFilePath, config, options)).forEach(dependency => dependencies.add(dependency));
62
+ }
34
63
  }
35
- return findVitestDeps(config);
64
+ return compact(dependencies);
36
65
  };
37
- export const findDependencies = timerify(findVitestDependencies);
66
+ export const findDependencies = timerify(findVitestWorkspaceDependencies);
@@ -1,6 +1,8 @@
1
- export interface VitestConfig {
1
+ interface VitestConfig {
2
2
  test: {
3
+ include: string[];
3
4
  coverage?: {
5
+ enabled?: boolean;
4
6
  provider: string;
5
7
  };
6
8
  environment?: string;
@@ -9,4 +11,23 @@ export interface VitestConfig {
9
11
  setupFiles?: string | string[];
10
12
  };
11
13
  }
12
- export type VitestWorkspaceConfig = (string | VitestConfig)[];
14
+ export interface ViteConfig extends VitestConfig {
15
+ plugins?: unknown[];
16
+ build?: {
17
+ lib?: {
18
+ entry: string | string[] | {
19
+ [entryAlias: string]: string;
20
+ };
21
+ };
22
+ };
23
+ }
24
+ export type COMMAND = 'dev' | 'serve' | 'build';
25
+ export type MODE = 'development' | 'production';
26
+ interface Options {
27
+ command: COMMAND;
28
+ mode: MODE;
29
+ ssrBuild?: boolean | undefined;
30
+ }
31
+ export type ViteConfigOrFn = ViteConfig | ((options: Options) => ViteConfig) | ((options: Options) => Promise<ViteConfig>);
32
+ export type VitestWorkspaceConfig = (string | ViteConfig)[];
33
+ export {};