knip 6.24.0 → 6.26.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 (203) hide show
  1. package/dist/ConfigurationChief.d.ts +115 -1
  2. package/dist/ConfigurationChief.js +3 -0
  3. package/dist/ProjectPrincipal.d.ts +2 -0
  4. package/dist/ProjectPrincipal.js +4 -1
  5. package/dist/binaries/bash-parser.js +55 -83
  6. package/dist/binaries/index.js +3 -0
  7. package/dist/compilers/index.d.ts +199 -5
  8. package/dist/constants.d.ts +5 -1
  9. package/dist/constants.js +18 -0
  10. package/dist/graph/analyze.js +37 -2
  11. package/dist/graph/build.js +17 -3
  12. package/dist/graph-explorer/explorer.d.ts +1 -0
  13. package/dist/graph-explorer/explorer.js +2 -0
  14. package/dist/graph-explorer/operations/find-all-cycles.d.ts +3 -0
  15. package/dist/graph-explorer/operations/find-all-cycles.js +43 -0
  16. package/dist/graph-explorer/operations/find-cycles.js +3 -9
  17. package/dist/graph-explorer/utils.d.ts +10 -1
  18. package/dist/graph-explorer/utils.js +53 -0
  19. package/dist/plugins/_vue/auto-import.d.ts +12 -0
  20. package/dist/plugins/_vue/auto-import.js +272 -0
  21. package/dist/plugins/_vue/types.d.ts +38 -0
  22. package/dist/plugins/_vue/types.js +1 -0
  23. package/dist/plugins/astro/index.js +2 -37
  24. package/dist/plugins/astro/resolveFromAST.d.ts +4 -4
  25. package/dist/plugins/astro/resolveFromAST.js +34 -7
  26. package/dist/plugins/bun/index.js +28 -14
  27. package/dist/plugins/electron-vite/index.d.ts +3 -0
  28. package/dist/plugins/electron-vite/index.js +51 -0
  29. package/dist/plugins/electron-vite/types.d.ts +23 -0
  30. package/dist/plugins/electron-vite/types.js +1 -0
  31. package/dist/plugins/esbuild/index.d.ts +3 -0
  32. package/dist/plugins/esbuild/index.js +17 -0
  33. package/dist/plugins/eslint/resolveFromAST.js +18 -21
  34. package/dist/plugins/eve/index.d.ts +3 -0
  35. package/dist/plugins/eve/index.js +22 -0
  36. package/dist/plugins/execa/visitors/execa.js +10 -18
  37. package/dist/plugins/fumadocs/index.d.ts +3 -0
  38. package/dist/plugins/fumadocs/index.js +18 -0
  39. package/dist/plugins/graphql-codegen/index.js +9 -7
  40. package/dist/plugins/index.d.ts +19 -0
  41. package/dist/plugins/index.js +38 -0
  42. package/dist/plugins/jest/index.js +13 -3
  43. package/dist/plugins/laravel-vite-plugin/index.d.ts +3 -0
  44. package/dist/plugins/laravel-vite-plugin/index.js +14 -0
  45. package/dist/plugins/laravel-vite-plugin/resolveFromAST.d.ts +2 -0
  46. package/dist/plugins/laravel-vite-plugin/resolveFromAST.js +27 -0
  47. package/dist/plugins/next/index.js +25 -12
  48. package/dist/plugins/next-mdx/index.js +2 -8
  49. package/dist/plugins/next-mdx/resolveFromAST.d.ts +3 -2
  50. package/dist/plugins/next-mdx/resolveFromAST.js +17 -21
  51. package/dist/plugins/node/index.js +4 -1
  52. package/dist/plugins/nuxt/index.js +5 -68
  53. package/dist/plugins/nuxt/types.d.ts +0 -34
  54. package/dist/plugins/nuxtjs-i18n/index.d.ts +3 -0
  55. package/dist/plugins/nuxtjs-i18n/index.js +12 -0
  56. package/dist/plugins/oclif/index.js +10 -5
  57. package/dist/plugins/orval/index.js +1 -3
  58. package/dist/plugins/orval/resolveFromAST.d.ts +2 -2
  59. package/dist/plugins/orval/resolveFromAST.js +4 -7
  60. package/dist/plugins/oxlint/index.js +23 -2
  61. package/dist/plugins/pnpm/index.js +22 -1
  62. package/dist/plugins/pnpm/types.d.ts +4 -0
  63. package/dist/plugins/pnpm/types.js +1 -0
  64. package/dist/plugins/prettier/index.js +19 -3
  65. package/dist/plugins/prettier/types.d.ts +6 -1
  66. package/dist/plugins/quasar/index.d.ts +3 -0
  67. package/dist/plugins/quasar/index.js +15 -0
  68. package/dist/plugins/quasar/resolveFromAST.d.ts +3 -0
  69. package/dist/plugins/quasar/resolveFromAST.js +63 -0
  70. package/dist/plugins/qwik/index.js +1 -25
  71. package/dist/plugins/qwik/resolveFromAST.d.ts +5 -3
  72. package/dist/plugins/qwik/resolveFromAST.js +28 -9
  73. package/dist/plugins/rolldown/index.js +2 -5
  74. package/dist/plugins/rollup/index.js +2 -5
  75. package/dist/plugins/rslib/index.js +2 -5
  76. package/dist/plugins/rspack/index.js +5 -0
  77. package/dist/plugins/serverless-framework/index.js +12 -1
  78. package/dist/plugins/serverless-framework/types.d.ts +5 -2
  79. package/dist/plugins/sst/index.js +1 -5
  80. package/dist/plugins/sst/resolveFromAST.d.ts +1 -1
  81. package/dist/plugins/sst/resolveFromAST.js +1 -1
  82. package/dist/plugins/starlight/index.js +1 -19
  83. package/dist/plugins/starlight/resolveFromAST.d.ts +2 -2
  84. package/dist/plugins/starlight/resolveFromAST.js +12 -8
  85. package/dist/plugins/stencil/index.js +2 -37
  86. package/dist/plugins/stencil/resolveFromAST.d.ts +3 -0
  87. package/dist/plugins/stencil/resolveFromAST.js +36 -0
  88. package/dist/plugins/storybook/index.js +10 -0
  89. package/dist/plugins/sveltekit/index.js +1 -48
  90. package/dist/plugins/sveltekit/resolveFromAST.d.ts +2 -0
  91. package/dist/plugins/sveltekit/resolveFromAST.js +45 -0
  92. package/dist/plugins/tauri/index.d.ts +3 -0
  93. package/dist/plugins/tauri/index.js +42 -0
  94. package/dist/plugins/tauri/types.d.ts +16 -0
  95. package/dist/plugins/tauri/types.js +1 -0
  96. package/dist/plugins/tsdown/index.js +2 -5
  97. package/dist/plugins/tsup/index.js +2 -5
  98. package/dist/plugins/typedoc/index.js +9 -3
  99. package/dist/plugins/typedoc/types.d.ts +2 -0
  100. package/dist/plugins/unplugin-auto-import/index.d.ts +3 -0
  101. package/dist/plugins/unplugin-auto-import/index.js +18 -0
  102. package/dist/plugins/unplugin-icons/index.d.ts +3 -0
  103. package/dist/plugins/unplugin-icons/index.js +17 -0
  104. package/dist/plugins/unplugin-vue-components/index.d.ts +3 -0
  105. package/dist/plugins/unplugin-vue-components/index.js +16 -0
  106. package/dist/plugins/unplugin-vue-i18n/index.d.ts +3 -0
  107. package/dist/plugins/unplugin-vue-i18n/index.js +10 -0
  108. package/dist/plugins/unplugin-vue-markdown/index.d.ts +3 -0
  109. package/dist/plugins/unplugin-vue-markdown/index.js +16 -0
  110. package/dist/plugins/unplugin-vue-router/index.d.ts +3 -0
  111. package/dist/plugins/unplugin-vue-router/index.js +14 -0
  112. package/dist/plugins/vite/helpers.d.ts +2 -0
  113. package/dist/plugins/vite/helpers.js +46 -31
  114. package/dist/plugins/vite/index.js +1 -1
  115. package/dist/plugins/vite/visitors/importMetaGlob.js +1 -8
  116. package/dist/plugins/vite-plugin-pages/index.d.ts +3 -0
  117. package/dist/plugins/vite-plugin-pages/index.js +26 -0
  118. package/dist/plugins/vite-plugin-pwa/index.d.ts +3 -0
  119. package/dist/plugins/vite-plugin-pwa/index.js +17 -0
  120. package/dist/plugins/vite-plugin-pwa/resolveFromAST.d.ts +4 -0
  121. package/dist/plugins/vite-plugin-pwa/resolveFromAST.js +37 -0
  122. package/dist/plugins/vite-plugin-vue-layouts-next/index.d.ts +3 -0
  123. package/dist/plugins/vite-plugin-vue-layouts-next/index.js +23 -0
  124. package/dist/plugins/vite-plus/index.d.ts +3 -0
  125. package/dist/plugins/vite-plus/index.js +14 -0
  126. package/dist/plugins/vite-plus/resolveFromAST.d.ts +2 -0
  127. package/dist/plugins/vite-plus/resolveFromAST.js +37 -0
  128. package/dist/plugins/vite-pwa-assets-generator/index.d.ts +3 -0
  129. package/dist/plugins/vite-pwa-assets-generator/index.js +12 -0
  130. package/dist/plugins/vitepress/index.js +5 -1
  131. package/dist/plugins/vitest/index.js +4 -0
  132. package/dist/plugins/vitest/types.d.ts +3 -0
  133. package/dist/plugins/vue/index.js +5 -3
  134. package/dist/plugins/webpack/visitors/requireContext.js +2 -13
  135. package/dist/plugins/yarn/index.js +14 -4
  136. package/dist/plugins/yarn/types.d.ts +8 -0
  137. package/dist/plugins/yarn/types.js +1 -0
  138. package/dist/plugins/zx/visitors/zx.js +4 -4
  139. package/dist/reporters/cycles.d.ts +3 -0
  140. package/dist/reporters/cycles.js +79 -0
  141. package/dist/reporters/index.d.ts +1 -0
  142. package/dist/reporters/index.js +2 -0
  143. package/dist/reporters/json.d.ts +3 -0
  144. package/dist/reporters/json.js +2 -1
  145. package/dist/reporters/util/util.d.ts +3 -1
  146. package/dist/reporters/util/util.js +5 -1
  147. package/dist/schema/configuration.d.ts +295 -6
  148. package/dist/schema/configuration.js +6 -0
  149. package/dist/schema/plugins.d.ts +95 -0
  150. package/dist/schema/plugins.js +19 -0
  151. package/dist/types/PluginNames.d.ts +2 -2
  152. package/dist/types/PluginNames.js +19 -0
  153. package/dist/types/config.d.ts +9 -0
  154. package/dist/types/issues.d.ts +3 -0
  155. package/dist/types/module-graph.d.ts +7 -0
  156. package/dist/types/package-json.d.ts +8 -1
  157. package/dist/typescript/ast-helpers.d.ts +7 -2
  158. package/dist/typescript/ast-helpers.js +36 -8
  159. package/dist/typescript/ast-nodes.d.ts +4 -1
  160. package/dist/typescript/ast-nodes.js +17 -1
  161. package/dist/typescript/get-imports-and-exports.js +10 -0
  162. package/dist/typescript/glob-imports.d.ts +3 -0
  163. package/dist/typescript/glob-imports.js +49 -0
  164. package/dist/typescript/resolve-module-names.d.ts +2 -0
  165. package/dist/typescript/resolve-module-names.js +35 -1
  166. package/dist/typescript/visitors/calls.js +4 -6
  167. package/dist/typescript/visitors/imports.js +8 -8
  168. package/dist/typescript/visitors/script-visitors.js +4 -4
  169. package/dist/typescript/visitors/walk.js +2 -3
  170. package/dist/util/cli-arguments.d.ts +2 -1
  171. package/dist/util/cli-arguments.js +5 -3
  172. package/dist/util/create-options.d.ts +202 -5
  173. package/dist/util/create-options.js +4 -1
  174. package/dist/util/get-included-issue-types.d.ts +1 -0
  175. package/dist/util/get-included-issue-types.js +4 -2
  176. package/dist/util/issue-initializers.js +1 -1
  177. package/dist/util/load-tsconfig.js +17 -4
  178. package/dist/util/module-graph.js +1 -0
  179. package/dist/util/modules.js +25 -4
  180. package/dist/util/resolve.js +4 -1
  181. package/dist/util/scripts.d.ts +7 -0
  182. package/dist/util/scripts.js +75 -0
  183. package/dist/util/to-source-path.js +1 -1
  184. package/dist/version.d.ts +1 -1
  185. package/dist/version.js +1 -1
  186. package/package.json +1 -1
  187. package/schema.json +108 -1
  188. package/dist/plugins/next/resolveFromAST.d.ts +0 -2
  189. package/dist/plugins/next/resolveFromAST.js +0 -2
  190. package/dist/plugins/nuxt/helpers.d.ts +0 -15
  191. package/dist/plugins/nuxt/helpers.js +0 -133
  192. package/dist/plugins/rolldown/resolveFromAST.d.ts +0 -2
  193. package/dist/plugins/rolldown/resolveFromAST.js +0 -4
  194. package/dist/plugins/rollup/resolveFromAST.d.ts +0 -2
  195. package/dist/plugins/rollup/resolveFromAST.js +0 -4
  196. package/dist/plugins/rslib/resolveFromAST.d.ts +0 -2
  197. package/dist/plugins/rslib/resolveFromAST.js +0 -4
  198. package/dist/plugins/tsdown/resolveFromAST.d.ts +0 -2
  199. package/dist/plugins/tsdown/resolveFromAST.js +0 -4
  200. package/dist/plugins/tsup/resolveFromAST.d.ts +0 -2
  201. package/dist/plugins/tsup/resolveFromAST.js +0 -4
  202. package/dist/plugins/vue/compiler.d.ts +0 -3
  203. package/dist/plugins/vue/compiler.js +0 -10
@@ -1,4 +1,6 @@
1
1
  export type TypeDocConfig = {
2
2
  plugin?: string[];
3
3
  theme?: string[];
4
+ customCss?: string;
5
+ customJs?: string;
4
6
  };
@@ -0,0 +1,3 @@
1
+ import type { Plugin } from '../../types/config.ts';
2
+ declare const plugin: Plugin;
3
+ export default plugin;
@@ -0,0 +1,18 @@
1
+ import { hasDependency } from '../../util/plugin.js';
2
+ import { tsAutoImportCompiler, vueAutoImportCompiler } from '../_vue/auto-import.js';
3
+ const title = 'unplugin-auto-import';
4
+ const enablers = ['unplugin-auto-import'];
5
+ const isEnabled = ({ dependencies }) => hasDependency(dependencies, enablers);
6
+ const registerCompilers = ({ hasDependency, registerCompiler }) => {
7
+ if (hasDependency('unplugin-auto-import')) {
8
+ registerCompiler({ extension: '.vue', compiler: vueAutoImportCompiler });
9
+ registerCompiler({ extension: '.ts', compiler: tsAutoImportCompiler });
10
+ }
11
+ };
12
+ const plugin = {
13
+ title,
14
+ enablers,
15
+ isEnabled,
16
+ registerCompilers,
17
+ };
18
+ export default plugin;
@@ -0,0 +1,3 @@
1
+ import type { Plugin } from '../../types/config.ts';
2
+ declare const plugin: Plugin;
3
+ export default plugin;
@@ -0,0 +1,17 @@
1
+ import { toIgnore } from '../../util/input.js';
2
+ import { hasDependency } from '../../util/plugin.js';
3
+ const title = 'unplugin-icons';
4
+ const enablers = ['unplugin-icons'];
5
+ const isEnabled = ({ dependencies }) => hasDependency(dependencies, enablers);
6
+ const resolve = () => [
7
+ toIgnore('~icons/.*', 'unresolved'),
8
+ toIgnore('@iconify-json/.*', 'dependencies'),
9
+ toIgnore('@iconify/json', 'dependencies'),
10
+ ];
11
+ const plugin = {
12
+ title,
13
+ enablers,
14
+ isEnabled,
15
+ resolve,
16
+ };
17
+ export default plugin;
@@ -0,0 +1,3 @@
1
+ import type { Plugin } from '../../types/config.ts';
2
+ declare const plugin: Plugin;
3
+ export default plugin;
@@ -0,0 +1,16 @@
1
+ import { hasDependency } from '../../util/plugin.js';
2
+ import { vueAutoImportCompiler } from '../_vue/auto-import.js';
3
+ const title = 'unplugin-vue-components';
4
+ const enablers = ['unplugin-vue-components'];
5
+ const isEnabled = ({ dependencies }) => hasDependency(dependencies, enablers);
6
+ const registerCompilers = ({ hasDependency, registerCompiler }) => {
7
+ if (hasDependency('unplugin-vue-components'))
8
+ registerCompiler({ extension: '.vue', compiler: vueAutoImportCompiler });
9
+ };
10
+ const plugin = {
11
+ title,
12
+ enablers,
13
+ isEnabled,
14
+ registerCompilers,
15
+ };
16
+ export default plugin;
@@ -0,0 +1,3 @@
1
+ import type { Plugin } from '../../types/config.ts';
2
+ declare const plugin: Plugin;
3
+ export default plugin;
@@ -0,0 +1,10 @@
1
+ import { hasDependency } from '../../util/plugin.js';
2
+ const title = '@intlify/unplugin-vue-i18n';
3
+ const enablers = ['@intlify/unplugin-vue-i18n'];
4
+ const isEnabled = ({ dependencies }) => hasDependency(dependencies, enablers);
5
+ const plugin = {
6
+ title,
7
+ enablers,
8
+ isEnabled,
9
+ };
10
+ export default plugin;
@@ -0,0 +1,3 @@
1
+ import type { Plugin } from '../../types/config.ts';
2
+ declare const plugin: Plugin;
3
+ export default plugin;
@@ -0,0 +1,16 @@
1
+ import { hasDependency } from '../../util/plugin.js';
2
+ import { markdownAutoImportCompiler } from '../_vue/auto-import.js';
3
+ const title = 'unplugin-vue-markdown';
4
+ const enablers = ['unplugin-vue-markdown'];
5
+ const isEnabled = ({ dependencies }) => hasDependency(dependencies, enablers);
6
+ const registerCompilers = ({ hasDependency, registerCompiler }) => {
7
+ if (hasDependency('unplugin-vue-markdown'))
8
+ registerCompiler({ extension: '.md', compiler: markdownAutoImportCompiler });
9
+ };
10
+ const plugin = {
11
+ title,
12
+ enablers,
13
+ isEnabled,
14
+ registerCompilers,
15
+ };
16
+ export default plugin;
@@ -0,0 +1,3 @@
1
+ import type { Plugin } from '../../types/config.ts';
2
+ declare const plugin: Plugin;
3
+ export default plugin;
@@ -0,0 +1,14 @@
1
+ import { hasDependency } from '../../util/plugin.js';
2
+ import { findGeneratedDts } from '../_vue/auto-import.js';
3
+ const title = 'unplugin-vue-router';
4
+ const enablers = ['unplugin-vue-router', 'vue-router'];
5
+ const isEnabled = ({ cwd, dependencies }) => hasDependency(dependencies, ['unplugin-vue-router']) ||
6
+ (hasDependency(dependencies, ['vue-router']) && findGeneratedDts(cwd, 'Generated by vue-router').length > 0);
7
+ const production = ['src/pages/**/*.{vue,md}'];
8
+ const plugin = {
9
+ title,
10
+ enablers,
11
+ isEnabled,
12
+ production,
13
+ };
14
+ export default plugin;
@@ -1,4 +1,6 @@
1
1
  import type { Program } from 'oxc-parser';
2
2
  import { type Input } from '../../util/input.ts';
3
3
  export declare const getBabelInputs: (program: Program) => Input[];
4
+ export declare const getHtmlScriptEntries: (htmlPath: string) => Promise<Input[]>;
4
5
  export declare const getIndexHtmlEntries: (rootDir: string) => Promise<Input[]>;
6
+ export declare const getVitePluginDirs: (program: Program, specifiers: string[], key: string) => string[] | undefined;
@@ -1,36 +1,24 @@
1
- import { Visitor } from 'oxc-parser';
2
1
  import { blockCommentMatcher, lineCommentMatcher, scriptExtractor } from '../../compilers/compilers.js';
3
- import { findProperty, getImportMap, getStringValues } from '../../typescript/ast-helpers.js';
2
+ import { findImportedCalls, findProperty, getStringValues } from '../../typescript/ast-helpers.js';
3
+ import { getStringValue } from '../../typescript/ast-nodes.js';
4
4
  import { isFile, loadFile } from '../../util/fs.js';
5
5
  import { toProductionEntry } from '../../util/input.js';
6
- import { join } from '../../util/path.js';
6
+ import { dirname, join } from '../../util/path.js';
7
7
  import { getDependenciesFromConfig } from '../babel/index.js';
8
8
  const babelPluginSources = ['@rolldown/plugin-babel', '@vitejs/plugin-react', 'vite-plugin-babel'];
9
9
  const isBabelWrappingPlugin = (path) => babelPluginSources.some(source => path === source || path.startsWith(`${source}/`));
10
10
  export const getBabelInputs = (program) => {
11
- const pluginNames = new Set();
12
- for (const [name, path] of getImportMap(program)) {
13
- if (isBabelWrappingPlugin(path))
14
- pluginNames.add(name);
15
- }
16
- if (pluginNames.size === 0)
17
- return [];
18
11
  const inputs = [];
19
- const visitor = new Visitor({
20
- CallExpression(node) {
21
- if (node.callee?.type !== 'Identifier' || !pluginNames.has(node.callee.name))
22
- return;
23
- const options = node.arguments?.[0];
24
- const plugins = [];
25
- const presets = [];
26
- for (const config of [options, findProperty(options, 'babel'), findProperty(options, 'babelConfig')]) {
27
- plugins.push(...getStringValues(findProperty(config, 'plugins')));
28
- presets.push(...getStringValues(findProperty(config, 'presets')));
29
- }
30
- inputs.push(...getDependenciesFromConfig({ plugins, presets }));
31
- },
32
- });
33
- visitor.visit(program);
12
+ for (const call of findImportedCalls(program, isBabelWrappingPlugin)) {
13
+ const options = call.arguments?.[0];
14
+ const plugins = [];
15
+ const presets = [];
16
+ for (const config of [options, findProperty(options, 'babel'), findProperty(options, 'babelConfig')]) {
17
+ plugins.push(...getStringValues(findProperty(config, 'plugins')));
18
+ presets.push(...getStringValues(findProperty(config, 'presets')));
19
+ }
20
+ inputs.push(...getDependenciesFromConfig({ plugins, presets }));
21
+ }
34
22
  return inputs;
35
23
  };
36
24
  const moduleTypePattern = /\btype\s*=\s*["']?module["']?/i;
@@ -61,11 +49,38 @@ const getModuleScriptSources = (html) => {
61
49
  }
62
50
  return sources;
63
51
  };
64
- export const getIndexHtmlEntries = async (rootDir) => {
65
- const indexPath = join(rootDir, 'index.html');
66
- if (!isFile(indexPath))
52
+ export const getHtmlScriptEntries = async (htmlPath) => {
53
+ if (!isFile(htmlPath))
67
54
  return [];
68
- const html = await loadFile(indexPath);
69
- const entries = getModuleScriptSources(html).map(src => join(rootDir, src));
70
- return entries.map(entry => toProductionEntry(entry));
55
+ const html = await loadFile(htmlPath);
56
+ const dir = dirname(htmlPath);
57
+ return getModuleScriptSources(html).map(src => toProductionEntry(join(dir, src)));
58
+ };
59
+ export const getIndexHtmlEntries = (rootDir) => getHtmlScriptEntries(join(rootDir, 'index.html'));
60
+ export const getVitePluginDirs = (program, specifiers, key) => {
61
+ let dirs;
62
+ for (const call of findImportedCalls(program, specifiers)) {
63
+ const value = findProperty(call.arguments?.[0], key);
64
+ if (!value)
65
+ continue;
66
+ const collected = [];
67
+ const single = getStringValue(value);
68
+ if (single !== undefined)
69
+ collected.push(single);
70
+ else if (value.type === 'ArrayExpression') {
71
+ for (const element of value.elements ?? []) {
72
+ const str = getStringValue(element);
73
+ if (str !== undefined)
74
+ collected.push(str);
75
+ else if (element?.type === 'ObjectExpression') {
76
+ const dir = getStringValue(findProperty(element, 'dir'));
77
+ if (dir !== undefined)
78
+ collected.push(dir);
79
+ }
80
+ }
81
+ }
82
+ if (collected.length > 0)
83
+ dirs = collected;
84
+ }
85
+ return dirs;
71
86
  };
@@ -6,7 +6,7 @@ const title = 'Vite';
6
6
  const enablers = ['vite', 'vitest', 'vite-plus'];
7
7
  const isEnabled = ({ dependencies }) => hasDependency(dependencies, enablers);
8
8
  export const config = ['vite.config.{js,mjs,ts,cjs,mts,cts}'];
9
- const resolveFromAST = program => getBabelInputs(program);
9
+ const resolveFromAST = getBabelInputs;
10
10
  const registerVisitors = ({ ctx, registerVisitor }) => {
11
11
  registerVisitor(createImportMetaGlobVisitor(ctx));
12
12
  };
@@ -1,6 +1,3 @@
1
- import { IMPORT_FLAGS } from '../../../constants.js';
2
- import { _syncGlob } from '../../../util/glob.js';
3
- import { dirname, isAbsolute, join } from '../../../util/path.js';
4
1
  import { getStringValue, isStringLiteral } from '../../../typescript/ast-nodes.js';
5
2
  export function createImportMetaGlobVisitor(ctx) {
6
3
  return {
@@ -25,11 +22,7 @@ export function createImportMetaGlobVisitor(ctx) {
25
22
  }
26
23
  if (!patterns?.length)
27
24
  return;
28
- const dir = dirname(ctx.filePath);
29
- const files = _syncGlob({ patterns, cwd: dir });
30
- for (const f of files) {
31
- ctx.addImport(isAbsolute(f) ? f : join(dir, f), arg.start, IMPORT_FLAGS.ENTRY);
32
- }
25
+ ctx.addImportGlob(patterns);
33
26
  },
34
27
  };
35
28
  }
@@ -0,0 +1,3 @@
1
+ import type { Plugin } from '../../types/config.ts';
2
+ declare const plugin: Plugin;
3
+ export default plugin;
@@ -0,0 +1,26 @@
1
+ import { toIgnore, toProductionEntry } from '../../util/input.js';
2
+ import { join } from '../../util/path.js';
3
+ import { hasDependency } from '../../util/plugin.js';
4
+ import { getVitePluginDirs } from '../vite/helpers.js';
5
+ const title = 'vite-plugin-pages';
6
+ const enablers = ['vite-plugin-pages'];
7
+ const isEnabled = ({ dependencies }) => hasDependency(dependencies, enablers);
8
+ const config = ['vite.config.{js,mjs,ts,cjs,mts,cts}'];
9
+ const extensions = 'vue,jsx,tsx,md,mdx';
10
+ const defaultDir = 'src/pages';
11
+ const production = [`${defaultDir}/**/*.{${extensions}}`];
12
+ const resolveFromAST = (program, options) => {
13
+ const dirs = getVitePluginDirs(program, enablers, 'dirs') ?? [defaultDir];
14
+ return dirs.map(dir => toProductionEntry(join(options.configFileDir, `${dir}/**/*.{${extensions}}`)));
15
+ };
16
+ const resolve = () => ['~pages', '~react-pages', '~solid-pages'].map(specifier => toIgnore(specifier, 'unresolved'));
17
+ const plugin = {
18
+ title,
19
+ enablers,
20
+ isEnabled,
21
+ config,
22
+ production,
23
+ resolveFromAST,
24
+ resolve,
25
+ };
26
+ export default plugin;
@@ -0,0 +1,3 @@
1
+ import type { Plugin } from '../../types/config.ts';
2
+ declare const plugin: Plugin;
3
+ export default plugin;
@@ -0,0 +1,17 @@
1
+ import { join } from '../../util/path.js';
2
+ import { hasDependency } from '../../util/plugin.js';
3
+ import { defaultFilename, defaultSrcDir, resolveFromAST } from './resolveFromAST.js';
4
+ const title = 'vite-plugin-pwa';
5
+ const enablers = ['vite-plugin-pwa', '@vite-pwa/nuxt'];
6
+ const isEnabled = ({ dependencies }) => hasDependency(dependencies, enablers);
7
+ const config = ['vite.config.{js,mjs,ts,cjs,mts,cts}', 'nuxt.config.{js,cjs,mjs,ts,cts,mts}'];
8
+ const production = [join(defaultSrcDir, defaultFilename)];
9
+ const plugin = {
10
+ title,
11
+ enablers,
12
+ isEnabled,
13
+ config,
14
+ production,
15
+ resolveFromAST,
16
+ };
17
+ export default plugin;
@@ -0,0 +1,4 @@
1
+ import type { ResolveFromAST } from '../../types/config.ts';
2
+ export declare const defaultSrcDir = "public";
3
+ export declare const defaultFilename = "sw.js";
4
+ export declare const resolveFromAST: ResolveFromAST;
@@ -0,0 +1,37 @@
1
+ import { Visitor } from 'oxc-parser';
2
+ import { findImportedCalls, findProperty, getFirstPropertyValue, getPropertyValues, } from '../../typescript/ast-helpers.js';
3
+ import { toProductionEntry } from '../../util/input.js';
4
+ import { join } from '../../util/path.js';
5
+ export const defaultSrcDir = 'public';
6
+ export const defaultFilename = 'sw.js';
7
+ const isNuxtConfig = (configFileName) => configFileName.startsWith('nuxt.config.');
8
+ const getInjectManifestEntry = (options, configFileDir) => {
9
+ if (!getPropertyValues(options, 'strategies').has('injectManifest'))
10
+ return;
11
+ const srcDir = getFirstPropertyValue(options, 'srcDir') ?? defaultSrcDir;
12
+ const filename = getFirstPropertyValue(options, 'filename') ?? defaultFilename;
13
+ return toProductionEntry(join(configFileDir, srcDir, filename));
14
+ };
15
+ export const resolveFromAST = (program, options) => {
16
+ const inputs = [];
17
+ if (isNuxtConfig(options.configFileName)) {
18
+ const visitor = new Visitor({
19
+ ObjectExpression(node) {
20
+ const pwa = findProperty(node, 'pwa');
21
+ if (pwa?.type !== 'ObjectExpression')
22
+ return;
23
+ const entry = getInjectManifestEntry(pwa, options.configFileDir);
24
+ if (entry)
25
+ inputs.push(entry);
26
+ },
27
+ });
28
+ visitor.visit(program);
29
+ return inputs;
30
+ }
31
+ for (const call of findImportedCalls(program, 'vite-plugin-pwa')) {
32
+ const entry = getInjectManifestEntry(call.arguments?.[0], options.configFileDir);
33
+ if (entry)
34
+ inputs.push(entry);
35
+ }
36
+ return inputs;
37
+ };
@@ -0,0 +1,3 @@
1
+ import type { Plugin } from '../../types/config.ts';
2
+ declare const plugin: Plugin;
3
+ export default plugin;
@@ -0,0 +1,23 @@
1
+ import { toProductionEntry } from '../../util/input.js';
2
+ import { join } from '../../util/path.js';
3
+ import { hasDependency } from '../../util/plugin.js';
4
+ import { getVitePluginDirs } from '../vite/helpers.js';
5
+ const title = 'vite-plugin-vue-layouts-next';
6
+ const enablers = ['vite-plugin-vue-layouts-next', 'vite-plugin-vue-layouts', 'vite-plugin-vue-meta-layouts'];
7
+ const isEnabled = ({ dependencies }) => hasDependency(dependencies, enablers);
8
+ const config = ['vite.config.{js,mjs,ts,cjs,mts,cts}'];
9
+ const defaultDir = 'src/layouts';
10
+ const production = [`${defaultDir}/**/*.vue`];
11
+ const resolveFromAST = (program, options) => {
12
+ const dirs = getVitePluginDirs(program, enablers, 'layoutsDirs') ?? [defaultDir];
13
+ return dirs.map(dir => toProductionEntry(join(options.configFileDir, `${dir}/**/*.vue`)));
14
+ };
15
+ const plugin = {
16
+ title,
17
+ enablers,
18
+ isEnabled,
19
+ config,
20
+ production,
21
+ resolveFromAST,
22
+ };
23
+ export default plugin;
@@ -0,0 +1,3 @@
1
+ import type { Plugin } from '../../types/config.ts';
2
+ declare const plugin: Plugin;
3
+ export default plugin;
@@ -0,0 +1,14 @@
1
+ import { hasDependency } from '../../util/plugin.js';
2
+ import { resolveFromAST } from './resolveFromAST.js';
3
+ const title = 'vite-plus';
4
+ const enablers = ['vite-plus'];
5
+ const isEnabled = ({ dependencies }) => hasDependency(dependencies, enablers);
6
+ const config = ['vite.config.{js,mjs,ts,cjs,mts,cts}'];
7
+ const plugin = {
8
+ title,
9
+ enablers,
10
+ isEnabled,
11
+ config,
12
+ resolveFromAST,
13
+ };
14
+ export default plugin;
@@ -0,0 +1,2 @@
1
+ import type { ResolveFromAST } from '../../types/config.ts';
2
+ export declare const resolveFromAST: ResolveFromAST;
@@ -0,0 +1,37 @@
1
+ import { Visitor } from 'oxc-parser';
2
+ import { findProperty, getPropertyValues } from '../../typescript/ast-helpers.js';
3
+ import { getStringValue } from '../../typescript/ast-nodes.js';
4
+ export const resolveFromAST = (program, options) => {
5
+ const commands = [];
6
+ const visitor = new Visitor({
7
+ ObjectExpression(node) {
8
+ const run = findProperty(node, 'run');
9
+ const tasks = run?.type === 'ObjectExpression' ? findProperty(run, 'tasks') : undefined;
10
+ if (tasks?.type === 'ObjectExpression') {
11
+ for (const task of tasks.properties ?? []) {
12
+ if (task.type === 'Property' && task.value?.type === 'ObjectExpression') {
13
+ for (const command of getPropertyValues(task.value, 'command'))
14
+ commands.push(command);
15
+ }
16
+ }
17
+ }
18
+ const staged = findProperty(node, 'staged');
19
+ if (staged?.type === 'ObjectExpression') {
20
+ for (const prop of staged.properties ?? []) {
21
+ if (prop.type === 'Property') {
22
+ const command = getStringValue(prop.value);
23
+ if (command)
24
+ commands.push(command);
25
+ }
26
+ }
27
+ }
28
+ },
29
+ });
30
+ visitor.visit(program);
31
+ const inputs = [];
32
+ for (const command of commands) {
33
+ for (const input of options.getInputsFromScripts(command, { knownBinsOnly: true }))
34
+ inputs.push(input);
35
+ }
36
+ return inputs;
37
+ };
@@ -0,0 +1,3 @@
1
+ import type { Plugin } from '../../types/config.ts';
2
+ declare const plugin: Plugin;
3
+ export default plugin;
@@ -0,0 +1,12 @@
1
+ import { hasDependency } from '../../util/plugin.js';
2
+ const title = '@vite-pwa/assets-generator';
3
+ const enablers = ['@vite-pwa/assets-generator'];
4
+ const isEnabled = ({ dependencies }) => hasDependency(dependencies, enablers);
5
+ const config = ['pwa-assets.config.{js,cjs,mjs,ts,cts,mts}'];
6
+ const plugin = {
7
+ title,
8
+ enablers,
9
+ isEnabled,
10
+ config,
11
+ };
12
+ export default plugin;
@@ -2,7 +2,11 @@ import { hasDependency } from '../../util/plugin.js';
2
2
  const title = 'VitePress';
3
3
  const enablers = ['vitepress'];
4
4
  const isEnabled = ({ dependencies }) => hasDependency(dependencies, enablers);
5
- const entry = ['.vitepress/config.{js,ts,mjs,mts}', '.vitepress/theme/index.{js,ts,mjs,mts}'];
5
+ const entry = [
6
+ '.vitepress/config.{js,ts,mjs,mts,cjs,cts}',
7
+ '.vitepress/config/index.{js,ts,mjs,mts,cjs,cts}',
8
+ '.vitepress/theme/index.{js,ts,mjs,mts}',
9
+ ];
6
10
  const plugin = {
7
11
  title,
8
12
  enablers,
@@ -12,6 +12,7 @@ const isEnabled = ({ dependencies }) => hasDependency(dependencies, enablers);
12
12
  const config = ['vitest.config.{js,mjs,ts,cjs,mts,cts}', 'vitest.{workspace,projects}.{js,mjs,ts,cjs,mts,cts,json}'];
13
13
  const mocks = ['**/__mocks__/**/*.?(c|m)[jt]s?(x)'];
14
14
  const entry = ['**/*.{bench,test,test-d,spec,spec-d}.?(c|m)[jt]s?(x)', ...mocks];
15
+ const benchmark = ['**/*.bench.?(c|m)[jt]s?(x)'];
15
16
  const findConfigDependencies = (localConfig, options, vitestRoot) => {
16
17
  const { configFileDir: dir } = options;
17
18
  const testConfig = localConfig.test;
@@ -132,6 +133,9 @@ export const resolveConfig = async (localConfig, options) => {
132
133
  if (!options.config.entry)
133
134
  for (const dependency of mocks)
134
135
  inputs.add(toEntry(join(dir, dependency)));
136
+ const benchmarkInclude = cfg.test.benchmark?.include ?? benchmark;
137
+ for (const dependency of benchmarkInclude)
138
+ dependency[0] !== '!' && inputs.add(toEntry(join(dir, dependency)));
135
139
  }
136
140
  else {
137
141
  for (const dependency of options.config.entry ?? entry)
@@ -9,6 +9,9 @@ export type AliasOptions = readonly Alias[] | {
9
9
  interface VitestConfig {
10
10
  test: {
11
11
  include: string[];
12
+ benchmark?: {
13
+ include?: string[];
14
+ };
12
15
  coverage?: {
13
16
  enabled?: boolean;
14
17
  provider: string;
@@ -1,7 +1,7 @@
1
1
  import { toDependency } from '../../util/input.js';
2
2
  import { hasDependency } from '../../util/plugin.js';
3
+ import { vueAutoImportCompiler } from '../_vue/auto-import.js';
3
4
  import { findWebpackDependenciesFromConfig } from '../webpack/index.js';
4
- import compiler from './compiler.js';
5
5
  const title = 'Vue';
6
6
  const enablers = ['vue'];
7
7
  const isEnabled = ({ dependencies }) => hasDependency(dependencies, enablers);
@@ -28,9 +28,11 @@ const resolveConfig = async (config, options) => {
28
28
  }
29
29
  return inputs;
30
30
  };
31
+ const sfcCompilers = ['vue', 'nuxt', 'unplugin-vue', '@vitejs/plugin-vue'];
31
32
  const registerCompilers = ({ registerCompiler, hasDependency }) => {
32
- if (hasDependency('vue') || hasDependency('nuxt'))
33
- registerCompiler({ extension: '.vue', compiler });
33
+ if (sfcCompilers.some(hasDependency)) {
34
+ registerCompiler({ extension: '.vue', compiler: vueAutoImportCompiler });
35
+ }
34
36
  };
35
37
  const plugin = {
36
38
  title,
@@ -1,6 +1,3 @@
1
- import { IMPORT_FLAGS } from '../../../constants.js';
2
- import { _syncGlob } from '../../../util/glob.js';
3
- import { dirname, join, toRelative } from '../../../util/path.js';
4
1
  import { getStringValue, isStringLiteral } from '../../../typescript/ast-nodes.js';
5
2
  export function createRequireContextVisitor(ctx) {
6
3
  return {
@@ -17,16 +14,8 @@ export function createRequireContextVisitor(ctx) {
17
14
  const arg1 = node.arguments[1];
18
15
  const recursive = !(arg1?.type === 'Literal' && 'value' in arg1 && arg1.value === false);
19
16
  const regexArg = node.arguments[2];
20
- const dir = dirname(ctx.filePath);
21
- const baseDir = join(dir, dirArg);
22
- const pattern = recursive ? '**/*' : '*';
23
- const files = _syncGlob({ patterns: [pattern], cwd: baseDir });
24
- const regex = regexArg && 'regex' in regexArg ? new RegExp(regexArg.regex.pattern, regexArg.regex.flags) : undefined;
25
- for (const f of files) {
26
- if (!regex || regex.test(`./${toRelative(f, baseDir)}`)) {
27
- ctx.addImport(f, node.arguments[0].start, IMPORT_FLAGS.ENTRY);
28
- }
29
- }
17
+ const filter = regexArg && 'regex' in regexArg ? new RegExp(regexArg.regex.pattern, regexArg.regex.flags) : undefined;
18
+ ctx.addImportGlob([recursive ? '**/*' : '*'], { base: dirArg, filter });
30
19
  },
31
20
  };
32
21
  }
@@ -1,13 +1,13 @@
1
1
  import { isFile } from '../../util/fs.js';
2
- import { toEntry } from '../../util/input.js';
2
+ import { toDependency, toEntry } from '../../util/input.js';
3
3
  const title = 'Yarn';
4
- const enablers = 'This plugin is enabled when a `yarn.lock` file is found in the root folder.';
5
- const isEnabled = ({ cwd }) => isFile(cwd, 'yarn.lock');
4
+ const enablers = 'This plugin is enabled when a `yarn.lock` file is found in the root directory, or when `yarn@` is specified in the `packageManager` field of `package.json`.';
5
+ const isEnabled = async ({ cwd, manifest }) => manifest.packageManager?.startsWith('yarn@') || isFile(cwd, 'yarn.lock');
6
6
  const isRootOnly = true;
7
7
  const config = ['.yarnrc.yml'];
8
8
  const entry = ['yarn.config.cjs'];
9
9
  const resolveConfig = config => {
10
- const inputs = entry.map(id => toEntry(id));
10
+ const inputs = entry.map(toEntry);
11
11
  if (Array.isArray(config.plugins)) {
12
12
  for (const plugin of config.plugins) {
13
13
  if (typeof plugin === 'string')
@@ -19,6 +19,16 @@ const resolveConfig = config => {
19
19
  if (config.yarnPath) {
20
20
  inputs.push(toEntry(config.yarnPath));
21
21
  }
22
+ if (config.packageExtensions) {
23
+ for (const extension of Object.values(config.packageExtensions)) {
24
+ if (extension.peerDependencies) {
25
+ for (const dep of Object.keys(extension.peerDependencies)) {
26
+ const optional = extension.peerDependenciesMeta?.[dep]?.optional === true;
27
+ inputs.push(optional ? toDependency(dep, { optional: true }) : toDependency(dep));
28
+ }
29
+ }
30
+ }
31
+ }
22
32
  return inputs;
23
33
  };
24
34
  const plugin = {
@@ -0,0 +1,8 @@
1
+ import type { PackageExtensions } from '../../types/package-json.ts';
2
+ export type YarnConfig = {
3
+ plugins?: Array<string | {
4
+ path?: string;
5
+ }>;
6
+ yarnPath?: string;
7
+ packageExtensions?: PackageExtensions;
8
+ };
@@ -0,0 +1 @@
1
+ export {};