knip 6.27.0 → 6.28.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 (61) hide show
  1. package/dist/ConfigurationChief.d.ts +6 -0
  2. package/dist/DependencyDeputy.js +1 -1
  3. package/dist/WorkspaceWorker.js +9 -0
  4. package/dist/compilers/index.d.ts +10 -0
  5. package/dist/compilers/mdx.d.ts +2 -1
  6. package/dist/constants.js +14 -0
  7. package/dist/graph/analyze.js +6 -4
  8. package/dist/graph-explorer/explorer.d.ts +1 -1
  9. package/dist/graph-explorer/operations/is-referenced.d.ts +1 -1
  10. package/dist/graph-explorer/operations/is-referenced.js +47 -33
  11. package/dist/manifest/index.d.ts +2 -1
  12. package/dist/plugins/angular/index.js +3 -0
  13. package/dist/plugins/babel/helpers.d.ts +9 -7
  14. package/dist/plugins/convex/index.js +11 -2
  15. package/dist/plugins/convex/types.d.ts +3 -0
  16. package/dist/plugins/convex/types.js +1 -0
  17. package/dist/plugins/github-actions/index.js +5 -2
  18. package/dist/plugins/index.d.ts +1 -0
  19. package/dist/plugins/index.js +2 -0
  20. package/dist/plugins/markdownlint/index.js +26 -5
  21. package/dist/plugins/markdownlint/types.d.ts +6 -0
  22. package/dist/plugins/nitro/index.js +3 -1
  23. package/dist/plugins/nuxt/index.js +19 -8
  24. package/dist/plugins/openclaw/index.d.ts +3 -0
  25. package/dist/plugins/openclaw/index.js +52 -0
  26. package/dist/plugins/openclaw/types.d.ts +25 -0
  27. package/dist/plugins/openclaw/types.js +1 -0
  28. package/dist/plugins/prettier/index.js +1 -1
  29. package/dist/plugins/tailwind/index.js +8 -0
  30. package/dist/plugins/tsdown/index.js +43 -0
  31. package/dist/plugins/typescript/index.js +1 -1
  32. package/dist/reporters/util/configuration-hints.js +3 -1
  33. package/dist/schema/configuration.d.ts +15 -0
  34. package/dist/schema/plugins.d.ts +5 -0
  35. package/dist/schema/plugins.js +1 -0
  36. package/dist/types/PluginNames.d.ts +2 -2
  37. package/dist/types/PluginNames.js +1 -0
  38. package/dist/types/issues.d.ts +1 -1
  39. package/dist/typescript/ast-nodes.d.ts +3 -1
  40. package/dist/typescript/comments.d.ts +1 -1
  41. package/dist/typescript/comments.js +71 -5
  42. package/dist/typescript/get-imports-and-exports.d.ts +3 -1
  43. package/dist/typescript/get-imports-and-exports.js +1 -1
  44. package/dist/typescript/visitors/walk.d.ts +1 -0
  45. package/dist/typescript/visitors/walk.js +14 -1
  46. package/dist/util/codeowners.js +1 -1
  47. package/dist/util/create-options.d.ts +10 -0
  48. package/dist/util/glob-cache.d.ts +7 -1
  49. package/dist/util/glob-cache.js +52 -29
  50. package/dist/util/glob-core.d.ts +2 -0
  51. package/dist/util/glob-core.js +46 -6
  52. package/dist/util/glob.d.ts +6 -3
  53. package/dist/util/glob.js +23 -9
  54. package/dist/util/loader.d.ts +3 -1
  55. package/dist/util/parse-and-convert-gitignores.d.ts +2 -2
  56. package/dist/util/parse-and-convert-gitignores.js +4 -4
  57. package/dist/util/reporter.js +4 -3
  58. package/dist/version.d.ts +1 -1
  59. package/dist/version.js +1 -1
  60. package/package.json +11 -11
  61. package/schema.json +4 -0
@@ -0,0 +1,52 @@
1
+ import { collectPropertyValues } from '../../typescript/ast-helpers.js';
2
+ import { _parseFile } from '../../typescript/ast-nodes.js';
3
+ import { toProductionEntry } from '../../util/input.js';
4
+ const title = 'OpenClaw';
5
+ const enablers = 'This plugin is enabled when `package.json#openclaw` is present.';
6
+ const isEnabled = ({ manifest }) => Object.hasOwn(manifest, 'openclaw');
7
+ const config = ['package.json', 'openclaw.plugin.json'];
8
+ const isLoadConfig = ({ configFileName }) => configFileName === 'package.json';
9
+ const toEntries = (value) => (Array.isArray(value) ? value : [value]).flatMap(entry => typeof entry === 'string' ? [toProductionEntry(entry)] : []);
10
+ const toHookEntries = (value) => (Array.isArray(value) ? value : [value]).flatMap(entry => {
11
+ if (typeof entry !== 'string')
12
+ return [];
13
+ const dir = entry.trim().replace(/\/+$/, '');
14
+ return dir ? [toProductionEntry(`${dir}/{handler,index}.{ts,js}`)] : [];
15
+ });
16
+ const resolveConfig = (localConfig, options) => {
17
+ if (!localConfig)
18
+ return [];
19
+ const assetScripts = [localConfig.assetScripts?.build, localConfig.assetScripts?.copy].filter((script) => typeof script === 'string');
20
+ const assetScriptInputs = options
21
+ .getInputsFromScripts(assetScripts)
22
+ .map(input => input.type === 'entry' || input.type === 'deferResolveEntry' ? { ...input, production: true } : input);
23
+ return [
24
+ ...toEntries(localConfig.extensions),
25
+ ...toEntries(localConfig.runtimeExtensions),
26
+ ...toEntries(localConfig.setupEntry),
27
+ ...toEntries(localConfig.runtimeSetupEntry),
28
+ ...toEntries(localConfig.providerCatalogEntry),
29
+ ...toEntries(localConfig.channel?.configuredState?.specifier),
30
+ ...toEntries(localConfig.channel?.persistedAuthState?.specifier),
31
+ ...toHookEntries(localConfig.hooks),
32
+ ...toEntries(localConfig.build?.staticAssets?.map(asset => asset.source)),
33
+ ...assetScriptInputs,
34
+ ];
35
+ };
36
+ const resolveFromAST = (_, options) => {
37
+ if (options.configFileName !== 'openclaw.plugin.json')
38
+ return [];
39
+ const sourceText = options.readFile(options.configFilePath).replace(/^\uFEFF/, '');
40
+ const { program } = _parseFile(`${options.configFilePath}.ts`, `(${sourceText}\n)`);
41
+ return [...collectPropertyValues(program, 'providerCatalogEntry')].map(entry => toProductionEntry(entry));
42
+ };
43
+ const plugin = {
44
+ title,
45
+ enablers,
46
+ isEnabled,
47
+ config,
48
+ isLoadConfig,
49
+ resolveConfig,
50
+ resolveFromAST,
51
+ };
52
+ export default plugin;
@@ -0,0 +1,25 @@
1
+ export interface OpenClawManifest {
2
+ assetScripts?: {
3
+ build?: string;
4
+ copy?: string;
5
+ };
6
+ build?: {
7
+ staticAssets?: {
8
+ source?: string;
9
+ }[];
10
+ };
11
+ channel?: {
12
+ configuredState?: {
13
+ specifier?: string;
14
+ };
15
+ persistedAuthState?: {
16
+ specifier?: string;
17
+ };
18
+ };
19
+ extensions?: string | string[];
20
+ hooks?: string[];
21
+ providerCatalogEntry?: string;
22
+ runtimeExtensions?: string | string[];
23
+ setupEntry?: string;
24
+ runtimeSetupEntry?: string;
25
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -33,7 +33,7 @@ const resolveConfig = config => {
33
33
  return Array.from(result);
34
34
  };
35
35
  const args = {
36
- config: true,
36
+ config: ['config'],
37
37
  };
38
38
  const isFilterTransitiveDependencies = true;
39
39
  const plugin = {
@@ -1,3 +1,4 @@
1
+ import { toProductionEntry } from '../../util/input.js';
1
2
  import { hasDependency } from '../../util/plugin.js';
2
3
  import compiler from './compiler.js';
3
4
  const title = 'Tailwind';
@@ -12,11 +13,18 @@ const registerCompilers = ({ registerCompiler, hasDependency }) => {
12
13
  break;
13
14
  }
14
15
  };
16
+ const args = {
17
+ binaries: ['tailwindcss'],
18
+ string: ['input'],
19
+ alias: { input: ['i'] },
20
+ resolveInputs: parsed => (parsed.input ? [toProductionEntry(parsed.input)] : []),
21
+ };
15
22
  const plugin = {
16
23
  title,
17
24
  enablers,
18
25
  isEnabled,
19
26
  entry,
27
+ args,
20
28
  registerCompilers,
21
29
  };
22
30
  export default plugin;
@@ -5,6 +5,8 @@ const title = 'tsdown';
5
5
  const enablers = ['tsdown'];
6
6
  const isEnabled = ({ dependencies }) => hasDependency(dependencies, enablers);
7
7
  const config = ['tsdown.config.{ts,mts,cts,js,mjs,cjs,json}', 'package.json'];
8
+ const sourcemapModes = new Set(['inline', 'hidden']);
9
+ const subcommands = new Set(['create', 'migrate']);
8
10
  const isLoadConfig = ({ configFileName }) => configFileName === 'package.json' || configFileName.endsWith('.json');
9
11
  const normalizeEntry = (entry) => {
10
12
  if (!entry)
@@ -41,6 +43,47 @@ const resolveFromAST = program => [
41
43
  ];
42
44
  const args = {
43
45
  config: true,
46
+ args: args => {
47
+ if (subcommands.has(args[0]))
48
+ return [];
49
+ return args.filter((arg, index) => {
50
+ const previous = args[index - 1];
51
+ if (previous === '--sourcemap' && sourcemapModes.has(arg))
52
+ return false;
53
+ return previous !== '--watch' || arg.startsWith('-');
54
+ });
55
+ },
56
+ boolean: [
57
+ 'attw',
58
+ 'clean',
59
+ 'deps.skip-node-modules-bundle',
60
+ 'deps.skipNodeModulesBundle',
61
+ 'devtools',
62
+ 'dts',
63
+ 'exe',
64
+ 'exports',
65
+ 'fail-on-warn',
66
+ 'failOnWarn',
67
+ 'minify',
68
+ 'publint',
69
+ 'report',
70
+ 'shims',
71
+ 'silent',
72
+ 'sourcemap',
73
+ 'treeshake',
74
+ 'unbundle',
75
+ 'unused',
76
+ 'write',
77
+ ],
78
+ resolveInputs: parsed => [
79
+ ...[...parsed._, ...normalizeEntry(parsed.entry)].map(id => toProductionEntry(id, { allowIncludeExports: true })),
80
+ ...[parsed.deps?.neverBundle, parsed.deps?.['never-bundle'], parsed.external]
81
+ .flat()
82
+ .filter(id => typeof id === 'string')
83
+ .map(id => toDependency(id, { optional: true })),
84
+ ...(parsed.publint ? [toDependency('publint', { optional: true })] : []),
85
+ ...(parsed.attw ? [toDependency('@arethetypeswrong/core', { optional: true })] : []),
86
+ ],
44
87
  };
45
88
  const plugin = {
46
89
  title,
@@ -3,7 +3,7 @@ import { toConfig, toDeferResolve, toProductionDependency } from '../../util/inp
3
3
  import { join } from '../../util/path.js';
4
4
  import { hasDependency } from '../../util/plugin.js';
5
5
  const title = 'TypeScript';
6
- const enablers = ['typescript', '@typescript/native-preview'];
6
+ const enablers = ['typescript', '@typescript/native', '@typescript/native-preview'];
7
7
  const isEnabled = ({ dependencies }) => hasDependency(dependencies, enablers);
8
8
  const config = ['tsconfig.json'];
9
9
  const resolveConfig = async (localConfig, options) => {
@@ -40,6 +40,7 @@ const addWorkspace = (options) => options.configFilePath
40
40
  : `Create ${bright('knip.json')} configuration file with ${bright(`workspaces["${options.workspaceName}"]`)} object (${options.size} unused files)`;
41
41
  const packageEntry = () => 'Package entry file not found';
42
42
  const extensionUnregistered = () => `Extension in ${bright('project')} not registered as a compiler`;
43
+ const extensionExcluded = () => `Compiled extension excluded by ${bright('project')} (imports not followed)`;
43
44
  export const hintPrinters = new Map([
44
45
  ['ignore', { print: unused }],
45
46
  ['ignoreFiles', { print: unused }],
@@ -51,6 +52,7 @@ export const hintPrinters = new Map([
51
52
  ['entry-empty', { print: empty }],
52
53
  ['project-empty', { print: empty }],
53
54
  ['project-extension-unregistered', { print: extensionUnregistered }],
55
+ ['project-extension-excluded', { print: extensionExcluded }],
54
56
  ['entry-redundant', { print: remove }],
55
57
  ['project-redundant', { print: remove }],
56
58
  ['top-level-unconfigured', { print: add }],
@@ -69,7 +71,7 @@ const hintTypesOrder = [
69
71
  ['ignoreBinaries'],
70
72
  ['ignoreUnresolved'],
71
73
  ['entry-empty', 'project-empty', 'entry-redundant', 'project-redundant'],
72
- ['project-extension-unregistered'],
74
+ ['project-extension-unregistered', 'project-extension-excluded'],
73
75
  ['package-entry'],
74
76
  ];
75
77
  const UNCONFIGURED_MIN_FILES = 20;
@@ -416,6 +416,11 @@ export declare const workspaceConfigurationSchema: z.ZodMiniObject<{
416
416
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
417
417
  project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
418
418
  }, z.core.$strip>]>>;
419
+ openclaw: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
420
+ config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
421
+ entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
422
+ project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
423
+ }, z.core.$strip>]>>;
419
424
  orval: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
420
425
  config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
421
426
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
@@ -1317,6 +1322,11 @@ export declare const knipConfigurationSchema: z.ZodMiniObject<{
1317
1322
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
1318
1323
  project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
1319
1324
  }, z.core.$strip>]>>;
1325
+ openclaw: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
1326
+ config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
1327
+ entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
1328
+ project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
1329
+ }, z.core.$strip>]>>;
1320
1330
  orval: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
1321
1331
  config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
1322
1332
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
@@ -2236,6 +2246,11 @@ export declare const knipConfigurationSchema: z.ZodMiniObject<{
2236
2246
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
2237
2247
  project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
2238
2248
  }, z.core.$strip>]>>;
2249
+ openclaw: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
2250
+ config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
2251
+ entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
2252
+ project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
2253
+ }, z.core.$strip>]>>;
2239
2254
  orval: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
2240
2255
  config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
2241
2256
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
@@ -421,6 +421,11 @@ export declare const pluginsSchema: z.ZodMiniObject<{
421
421
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
422
422
  project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
423
423
  }, z.core.$strip>]>;
424
+ openclaw: z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
425
+ config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
426
+ entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
427
+ project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
428
+ }, z.core.$strip>]>;
424
429
  orval: z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
425
430
  config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
426
431
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
@@ -93,6 +93,7 @@ export const pluginsSchema = z.object({
93
93
  nyc: pluginSchema,
94
94
  oclif: pluginSchema,
95
95
  'openapi-ts': pluginSchema,
96
+ openclaw: pluginSchema,
96
97
  orval: pluginSchema,
97
98
  oxfmt: pluginSchema,
98
99
  oxlint: pluginSchema,
@@ -1,2 +1,2 @@
1
- export type PluginName = 'angular' | 'astro' | 'astro-db' | 'astro-markdoc' | 'astro-og-canvas' | 'ava' | 'babel' | 'biome' | 'bumpp' | 'bun' | 'c8' | 'capacitor' | 'catalyst' | 'changelogen' | 'changelogithub' | 'changesets' | 'commitizen' | 'commitlint' | 'convex' | 'create-typescript-app' | 'cspell' | 'cucumber' | 'cypress' | 'danger' | 'dependency-cruiser' | 'docusaurus' | 'dotenv' | 'drizzle' | 'electron-vite' | 'eleventy' | 'esbuild' | 'eslint' | 'eve' | 'execa' | 'expo' | 'expressive-code' | 'fast' | 'fumadocs' | 'gatsby' | 'github-action' | 'github-actions' | 'glob' | 'graphql-codegen' | 'hardhat' | 'husky' | 'i18next-parser' | 'jest' | 'karma' | 'knex' | 'ladle' | 'laravel-vite-plugin' | 'lefthook' | 'lint-staged' | 'linthtml' | 'lit' | 'lockfile-lint' | 'lost-pixel' | 'lunaria' | 'markdownlint' | 'mdx' | 'mdxlint' | 'metro' | 'mocha' | 'moonrepo' | 'msw' | 'nano-spawn' | 'nano-staged' | 'nest' | 'netlify' | 'next' | 'next-intl' | 'next-mdx' | 'nitro' | 'node' | 'node-modules-inspector' | 'nodemon' | 'npm-package-json-lint' | 'nuxt' | 'nuxtjs-i18n' | 'nx' | 'nyc' | 'oclif' | 'openapi-ts' | 'orval' | 'oxfmt' | 'oxlint' | 'panda-css' | 'parcel' | 'payload' | 'pino' | 'playwright' | 'playwright-ct' | 'playwright-test' | 'plop' | 'pm2' | 'pnpm' | 'postcss' | 'preconstruct' | 'prettier' | 'prisma' | 'quasar' | 'qwik' | 'raycast' | 'react-cosmos' | 'react-email' | 'react-native' | 'react-router' | 'relay' | 'release-it' | 'remark' | 'remix' | 'rolldown' | 'rollup' | 'rsbuild' | 'rslib' | 'rspack' | 'rstest' | 'sanity' | 'semantic-release' | 'sentry' | 'serverless-framework' | 'simple-git-hooks' | 'size-limit' | 'sst' | 'starlight' | 'stencil' | 'storybook' | 'stryker' | 'stylelint' | 'svelte' | 'sveltejs-package' | 'sveltekit' | 'svgo' | 'svgr' | 'swc' | 'syncpack' | 'tailwind' | 'tanstack-router' | 'taskfile' | 'tauri' | 'temporal' | 'travis' | 'ts-node' | 'tsdown' | 'tsup' | 'tsx' | 'typedoc' | 'typescript' | 'unbuild' | 'unocss' | 'unplugin-auto-import' | 'unplugin-icons' | 'unplugin-vue-components' | 'unplugin-vue-i18n' | 'unplugin-vue-markdown' | 'unplugin-vue-router' | 'vercel' | 'vercel-og' | 'vike' | 'vite' | 'vite-plugin-pages' | 'vite-plugin-pwa' | 'vite-plugin-vue-layouts-next' | 'vite-plus' | 'vite-pwa-assets-generator' | 'vitepress' | 'vitest' | 'vue' | 'webdriver-io' | 'webpack' | 'wireit' | 'wrangler' | 'wxt' | 'xo' | 'yarn' | 'yorkie' | 'zx';
2
- export declare const pluginNames: readonly ['angular', 'astro', 'astro-db', 'astro-markdoc', 'astro-og-canvas', 'ava', 'babel', 'biome', 'bumpp', 'bun', 'c8', 'capacitor', 'catalyst', 'changelogen', 'changelogithub', 'changesets', 'commitizen', 'commitlint', 'convex', 'create-typescript-app', 'cspell', 'cucumber', 'cypress', 'danger', 'dependency-cruiser', 'docusaurus', 'dotenv', 'drizzle', 'electron-vite', 'eleventy', 'esbuild', 'eslint', 'eve', 'execa', 'expo', 'expressive-code', 'fast', 'fumadocs', 'gatsby', 'github-action', 'github-actions', 'glob', 'graphql-codegen', 'hardhat', 'husky', 'i18next-parser', 'jest', 'karma', 'knex', 'ladle', 'laravel-vite-plugin', 'lefthook', 'lint-staged', 'linthtml', 'lit', 'lockfile-lint', 'lost-pixel', 'lunaria', 'markdownlint', 'mdx', 'mdxlint', 'metro', 'mocha', 'moonrepo', 'msw', 'nano-spawn', 'nano-staged', 'nest', 'netlify', 'next', 'next-intl', 'next-mdx', 'nitro', 'node', 'node-modules-inspector', 'nodemon', 'npm-package-json-lint', 'nuxt', 'nuxtjs-i18n', 'nx', 'nyc', 'oclif', 'openapi-ts', 'orval', 'oxfmt', 'oxlint', 'panda-css', 'parcel', 'payload', 'pino', 'playwright', 'playwright-ct', 'playwright-test', 'plop', 'pm2', 'pnpm', 'postcss', 'preconstruct', 'prettier', 'prisma', 'quasar', 'qwik', 'raycast', 'react-cosmos', 'react-email', 'react-native', 'react-router', 'relay', 'release-it', 'remark', 'remix', 'rolldown', 'rollup', 'rsbuild', 'rslib', 'rspack', 'rstest', 'sanity', 'semantic-release', 'sentry', 'serverless-framework', 'simple-git-hooks', 'size-limit', 'sst', 'starlight', 'stencil', 'storybook', 'stryker', 'stylelint', 'svelte', 'sveltejs-package', 'sveltekit', 'svgo', 'svgr', 'swc', 'syncpack', 'tailwind', 'tanstack-router', 'taskfile', 'tauri', 'temporal', 'travis', 'ts-node', 'tsdown', 'tsup', 'tsx', 'typedoc', 'typescript', 'unbuild', 'unocss', 'unplugin-auto-import', 'unplugin-icons', 'unplugin-vue-components', 'unplugin-vue-i18n', 'unplugin-vue-markdown', 'unplugin-vue-router', 'vercel', 'vercel-og', 'vike', 'vite', 'vite-plugin-pages', 'vite-plugin-pwa', 'vite-plugin-vue-layouts-next', 'vite-plus', 'vite-pwa-assets-generator', 'vitepress', 'vitest', 'vue', 'webdriver-io', 'webpack', 'wireit', 'wrangler', 'wxt', 'xo', 'yarn', 'yorkie', 'zx'];
1
+ export type PluginName = 'angular' | 'astro' | 'astro-db' | 'astro-markdoc' | 'astro-og-canvas' | 'ava' | 'babel' | 'biome' | 'bumpp' | 'bun' | 'c8' | 'capacitor' | 'catalyst' | 'changelogen' | 'changelogithub' | 'changesets' | 'commitizen' | 'commitlint' | 'convex' | 'create-typescript-app' | 'cspell' | 'cucumber' | 'cypress' | 'danger' | 'dependency-cruiser' | 'docusaurus' | 'dotenv' | 'drizzle' | 'electron-vite' | 'eleventy' | 'esbuild' | 'eslint' | 'eve' | 'execa' | 'expo' | 'expressive-code' | 'fast' | 'fumadocs' | 'gatsby' | 'github-action' | 'github-actions' | 'glob' | 'graphql-codegen' | 'hardhat' | 'husky' | 'i18next-parser' | 'jest' | 'karma' | 'knex' | 'ladle' | 'laravel-vite-plugin' | 'lefthook' | 'lint-staged' | 'linthtml' | 'lit' | 'lockfile-lint' | 'lost-pixel' | 'lunaria' | 'markdownlint' | 'mdx' | 'mdxlint' | 'metro' | 'mocha' | 'moonrepo' | 'msw' | 'nano-spawn' | 'nano-staged' | 'nest' | 'netlify' | 'next' | 'next-intl' | 'next-mdx' | 'nitro' | 'node' | 'node-modules-inspector' | 'nodemon' | 'npm-package-json-lint' | 'nuxt' | 'nuxtjs-i18n' | 'nx' | 'nyc' | 'oclif' | 'openapi-ts' | 'openclaw' | 'orval' | 'oxfmt' | 'oxlint' | 'panda-css' | 'parcel' | 'payload' | 'pino' | 'playwright' | 'playwright-ct' | 'playwright-test' | 'plop' | 'pm2' | 'pnpm' | 'postcss' | 'preconstruct' | 'prettier' | 'prisma' | 'quasar' | 'qwik' | 'raycast' | 'react-cosmos' | 'react-email' | 'react-native' | 'react-router' | 'relay' | 'release-it' | 'remark' | 'remix' | 'rolldown' | 'rollup' | 'rsbuild' | 'rslib' | 'rspack' | 'rstest' | 'sanity' | 'semantic-release' | 'sentry' | 'serverless-framework' | 'simple-git-hooks' | 'size-limit' | 'sst' | 'starlight' | 'stencil' | 'storybook' | 'stryker' | 'stylelint' | 'svelte' | 'sveltejs-package' | 'sveltekit' | 'svgo' | 'svgr' | 'swc' | 'syncpack' | 'tailwind' | 'tanstack-router' | 'taskfile' | 'tauri' | 'temporal' | 'travis' | 'ts-node' | 'tsdown' | 'tsup' | 'tsx' | 'typedoc' | 'typescript' | 'unbuild' | 'unocss' | 'unplugin-auto-import' | 'unplugin-icons' | 'unplugin-vue-components' | 'unplugin-vue-i18n' | 'unplugin-vue-markdown' | 'unplugin-vue-router' | 'vercel' | 'vercel-og' | 'vike' | 'vite' | 'vite-plugin-pages' | 'vite-plugin-pwa' | 'vite-plugin-vue-layouts-next' | 'vite-plus' | 'vite-pwa-assets-generator' | 'vitepress' | 'vitest' | 'vue' | 'webdriver-io' | 'webpack' | 'wireit' | 'wrangler' | 'wxt' | 'xo' | 'yarn' | 'yorkie' | 'zx';
2
+ export declare const pluginNames: readonly ['angular', 'astro', 'astro-db', 'astro-markdoc', 'astro-og-canvas', 'ava', 'babel', 'biome', 'bumpp', 'bun', 'c8', 'capacitor', 'catalyst', 'changelogen', 'changelogithub', 'changesets', 'commitizen', 'commitlint', 'convex', 'create-typescript-app', 'cspell', 'cucumber', 'cypress', 'danger', 'dependency-cruiser', 'docusaurus', 'dotenv', 'drizzle', 'electron-vite', 'eleventy', 'esbuild', 'eslint', 'eve', 'execa', 'expo', 'expressive-code', 'fast', 'fumadocs', 'gatsby', 'github-action', 'github-actions', 'glob', 'graphql-codegen', 'hardhat', 'husky', 'i18next-parser', 'jest', 'karma', 'knex', 'ladle', 'laravel-vite-plugin', 'lefthook', 'lint-staged', 'linthtml', 'lit', 'lockfile-lint', 'lost-pixel', 'lunaria', 'markdownlint', 'mdx', 'mdxlint', 'metro', 'mocha', 'moonrepo', 'msw', 'nano-spawn', 'nano-staged', 'nest', 'netlify', 'next', 'next-intl', 'next-mdx', 'nitro', 'node', 'node-modules-inspector', 'nodemon', 'npm-package-json-lint', 'nuxt', 'nuxtjs-i18n', 'nx', 'nyc', 'oclif', 'openapi-ts', 'openclaw', 'orval', 'oxfmt', 'oxlint', 'panda-css', 'parcel', 'payload', 'pino', 'playwright', 'playwright-ct', 'playwright-test', 'plop', 'pm2', 'pnpm', 'postcss', 'preconstruct', 'prettier', 'prisma', 'quasar', 'qwik', 'raycast', 'react-cosmos', 'react-email', 'react-native', 'react-router', 'relay', 'release-it', 'remark', 'remix', 'rolldown', 'rollup', 'rsbuild', 'rslib', 'rspack', 'rstest', 'sanity', 'semantic-release', 'sentry', 'serverless-framework', 'simple-git-hooks', 'size-limit', 'sst', 'starlight', 'stencil', 'storybook', 'stryker', 'stylelint', 'svelte', 'sveltejs-package', 'sveltekit', 'svgo', 'svgr', 'swc', 'syncpack', 'tailwind', 'tanstack-router', 'taskfile', 'tauri', 'temporal', 'travis', 'ts-node', 'tsdown', 'tsup', 'tsx', 'typedoc', 'typescript', 'unbuild', 'unocss', 'unplugin-auto-import', 'unplugin-icons', 'unplugin-vue-components', 'unplugin-vue-i18n', 'unplugin-vue-markdown', 'unplugin-vue-router', 'vercel', 'vercel-og', 'vike', 'vite', 'vite-plugin-pages', 'vite-plugin-pwa', 'vite-plugin-vue-layouts-next', 'vite-plus', 'vite-pwa-assets-generator', 'vitepress', 'vitest', 'vue', 'webdriver-io', 'webpack', 'wireit', 'wrangler', 'wxt', 'xo', 'yarn', 'yorkie', 'zx'];
@@ -82,6 +82,7 @@ export const pluginNames = [
82
82
  'nyc',
83
83
  'oclif',
84
84
  'openapi-ts',
85
+ 'openclaw',
85
86
  'orval',
86
87
  'oxfmt',
87
88
  'oxlint',
@@ -75,7 +75,7 @@ export type Preprocessor = (options: ReporterOptions) => ReporterOptions;
75
75
  export type IssueSeverity = 'error' | 'warn' | 'off';
76
76
  export type Rules = Record<IssueType, IssueSeverity>;
77
77
  export type ConfigurationHints = Map<string, ConfigurationHint>;
78
- export type ConfigurationHintType = 'ignore' | 'ignoreFiles' | 'ignoreBinaries' | 'ignoreDependencies' | 'ignoreUnresolved' | 'workspaces' | 'ignoreWorkspaces' | 'entry-redundant' | 'project-redundant' | 'entry-top-level' | 'project-top-level' | 'entry-empty' | 'project-empty' | 'project-extension-unregistered' | 'package-entry' | 'top-level-unconfigured' | 'workspace-unconfigured';
78
+ export type ConfigurationHintType = 'ignore' | 'ignoreFiles' | 'ignoreBinaries' | 'ignoreDependencies' | 'ignoreUnresolved' | 'workspaces' | 'ignoreWorkspaces' | 'entry-redundant' | 'project-redundant' | 'entry-top-level' | 'project-top-level' | 'entry-empty' | 'project-empty' | 'project-extension-unregistered' | 'project-extension-excluded' | 'package-entry' | 'top-level-unconfigured' | 'workspace-unconfigured';
79
79
  export type ConfigurationHint = {
80
80
  type: ConfigurationHintType;
81
81
  identifier: string | RegExp;
@@ -2,7 +2,8 @@ import { type TemplateLiteral, type TSEnumDeclaration, type TSModuleDeclaration
2
2
  import type { GetImportsAndExportsOptions, IgnoreExportsUsedInFile } from '../types/config.ts';
3
3
  import type { SymbolType } from '../types/issues.ts';
4
4
  import type { ExportMember } from '../types/module-graph.ts';
5
- export declare const _parseFile: (filePath: string, sourceText: string) => import("oxc-parser").ParseResult;
5
+ declare const parseFile: (filePath: string, sourceText: string) => import("oxc-parser").ParseResult;
6
+ export declare const _parseFile: typeof parseFile;
6
7
  export declare const isAmbientDeclarationFile: (filePath: string, sourceText: string) => boolean;
7
8
  export type ResolveModule = (specifier: string, containingFile: string) => ResolvedModule | undefined;
8
9
  export interface ResolvedModule {
@@ -25,3 +26,4 @@ export declare const shouldCountRefs: (ignoreExportsUsedInFile: IgnoreExportsUse
25
26
  export declare function extractNamespaceMembers(decl: TSModuleDeclaration, options: GetImportsAndExportsOptions, lineStarts: number[], getJSDocTags: (start: number) => Set<string>, prefix?: string): ExportMember[];
26
27
  export declare const collectAugmentationRefs: (node: TSModuleDeclaration) => string[];
27
28
  export declare function extractEnumMembers(decl: TSEnumDeclaration, options: GetImportsAndExportsOptions, lineStarts: number[], getJSDocTags: (start: number) => Set<string>): ExportMember[];
29
+ export {};
@@ -1,4 +1,4 @@
1
- import type { Comment } from 'oxc-parser';
1
+ import { type Comment } from 'oxc-parser';
2
2
  type CommentImportAdder = (specifier: string, identifier: string | undefined, alias: string | undefined, namespace: string | undefined, pos: number, modifiers: number) => void;
3
3
  export declare const extractImportsFromComments: (comments: readonly Comment[], firstStmtStart: number, addImport: CommentImportAdder) => void;
4
4
  export {};
@@ -1,10 +1,12 @@
1
+ import { parseSync } from 'oxc-parser';
1
2
  import { IMPORT_FLAGS } from '../constants.js';
2
3
  const jsDocImportRe = /import\(\s*['"]([^'"]+)['"]\s*\)(?:\.(\w+))?/g;
3
- const jsDocImportTagRe = /@import\s+(?:\{[^}]*\}|\*\s+as\s+\w+)\s+from\s+['"]([^'"]+)['"]/g;
4
4
  const jsDocTypeTagRe = /@(?:type|typedef|callback|param|arg|argument|property|prop|returns?|yields?|throws?|exception|this|extends|augments|implements|enum|template|satisfies|const|constant|member|var|namespace|module)\b/;
5
5
  const jsxImportSourceRe = /@jsxImportSource\s+(\S+)/;
6
6
  const referenceRe = /\s*<reference\s+(types|path)\s*=\s*"([^"]+)"[^/]*\/>/;
7
7
  const envPragmaRe = /@(vitest|jest)-environment\s+([@\w./-]+)/g;
8
+ const jsDocImportTag = '@import';
9
+ const jsDocParseOptions = { sourceType: 'module' };
8
10
  const resolveEnvironmentPragma = (tool, value) => {
9
11
  if (value === 'node')
10
12
  return undefined;
@@ -19,6 +21,47 @@ const resolveEnvironmentPragma = (tool, value) => {
19
21
  return '@edge-runtime/vm';
20
22
  return value;
21
23
  };
24
+ const isWhitespace = (char) => char === 9 || char === 10 || char === 13 || char === 32;
25
+ const isHorizontalWhitespace = (char) => char === 9 || char === 13 || char === 32;
26
+ const isJsDocTagStart = (text, index) => {
27
+ let pos = text.lastIndexOf('\n', index - 1) + 1;
28
+ while (isWhitespace(text.charCodeAt(pos)))
29
+ pos++;
30
+ if (text.charCodeAt(pos) === 42) {
31
+ pos++;
32
+ while (isWhitespace(text.charCodeAt(pos)))
33
+ pos++;
34
+ }
35
+ return pos === index;
36
+ };
37
+ const getJsDocImportSource = (text, index) => {
38
+ let source = 'import type';
39
+ let pos = index + jsDocImportTag.length;
40
+ while (pos < text.length) {
41
+ const lineEnd = text.indexOf('\n', pos);
42
+ if (lineEnd === -1)
43
+ return source + text.slice(pos);
44
+ source += text.slice(pos, lineEnd);
45
+ let nextLine = lineEnd + 1;
46
+ while (isHorizontalWhitespace(text.charCodeAt(nextLine)))
47
+ nextLine++;
48
+ if (text.charCodeAt(nextLine) === 42) {
49
+ nextLine++;
50
+ while (isHorizontalWhitespace(text.charCodeAt(nextLine)))
51
+ nextLine++;
52
+ }
53
+ if (text.charCodeAt(nextLine) === 64)
54
+ return source;
55
+ source += '\n';
56
+ pos = nextLine;
57
+ }
58
+ return source;
59
+ };
60
+ const parseJsDocImport = (text, index) => {
61
+ const source = getJsDocImportSource(text, index);
62
+ const imported = parseSync('jsdoc.ts', source, jsDocParseOptions).module.staticImports[0];
63
+ return imported?.moduleRequest.value ? imported : undefined;
64
+ };
22
65
  const isInJsDocTypeExpression = (text, index) => {
23
66
  let depth = 0;
24
67
  for (let pos = index - 1; pos >= 0; pos--) {
@@ -39,6 +82,24 @@ const isInJsDocTypeExpression = (text, index) => {
39
82
  }
40
83
  return false;
41
84
  };
85
+ const addJsDocImport = (imported, pos, addImport) => {
86
+ const specifier = imported.moduleRequest.value;
87
+ if (imported.entries.length === 0) {
88
+ addImport(specifier, undefined, undefined, undefined, pos, IMPORT_FLAGS.TYPE_ONLY);
89
+ return;
90
+ }
91
+ for (const entry of imported.entries) {
92
+ if (entry.importName.kind === 'NamespaceObject') {
93
+ addImport(specifier, undefined, undefined, undefined, pos, IMPORT_FLAGS.TYPE_ONLY | IMPORT_FLAGS.OPAQUE);
94
+ }
95
+ else {
96
+ const localName = entry.localName.value;
97
+ const identifier = entry.importName.kind === 'Default' ? 'default' : entry.importName.name;
98
+ const alias = localName === identifier ? undefined : localName;
99
+ addImport(specifier, identifier, alias, undefined, pos, IMPORT_FLAGS.TYPE_ONLY);
100
+ }
101
+ }
102
+ };
42
103
  export const extractImportsFromComments = (comments, firstStmtStart, addImport) => {
43
104
  for (const comment of comments) {
44
105
  const text = comment.value;
@@ -52,10 +113,15 @@ export const extractImportsFromComments = (comments, firstStmtStart, addImport)
52
113
  const member = results[2];
53
114
  addImport(specifier, member, undefined, undefined, comment.start + results.index, IMPORT_FLAGS.TYPE_ONLY);
54
115
  }
55
- jsDocImportTagRe.lastIndex = 0;
56
- while ((results = jsDocImportTagRe.exec(text)) !== null) {
57
- const specifier = results[1];
58
- addImport(specifier, undefined, undefined, undefined, comment.start + results.index, IMPORT_FLAGS.TYPE_ONLY);
116
+ let index = text.indexOf(jsDocImportTag);
117
+ while (index !== -1) {
118
+ const next = index + jsDocImportTag.length;
119
+ if (isJsDocTagStart(text, index) && isWhitespace(text.charCodeAt(next))) {
120
+ const imported = parseJsDocImport(text, index);
121
+ if (imported)
122
+ addJsDocImport(imported, comment.start + index, addImport);
123
+ }
124
+ index = text.indexOf(jsDocImportTag, next);
59
125
  }
60
126
  }
61
127
  const jsxMatch = text.match(jsxImportSourceRe);
@@ -2,4 +2,6 @@ import type { ParseResult, Visitor } from 'oxc-parser';
2
2
  import type { GetImportsAndExportsOptions, IgnoreExportsUsedInFile, PluginVisitorContext } from '../types/config.ts';
3
3
  import type { FileNode } from '../types/module-graph.ts';
4
4
  import { type ResolveModule } from './ast-nodes.ts';
5
- export declare const _getImportsAndExports: (filePath: string, sourceText: string, resolveModule: ResolveModule, options: GetImportsAndExportsOptions, ignoreExportsUsedInFile: IgnoreExportsUsedInFile, skipExportsForFile: boolean, visitor: Visitor, pluginCtx: PluginVisitorContext | undefined, cachedParseResult?: ParseResult) => FileNode;
5
+ declare const getImportsAndExports: (filePath: string, sourceText: string, resolveModule: ResolveModule, options: GetImportsAndExportsOptions, ignoreExportsUsedInFile: IgnoreExportsUsedInFile, skipExportsForFile: boolean, visitor: Visitor, pluginCtx: PluginVisitorContext | undefined, cachedParseResult?: ParseResult) => FileNode;
6
+ export declare const _getImportsAndExports: typeof getImportsAndExports;
7
+ export {};
@@ -317,7 +317,7 @@ const getImportsAndExports = (filePath, sourceText, resolveModule, options, igno
317
317
  extractImportsFromComments(result.comments, firstStmtStart, addImport);
318
318
  for (const [id, item] of exports) {
319
319
  item.referencedIn = referencedInExport.get(id);
320
- if (localRefs && shouldCountRefs(ignoreExportsUsedInFile, item.type) && (localRefs.has(id) || item.isReExport)) {
320
+ if (localRefs && shouldCountRefs(ignoreExportsUsedInFile, item.type) && localRefs.has(id)) {
321
321
  item.hasRefsInFile = true;
322
322
  }
323
323
  }
@@ -60,6 +60,7 @@ export interface WalkState extends WalkContext {
60
60
  currentVarDeclStart: number;
61
61
  nsRanges: [number, number][];
62
62
  memberRefsInFile: string[];
63
+ importedRefs: Set<string> | undefined;
63
64
  scopeDepth: number;
64
65
  scopeStarts: number[];
65
66
  scopeEnds: number[];
@@ -155,7 +155,11 @@ export const isShadowed = (name, pos) => {
155
155
  return false;
156
156
  };
157
157
  const _addLocalRef = (name, pos) => {
158
- if (!state.localImportMap.has(name) && !isShadowed(name, pos))
158
+ if (isShadowed(name, pos))
159
+ return;
160
+ if (state.localImportMap.has(name))
161
+ (state.importedRefs ??= new Set()).add(name);
162
+ else
159
163
  state.localRefs.add(name);
160
164
  };
161
165
  const _addShadowRange = (name, range) => {
@@ -731,6 +735,7 @@ function walkAST(program, sourceText, filePath, hasModuleSyntax, ctx) {
731
735
  currentVarDeclStart: -1,
732
736
  nsRanges: [],
733
737
  memberRefsInFile: [],
738
+ importedRefs: undefined,
734
739
  scopeDepth: 0,
735
740
  scopeStarts: [],
736
741
  scopeEnds: [],
@@ -835,6 +840,14 @@ function walkAST(program, sourceText, filePath, hasModuleSyntax, ctx) {
835
840
  }
836
841
  }
837
842
  }
843
+ if (state.localRefs && state.importedRefs) {
844
+ for (const name of state.importedRefs) {
845
+ const exportNames = state.localToExports.get(name);
846
+ if (exportNames)
847
+ for (const exportName of exportNames)
848
+ state.localRefs.add(exportName);
849
+ }
850
+ }
838
851
  const localRefs = state.localRefs;
839
852
  state = undefined;
840
853
  return localRefs;
@@ -9,7 +9,7 @@ export function parseCodeowners(content) {
9
9
  .map(rule => {
10
10
  const [path, ...owners] = rule.split(/\s+/);
11
11
  const { pattern } = convertGitignoreToPicomatchIgnorePatterns(path);
12
- return { owners, match: picomatch(expandIgnorePatterns([pattern])) };
12
+ return { owners, match: picomatch(expandIgnorePatterns([pattern], true)) };
13
13
  });
14
14
  return (filePath) => {
15
15
  for (const matcher of [...matchers].reverse()) {
@@ -460,6 +460,11 @@ export declare const createOptions: (options: CreateOptions) => Promise<{
460
460
  entry?: string | string[] | undefined;
461
461
  project?: string | string[] | undefined;
462
462
  } | undefined;
463
+ openclaw?: string | boolean | string[] | {
464
+ config?: string | string[] | undefined;
465
+ entry?: string | string[] | undefined;
466
+ project?: string | string[] | undefined;
467
+ } | undefined;
463
468
  orval?: string | boolean | string[] | {
464
469
  config?: string | string[] | undefined;
465
470
  entry?: string | string[] | undefined;
@@ -1373,6 +1378,11 @@ export declare const createOptions: (options: CreateOptions) => Promise<{
1373
1378
  entry?: string | string[] | undefined;
1374
1379
  project?: string | string[] | undefined;
1375
1380
  } | undefined;
1381
+ openclaw?: string | boolean | string[] | {
1382
+ config?: string | string[] | undefined;
1383
+ entry?: string | string[] | undefined;
1384
+ project?: string | string[] | undefined;
1385
+ } | undefined;
1376
1386
  orval?: string | boolean | string[] | {
1377
1387
  config?: string | string[] | undefined;
1378
1388
  entry?: string | string[] | undefined;
@@ -1,3 +1,4 @@
1
+ import type { FSLike } from 'fdir';
1
2
  export declare const initGlobCache: (cacheLocation: string) => void;
2
3
  export declare const isGlobCacheEnabled: () => boolean;
3
4
  export declare const flushGlobCache: () => void;
@@ -7,6 +8,11 @@ export declare const computeGlobCacheKey: (input: {
7
8
  cwd: string;
8
9
  dir: string;
9
10
  gitignore: boolean;
11
+ gitignoreFingerprint: string;
10
12
  }) => string;
11
13
  export declare const getCachedGlob: (key: string) => string[] | undefined;
12
- export declare const setCachedGlob: (key: string, paths: string[], baseDir: string) => void;
14
+ export declare const createDirTracker: () => {
15
+ dirs: Set<string>;
16
+ fs: Partial<FSLike>;
17
+ };
18
+ export declare const setCachedGlob: (key: string, paths: string[], baseDir: string, dirs?: Iterable<string>) => void;