@api-extractor-tools/eslint-plugin 0.1.0-alpha.0 → 0.1.0-alpha.1

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 (104) hide show
  1. package/ARCHITECTURE.md +201 -0
  2. package/CHANGELOG.md +24 -0
  3. package/README.md +306 -10
  4. package/api-extractor.json +1 -0
  5. package/dist/configs/recommended.d.ts +1 -1
  6. package/dist/configs/recommended.d.ts.map +1 -1
  7. package/dist/configs/recommended.js +7 -1
  8. package/dist/configs/recommended.js.map +1 -1
  9. package/dist/index.d.ts +9 -16
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +11 -15
  12. package/dist/index.js.map +1 -1
  13. package/dist/node.d.ts +28 -0
  14. package/dist/node.d.ts.map +1 -0
  15. package/dist/node.js +41 -0
  16. package/dist/node.js.map +1 -0
  17. package/dist/rules/extra-release-tag.d.ts +24 -0
  18. package/dist/rules/extra-release-tag.d.ts.map +1 -0
  19. package/dist/rules/extra-release-tag.js +141 -0
  20. package/dist/rules/extra-release-tag.js.map +1 -0
  21. package/dist/rules/forgotten-export.d.ts +24 -0
  22. package/dist/rules/forgotten-export.d.ts.map +1 -0
  23. package/dist/rules/forgotten-export.js +212 -0
  24. package/dist/rules/forgotten-export.js.map +1 -0
  25. package/dist/rules/incompatible-release-tags.d.ts +25 -0
  26. package/dist/rules/incompatible-release-tags.d.ts.map +1 -0
  27. package/dist/rules/incompatible-release-tags.js +237 -0
  28. package/dist/rules/incompatible-release-tags.js.map +1 -0
  29. package/dist/rules/index.d.ts +2 -6
  30. package/dist/rules/index.d.ts.map +1 -1
  31. package/dist/rules/index.js +13 -1
  32. package/dist/rules/index.js.map +1 -1
  33. package/dist/rules/missing-release-tag.d.ts +4 -0
  34. package/dist/rules/missing-release-tag.d.ts.map +1 -1
  35. package/dist/rules/missing-release-tag.js +14 -21
  36. package/dist/rules/missing-release-tag.js.map +1 -1
  37. package/dist/rules/override-keyword.d.ts +4 -0
  38. package/dist/rules/override-keyword.d.ts.map +1 -1
  39. package/dist/rules/override-keyword.js +9 -11
  40. package/dist/rules/override-keyword.js.map +1 -1
  41. package/dist/rules/package-documentation.d.ts +1 -1
  42. package/dist/rules/package-documentation.d.ts.map +1 -1
  43. package/dist/rules/package-documentation.js +7 -28
  44. package/dist/rules/package-documentation.js.map +1 -1
  45. package/dist/rules/public-on-non-exported.d.ts +24 -0
  46. package/dist/rules/public-on-non-exported.d.ts.map +1 -0
  47. package/dist/rules/public-on-non-exported.js +191 -0
  48. package/dist/rules/public-on-non-exported.js.map +1 -0
  49. package/dist/rules/public-on-private-member.d.ts +24 -0
  50. package/dist/rules/public-on-private-member.d.ts.map +1 -0
  51. package/dist/rules/public-on-private-member.js +111 -0
  52. package/dist/rules/public-on-private-member.js.map +1 -0
  53. package/dist/rules/valid-enum-type.d.ts +17 -0
  54. package/dist/rules/valid-enum-type.d.ts.map +1 -0
  55. package/dist/rules/valid-enum-type.js +206 -0
  56. package/dist/rules/valid-enum-type.js.map +1 -0
  57. package/dist/types.d.ts +63 -35
  58. package/dist/types.d.ts.map +1 -1
  59. package/dist/types.js +4 -1
  60. package/dist/types.js.map +1 -1
  61. package/dist/utils/tsdoc-parser.d.ts +35 -0
  62. package/dist/utils/tsdoc-parser.d.ts.map +1 -1
  63. package/dist/utils/tsdoc-parser.js +40 -0
  64. package/dist/utils/tsdoc-parser.js.map +1 -1
  65. package/docs/rules/valid-enum-type.md +153 -0
  66. package/package.json +22 -8
  67. package/src/configs/recommended.ts +7 -1
  68. package/src/index.ts +21 -15
  69. package/src/node.ts +50 -0
  70. package/src/rules/extra-release-tag.ts +201 -0
  71. package/src/rules/forgotten-export.ts +274 -0
  72. package/src/rules/incompatible-release-tags.ts +331 -0
  73. package/src/rules/index.ts +13 -1
  74. package/src/rules/missing-release-tag.ts +11 -26
  75. package/src/rules/override-keyword.ts +6 -8
  76. package/src/rules/package-documentation.ts +5 -31
  77. package/src/rules/public-on-non-exported.ts +265 -0
  78. package/src/rules/public-on-private-member.ts +157 -0
  79. package/src/rules/valid-enum-type.ts +252 -0
  80. package/src/types.ts +60 -17
  81. package/src/utils/config-loader.ts +1 -0
  82. package/src/utils/entry-point.ts +1 -0
  83. package/src/utils/tsdoc-parser.ts +67 -0
  84. package/temp/eslint-plugin.api.md +96 -47
  85. package/test/index.test.ts +1 -0
  86. package/test/rules/extra-release-tag.test.ts +276 -0
  87. package/test/rules/forgotten-export.test.ts +190 -0
  88. package/test/rules/incompatible-release-tags.test.ts +340 -0
  89. package/test/rules/missing-release-tag.test.ts +2 -1
  90. package/test/rules/override-keyword.test.ts +2 -1
  91. package/test/rules/package-documentation.test.ts +8 -6
  92. package/test/rules/public-on-non-exported.test.ts +201 -0
  93. package/test/rules/public-on-private-member.test.ts +207 -0
  94. package/test/rules/valid-enum-type.test.ts +409 -0
  95. package/test/types.test-d.ts +20 -0
  96. package/test/utils/config-loader.test.ts +1 -0
  97. package/test/utils/tsdoc-parser.test.ts +117 -9
  98. package/tsconfig.json +1 -0
  99. package/vitest.config.mts +1 -0
  100. package/dist/utils/index.d.ts +0 -8
  101. package/dist/utils/index.d.ts.map +0 -1
  102. package/dist/utils/index.js +0 -21
  103. package/dist/utils/index.js.map +0 -1
  104. package/src/utils/index.ts +0 -17
@@ -4,6 +4,7 @@ import {
4
4
  extractReleaseTag,
5
5
  hasOverrideTag,
6
6
  hasPackageDocumentation,
7
+ extractEnumType,
7
8
  } from '../../src/utils/tsdoc-parser'
8
9
 
9
10
  describe('tsdoc-parser', () => {
@@ -33,7 +34,7 @@ describe('tsdoc-parser', () => {
33
34
  * @public
34
35
  */`
35
36
  const result = parseTSDocComment(comment)
36
- const tag = extractReleaseTag(result.docComment!)
37
+ const tag = extractReleaseTag(result.docComment)
37
38
  expect(tag).toBe('public')
38
39
  })
39
40
 
@@ -42,7 +43,7 @@ describe('tsdoc-parser', () => {
42
43
  * @beta
43
44
  */`
44
45
  const result = parseTSDocComment(comment)
45
- const tag = extractReleaseTag(result.docComment!)
46
+ const tag = extractReleaseTag(result.docComment)
46
47
  expect(tag).toBe('beta')
47
48
  })
48
49
 
@@ -51,7 +52,7 @@ describe('tsdoc-parser', () => {
51
52
  * @alpha
52
53
  */`
53
54
  const result = parseTSDocComment(comment)
54
- const tag = extractReleaseTag(result.docComment!)
55
+ const tag = extractReleaseTag(result.docComment)
55
56
  expect(tag).toBe('alpha')
56
57
  })
57
58
 
@@ -60,7 +61,7 @@ describe('tsdoc-parser', () => {
60
61
  * @internal
61
62
  */`
62
63
  const result = parseTSDocComment(comment)
63
- const tag = extractReleaseTag(result.docComment!)
64
+ const tag = extractReleaseTag(result.docComment)
64
65
  expect(tag).toBe('internal')
65
66
  })
66
67
 
@@ -69,7 +70,7 @@ describe('tsdoc-parser', () => {
69
70
  * Just a description.
70
71
  */`
71
72
  const result = parseTSDocComment(comment)
72
- const tag = extractReleaseTag(result.docComment!)
73
+ const tag = extractReleaseTag(result.docComment)
73
74
  expect(tag).toBeUndefined()
74
75
  })
75
76
  })
@@ -80,7 +81,7 @@ describe('tsdoc-parser', () => {
80
81
  * @override
81
82
  */`
82
83
  const result = parseTSDocComment(comment)
83
- expect(hasOverrideTag(result.docComment!)).toBe(true)
84
+ expect(hasOverrideTag(result.docComment)).toBe(true)
84
85
  })
85
86
 
86
87
  it('should return false when no @override tag', () => {
@@ -88,7 +89,7 @@ describe('tsdoc-parser', () => {
88
89
  * Just a comment.
89
90
  */`
90
91
  const result = parseTSDocComment(comment)
91
- expect(hasOverrideTag(result.docComment!)).toBe(false)
92
+ expect(hasOverrideTag(result.docComment)).toBe(false)
92
93
  })
93
94
  })
94
95
 
@@ -99,7 +100,7 @@ describe('tsdoc-parser', () => {
99
100
  * @packageDocumentation
100
101
  */`
101
102
  const result = parseTSDocComment(comment)
102
- expect(hasPackageDocumentation(result.docComment!)).toBe(true)
103
+ expect(hasPackageDocumentation(result.docComment)).toBe(true)
103
104
  })
104
105
 
105
106
  it('should return false when no @packageDocumentation tag', () => {
@@ -107,7 +108,114 @@ describe('tsdoc-parser', () => {
107
108
  * Just a comment.
108
109
  */`
109
110
  const result = parseTSDocComment(comment)
110
- expect(hasPackageDocumentation(result.docComment!)).toBe(false)
111
+ expect(hasPackageDocumentation(result.docComment)).toBe(false)
112
+ })
113
+ })
114
+
115
+ describe('extractEnumType', () => {
116
+ it('should extract @enumType open', () => {
117
+ const comment = `/**
118
+ * @enumType open
119
+ */`
120
+ const result = extractEnumType(comment)
121
+ expect(result.found).toBe(true)
122
+ expect(result.count).toBe(1)
123
+ expect(result.value).toBe('open')
124
+ expect(result.isValid).toBe(true)
125
+ expect(result.rawValue).toBe('open')
126
+ })
127
+
128
+ it('should extract @enumType closed', () => {
129
+ const comment = `/**
130
+ * @enumType closed
131
+ */`
132
+ const result = extractEnumType(comment)
133
+ expect(result.found).toBe(true)
134
+ expect(result.count).toBe(1)
135
+ expect(result.value).toBe('closed')
136
+ expect(result.isValid).toBe(true)
137
+ })
138
+
139
+ it('should handle case-insensitive values (Open)', () => {
140
+ const comment = `/**
141
+ * @enumType Open
142
+ */`
143
+ const result = extractEnumType(comment)
144
+ expect(result.found).toBe(true)
145
+ expect(result.value).toBe('open')
146
+ expect(result.isValid).toBe(true)
147
+ expect(result.rawValue).toBe('Open')
148
+ })
149
+
150
+ it('should handle case-insensitive values (CLOSED)', () => {
151
+ const comment = `/**
152
+ * @enumType CLOSED
153
+ */`
154
+ const result = extractEnumType(comment)
155
+ expect(result.found).toBe(true)
156
+ expect(result.value).toBe('closed')
157
+ expect(result.isValid).toBe(true)
158
+ expect(result.rawValue).toBe('CLOSED')
159
+ })
160
+
161
+ it('should detect invalid value', () => {
162
+ const comment = `/**
163
+ * @enumType foo
164
+ */`
165
+ const result = extractEnumType(comment)
166
+ expect(result.found).toBe(true)
167
+ expect(result.count).toBe(1)
168
+ expect(result.value).toBe('foo')
169
+ expect(result.isValid).toBe(false)
170
+ expect(result.rawValue).toBe('foo')
171
+ })
172
+
173
+ it('should detect missing value', () => {
174
+ const comment = `/**
175
+ * @enumType
176
+ * @public
177
+ */`
178
+ const result = extractEnumType(comment)
179
+ expect(result.found).toBe(true)
180
+ expect(result.count).toBe(1)
181
+ expect(result.rawValue).toBeUndefined()
182
+ expect(result.isValid).toBe(false)
183
+ })
184
+
185
+ it('should detect multiple @enumType tags', () => {
186
+ const comment = `/**
187
+ * @enumType open
188
+ * @enumType closed
189
+ */`
190
+ const result = extractEnumType(comment)
191
+ expect(result.found).toBe(true)
192
+ expect(result.count).toBe(2)
193
+ // First value is captured
194
+ expect(result.value).toBe('open')
195
+ })
196
+
197
+ it('should return not found when no @enumType tag', () => {
198
+ const comment = `/**
199
+ * Just a comment.
200
+ * @public
201
+ */`
202
+ const result = extractEnumType(comment)
203
+ expect(result.found).toBe(false)
204
+ expect(result.count).toBe(0)
205
+ expect(result.value).toBeUndefined()
206
+ expect(result.isValid).toBe(false)
207
+ })
208
+
209
+ it('should handle @enumType with other tags', () => {
210
+ const comment = `/**
211
+ * Description of the enum.
212
+ * @enumType open
213
+ * @public
214
+ */`
215
+ const result = extractEnumType(comment)
216
+ expect(result.found).toBe(true)
217
+ expect(result.value).toBe('open')
218
+ expect(result.isValid).toBe(true)
111
219
  })
112
220
  })
113
221
  })
package/tsconfig.json CHANGED
@@ -10,3 +10,4 @@
10
10
  },
11
11
  "include": ["src/**/*.ts"]
12
12
  }
13
+
package/vitest.config.mts CHANGED
@@ -23,3 +23,4 @@ export default defineConfig({
23
23
  },
24
24
  },
25
25
  })
26
+
@@ -1,8 +0,0 @@
1
- /**
2
- * Utility module exports.
3
- * @internal
4
- */
5
- export { resolveConfig, getMessageLogLevel } from './config-loader';
6
- export { parseTSDocComment, extractReleaseTag, hasOverrideTag, hasPackageDocumentation, getLeadingTSDocComment, findAllTSDocComments, } from './tsdoc-parser';
7
- export { findPackageJson, isEntryPoint } from './entry-point';
8
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAEnE,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,uBAAuB,EACvB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA"}
@@ -1,21 +0,0 @@
1
- "use strict";
2
- /**
3
- * Utility module exports.
4
- * @internal
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.isEntryPoint = exports.findPackageJson = exports.findAllTSDocComments = exports.getLeadingTSDocComment = exports.hasPackageDocumentation = exports.hasOverrideTag = exports.extractReleaseTag = exports.parseTSDocComment = exports.getMessageLogLevel = exports.resolveConfig = void 0;
8
- var config_loader_1 = require("./config-loader");
9
- Object.defineProperty(exports, "resolveConfig", { enumerable: true, get: function () { return config_loader_1.resolveConfig; } });
10
- Object.defineProperty(exports, "getMessageLogLevel", { enumerable: true, get: function () { return config_loader_1.getMessageLogLevel; } });
11
- var tsdoc_parser_1 = require("./tsdoc-parser");
12
- Object.defineProperty(exports, "parseTSDocComment", { enumerable: true, get: function () { return tsdoc_parser_1.parseTSDocComment; } });
13
- Object.defineProperty(exports, "extractReleaseTag", { enumerable: true, get: function () { return tsdoc_parser_1.extractReleaseTag; } });
14
- Object.defineProperty(exports, "hasOverrideTag", { enumerable: true, get: function () { return tsdoc_parser_1.hasOverrideTag; } });
15
- Object.defineProperty(exports, "hasPackageDocumentation", { enumerable: true, get: function () { return tsdoc_parser_1.hasPackageDocumentation; } });
16
- Object.defineProperty(exports, "getLeadingTSDocComment", { enumerable: true, get: function () { return tsdoc_parser_1.getLeadingTSDocComment; } });
17
- Object.defineProperty(exports, "findAllTSDocComments", { enumerable: true, get: function () { return tsdoc_parser_1.findAllTSDocComments; } });
18
- var entry_point_1 = require("./entry-point");
19
- Object.defineProperty(exports, "findPackageJson", { enumerable: true, get: function () { return entry_point_1.findPackageJson; } });
20
- Object.defineProperty(exports, "isEntryPoint", { enumerable: true, get: function () { return entry_point_1.isEntryPoint; } });
21
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,iDAAmE;AAA1D,8GAAA,aAAa,OAAA;AAAE,mHAAA,kBAAkB,OAAA;AAE1C,+CAOuB;AANrB,iHAAA,iBAAiB,OAAA;AACjB,iHAAA,iBAAiB,OAAA;AACjB,8GAAA,cAAc,OAAA;AACd,uHAAA,uBAAuB,OAAA;AACvB,sHAAA,sBAAsB,OAAA;AACtB,oHAAA,oBAAoB,OAAA;AAGtB,6CAA6D;AAApD,8GAAA,eAAe,OAAA;AAAE,2GAAA,YAAY,OAAA"}
@@ -1,17 +0,0 @@
1
- /**
2
- * Utility module exports.
3
- * @internal
4
- */
5
-
6
- export { resolveConfig, getMessageLogLevel } from './config-loader'
7
-
8
- export {
9
- parseTSDocComment,
10
- extractReleaseTag,
11
- hasOverrideTag,
12
- hasPackageDocumentation,
13
- getLeadingTSDocComment,
14
- findAllTSDocComments,
15
- } from './tsdoc-parser'
16
-
17
- export { findPackageJson, isEntryPoint } from './entry-point'