eslint-plugin-ts-fortress 1.2.2 → 1.2.3

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/README.md CHANGED
@@ -1,8 +1,9 @@
1
1
  # eslint-plugin-ts-fortress
2
2
 
3
3
  ESLint rules that steer schema definitions toward
4
- [`ts-fortress`](https://www.npmjs.com/package/ts-fortress) idioms. Every rule is
5
- auto-fixable, and every rewrite is **type-preserving**.
4
+ [`ts-fortress`](https://www.npmjs.com/package/ts-fortress) idioms. Every rule except
5
+ `prefer-schema-over-guard-chain` (which only reports) is auto-fixable, and every
6
+ rewrite is **type-preserving**.
6
7
 
7
8
  ## Installation
8
9
 
@@ -93,12 +94,12 @@ import * as t from 'ts-fortress';
93
94
  // ❌
94
95
  const Tags = t.minLengthArray(1, t.string());
95
96
  const Rgb = t.boundedLengthTuple(3, 3, t.number());
96
- const Page = t.boundedLengthTuple(0, 20, t.string());
97
+ const Page = t.boundedLengthTuple(0, 10, t.string());
97
98
 
98
99
  // ✅
99
100
  const Tags = t.nonEmptyArray(t.string());
100
101
  const Rgb = t.fixedLengthTuple(3, t.number());
101
- const Page = t.maxLengthTuple(20, t.string());
102
+ const Page = t.maxLengthTuple(10, t.string());
102
103
  ```
103
104
 
104
105
  Each rewrite keeps the accepted values, the `defaultValue`, and the options
@@ -265,8 +266,8 @@ almost all of what a function-scoped count reports.
265
266
  'ts-fortress/prefer-schema-over-guard-chain': ['error', { threshold: 4 }],
266
267
  ```
267
268
 
268
- - `threshold` (default `5`) — how many guards on one value a single chain may
269
- contain before it is reported.
269
+ - `threshold` (default `5`) — the number of guards on one value at which a
270
+ single chain is reported.
270
271
  - `guards` (default: the `ts-data-forge` narrowing helpers — `hasKey`,
271
272
  `isRecord`, `isString`, `isNumber`, `isBoolean`, `isBigint`, `isSymbol`,
272
273
  `isArray`, `isNonEmpty`, `isNonNullish`, `isNotNull`, `isNotUndefined`,
@@ -1 +1 @@
1
- {"version":3,"file":"prefer-canonical-length-constrained-type.d.mts","sourceRoot":"","sources":["../../src/rules/prefer-canonical-length-constrained-type.mts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;AAmBlC,KAAK,OAAO,GAAG,SAAS,EAAE,CAAC;AAE3B,KAAK,UAAU,GAAG,kBAAkB,CAAC;AAyFrC,eAAO,MAAM,oCAAoC,EAAE,QAAQ,CAAC,UAAU,CACpE,UAAU,EACV,OAAO,CA+HC,CAAC"}
1
+ {"version":3,"file":"prefer-canonical-length-constrained-type.d.mts","sourceRoot":"","sources":["../../src/rules/prefer-canonical-length-constrained-type.mts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;AAoBlC,KAAK,OAAO,GAAG,SAAS,EAAE,CAAC;AAE3B,KAAK,UAAU,GAAG,kBAAkB,CAAC;AAyFrC,eAAO,MAAM,oCAAoC,EAAE,QAAQ,CAAC,UAAU,CACpE,UAAU,EACV,OAAO,CA6HC,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { AST_NODE_TYPES, } from '@typescript-eslint/utils';
2
+ import { Arr } from 'ts-data-forge';
2
3
  import { ARRAY_FN, BOUNDED_LENGTH_TUPLE_FN, FIXED_LENGTH_TUPLE_FN, MAX_LENGTH_TUPLE_FN, MIN_LENGTH_ARRAY_FN, MIN_LENGTH_TUPLE_FN, NON_EMPTY_ARRAY_FN, STRUCTURAL_PREFIX_CAP, } from './constants.mjs';
3
4
  import { buildCalleeResolver, buildImportsFix, getImportedLocalName, getTsFortressImports, hasForeignBinding, } from './import-utils.mjs';
4
5
 
@@ -123,9 +124,9 @@ export const preferCanonicalLengthConstrainedType = {
123
124
  },
124
125
  'Program:exit': () => {
125
126
  const reportable = mut_matches.filter((match) => match.localName !== undefined);
126
- const namesNeedingImport = Array.from(new Set(reportable
127
+ const namesNeedingImport = Arr.uniq(reportable
127
128
  .filter((match) => match.needsImport)
128
- .map((match) => match.rewrite.to)));
129
+ .map((match) => match.rewrite.to));
129
130
 
130
131
  const importFixIndex = reportable.findIndex((match) => match.needsImport);
131
132
  for (const [index, { node, propertyNode, rewrite, localName },] of reportable.entries()) {
@@ -1 +1 @@
1
- {"version":3,"file":"prefer-canonical-length-constrained-type.mjs","sourceRoot":"","sources":["../../src/rules/prefer-canonical-length-constrained-type.mts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prefer-canonical-length-constrained-type.mjs","sourceRoot":"","sources":["../../src/rules/prefer-canonical-length-constrained-type.mts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eslint-plugin-ts-fortress",
3
- "version": "1.2.2",
3
+ "version": "1.2.3",
4
4
  "private": false,
5
5
  "description": "ESLint rules that steer schema definitions toward ts-fortress idioms.",
6
6
  "keywords": [
@@ -35,21 +35,22 @@
35
35
  "LICENSE"
36
36
  ],
37
37
  "dependencies": {
38
- "@typescript-eslint/utils": "8.69.0",
39
- "ts-data-forge": "~14.7.0",
38
+ "@typescript-eslint/utils": "8.70.0",
39
+ "ts-data-forge": "~14.7.1",
40
40
  "ts-type-forge": "~9.2.2"
41
41
  },
42
42
  "devDependencies": {
43
- "@typescript-eslint/parser": "8.69.0",
44
- "@typescript-eslint/rule-tester": "8.69.0",
43
+ "@typescript-eslint/parser": "8.70.0",
44
+ "@typescript-eslint/rule-tester": "8.70.0",
45
45
  "dedent": "1.7.2",
46
- "eslint-config-typed": "5.11.6",
47
- "eslint-plugin-ts-data-forge": "0.7.3",
48
- "eslint-plugin-ts-type-forge": "0.8.3",
46
+ "eslint-config-typed": "5.11.9",
47
+ "eslint-plugin-ts-data-forge": "0.8.1",
48
+ "eslint-plugin-ts-type-forge": "0.8.4",
49
49
  "prettier": "3.9.6",
50
50
  "prettier-plugin-organize-imports": "4.3.0",
51
51
  "prettier-plugin-packagejson": "3.0.2",
52
- "ts-repo-utils": "10.6.1"
52
+ "ts-fortress": "12.1.3",
53
+ "ts-repo-utils": "10.6.2"
53
54
  },
54
55
  "peerDependencies": {
55
56
  "eslint": ">=9.0.0",
@@ -65,18 +66,19 @@
65
66
  },
66
67
  "scripts": {
67
68
  "build": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ./scripts/cmd/build.mts",
68
- "build:min": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ./scripts/cmd/build.mts --skip-check",
69
69
  "check:ext": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ./scripts/cmd/check-ext.mts",
70
+ "doc": "pnpm run doc:embed",
71
+ "doc:embed": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ./scripts/cmd/embed-examples.mts",
70
72
  "fmt": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ../../libs/ts-repo-utils/src/cmd/format-uncommitted.mts --cwd .",
71
73
  "fmt:diff": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ../../libs/ts-repo-utils/src/cmd/format-diff-from.mts origin/main --cwd .",
72
74
  "fmt:full": "pnpm run z:prettier .",
73
75
  "gen:rule-types": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ./scripts/cmd/gen-rule-types.mts",
76
+ "gen:src": "pnpm run gen:rule-types",
74
77
  "lint": "eslint .",
75
78
  "lint:fix": "eslint . --fix",
76
79
  "test": "pnpm run z:vitest run",
77
80
  "test:cov": "pnpm run z:vitest run --coverage",
78
81
  "testw": "pnpm run z:vitest",
79
- "tsc": "node ../../node_modules/typescript-native/bin/tsc --noEmit",
80
82
  "tscw": "node ../../node_modules/typescript-native/bin/tsc --noEmit --watch -p ./tsconfig.json",
81
83
  "type-check": "node ../../node_modules/typescript-native/bin/tsc --noEmit",
82
84
  "z:prettier": "prettier --config ../../.prettierrc --ignore-path ../../.prettierignore --ignore-path ../../.gitignore --ignore-unknown --no-error-on-unmatched-pattern --write",
@@ -3,6 +3,7 @@ import {
3
3
  type TSESLint,
4
4
  type TSESTree,
5
5
  } from '@typescript-eslint/utils';
6
+ import { Arr } from 'ts-data-forge';
6
7
  import {
7
8
  ARRAY_FN,
8
9
  BOUNDED_LENGTH_TUPLE_FN,
@@ -201,12 +202,10 @@ export const preferCanonicalLengthConstrainedType: TSESLint.RuleModule<
201
202
  (match) => match.localName !== undefined,
202
203
  );
203
204
 
204
- const namesNeedingImport = Array.from(
205
- new Set(
206
- reportable
207
- .filter((match) => match.needsImport)
208
- .map((match) => match.rewrite.to),
209
- ),
205
+ const namesNeedingImport = Arr.uniq(
206
+ reportable
207
+ .filter((match) => match.needsImport)
208
+ .map((match) => match.rewrite.to),
210
209
  );
211
210
 
212
211
  // Every missing import rides on a single report; see `buildImportsFix`.