knip 6.43.0 → 6.44.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 (155) hide show
  1. package/dist/CacheConsultant.d.ts +1 -0
  2. package/dist/CacheConsultant.js +2 -0
  3. package/dist/CatalogCounselor.d.ts +1 -3
  4. package/dist/CatalogCounselor.js +18 -15
  5. package/dist/ConfigurationChief.d.ts +24 -0
  6. package/dist/DependencyDeputy.d.ts +2 -1
  7. package/dist/DependencyDeputy.js +9 -4
  8. package/dist/IssueCollector.js +1 -0
  9. package/dist/ProjectPrincipal.d.ts +3 -2
  10. package/dist/ProjectPrincipal.js +32 -10
  11. package/dist/WorkspaceWorker.d.ts +5 -2
  12. package/dist/WorkspaceWorker.js +20 -7
  13. package/dist/binaries/util.js +2 -1
  14. package/dist/cli.js +6 -1
  15. package/dist/compilers/index.d.ts +5 -0
  16. package/dist/compilers/index.js +1 -1
  17. package/dist/constants.d.ts +1 -0
  18. package/dist/constants.js +1 -0
  19. package/dist/graph/analyze.js +3 -2
  20. package/dist/graph/build.d.ts +2 -0
  21. package/dist/graph/build.js +37 -22
  22. package/dist/graph-explorer/cache.d.ts +2 -1
  23. package/dist/graph-explorer/cache.js +5 -1
  24. package/dist/graph-explorer/explorer.d.ts +3 -5
  25. package/dist/graph-explorer/explorer.js +24 -3
  26. package/dist/plugins/biome/index.js +1 -1
  27. package/dist/plugins/cspell/index.js +1 -0
  28. package/dist/plugins/dependency-cruiser/index.js +2 -2
  29. package/dist/plugins/docusaurus/helpers.js +4 -4
  30. package/dist/plugins/electron-vite/index.js +2 -2
  31. package/dist/plugins/expressive-code/index.d.ts +1 -1
  32. package/dist/plugins/expressive-code/index.js +2 -2
  33. package/dist/plugins/gatsby/index.js +6 -6
  34. package/dist/plugins/gatsby/types.d.ts +1 -1
  35. package/dist/plugins/github-actions/index.js +1 -1
  36. package/dist/plugins/i18next-parser/index.js +2 -2
  37. package/dist/plugins/index.d.ts +5 -1
  38. package/dist/plugins/index.js +8 -0
  39. package/dist/plugins/jasmine/index.js +2 -2
  40. package/dist/plugins/karma/index.js +4 -4
  41. package/dist/plugins/kysely-codegen/index.d.ts +3 -0
  42. package/dist/plugins/kysely-codegen/index.js +20 -0
  43. package/dist/plugins/lefthook/index.js +2 -2
  44. package/dist/plugins/lingui/index.d.ts +3 -0
  45. package/dist/plugins/lingui/index.js +16 -0
  46. package/dist/plugins/lockfile-lint/index.js +2 -2
  47. package/dist/plugins/lost-pixel/index.js +2 -2
  48. package/dist/plugins/lunaria/index.js +2 -2
  49. package/dist/plugins/marko/index.js +5 -6
  50. package/dist/plugins/mastra/index.d.ts +3 -0
  51. package/dist/plugins/mastra/index.js +57 -0
  52. package/dist/plugins/mcp/index.js +1 -1
  53. package/dist/plugins/mise/index.js +0 -3
  54. package/dist/plugins/mocha/index.js +42 -3
  55. package/dist/plugins/mocha/types.d.ts +1 -0
  56. package/dist/plugins/nx/index.js +3 -8
  57. package/dist/plugins/nyc/index.js +1 -1
  58. package/dist/plugins/openapi-ts/index.js +2 -2
  59. package/dist/plugins/oxfmt/index.js +2 -2
  60. package/dist/plugins/playwright/index.js +6 -11
  61. package/dist/plugins/pnpm/index.js +2 -4
  62. package/dist/plugins/purgecss/index.d.ts +3 -0
  63. package/dist/plugins/purgecss/index.js +16 -0
  64. package/dist/plugins/railway/index.js +1 -4
  65. package/dist/plugins/remix/index.js +1 -1
  66. package/dist/plugins/rstest/index.js +2 -2
  67. package/dist/plugins/serverless-framework/index.js +1 -1
  68. package/dist/plugins/storybook/index.js +5 -5
  69. package/dist/plugins/sveltekit/resolveFromAST.js +1 -1
  70. package/dist/plugins/syncpack/index.js +2 -2
  71. package/dist/plugins/tanstack-router/index.js +3 -2
  72. package/dist/plugins/taskfile/index.js +4 -7
  73. package/dist/plugins/textlint/helpers.js +2 -2
  74. package/dist/plugins/typescript/index.js +7 -3
  75. package/dist/plugins/unocss/index.js +2 -2
  76. package/dist/plugins/vite-plugin-pwa/index.js +1 -4
  77. package/dist/plugins/vite-plugin-pwa/resolveFromAST.d.ts +0 -2
  78. package/dist/plugins/vite-plugin-pwa/resolveFromAST.js +2 -2
  79. package/dist/plugins/vite-pwa-assets-generator/index.js +2 -2
  80. package/dist/plugins/vitest/helpers.js +4 -7
  81. package/dist/plugins/vitest/index.js +1 -1
  82. package/dist/plugins/webpack/index.js +4 -2
  83. package/dist/plugins/yarn/index.js +2 -4
  84. package/dist/reporters/codeclimate.d.ts +2 -2
  85. package/dist/reporters/codeclimate.js +2 -4
  86. package/dist/reporters/codeowners.d.ts +2 -2
  87. package/dist/reporters/codeowners.js +9 -9
  88. package/dist/reporters/compact.d.ts +2 -2
  89. package/dist/reporters/compact.js +8 -7
  90. package/dist/reporters/cycles.d.ts +2 -2
  91. package/dist/reporters/cycles.js +7 -6
  92. package/dist/reporters/disclosure.d.ts +2 -2
  93. package/dist/reporters/disclosure.js +6 -4
  94. package/dist/reporters/github-actions.d.ts +2 -2
  95. package/dist/reporters/github-actions.js +7 -5
  96. package/dist/reporters/index.d.ts +10 -10
  97. package/dist/reporters/json.d.ts +2 -2
  98. package/dist/reporters/json.js +2 -4
  99. package/dist/reporters/markdown.d.ts +2 -2
  100. package/dist/reporters/markdown.js +11 -9
  101. package/dist/reporters/sarif.d.ts +2 -2
  102. package/dist/reporters/sarif.js +2 -3
  103. package/dist/reporters/symbols.d.ts +2 -2
  104. package/dist/reporters/symbols.js +6 -4
  105. package/dist/run.d.ts +1 -1
  106. package/dist/run.js +3 -10
  107. package/dist/schema/configuration.d.ts +60 -0
  108. package/dist/schema/plugins.d.ts +20 -0
  109. package/dist/schema/plugins.js +4 -0
  110. package/dist/session/configuration.d.ts +12 -0
  111. package/dist/session/configuration.js +43 -0
  112. package/dist/session/incremental.d.ts +54 -0
  113. package/dist/session/incremental.js +49 -0
  114. package/dist/session/session.d.ts +1 -1
  115. package/dist/session/session.js +62 -27
  116. package/dist/session/watch.d.ts +2 -0
  117. package/dist/session/watch.js +41 -0
  118. package/dist/types/PluginNames.d.ts +2 -2
  119. package/dist/types/PluginNames.js +4 -0
  120. package/dist/types/config.d.ts +1 -0
  121. package/dist/types/issues.d.ts +4 -0
  122. package/dist/types/package-json.d.ts +0 -3
  123. package/dist/typescript/get-imports-and-exports.js +2 -0
  124. package/dist/typescript/visitors/calls.js +15 -11
  125. package/dist/typescript/visitors/imports.d.ts +2 -1
  126. package/dist/typescript/visitors/imports.js +25 -19
  127. package/dist/typescript/visitors/members.js +23 -26
  128. package/dist/typescript/visitors/walk.d.ts +3 -0
  129. package/dist/typescript/visitors/walk.js +42 -2
  130. package/dist/util/cli-arguments.d.ts +2 -1
  131. package/dist/util/cli-arguments.js +3 -0
  132. package/dist/util/create-input-handler.js +1 -1
  133. package/dist/util/create-options.d.ts +42 -1
  134. package/dist/util/create-options.js +13 -2
  135. package/dist/util/file-entry-cache.d.ts +2 -0
  136. package/dist/util/file-entry-cache.js +19 -1
  137. package/dist/util/gitignore-cache.d.ts +1 -0
  138. package/dist/util/gitignore-cache.js +1 -0
  139. package/dist/util/glob-core.js +4 -2
  140. package/dist/util/glob.d.ts +1 -0
  141. package/dist/util/glob.js +6 -0
  142. package/dist/util/input.d.ts +2 -0
  143. package/dist/util/loader.d.ts +1 -0
  144. package/dist/util/loader.js +38 -2
  145. package/dist/util/modules.js +3 -1
  146. package/dist/util/path.d.ts +1 -0
  147. package/dist/util/path.js +1 -0
  148. package/dist/util/reporter.d.ts +1 -1
  149. package/dist/util/reporter.js +53 -9
  150. package/dist/util/watch.d.ts +5 -11
  151. package/dist/util/watch.js +84 -68
  152. package/dist/version.d.ts +1 -1
  153. package/dist/version.js +1 -1
  154. package/package.json +1 -1
  155. package/schema.json +16 -0
@@ -281,6 +281,11 @@ export declare const workspaceConfigurationSchema: z.ZodMiniObject<{
281
281
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
282
282
  project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
283
283
  }, z.core.$strip>]>>;
284
+ 'kysely-codegen': z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
285
+ config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
286
+ entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
287
+ project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
288
+ }, z.core.$strip>]>>;
284
289
  ladle: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
285
290
  config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
286
291
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
@@ -296,6 +301,11 @@ export declare const workspaceConfigurationSchema: z.ZodMiniObject<{
296
301
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
297
302
  project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
298
303
  }, z.core.$strip>]>>;
304
+ lingui: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
305
+ config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
306
+ entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
307
+ project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
308
+ }, z.core.$strip>]>>;
299
309
  'lint-staged': z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
300
310
  config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
301
311
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
@@ -336,6 +346,11 @@ export declare const workspaceConfigurationSchema: z.ZodMiniObject<{
336
346
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
337
347
  project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
338
348
  }, z.core.$strip>]>>;
349
+ mastra: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
350
+ config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
351
+ entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
352
+ project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
353
+ }, z.core.$strip>]>>;
339
354
  mcp: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
340
355
  config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
341
356
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
@@ -566,6 +581,11 @@ export declare const workspaceConfigurationSchema: z.ZodMiniObject<{
566
581
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
567
582
  project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
568
583
  }, z.core.$strip>]>>;
584
+ purgecss: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
585
+ config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
586
+ entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
587
+ project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
588
+ }, z.core.$strip>]>>;
569
589
  quasar: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
570
590
  config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
571
591
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
@@ -1288,6 +1308,11 @@ export declare const knipConfigurationSchema: z.ZodMiniObject<{
1288
1308
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
1289
1309
  project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
1290
1310
  }, z.core.$strip>]>>;
1311
+ 'kysely-codegen': z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
1312
+ config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
1313
+ entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
1314
+ project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
1315
+ }, z.core.$strip>]>>;
1291
1316
  ladle: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
1292
1317
  config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
1293
1318
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
@@ -1303,6 +1328,11 @@ export declare const knipConfigurationSchema: z.ZodMiniObject<{
1303
1328
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
1304
1329
  project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
1305
1330
  }, z.core.$strip>]>>;
1331
+ lingui: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
1332
+ config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
1333
+ entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
1334
+ project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
1335
+ }, z.core.$strip>]>>;
1306
1336
  'lint-staged': z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
1307
1337
  config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
1308
1338
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
@@ -1343,6 +1373,11 @@ export declare const knipConfigurationSchema: z.ZodMiniObject<{
1343
1373
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
1344
1374
  project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
1345
1375
  }, z.core.$strip>]>>;
1376
+ mastra: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
1377
+ config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
1378
+ entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
1379
+ project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
1380
+ }, z.core.$strip>]>>;
1346
1381
  mcp: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
1347
1382
  config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
1348
1383
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
@@ -1573,6 +1608,11 @@ export declare const knipConfigurationSchema: z.ZodMiniObject<{
1573
1608
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
1574
1609
  project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
1575
1610
  }, z.core.$strip>]>>;
1611
+ purgecss: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
1612
+ config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
1613
+ entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
1614
+ project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
1615
+ }, z.core.$strip>]>>;
1576
1616
  quasar: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
1577
1617
  config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
1578
1618
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
@@ -2314,6 +2354,11 @@ export declare const knipConfigurationSchema: z.ZodMiniObject<{
2314
2354
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
2315
2355
  project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
2316
2356
  }, z.core.$strip>]>>;
2357
+ 'kysely-codegen': z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
2358
+ config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
2359
+ entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
2360
+ project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
2361
+ }, z.core.$strip>]>>;
2317
2362
  ladle: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
2318
2363
  config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
2319
2364
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
@@ -2329,6 +2374,11 @@ export declare const knipConfigurationSchema: z.ZodMiniObject<{
2329
2374
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
2330
2375
  project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
2331
2376
  }, z.core.$strip>]>>;
2377
+ lingui: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
2378
+ config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
2379
+ entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
2380
+ project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
2381
+ }, z.core.$strip>]>>;
2332
2382
  'lint-staged': z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
2333
2383
  config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
2334
2384
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
@@ -2369,6 +2419,11 @@ export declare const knipConfigurationSchema: z.ZodMiniObject<{
2369
2419
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
2370
2420
  project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
2371
2421
  }, z.core.$strip>]>>;
2422
+ mastra: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
2423
+ config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
2424
+ entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
2425
+ project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
2426
+ }, z.core.$strip>]>>;
2372
2427
  mcp: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
2373
2428
  config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
2374
2429
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
@@ -2599,6 +2654,11 @@ export declare const knipConfigurationSchema: z.ZodMiniObject<{
2599
2654
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
2600
2655
  project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
2601
2656
  }, z.core.$strip>]>>;
2657
+ purgecss: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
2658
+ config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
2659
+ entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
2660
+ project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
2661
+ }, z.core.$strip>]>>;
2602
2662
  quasar: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
2603
2663
  config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
2604
2664
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
@@ -286,6 +286,11 @@ export declare const pluginsSchema: z.ZodMiniObject<{
286
286
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
287
287
  project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
288
288
  }, z.core.$strip>]>;
289
+ 'kysely-codegen': z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
290
+ config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
291
+ entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
292
+ project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
293
+ }, z.core.$strip>]>;
289
294
  ladle: z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
290
295
  config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
291
296
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
@@ -301,6 +306,11 @@ export declare const pluginsSchema: z.ZodMiniObject<{
301
306
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
302
307
  project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
303
308
  }, z.core.$strip>]>;
309
+ lingui: z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
310
+ config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
311
+ entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
312
+ project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
313
+ }, z.core.$strip>]>;
304
314
  'lint-staged': z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
305
315
  config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
306
316
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
@@ -341,6 +351,11 @@ export declare const pluginsSchema: z.ZodMiniObject<{
341
351
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
342
352
  project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
343
353
  }, z.core.$strip>]>;
354
+ mastra: z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
355
+ config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
356
+ entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
357
+ project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
358
+ }, z.core.$strip>]>;
344
359
  mcp: z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
345
360
  config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
346
361
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
@@ -571,6 +586,11 @@ export declare const pluginsSchema: z.ZodMiniObject<{
571
586
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
572
587
  project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
573
588
  }, z.core.$strip>]>;
589
+ purgecss: z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
590
+ config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
591
+ entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
592
+ project: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
593
+ }, z.core.$strip>]>;
574
594
  quasar: z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>, z.ZodMiniObject<{
575
595
  config: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
576
596
  entry: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
@@ -66,9 +66,11 @@ export const pluginsSchema = z.object({
66
66
  jest: pluginSchema,
67
67
  karma: pluginSchema,
68
68
  knex: pluginSchema,
69
+ 'kysely-codegen': pluginSchema,
69
70
  ladle: pluginSchema,
70
71
  'laravel-vite-plugin': pluginSchema,
71
72
  lefthook: pluginSchema,
73
+ lingui: pluginSchema,
72
74
  'lint-staged': pluginSchema,
73
75
  linthtml: pluginSchema,
74
76
  lit: pluginSchema,
@@ -77,6 +79,7 @@ export const pluginsSchema = z.object({
77
79
  lunaria: pluginSchema,
78
80
  markdownlint: pluginSchema,
79
81
  marko: pluginSchema,
82
+ mastra: pluginSchema,
80
83
  mcp: pluginSchema,
81
84
  mdx: pluginSchema,
82
85
  mdxlint: pluginSchema,
@@ -123,6 +126,7 @@ export const pluginsSchema = z.object({
123
126
  preconstruct: pluginSchema,
124
127
  prettier: pluginSchema,
125
128
  prisma: pluginSchema,
129
+ purgecss: pluginSchema,
126
130
  quasar: pluginSchema,
127
131
  qwik: pluginSchema,
128
132
  railway: pluginSchema,
@@ -0,0 +1,12 @@
1
+ import type { MainOptions } from '../util/create-options.ts';
2
+ import type { WatchChange } from '../util/watch.ts';
3
+ export declare class SessionConfigurationChangedError extends Error {
4
+ constructor(filePath: string);
5
+ }
6
+ export declare class ConfigurationFiles {
7
+ paths: Set<string>;
8
+ private matchers;
9
+ constructor(options: MainOptions);
10
+ addPatterns(dir: string, patterns: string[]): void;
11
+ getChange(changes: WatchChange[], cwd: string): SessionConfigurationChangedError | undefined;
12
+ }
@@ -0,0 +1,43 @@
1
+ import picomatch from 'picomatch';
2
+ import { KNIP_CONFIG_LOCATIONS } from '../constants.js';
3
+ import { isAbsolute, isInNodeModules, join, relative, toAbsolute, toPosix, toRelative } from '../util/path.js';
4
+ export class SessionConfigurationChangedError extends Error {
5
+ constructor(filePath) {
6
+ super(`Configuration changed (${filePath})`);
7
+ }
8
+ }
9
+ export class ConfigurationFiles {
10
+ paths = new Set();
11
+ matchers = [];
12
+ constructor(options) {
13
+ const manifests = [];
14
+ for (const pattern of options.workspaces)
15
+ manifests.push(join(pattern, 'package.json'));
16
+ this.addPatterns(options.cwd, [...KNIP_CONFIG_LOCATIONS, 'pnpm-workspace.yaml', '**/.gitignore', ...manifests]);
17
+ if (options.configFilePath)
18
+ this.paths.add(options.configFilePath);
19
+ for (const filePath of options.preprocessorInputs)
20
+ if (isAbsolute(filePath))
21
+ this.paths.add(filePath);
22
+ }
23
+ addPatterns(dir, patterns) {
24
+ const included = [];
25
+ const excluded = [];
26
+ for (const pattern of patterns) {
27
+ if (pattern.startsWith('!'))
28
+ excluded.push(toRelative(pattern.slice(1), dir));
29
+ else
30
+ included.push(toRelative(pattern, dir));
31
+ }
32
+ if (included.length > 0)
33
+ this.matchers.push({ dir, isMatch: picomatch(included, { dot: true, ignore: excluded }) });
34
+ }
35
+ getChange(changes, cwd) {
36
+ for (const change of changes) {
37
+ const filePath = toAbsolute(toPosix(change.filePath), cwd);
38
+ if (this.paths.has(filePath) ||
39
+ (!isInNodeModules(filePath) && this.matchers.some(({ dir, isMatch }) => isMatch(relative(dir, filePath)))))
40
+ return new SessionConfigurationChangedError(toRelative(filePath, cwd));
41
+ }
42
+ }
43
+ }
@@ -0,0 +1,54 @@
1
+ import type { FileNode } from '../types/module-graph.ts';
2
+ export declare const isIncrementalFile: (file: FileNode) => boolean;
3
+ export declare const getFileTopology: (file: FileNode) => {
4
+ internal: import("../types/module-graph.ts").ImportMap;
5
+ paths: string[];
6
+ imports: {
7
+ specifier: string;
8
+ filePath: string | undefined;
9
+ identifier: string | undefined;
10
+ alias: string | undefined;
11
+ isTypeOnly: boolean;
12
+ modifiers: number;
13
+ jsDocTags: Set<string> | undefined;
14
+ }[];
15
+ external: {
16
+ specifier: string;
17
+ filePath: string | undefined;
18
+ identifier: string | undefined;
19
+ alias: string | undefined;
20
+ isTypeOnly: boolean;
21
+ modifiers: number;
22
+ jsDocTags: Set<string> | undefined;
23
+ }[];
24
+ unresolved: {
25
+ specifier: string;
26
+ filePath: string | undefined;
27
+ identifier: string | undefined;
28
+ alias: string | undefined;
29
+ isTypeOnly: boolean;
30
+ modifiers: number;
31
+ jsDocTags: Set<string> | undefined;
32
+ }[];
33
+ externalRefs: Set<import("../types/module-graph.ts").ExternalRef>;
34
+ exports: {
35
+ identifier: string;
36
+ binding: string;
37
+ type: import("../types/issues.ts").SymbolType;
38
+ jsDocTags: Set<string>;
39
+ hasRefsInFile: boolean;
40
+ isRegistered: boolean;
41
+ referencedIn: Set<string> | undefined;
42
+ isReExport: boolean;
43
+ isBindingReExport: boolean;
44
+ members: {
45
+ identifier: string;
46
+ type: import("../types/issues.ts").SymbolType;
47
+ flags: number;
48
+ jsDocTags: Set<string>;
49
+ hasRefsInFile: boolean;
50
+ }[];
51
+ }[];
52
+ skipExports: boolean;
53
+ };
54
+ export declare const hasSameTopology: (before: ReturnType<typeof getFileTopology>, after: FileNode) => boolean;
@@ -0,0 +1,49 @@
1
+ import { isDeepStrictEqual } from 'node:util';
2
+ export const isIncrementalFile = (file) => file.scripts.size === 0 &&
3
+ file.importGlobs.length === 0 &&
4
+ file.imports.programFiles.size === 0 &&
5
+ file.imports.entryFiles.size === 0;
6
+ export const getFileTopology = (file) => {
7
+ const exports = [];
8
+ for (const [identifier, item] of file.exports) {
9
+ const members = [];
10
+ for (const member of item.members) {
11
+ members.push({
12
+ identifier: member.identifier,
13
+ type: member.type,
14
+ flags: member.flags,
15
+ jsDocTags: member.jsDocTags,
16
+ hasRefsInFile: member.hasRefsInFile,
17
+ });
18
+ }
19
+ exports.push({
20
+ identifier,
21
+ binding: item.binding,
22
+ type: item.type,
23
+ jsDocTags: item.jsDocTags,
24
+ hasRefsInFile: item.hasRefsInFile,
25
+ isRegistered: item.isRegistered,
26
+ referencedIn: item.referencedIn,
27
+ isReExport: item.isReExport,
28
+ isBindingReExport: item.isBindingReExport,
29
+ members,
30
+ });
31
+ }
32
+ const facts = (items) => {
33
+ const result = [];
34
+ for (const { specifier, filePath, identifier, alias, isTypeOnly, modifiers, jsDocTags } of items)
35
+ result.push({ specifier, filePath, identifier, alias, isTypeOnly, modifiers, jsDocTags });
36
+ return result;
37
+ };
38
+ return {
39
+ internal: file.imports.internal,
40
+ paths: [...file.imports.internal.keys()],
41
+ imports: facts(file.imports.imports),
42
+ external: facts(file.imports.external),
43
+ unresolved: facts(file.imports.unresolved),
44
+ externalRefs: file.imports.externalRefs,
45
+ exports,
46
+ skipExports: file.skipExports,
47
+ };
48
+ };
49
+ export const hasSameTopology = (before, after) => isIncrementalFile(after) && isDeepStrictEqual(before, getFileTopology(after));
@@ -1,6 +1,6 @@
1
1
  import type { CollectorIssues } from '../IssueCollector.ts';
2
2
  import { type Results } from '../run.ts';
3
- import type { MainOptions } from '../util/create-options.ts';
3
+ import { type MainOptions } from '../util/create-options.ts';
4
4
  import type { WatchChange } from '../util/watch.ts';
5
5
  import { type FileDescriptorOptions } from './file-descriptor.ts';
6
6
  import { type PackageJsonFile } from './package-json-descriptor.ts';
@@ -1,36 +1,71 @@
1
1
  import { run } from '../run.js';
2
+ import { createOptions } from '../util/create-options.js';
2
3
  import { createPreprocessor, toReporterOptions } from '../util/preprocessor.js';
4
+ import { clearResolverCache } from '../util/resolve.js';
5
+ import { clearModuleResolutionCaches } from '../typescript/resolve-module-names.js';
6
+ import { clearGlobCache } from '../util/glob-cache.js';
7
+ import { clearGitignoreCache } from '../util/gitignore-cache.js';
8
+ import { unload } from '../util/loader.js';
3
9
  import { buildFileDescriptor } from './file-descriptor.js';
4
10
  import { buildPackageJsonDescriptor } from './package-json-descriptor.js';
11
+ import { SessionConfigurationChangedError } from './configuration.js';
5
12
  export const createSession = async (options) => {
6
- const { session, results } = await run(options);
7
- if (!session)
8
- throw new Error('Unable to initialize watch session');
9
- const adapter = {
10
- handleFileChanges: session.handleFileChanges,
11
- getIssues: session.getIssues,
12
- getResults: () => results,
13
- describeFile: (filePath, opts) => buildFileDescriptor(filePath, options.cwd, session.getGraph(), session.getEntryPaths(), opts),
14
- describePackageJson: () => buildPackageJsonDescriptor(session.getGraph(), session.getEntryPaths()),
13
+ const initialize = async (options) => {
14
+ const { session, results } = await run(options);
15
+ if (!session)
16
+ throw new Error('Unable to initialize watch session');
17
+ const preprocess = options.preprocessor.length > 0 ? await createPreprocessor(options.preprocessor) : undefined;
18
+ const updateResults = async () => {
19
+ const collected = session.getIssues();
20
+ const data = preprocess
21
+ ? await preprocess({ ...toReporterOptions(options, results), ...structuredClone(collected) })
22
+ : collected;
23
+ results.issues = data.issues;
24
+ results.counters = data.counters;
25
+ results.tagHints = data.tagHints;
26
+ results.configurationHints = data.configurationHints;
27
+ results.hasConfigLoadErrors = collected.hasConfigLoadErrors;
28
+ };
29
+ await updateResults();
30
+ return { session, results, options, updateResults, preprocess };
15
31
  };
16
- if (options.preprocessor.length === 0)
17
- return adapter;
18
- const input = toReporterOptions(options, results);
19
- const preprocess = await createPreprocessor(options.preprocessor);
20
- const updateResults = async () => {
21
- const data = await preprocess({ ...input, ...structuredClone(session.getIssues()) });
22
- results.issues = data.issues;
23
- results.counters = data.counters;
24
- results.tagHints = data.tagHints;
25
- results.configurationHints = data.configurationHints;
32
+ let current = await initialize(options);
33
+ const results = current.results;
34
+ let pending = Promise.resolve();
35
+ const processChanges = async (changes) => {
36
+ try {
37
+ const update = await current.session.handleFileChanges(changes);
38
+ if (update) {
39
+ await current.updateResults();
40
+ Object.assign(results, current.results);
41
+ }
42
+ return update;
43
+ }
44
+ catch (error) {
45
+ if (!(error instanceof SessionConfigurationChangedError))
46
+ throw error;
47
+ const startTime = performance.now();
48
+ clearResolverCache();
49
+ clearModuleResolutionCaches();
50
+ clearGlobCache();
51
+ clearGitignoreCache();
52
+ if (current.session.configurationFiles)
53
+ unload(current.session.configurationFiles.paths);
54
+ const nextOptions = await createOptions(current.options.createdFrom);
55
+ current = await initialize({ ...nextOptions, isCache: false });
56
+ Object.assign(results, current.results);
57
+ return { duration: performance.now() - startTime, mem: process.memoryUsage().heapUsed };
58
+ }
26
59
  };
27
- await updateResults();
28
- adapter.handleFileChanges = async (changes) => {
29
- const update = await session.handleFileChanges(changes);
30
- if (update)
31
- await updateResults();
32
- return update;
60
+ return {
61
+ handleFileChanges: changes => {
62
+ const update = pending.then(() => processChanges(changes));
63
+ pending = update.then(() => { }, () => { });
64
+ return update;
65
+ },
66
+ getIssues: () => (current.preprocess ? results : current.session.getIssues()),
67
+ getResults: () => results,
68
+ describeFile: (filePath, opts) => buildFileDescriptor(filePath, current.options.cwd, current.session.getGraph(), current.session.getEntryPaths(), opts),
69
+ describePackageJson: () => buildPackageJsonDescriptor(current.session.getGraph(), current.session.getEntryPaths()),
33
70
  };
34
- adapter.getIssues = () => results;
35
- return adapter;
36
71
  };
@@ -0,0 +1,2 @@
1
+ import type { MainOptions } from '../util/create-options.ts';
2
+ export declare const watchSession: (options: MainOptions) => Promise<void>;
@@ -0,0 +1,41 @@
1
+ import { watch } from 'node:fs';
2
+ import { ConsoleStreamer } from '../ConsoleStreamer.js';
3
+ import watchReporter from '../reporters/watch.js';
4
+ import { debugLog } from '../util/debug.js';
5
+ import { hasErrorCause } from '../util/errors.js';
6
+ import { isFile } from '../util/fs.js';
7
+ import { logError } from '../util/log.js';
8
+ import { toPosix } from '../util/path.js';
9
+ import { createSession } from './session.js';
10
+ export const watchSession = async (options) => {
11
+ const streamer = new ConsoleStreamer(options);
12
+ const session = await createSession(options);
13
+ const report = (duration) => {
14
+ const { issues, counters } = session.getIssues();
15
+ watchReporter(options, { issues, streamer, size: counters.processed - counters.files, duration });
16
+ };
17
+ const onError = (error) => {
18
+ const message = error instanceof Error ? error.message : String(error);
19
+ const reason = error instanceof Error && hasErrorCause(error) ? `\nReason: ${error.cause.message}` : '';
20
+ logError(message + reason);
21
+ process.exitCode = 2;
22
+ };
23
+ const watcher = watch(options.cwd, { recursive: true }, (eventType, filePath) => {
24
+ debugLog('*', `(raw) ${eventType} ${filePath}`);
25
+ if (typeof filePath !== 'string')
26
+ return;
27
+ const path = toPosix(filePath);
28
+ const type = eventType === 'rename' ? (isFile(options.cwd, path) ? 'added' : 'deleted') : 'modified';
29
+ session.handleFileChanges([{ type, filePath: path }]).then(update => {
30
+ if (!update)
31
+ return;
32
+ process.exitCode = 0;
33
+ report(update.duration);
34
+ }, onError);
35
+ });
36
+ watcher.on('error', error => {
37
+ onError(error);
38
+ watcher.close();
39
+ });
40
+ report();
41
+ };
@@ -1,2 +1,2 @@
1
- export type PluginName = 'angular' | 'astro' | 'astro-db' | 'astro-markdoc' | 'astro-og-canvas' | 'ava' | 'babel' | 'biome' | 'borp' | 'buf' | 'bumpp' | 'bun' | 'c8' | 'capacitor' | 'catalyst' | 'changelogen' | 'changelogithub' | 'changesets' | 'commitizen' | 'commitlint' | 'convex' | 'create-typescript-app' | 'cspell' | 'cucumber' | 'cypress' | 'danger' | 'dependency-cruiser' | 'docusaurus' | 'dotenv' | 'drizzle' | 'electron-forge' | 'electron-vite' | 'eleventy' | 'esbuild' | 'eslint' | 'eve' | 'execa' | 'expo' | 'expo-router' | 'expressive-code' | 'fast' | 'filesystem-routing' | 'flue' | 'fumadocs' | 'gatsby' | 'github-action' | 'github-actions' | 'glob' | 'graphql-codegen' | 'hardhat' | 'husky' | 'i18next-parser' | 'jasmine' | 'jest' | 'karma' | 'knex' | 'ladle' | 'laravel-vite-plugin' | 'lefthook' | 'lint-staged' | 'linthtml' | 'lit' | 'lockfile-lint' | 'lost-pixel' | 'lunaria' | 'markdownlint' | 'marko' | 'mcp' | 'mdx' | 'mdxlint' | 'metro' | 'mise' | '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' | 'osls' | 'oxfmt' | 'oxlint' | 'panda-css' | 'parcel' | 'payload' | 'pino' | 'playwright' | 'playwright-ct' | 'playwright-test' | 'plop' | 'pm2' | 'pnpm' | 'postcss' | 'pre-commit' | 'preconstruct' | 'prettier' | 'prisma' | 'quasar' | 'qwik' | 'railway' | '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' | 'solidjs-vite-plugin' | 'sst' | 'starlight' | 'stencil' | 'storybook' | 'stryker' | 'stylelint' | 'svelte' | 'sveltejs-package' | 'sveltekit' | 'svgo' | 'svgr' | 'swc' | 'syncpack' | 'tailwind' | 'tanstack-router' | 'taskfile' | 'tauri' | 'temporal' | 'textlint' | 'travis' | 'ts-node' | 'tsd' | 'tsdown' | 'tsrs' | 'tsup' | 'tsx' | 'turbo' | 'typedoc' | 'typescript' | 'typescript-content-mapper' | 'unbuild' | 'unocss' | 'unplugin-auto-import' | 'unplugin-icons' | 'unplugin-vue-components' | 'unplugin-vue-i18n' | 'unplugin-vue-markdown' | 'unplugin-vue-router' | 'varlock' | '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', 'borp', 'buf', 'bumpp', 'bun', 'c8', 'capacitor', 'catalyst', 'changelogen', 'changelogithub', 'changesets', 'commitizen', 'commitlint', 'convex', 'create-typescript-app', 'cspell', 'cucumber', 'cypress', 'danger', 'dependency-cruiser', 'docusaurus', 'dotenv', 'drizzle', 'electron-forge', 'electron-vite', 'eleventy', 'esbuild', 'eslint', 'eve', 'execa', 'expo', 'expo-router', 'expressive-code', 'fast', 'filesystem-routing', 'flue', 'fumadocs', 'gatsby', 'github-action', 'github-actions', 'glob', 'graphql-codegen', 'hardhat', 'husky', 'i18next-parser', 'jasmine', 'jest', 'karma', 'knex', 'ladle', 'laravel-vite-plugin', 'lefthook', 'lint-staged', 'linthtml', 'lit', 'lockfile-lint', 'lost-pixel', 'lunaria', 'markdownlint', 'marko', 'mcp', 'mdx', 'mdxlint', 'metro', 'mise', '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', 'osls', 'oxfmt', 'oxlint', 'panda-css', 'parcel', 'payload', 'pino', 'playwright', 'playwright-ct', 'playwright-test', 'plop', 'pm2', 'pnpm', 'postcss', 'pre-commit', 'preconstruct', 'prettier', 'prisma', 'quasar', 'qwik', 'railway', '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', 'solidjs-vite-plugin', 'sst', 'starlight', 'stencil', 'storybook', 'stryker', 'stylelint', 'svelte', 'sveltejs-package', 'sveltekit', 'svgo', 'svgr', 'swc', 'syncpack', 'tailwind', 'tanstack-router', 'taskfile', 'tauri', 'temporal', 'textlint', 'travis', 'ts-node', 'tsd', 'tsdown', 'tsrs', 'tsup', 'tsx', 'turbo', 'typedoc', 'typescript', 'typescript-content-mapper', 'unbuild', 'unocss', 'unplugin-auto-import', 'unplugin-icons', 'unplugin-vue-components', 'unplugin-vue-i18n', 'unplugin-vue-markdown', 'unplugin-vue-router', 'varlock', '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' | 'borp' | 'buf' | 'bumpp' | 'bun' | 'c8' | 'capacitor' | 'catalyst' | 'changelogen' | 'changelogithub' | 'changesets' | 'commitizen' | 'commitlint' | 'convex' | 'create-typescript-app' | 'cspell' | 'cucumber' | 'cypress' | 'danger' | 'dependency-cruiser' | 'docusaurus' | 'dotenv' | 'drizzle' | 'electron-forge' | 'electron-vite' | 'eleventy' | 'esbuild' | 'eslint' | 'eve' | 'execa' | 'expo' | 'expo-router' | 'expressive-code' | 'fast' | 'filesystem-routing' | 'flue' | 'fumadocs' | 'gatsby' | 'github-action' | 'github-actions' | 'glob' | 'graphql-codegen' | 'hardhat' | 'husky' | 'i18next-parser' | 'jasmine' | 'jest' | 'karma' | 'knex' | 'kysely-codegen' | 'ladle' | 'laravel-vite-plugin' | 'lefthook' | 'lingui' | 'lint-staged' | 'linthtml' | 'lit' | 'lockfile-lint' | 'lost-pixel' | 'lunaria' | 'markdownlint' | 'marko' | 'mastra' | 'mcp' | 'mdx' | 'mdxlint' | 'metro' | 'mise' | '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' | 'osls' | 'oxfmt' | 'oxlint' | 'panda-css' | 'parcel' | 'payload' | 'pino' | 'playwright' | 'playwright-ct' | 'playwright-test' | 'plop' | 'pm2' | 'pnpm' | 'postcss' | 'pre-commit' | 'preconstruct' | 'prettier' | 'prisma' | 'purgecss' | 'quasar' | 'qwik' | 'railway' | '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' | 'solidjs-vite-plugin' | 'sst' | 'starlight' | 'stencil' | 'storybook' | 'stryker' | 'stylelint' | 'svelte' | 'sveltejs-package' | 'sveltekit' | 'svgo' | 'svgr' | 'swc' | 'syncpack' | 'tailwind' | 'tanstack-router' | 'taskfile' | 'tauri' | 'temporal' | 'textlint' | 'travis' | 'ts-node' | 'tsd' | 'tsdown' | 'tsrs' | 'tsup' | 'tsx' | 'turbo' | 'typedoc' | 'typescript' | 'typescript-content-mapper' | 'unbuild' | 'unocss' | 'unplugin-auto-import' | 'unplugin-icons' | 'unplugin-vue-components' | 'unplugin-vue-i18n' | 'unplugin-vue-markdown' | 'unplugin-vue-router' | 'varlock' | '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', 'borp', 'buf', 'bumpp', 'bun', 'c8', 'capacitor', 'catalyst', 'changelogen', 'changelogithub', 'changesets', 'commitizen', 'commitlint', 'convex', 'create-typescript-app', 'cspell', 'cucumber', 'cypress', 'danger', 'dependency-cruiser', 'docusaurus', 'dotenv', 'drizzle', 'electron-forge', 'electron-vite', 'eleventy', 'esbuild', 'eslint', 'eve', 'execa', 'expo', 'expo-router', 'expressive-code', 'fast', 'filesystem-routing', 'flue', 'fumadocs', 'gatsby', 'github-action', 'github-actions', 'glob', 'graphql-codegen', 'hardhat', 'husky', 'i18next-parser', 'jasmine', 'jest', 'karma', 'knex', 'kysely-codegen', 'ladle', 'laravel-vite-plugin', 'lefthook', 'lingui', 'lint-staged', 'linthtml', 'lit', 'lockfile-lint', 'lost-pixel', 'lunaria', 'markdownlint', 'marko', 'mastra', 'mcp', 'mdx', 'mdxlint', 'metro', 'mise', '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', 'osls', 'oxfmt', 'oxlint', 'panda-css', 'parcel', 'payload', 'pino', 'playwright', 'playwright-ct', 'playwright-test', 'plop', 'pm2', 'pnpm', 'postcss', 'pre-commit', 'preconstruct', 'prettier', 'prisma', 'purgecss', 'quasar', 'qwik', 'railway', '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', 'solidjs-vite-plugin', 'sst', 'starlight', 'stencil', 'storybook', 'stryker', 'stylelint', 'svelte', 'sveltejs-package', 'sveltekit', 'svgo', 'svgr', 'swc', 'syncpack', 'tailwind', 'tanstack-router', 'taskfile', 'tauri', 'temporal', 'textlint', 'travis', 'ts-node', 'tsd', 'tsdown', 'tsrs', 'tsup', 'tsx', 'turbo', 'typedoc', 'typescript', 'typescript-content-mapper', 'unbuild', 'unocss', 'unplugin-auto-import', 'unplugin-icons', 'unplugin-vue-components', 'unplugin-vue-i18n', 'unplugin-vue-markdown', 'unplugin-vue-router', 'varlock', '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'];
@@ -55,9 +55,11 @@ export const pluginNames = [
55
55
  'jest',
56
56
  'karma',
57
57
  'knex',
58
+ 'kysely-codegen',
58
59
  'ladle',
59
60
  'laravel-vite-plugin',
60
61
  'lefthook',
62
+ 'lingui',
61
63
  'lint-staged',
62
64
  'linthtml',
63
65
  'lit',
@@ -66,6 +68,7 @@ export const pluginNames = [
66
68
  'lunaria',
67
69
  'markdownlint',
68
70
  'marko',
71
+ 'mastra',
69
72
  'mcp',
70
73
  'mdx',
71
74
  'mdxlint',
@@ -112,6 +115,7 @@ export const pluginNames = [
112
115
  'preconstruct',
113
116
  'prettier',
114
117
  'prisma',
118
+ 'purgecss',
115
119
  'quasar',
116
120
  'qwik',
117
121
  'railway',