@shivaedev/quality 0.8.2 → 0.10.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.10.0 - 2026-10-05
4
+
5
+ ### Added
6
+
7
+ - `suppressions/no-ignore-deprecations` reports `compilerOptions.ignoreDeprecations` in every tsconfig the repository owns, whatever the file is named, outside the sources too, and names the line of the setting. The setting silences TypeScript's errors for deprecated options; replace the deprecated option and remove it. The rule takes no registry exceptions. A repository that upgrades records its existing findings with `quality baseline write --rule suppressions/no-ignore-deprecations`.
8
+
9
+ ### Changed
10
+
11
+ - `useConsistentTestIt`, which asks for `it` over `test`, inside a `describe` too, only reports: `quality fix` no longer rewrites `test` to `it`, and the author decides.
12
+
13
+ ## 0.9.0 - 2026-10-04
14
+
15
+ ### Changed
16
+
17
+ - Breaking: no root entry and no module that re-exports another. `exports` maps one `"./*.ts"` pattern to every module (`src` under the `source` condition, `dist` otherwise), so you import the module that defines a name, and a bundler sees only the modules you use. Where each name now lives:
18
+ - `@shivaedev/quality`: `@shivaedev/quality/imports/fences/dsl.ts` (`fence`), `@shivaedev/quality/imports/fences/model.ts` (`Chain`, `ExampleStep`, `Examples`, `External`, `Fence`, `Target`), `@shivaedev/quality/imports/fences/selectors.ts` (`anyOf`, `anything`, `external`, `files`, `folders`, `modules`, `packages`, `scopes`, `workspace`), `@shivaedev/quality/config.ts` (`BuiltInRules`, `Level`, `QualityConfig`, `RuleSetting`, `RuleSettings`, `defineConfig`), `@shivaedev/quality/rule.ts` (`Configured`, `Finding`, `Findings`, `Rule`, `RuleContext`, `RuleInputs`, `SourceFile`, `defineRule`), `@shivaedev/quality/standard-schema.ts` (`StandardIssue`, `StandardResult`, `StandardSchemaV1`)
19
+ - `@shivaedev/quality/vitest`: `@shivaedev/quality/vitest.ts`
20
+ - A consumer `quality.config.ts` imports `defineConfig` from `@shivaedev/quality/config.ts`, `defineRule` from `rule.ts`, `fence` from `imports/fences/dsl.ts` and the selectors from `imports/fences/selectors.ts`. `./biome`, `./tsconfig/base.json` and `./tsconfig/package.json` are unchanged.
21
+
3
22
  ## 0.8.2 - 2026-10-04
4
23
 
5
24
  ### Changed
package/README.md CHANGED
@@ -21,7 +21,7 @@ Node 24 or later loads `quality.config.ts` directly (type stripping), so no buil
21
21
 
22
22
  ```ts
23
23
  // quality.config.ts
24
- import { defineConfig } from "@shivaedev/quality";
24
+ import { defineConfig } from "@shivaedev/quality/config.ts";
25
25
  import { noConsoleLog } from "./quality/no-console-log.ts";
26
26
 
27
27
  export default defineConfig({
@@ -101,13 +101,14 @@ A repository with existing comments adopts the rules through the baseline, for e
101
101
 
102
102
  ### Suppressions
103
103
 
104
- A check that is silenced at one site hides the problem instead of fixing it. Three rules close the escape hatches, and none of them takes registry exceptions: a registry entry that names one fails the gate as stale. A repository with existing suppressions adopts the rules through the baseline.
104
+ A check that is silenced at one site hides the problem instead of fixing it. Four rules close the escape hatches, and none of them takes registry exceptions: a registry entry that names one fails the gate as stale. A repository with existing suppressions adopts the rules through the baseline.
105
105
 
106
106
  | Rule | Reports | Options |
107
107
  | --- | --- | --- |
108
108
  | `suppressions/no-inline` | Every comment directive that silences a linter, the compiler or a formatter, except `@ts-expect-error` in a type test | none |
109
109
  | `suppressions/no-double-cast` | A cast through `unknown`, `any` or `never`: `x as unknown as T`, `x as any as T`, `x as never as T`, `<T><unknown>x` | none |
110
110
  | `suppressions/biome-overrides` | A Biome setting that turns a check off or down, or keeps files out of it, without a declaration, and a declaration that matches no setting | `declared` |
111
+ | `suppressions/no-ignore-deprecations` | `compilerOptions.ignoreDeprecations` in a tsconfig, which silences TypeScript's errors for deprecated options | none |
111
112
 
112
113
  `suppressions/no-inline` reports these directives, wherever a line of a comment starts with one:
113
114
 
@@ -119,6 +120,8 @@ A check that is silenced at one site hides the problem instead of fixing it. Thr
119
120
 
120
121
  Coverage hints (`c8 ignore`, `v8 ignore`, `istanbul ignore`) are allowed: they leave code out of a coverage measure and silence no linter or compiler. The rule reads the TypeScript and JavaScript modules among the sources, declaration files included, and every `.css`, `.scss` and `.less` file among the checked files, whatever `extensions` says. Each finding names the line its comment starts on and has the directive as its subject.
121
122
 
123
+ `suppressions/no-ignore-deprecations` reads every JSON file in the repository whose `compilerOptions` sets `ignoreDeprecations`, whatever the file is named, so a shared config such as `tsconfig/base.json` counts as much as a `tsconfig.json`. Like `manifests/sorted`, it walks the whole repository, not only the sources, and skips files ignored by git and `node_modules`. Each finding names the line of the setting. Replace the deprecated option it hides, then remove it.
124
+
122
125
  #### Type tests
123
126
 
124
127
  A type test proves that an API rejects what its types forbid, and TypeScript asserts a compile error only through `@ts-expect-error`, which fails as soon as the error it expects goes away. So `@ts-expect-error`, and no other directive, is allowed in a type test: a file named `*.typecheck.test.ts` or `typecheck.test.ts` (or `.tsx`). The compiler checks these files; [Vitest projects](#vitest-projects) never run them. `@ts-ignore`, `@ts-nocheck` and every linter and formatter directive stay reported in them. A test that must pass a rejected value at run time, to prove the runtime refuses it too, calls the API through `Reflect.apply` instead of a directive.
@@ -243,7 +246,9 @@ The rule only reports; nothing rewrites the import. Whoever writes the import pi
243
246
  A fence is one prohibition, stated in the config without patterns:
244
247
 
245
248
  ```ts
246
- import { defineConfig, external, fence, folders, packages } from "@shivaedev/quality";
249
+ import { defineConfig } from "@shivaedev/quality/config.ts";
250
+ import { external, folders, packages } from "@shivaedev/quality/imports/fences/selectors.ts";
251
+ import { fence } from "@shivaedev/quality/imports/fences/dsl.ts";
247
252
 
248
253
  const fences = [
249
254
  fence("ui-never-imports-server")
@@ -251,8 +256,8 @@ const fences = [
251
256
  .from(folders("packages/ui/src"))
252
257
  .mayNotImport(packages("server"))
253
258
  .demonstratedBy({
254
- illegal: ["packages/ui/src/index.ts", "packages/server/src/index.ts"],
255
- legal: ["packages/ui/src/index.ts", external("effect")],
259
+ illegal: ["packages/ui/src/app.ts", "packages/server/src/db.ts"],
260
+ legal: ["packages/ui/src/app.ts", external("effect")],
256
261
  }),
257
262
  ];
258
263
 
@@ -278,7 +283,7 @@ A finding has its fence's name as its subject, so a registry entry with that sub
278
283
  ### Local rules
279
284
 
280
285
  ```ts
281
- import { defineRule } from "@shivaedev/quality";
286
+ import { defineRule } from "@shivaedev/quality/rule.ts";
282
287
 
283
288
  export const noConsoleLog = defineRule({
284
289
  id: "local/no-console-log",
@@ -392,7 +397,7 @@ The preset sets:
392
397
 
393
398
  The preset turns off `noUnusedVariables` and `noUnusedFunctionParameters`, because the tsconfig presets report them through TypeScript, allows default exports in `*.config.*` files, which tools load through the default export, and turns off `useComponentExportOnlyModules` in `*.test.*` and `*.spec.*` files, which define the helper and harness components they render. It also turns off `noProcessGlobal`, `useJsonImportAttributes`, `noMisusedPromises`, `useExhaustiveSwitchCases`, `useSortedClasses`, `noDelete`, `useConsistentArrayType`, `useConsistentCurlyBraces`, `noEqualsToNull` and `noSkippedTests`, because `quality fix` applies every lint fix and their fixes changed behavior or did not terminate on real code. It declares these weakenings in its `declarations.json`, so `suppressions/biome-overrides` takes them as declared. Every other weakening a repository adds is an override it declares with a reason.
394
399
 
395
- An autofix applies only a change that removes no decision; a fix that can change behavior or delete something written on purpose reports only, and the author decides. The preset keeps `noAccessKey`, `noAriaHiddenOnFocusable`, `noAutofocus`, `noInteractiveElementToNoninteractiveRole`, `noNoninteractiveElementToInteractiveRole`, `noNoninteractiveTabindex`, `noRedundantRoles`, `useValidAriaProps`, `useValidAriaRole`, `noImportantStyles`, `noConstAssign`, `noUnusedPrivateClassMembers`, `useExhaustiveDependencies`, `noFloatingPromises`, `useRegexpTest`, `useUnicodeRegex`, `noNonNullAssertion`, `useAtIndex`, `noParametersOnlyUsedInRecursion` and `useNamingConvention` at `error` with their fixes off, and `quality fix` skips `noDuplicateObjectKeys` and `useSortedKeys`, whose fixes Biome's config cannot turn off.
400
+ An autofix applies only a change that removes no decision; a fix that can change behavior or delete something written on purpose reports only, and the author decides. The preset keeps `noAccessKey`, `noAriaHiddenOnFocusable`, `noAutofocus`, `noInteractiveElementToNoninteractiveRole`, `noNoninteractiveElementToInteractiveRole`, `noNoninteractiveTabindex`, `noRedundantRoles`, `useValidAriaProps`, `useValidAriaRole`, `noImportantStyles`, `noConstAssign`, `noUnusedPrivateClassMembers`, `useExhaustiveDependencies`, `noFloatingPromises`, `useConsistentTestIt`, `useRegexpTest`, `useUnicodeRegex`, `noNonNullAssertion`, `useAtIndex`, `noParametersOnlyUsedInRecursion` and `useNamingConvention` at `error` with their fixes off, and `quality fix` skips `noDuplicateObjectKeys` and `useSortedKeys`, whose fixes Biome's config cannot turn off.
396
401
 
397
402
  The `biome` rule runs `biome check` with the repository's config and reports each finding as `biome/<category>`, such as `biome/lint/style/useBlockStatements`, `biome/assist/source/useSortedKeys`, `biome/format` or `biome/plugin`, so Biome's findings go through the baseline like any other rule's. `quality baseline write --rule biome` takes in every Biome category at once. A finding below `error`, such as a rule a repository declared at `warn`, is not reported. The rule also asks for a root `biome.json` or `biome.jsonc` that extends the preset, and it takes no registry exceptions. A Biome config that Biome cannot load stops the run with Biome's message.
398
403
 
@@ -505,11 +510,11 @@ Both rules take a `suites` option, `.gitignore` patterns of folders that hold te
505
510
 
506
511
  ## Vitest projects
507
512
 
508
- `@shivaedev/quality/vitest` sets up the tests of a package by file name, so no test file sets its environment with a pragma. It needs `vitest`, and `happy-dom` for DOM tests.
513
+ `@shivaedev/quality/vitest.ts` sets up the tests of a package by file name, so no test file sets its environment with a pragma. It needs `vitest`, and `happy-dom` for DOM tests.
509
514
 
510
515
  ```ts
511
516
  // vitest.config.ts
512
- import { testProjects } from "@shivaedev/quality/vitest";
517
+ import { testProjects } from "@shivaedev/quality/vitest.ts";
513
518
  import { defineConfig } from "vitest/config";
514
519
 
515
520
  export default defineConfig({ test: testProjects() });
package/biome/preset.json CHANGED
@@ -332,6 +332,7 @@
332
332
  },
333
333
  "useConsistentObjectKeys": "error",
334
334
  "useConsistentTestIt": {
335
+ "fix": "none",
335
336
  "level": "error",
336
337
  "options": {
337
338
  "function": "it",
package/dist/rule.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { Bivariant } from "@shivaedev/types";
1
+ import type { Bivariant } from "@shivaedev/types/bivariant.ts";
2
2
  import { type StandardSchemaV1 } from "./standard-schema.ts";
3
3
  export interface Finding {
4
4
  readonly count?: number | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../src/rule.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../src/rule.ts"],"names":[],"mappings":"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"}
@@ -7,14 +7,14 @@ export declare const builtInRules: readonly [import("../rule.ts").Rule<"structur
7
7
  }>, import("../rule.ts").Rule<"comments/no-line-reference", undefined>, import("../rule.ts").Rule<"comments/no-pr-reference", undefined>, import("../rule.ts").Rule<"comments/no-banner", undefined>, import("../rule.ts").Rule<"comments/no-todo", undefined>, import("../rule.ts").Rule<"comments/no-environment-pragma", undefined>, import("../rule.ts").Rule<"comments/max-per-file", {
8
8
  readonly allow?: readonly string[];
9
9
  readonly max?: number;
10
- }>, import("../rule.ts").Rule<"suppressions/no-inline", undefined>, import("../rule.ts").Rule<"suppressions/no-double-cast", undefined>, import("../rule.ts").Rule<"suppressions/biome-overrides", {
10
+ }>, import("../rule.ts").Rule<"suppressions/no-inline", undefined>, import("../rule.ts").Rule<"suppressions/no-double-cast", undefined>, import("../rule.ts").Rule<"suppressions/no-ignore-deprecations", undefined>, import("../rule.ts").Rule<"suppressions/biome-overrides", {
11
11
  readonly declared?: readonly {
12
12
  readonly includes: readonly [string, ...string[]];
13
13
  readonly reason: string;
14
14
  readonly rule: string;
15
15
  }[];
16
16
  }>, import("../rule.ts").Rule<"biome", undefined>, import("../rule.ts").Rule<"imports/cycles", undefined>, import("../rule.ts").Rule<"imports/fences", {
17
- readonly fences?: readonly import("../index.ts").Fence[];
17
+ readonly fences?: readonly import("../imports/fences/model.ts").Fence[];
18
18
  }>, import("../rule.ts").Rule<"imports/resolvable", {
19
19
  readonly generated?: readonly string[];
20
20
  }>, import("../rule.ts").Rule<"imports/aliased", undefined>, import("../rule.ts").Rule<"manifests/sorted", undefined>, import("../rule.ts").Rule<"files/named-after-export", {
@@ -1 +1 @@
1
- {"version":3,"file":"built-in.d.ts","sourceRoot":"","sources":["../../src/rules/built-in.ts"],"names":[],"mappings":"AAuBA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuBf,CAAC"}
1
+ {"version":3,"file":"built-in.d.ts","sourceRoot":"","sources":["../../src/rules/built-in.ts"],"names":[],"mappings":"AAwBA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwBf,CAAC"}
@@ -15,6 +15,7 @@ import { importsResolvable } from "#rules/imports/resolvable.ts";
15
15
  import { biomeOverrides } from "#rules/suppressions/biome-overrides.ts";
16
16
  import { noDoubleCast } from "#rules/suppressions/no-double-cast.ts";
17
17
  import { noInline } from "#rules/suppressions/no-inline.ts";
18
+ import { noIgnoreDeprecations } from "#rules/suppressions/noIgnoreDeprecations.ts";
18
19
  import { testsColocated } from "#rules/test-names/colocated.ts";
19
20
  import { testsFollow } from "#rules/test-names/follow.ts";
20
21
  import { biome } from "./biome.js";
@@ -31,6 +32,7 @@ export const builtInRules = [
31
32
  maxPerFile,
32
33
  noInline,
33
34
  noDoubleCast,
35
+ noIgnoreDeprecations,
34
36
  biomeOverrides,
35
37
  biome,
36
38
  importCycles,
@@ -1 +1 @@
1
- {"version":3,"file":"built-in.js","sourceRoot":"","sources":["../../src/rules/built-in.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,CAAC,MAAM,YAAY,GAAG;IAC3B,QAAQ;IACR,OAAO;IACP,eAAe;IACf,aAAa;IACb,QAAQ;IACR,MAAM;IACN,mBAAmB;IACnB,UAAU;IACV,QAAQ;IACR,YAAY;IACZ,cAAc;IACd,KAAK;IACL,YAAY;IACZ,YAAY;IACZ,iBAAiB;IACjB,cAAc;IACd,eAAe;IACf,gBAAgB;IAChB,WAAW;IACX,UAAU;IACV,WAAW;IACX,cAAc;CACL,CAAC"}
1
+ {"version":3,"file":"built-in.js","sourceRoot":"","sources":["../../src/rules/built-in.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,CAAC,MAAM,YAAY,GAAG;IAC3B,QAAQ;IACR,OAAO;IACP,eAAe;IACf,aAAa;IACb,QAAQ;IACR,MAAM;IACN,mBAAmB;IACnB,UAAU;IACV,QAAQ;IACR,YAAY;IACZ,oBAAoB;IACpB,cAAc;IACd,KAAK;IACL,YAAY;IACZ,YAAY;IACZ,iBAAiB;IACjB,cAAc;IACd,eAAe;IACf,gBAAgB;IAChB,WAAW;IACX,UAAU;IACV,WAAW;IACX,cAAc;CACL,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { definePatternRule } from "./pattern-rule.js";
2
2
  export const noEnvironmentPragma = definePatternRule({
3
- description: "A test file gets its environment from its name, not from a pragma: `*.dom.test.ts` runs in a DOM, every other test in Node. `@shivaedev/quality/vitest` sets up the Vitest projects that read the name.",
3
+ description: "A test file gets its environment from its name, not from a pragma: `*.dom.test.ts` runs in a DOM, every other test in Node. `@shivaedev/quality/vitest.ts` sets up the Vitest projects that read the name.",
4
4
  id: "comments/no-environment-pragma",
5
5
  message: (match) => `Sets the test environment with "${match}". Name the file *.dom.test.ts or *.dom.test.tsx instead.`,
6
6
  patterns: [/^@(?:vitest|jest)-environment(?:-options)?(?=\s|$)/mu],
@@ -1 +1 @@
1
- {"version":3,"file":"no-environment-pragma.js","sourceRoot":"","sources":["../../../src/rules/comments/no-environment-pragma.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,CAAC,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;IACpD,WAAW,EACV,yMAAyM;IAC1M,EAAE,EAAE,gCAAgC;IACpC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,mCAAmC,KAAK,2DAA2D;IACvH,QAAQ,EAAE,CAAC,sDAAsD,CAAC;CAClE,CAAC,CAAC"}
1
+ {"version":3,"file":"no-environment-pragma.js","sourceRoot":"","sources":["../../../src/rules/comments/no-environment-pragma.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,CAAC,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;IACpD,WAAW,EACV,4MAA4M;IAC7M,EAAE,EAAE,gCAAgC;IACpC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,mCAAmC,KAAK,2DAA2D;IACvH,QAAQ,EAAE,CAAC,sDAAsD,CAAC;CAClE,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const noIgnoreDeprecations: import("#rule.ts").Rule<"suppressions/no-ignore-deprecations", undefined>;
2
+ //# sourceMappingURL=noIgnoreDeprecations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noIgnoreDeprecations.d.ts","sourceRoot":"","sources":["../../../src/rules/suppressions/noIgnoreDeprecations.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,oBAAoB,2EAW/B,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { relative } from "node:path";
2
+ import * as NodeFileSystem from "@effect/platform-node/NodeFileSystem";
3
+ import { Effect } from "effect";
4
+ import { posix } from "#inventory/ignore-scope.ts";
5
+ import { walk } from "#inventory/walk.ts";
6
+ import { defineRule } from "#rule.ts";
7
+ import { member, parseJsonc } from "#rules/suppressions/biome/json.ts";
8
+ const OPTION = "ignoreDeprecations";
9
+ const MESSAGE = `Sets "${OPTION}", which silences TypeScript's errors for deprecated options. Remove it and replace the deprecated option it hides.`;
10
+ function settingIn(path, text) {
11
+ const parsed = parseJsonc(path, text);
12
+ const setting = parsed._tag === "Parsed" ? member(member(parsed.json, "compilerOptions"), OPTION) : undefined;
13
+ return setting === undefined ? [] : [{ file: path, line: setting.line, message: MESSAGE, subject: OPTION }];
14
+ }
15
+ export const noIgnoreDeprecations = defineRule({
16
+ check: async ({ readText, root }) => {
17
+ const paths = await Effect.runPromise(walk(root).pipe(Effect.provide(NodeFileSystem.layer)));
18
+ const configs = paths.map((path) => posix(relative(root, path))).filter((path) => path.endsWith(".json"));
19
+ const texts = await Promise.all(configs.toSorted().map(async (path) => ({ path, text: (await readText(path)) ?? "" })));
20
+ return texts.filter(({ text }) => text.includes(OPTION)).flatMap(({ path, text }) => settingIn(path, text));
21
+ },
22
+ description: "ignoreDeprecations in a tsconfig silences TypeScript's errors for deprecated options, so the project keeps an option the next TypeScript removes. Replace the deprecated option and remove ignoreDeprecations.",
23
+ id: "suppressions/no-ignore-deprecations",
24
+ registrable: false,
25
+ });
26
+ //# sourceMappingURL=noIgnoreDeprecations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noIgnoreDeprecations.js","sourceRoot":"","sources":["../../../src/rules/suppressions/noIgnoreDeprecations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,cAAc,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAgB,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAEvE,MAAM,MAAM,GAAG,oBAAoB,CAAC;AAEpC,MAAM,OAAO,GAAG,SAAS,MAAM,qHAAqH,CAAC;AAErJ,SAAS,SAAS,CAAC,IAAY,EAAE,IAAY;IAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9G,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;AAC7G,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAAC;IAC9C,KAAK,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE;QACnC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7F,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1G,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACxH,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7G,CAAC;IACD,WAAW,EACV,gNAAgN;IACjN,EAAE,EAAE,qCAAqC;IACzC,WAAW,EAAE,KAAK;CAClB,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shivaedev/quality",
3
- "version": "0.8.2",
3
+ "version": "0.10.0",
4
4
  "description": "Repository quality gate with typed rules, a baseline of existing debt and a registry of reasoned exceptions",
5
5
  "homepage": "https://github.com/ShivaeDev/platform/tree/main/packages/quality#readme",
6
6
  "bugs": {
@@ -23,19 +23,13 @@
23
23
  }
24
24
  },
25
25
  "exports": {
26
- ".": {
27
- "types": "./dist/index.d.ts",
28
- "source": "./src/index.ts",
29
- "import": "./dist/index.js",
30
- "default": "./dist/index.js"
26
+ "./*.ts": {
27
+ "types": "./dist/*.d.ts",
28
+ "source": "./src/*.ts",
29
+ "import": "./dist/*.js",
30
+ "default": "./dist/*.js"
31
31
  },
32
32
  "./biome": "./biome/preset.json",
33
- "./vitest": {
34
- "types": "./dist/vitest.d.ts",
35
- "source": "./src/vitest.ts",
36
- "import": "./dist/vitest.js",
37
- "default": "./dist/vitest.js"
38
- },
39
33
  "./tsconfig/base.json": "./tsconfig/base.json",
40
34
  "./tsconfig/package.json": "./tsconfig/package.json",
41
35
  "./package.json": "./package.json"
@@ -47,13 +41,15 @@
47
41
  "dist",
48
42
  "biome",
49
43
  "src",
44
+ "!src/**/*.test.ts",
45
+ "!src/**/*.spec.ts",
50
46
  "tsconfig",
51
47
  "CHANGELOG.md",
52
48
  "README.md"
53
49
  ],
54
50
  "dependencies": {
55
51
  "@biomejs/biome": "2.5.14",
56
- "@shivaedev/types": "0.1.1",
52
+ "@shivaedev/types": "0.2.0",
57
53
  "ignore": "7.0.6",
58
54
  "sort-package-json": "4.0.0",
59
55
  "typescript": "npm:@typescript/typescript6@6.0.2"
package/src/rule.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { Bivariant } from "@shivaedev/types";
1
+ import type { Bivariant } from "@shivaedev/types/bivariant.ts";
2
2
  import { describeIssue, type StandardSchemaV1 } from "./standard-schema.ts";
3
3
 
4
4
  export interface Finding {
@@ -15,6 +15,7 @@ import { importsResolvable } from "#rules/imports/resolvable.ts";
15
15
  import { biomeOverrides } from "#rules/suppressions/biome-overrides.ts";
16
16
  import { noDoubleCast } from "#rules/suppressions/no-double-cast.ts";
17
17
  import { noInline } from "#rules/suppressions/no-inline.ts";
18
+ import { noIgnoreDeprecations } from "#rules/suppressions/noIgnoreDeprecations.ts";
18
19
  import { testsColocated } from "#rules/test-names/colocated.ts";
19
20
  import { testsFollow } from "#rules/test-names/follow.ts";
20
21
  import { biome } from "./biome.ts";
@@ -32,6 +33,7 @@ export const builtInRules = [
32
33
  maxPerFile,
33
34
  noInline,
34
35
  noDoubleCast,
36
+ noIgnoreDeprecations,
35
37
  biomeOverrides,
36
38
  biome,
37
39
  importCycles,
@@ -2,7 +2,7 @@ import { definePatternRule } from "./pattern-rule.ts";
2
2
 
3
3
  export const noEnvironmentPragma = definePatternRule({
4
4
  description:
5
- "A test file gets its environment from its name, not from a pragma: `*.dom.test.ts` runs in a DOM, every other test in Node. `@shivaedev/quality/vitest` sets up the Vitest projects that read the name.",
5
+ "A test file gets its environment from its name, not from a pragma: `*.dom.test.ts` runs in a DOM, every other test in Node. `@shivaedev/quality/vitest.ts` sets up the Vitest projects that read the name.",
6
6
  id: "comments/no-environment-pragma",
7
7
  message: (match) => `Sets the test environment with "${match}". Name the file *.dom.test.ts or *.dom.test.tsx instead.`,
8
8
  patterns: [/^@(?:vitest|jest)-environment(?:-options)?(?=\s|$)/mu],
@@ -0,0 +1,30 @@
1
+ import { relative } from "node:path";
2
+ import * as NodeFileSystem from "@effect/platform-node/NodeFileSystem";
3
+ import { Effect } from "effect";
4
+ import { posix } from "#inventory/ignore-scope.ts";
5
+ import { walk } from "#inventory/walk.ts";
6
+ import { defineRule, type Finding } from "#rule.ts";
7
+ import { member, parseJsonc } from "#rules/suppressions/biome/json.ts";
8
+
9
+ const OPTION = "ignoreDeprecations";
10
+
11
+ const MESSAGE = `Sets "${OPTION}", which silences TypeScript's errors for deprecated options. Remove it and replace the deprecated option it hides.`;
12
+
13
+ function settingIn(path: string, text: string): readonly Finding[] {
14
+ const parsed = parseJsonc(path, text);
15
+ const setting = parsed._tag === "Parsed" ? member(member(parsed.json, "compilerOptions"), OPTION) : undefined;
16
+ return setting === undefined ? [] : [{ file: path, line: setting.line, message: MESSAGE, subject: OPTION }];
17
+ }
18
+
19
+ export const noIgnoreDeprecations = defineRule({
20
+ check: async ({ readText, root }) => {
21
+ const paths = await Effect.runPromise(walk(root).pipe(Effect.provide(NodeFileSystem.layer)));
22
+ const configs = paths.map((path) => posix(relative(root, path))).filter((path) => path.endsWith(".json"));
23
+ const texts = await Promise.all(configs.toSorted().map(async (path) => ({ path, text: (await readText(path)) ?? "" })));
24
+ return texts.filter(({ text }) => text.includes(OPTION)).flatMap(({ path, text }) => settingIn(path, text));
25
+ },
26
+ description:
27
+ "ignoreDeprecations in a tsconfig silences TypeScript's errors for deprecated options, so the project keeps an option the next TypeScript removes. Replace the deprecated option and remove ignoreDeprecations.",
28
+ id: "suppressions/no-ignore-deprecations",
29
+ registrable: false,
30
+ });
package/dist/index.d.ts DELETED
@@ -1,9 +0,0 @@
1
- export { fence } from "#imports/fences/dsl.ts";
2
- export type { Chain, ExampleStep, Examples, External, Fence, Target } from "#imports/fences/model.ts";
3
- export { anyOf, anything, external, files, folders, modules, packages, scopes, workspace } from "#imports/fences/selectors.ts";
4
- export type { BuiltInRules, Level, QualityConfig, RuleSetting, RuleSettings } from "./config.ts";
5
- export { defineConfig } from "./config.ts";
6
- export type { Configured, Finding, Findings, Rule, RuleContext, RuleInputs, SourceFile } from "./rule.ts";
7
- export { defineRule } from "./rule.ts";
8
- export type { StandardIssue, StandardResult, StandardSchemaV1 } from "./standard-schema.ts";
9
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACtG,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC/H,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACjG,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC1G,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC"}
package/dist/index.js DELETED
@@ -1,5 +0,0 @@
1
- export { fence } from "#imports/fences/dsl.ts";
2
- export { anyOf, anything, external, files, folders, modules, packages, scopes, workspace } from "#imports/fences/selectors.ts";
3
- export { defineConfig } from "./config.js";
4
- export { defineRule } from "./rule.js";
5
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAE/C,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAE/H,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC"}
package/src/index.ts DELETED
@@ -1,8 +0,0 @@
1
- export { fence } from "#imports/fences/dsl.ts";
2
- export type { Chain, ExampleStep, Examples, External, Fence, Target } from "#imports/fences/model.ts";
3
- export { anyOf, anything, external, files, folders, modules, packages, scopes, workspace } from "#imports/fences/selectors.ts";
4
- export type { BuiltInRules, Level, QualityConfig, RuleSetting, RuleSettings } from "./config.ts";
5
- export { defineConfig } from "./config.ts";
6
- export type { Configured, Finding, Findings, Rule, RuleContext, RuleInputs, SourceFile } from "./rule.ts";
7
- export { defineRule } from "./rule.ts";
8
- export type { StandardIssue, StandardResult, StandardSchemaV1 } from "./standard-schema.ts";