1+ import eslint from '@eslint/js' ;
2+ import tseslint from '@typescript-eslint/eslint-plugin' ;
3+ import tsParser from '@typescript-eslint/parser' ;
4+ import prettier from 'eslint-config-prettier' ;
5+
6+ const nodeGlobals = {
7+ process : 'readonly' ,
8+ console : 'readonly' ,
9+ __dirname : 'readonly' ,
10+ __filename : 'readonly' ,
11+ Buffer : 'readonly' ,
12+ global : 'readonly' ,
13+ URL : 'readonly' ,
14+ URLSearchParams : 'readonly' ,
15+ setTimeout : 'readonly' ,
16+ setInterval : 'readonly' ,
17+ clearTimeout : 'readonly' ,
18+ clearInterval : 'readonly' ,
19+ } ;
20+
21+ export default [
22+ eslint . configs . recommended ,
23+ {
24+ files : [ '**/*.ts' ] ,
25+ languageOptions : {
26+ parser : tsParser ,
27+ parserOptions : {
28+ project : 'tsconfig.json' ,
29+ tsconfigRootDir : '.' ,
30+ sourceType : 'module' ,
31+ } ,
32+ globals : {
33+ ...nodeGlobals ,
34+ jest : 'readonly' ,
35+ } ,
36+ } ,
37+ plugins : {
38+ '@typescript-eslint' : tseslint ,
39+ } ,
40+ rules : {
41+ ...tseslint . configs . recommended . rules ,
42+ '@typescript-eslint/no-explicit-any' : 'off' ,
43+ '@typescript-eslint/no-unused-vars' : 'off' ,
44+ 'no-var' : 'warn' ,
45+ 'object-shorthand' : [ 'warn' , 'properties' ] ,
46+ 'accessor-pairs' : [ 'error' , { setWithoutGet : true , enforceForClassMembers : true } ] ,
47+ 'array-bracket-spacing' : [ 'error' , 'never' ] ,
48+ 'array-bracket-newline' : [ 'error' , { multiline : true } ] ,
49+ 'array-callback-return' : [ 'error' , {
50+ allowImplicit : false ,
51+ checkForEach : false ,
52+ } ] ,
53+ 'arrow-spacing' : [ 'error' , { before : true , after : true } ] ,
54+ 'block-spacing' : [ 'error' , 'always' ] ,
55+ 'brace-style' : [ 'error' , '1tbs' , { allowSingleLine : true } ] ,
56+ 'camelcase' : [ 'error' , {
57+ allow : [ '^UNSAFE_' ] ,
58+ properties : 'never' ,
59+ ignoreGlobals : true ,
60+ } ] ,
61+ 'comma-dangle' : [ 'error' , {
62+ arrays : 'always-multiline' ,
63+ objects : 'always-multiline' ,
64+ imports : 'always-multiline' ,
65+ exports : 'always-multiline' ,
66+ functions : 'always-multiline' ,
67+ } ] ,
68+ 'comma-spacing' : [ 'error' , { before : false , after : true } ] ,
69+ 'comma-style' : [ 'error' , 'last' ] ,
70+ 'computed-property-spacing' : [ 'error' , 'never' , { enforceForClassMembers : true } ] ,
71+ 'constructor-super' : 'error' ,
72+ 'curly' : [ 'error' , 'multi-line' ] ,
73+ 'default-case-last' : 'error' ,
74+ 'dot-location' : [ 'error' , 'property' ] ,
75+ 'eol-last' : 'error' ,
76+ 'eqeqeq' : [ 'error' , 'always' , { null : 'ignore' } ] ,
77+ 'func-call-spacing' : [ 'error' , 'never' ] ,
78+ 'func-style' : [ 'error' , 'expression' , { allowArrowFunctions : true } ] ,
79+ 'generator-star-spacing' : [ 'error' , { before : true , after : true } ] ,
80+ 'indent' : [ 'error' , 2 , {
81+ SwitchCase : 1 ,
82+ VariableDeclarator : 1 ,
83+ outerIIFEBody : 1 ,
84+ MemberExpression : 1 ,
85+ FunctionDeclaration : { parameters : 1 , body : 1 } ,
86+ FunctionExpression : { parameters : 1 , body : 1 } ,
87+ CallExpression : { arguments : 1 } ,
88+ ArrayExpression : 1 ,
89+ ObjectExpression : 1 ,
90+ ImportDeclaration : 1 ,
91+ flatTernaryExpressions : false ,
92+ ignoreComments : false ,
93+ ignoredNodes : [
94+ 'TemplateLiteral *' ,
95+ 'JSXElement' ,
96+ 'JSXElement > *' ,
97+ 'JSXAttribute' ,
98+ 'JSXIdentifier' ,
99+ 'JSXNamespacedName' ,
100+ 'JSXMemberExpression' ,
101+ 'JSXSpreadAttribute' ,
102+ 'JSXExpressionContainer' ,
103+ 'JSXOpeningElement' ,
104+ 'JSXClosingElement' ,
105+ 'JSXFragment' ,
106+ 'JSXOpeningFragment' ,
107+ 'JSXClosingFragment' ,
108+ 'JSXText' ,
109+ 'JSXEmptyExpression' ,
110+ 'JSXSpreadChild' ,
111+ 'PropertyDefinition[decorators]'
112+ ] ,
113+ offsetTernaryExpressions : true ,
114+ } ] ,
115+ 'key-spacing' : [ 'error' , { beforeColon : false , afterColon : true } ] ,
116+ 'keyword-spacing' : [ 'error' , { before : true , after : true } ] ,
117+ 'lines-between-class-members' : [ 'error' , 'always' , { exceptAfterSingleLine : true } ] ,
118+ 'multiline-ternary' : [ 'error' , 'always-multiline' ] ,
119+ 'new-cap' : [ 'error' , { newIsCap : true , capIsNew : false , properties : true } ] ,
120+ 'new-parens' : 'error' ,
121+ 'no-array-constructor' : 'error' ,
122+ 'no-async-promise-executor' : 'error' ,
123+ 'no-caller' : 'error' ,
124+ 'no-case-declarations' : 'error' ,
125+ 'no-class-assign' : 'error' ,
126+ 'no-compare-neg-zero' : 'error' ,
127+ 'no-cond-assign' : 'error' ,
128+ 'no-const-assign' : 'error' ,
129+ 'no-constant-condition' : [ 'error' , { checkLoops : false } ] ,
130+ 'no-control-regex' : 'error' ,
131+ 'no-debugger' : 'error' ,
132+ 'no-delete-var' : 'error' ,
133+ 'no-dupe-args' : 'error' ,
134+ 'no-dupe-class-members' : 'error' ,
135+ 'no-dupe-keys' : 'error' ,
136+ 'no-duplicate-case' : 'error' ,
137+ 'no-useless-backreference' : 'error' ,
138+ 'no-empty' : [ 'error' , { allowEmptyCatch : true } ] ,
139+ 'no-empty-character-class' : 'error' ,
140+ 'no-empty-pattern' : 'error' ,
141+ 'no-eval' : 'error' ,
142+ 'no-ex-assign' : 'error' ,
143+ 'no-extend-native' : 'error' ,
144+ 'no-extra-bind' : 'error' ,
145+ 'no-extra-boolean-cast' : 'error' ,
146+ 'no-extra-parens' : [ 'error' , 'functions' ] ,
147+ 'no-fallthrough' : 'error' ,
148+ 'no-floating-decimal' : 'error' ,
149+ 'no-func-assign' : 'error' ,
150+ 'no-global-assign' : 'error' ,
151+ 'no-implied-eval' : 'error' ,
152+ 'no-import-assign' : 'error' ,
153+ 'no-invalid-regexp' : 'error' ,
154+ 'no-irregular-whitespace' : 'error' ,
155+ 'no-iterator' : 'error' ,
156+ 'no-labels' : [ 'error' , { allowLoop : false , allowSwitch : false } ] ,
157+ 'no-lone-blocks' : 'error' ,
158+ 'no-loss-of-precision' : 'error' ,
159+ 'no-misleading-character-class' : 'error' ,
160+ 'no-useless-catch' : 'error' ,
161+ 'no-mixed-operators' : [ 'error' , {
162+ groups : [
163+ [ '==' , '!=' , '===' , '!==' , '>' , '>=' , '<' , '<=' ] ,
164+ [ '&&' , '||' ] ,
165+ [ 'in' , 'instanceof' ] ,
166+ ] ,
167+ allowSamePrecedence : true ,
168+ } ] ,
169+ 'no-mixed-spaces-and-tabs' : 'error' ,
170+ 'no-multi-spaces' : 'error' ,
171+ 'no-multi-str' : 'error' ,
172+ 'no-multiple-empty-lines' : [ 'error' , { max : 1 , maxBOF : 0 , maxEOF : 0 } ] ,
173+ 'no-new' : 'error' ,
174+ 'no-new-func' : 'error' ,
175+ 'no-new-object' : 'error' ,
176+ 'no-new-symbol' : 'error' ,
177+ 'no-new-wrappers' : 'error' ,
178+ 'no-obj-calls' : 'error' ,
179+ 'no-octal' : 'error' ,
180+ 'no-octal-escape' : 'error' ,
181+ 'no-proto' : 'error' ,
182+ 'no-redeclare' : [ 'error' , { builtinGlobals : false } ] ,
183+ 'no-regex-spaces' : 'error' ,
184+ 'no-return-assign' : [ 'error' , 'except-parens' ] ,
185+ 'no-self-assign' : [ 'error' , { props : true } ] ,
186+ 'no-self-compare' : 'error' ,
187+ 'no-sequences' : 'error' ,
188+ 'no-shadow-restricted-names' : 'error' ,
189+ 'no-sparse-arrays' : 'error' ,
190+ 'no-tabs' : 'error' ,
191+ 'no-template-curly-in-string' : 'error' ,
192+ 'no-this-before-super' : 'error' ,
193+ 'no-throw-literal' : 'error' ,
194+ 'no-trailing-spaces' : 'error' ,
195+ 'no-undef' : 'error' ,
196+ 'no-undef-init' : 'error' ,
197+ 'no-unexpected-multiline' : 'error' ,
198+ 'no-unmodified-loop-condition' : 'error' ,
199+ 'no-unneeded-ternary' : [ 'error' , { defaultAssignment : false } ] ,
200+ 'no-unreachable' : 'error' ,
201+ 'no-unreachable-loop' : 'error' ,
202+ 'no-unsafe-finally' : 'error' ,
203+ 'no-unsafe-negation' : 'error' ,
204+ 'no-unused-expressions' : [ 'error' , {
205+ allowShortCircuit : true ,
206+ allowTernary : true ,
207+ allowTaggedTemplates : true ,
208+ } ] ,
209+ 'no-useless-call' : 'error' ,
210+ 'no-useless-computed-key' : 'error' ,
211+ 'no-useless-rename' : 'error' ,
212+ 'no-useless-return' : 'error' ,
213+ 'no-void' : [ 'error' , { allowAsStatement : true } ] ,
214+ 'no-whitespace-before-property' : 'error' ,
215+ 'no-with' : 'error' ,
216+ 'object-curly-newline' : [ 'error' , { multiline : true , consistent : true } ] ,
217+ 'object-curly-spacing' : [ 'error' , 'always' ] ,
218+ 'object-property-newline' : [ 'error' , { allowMultiplePropertiesPerLine : true } ] ,
219+ 'one-var' : [ 'error' , { initialized : 'never' } ] ,
220+ 'operator-linebreak' : [ 'error' , 'after' , { overrides : { '?' : 'before' , ':' : 'before' , '|>' : 'before' } } ] ,
221+ 'padded-blocks' : [ 'error' , { blocks : 'never' , switches : 'never' , classes : 'never' } ] ,
222+ 'prefer-const' : [ 'error' , { destructuring : 'all' } ] ,
223+ 'prefer-promise-reject-errors' : 'error' ,
224+ 'prefer-regex-literals' : [ 'error' , { disallowRedundantWrapping : true } ] ,
225+ 'quote-props' : [ 'error' , 'as-needed' ] ,
226+ 'quotes' : [ 'error' , 'single' , { avoidEscape : true , allowTemplateLiterals : false } ] ,
227+ 'rest-spread-spacing' : [ 'error' , 'never' ] ,
228+ 'semi' : [ 'error' , 'always' ] ,
229+ 'semi-spacing' : [ 'error' , { before : false , after : true } ] ,
230+ 'space-before-blocks' : [ 'error' , 'always' ] ,
231+ 'space-before-function-paren' : [ 'error' , {
232+ 'anonymous' : 'always' ,
233+ 'named' : 'never' ,
234+ 'asyncArrow' : 'always' ,
235+ } ] ,
236+ 'space-in-parens' : [ 'error' , 'never' ] ,
237+ 'space-infix-ops' : 'error' ,
238+ 'space-unary-ops' : [ 'error' , { words : true , nonwords : false } ] ,
239+ 'spaced-comment' : [ 'error' , 'always' , {
240+ line : { markers : [ '*package' , '!' , '/' , ',' , '=' ] } ,
241+ block : { balanced : true , markers : [ '*package' , '!' , ',' , ':' , '::' , 'flow-include' ] , exceptions : [ '*' ] } ,
242+ } ] ,
243+ 'symbol-description' : 'error' ,
244+ 'template-curly-spacing' : [ 'error' , 'never' ] ,
245+ 'template-tag-spacing' : [ 'error' , 'never' ] ,
246+ 'unicode-bom' : [ 'error' , 'never' ] ,
247+ 'use-isnan' : [ 'error' , {
248+ enforceForSwitchCase : true ,
249+ enforceForIndexOf : true ,
250+ } ] ,
251+ 'valid-typeof' : [ 'error' , { requireStringLiterals : true } ] ,
252+ 'wrap-iife' : [ 'error' , 'any' , { functionPrototypeMethods : true } ] ,
253+ 'yield-star-spacing' : [ 'error' , 'both' ] ,
254+ '@typescript-eslint/interface-name-prefix' : 'off' ,
255+ '@typescript-eslint/explicit-function-return-type' : 'off' ,
256+ '@typescript-eslint/explicit-module-boundary-types' : 'off' ,
257+ '@typescript-eslint/no-non-null-assertion' : 'off' ,
258+ '@typescript-eslint/naming-convention' : [
259+ 'error' ,
260+ {
261+ 'selector' : [
262+ 'classProperty' ,
263+ 'typeProperty' ,
264+ 'classMethod' ,
265+ 'objectLiteralMethod' ,
266+ 'typeMethod' ,
267+ 'accessor' ,
268+ 'enumMember'
269+ ] ,
270+ 'format' : [ 'strictCamelCase' ] ,
271+ 'modifiers' : [ 'requiresQuotes' ] ,
272+ 'filter' : {
273+ 'regex' : '^(x-poly-ref|x-unresolved)$' ,
274+ 'match' : false
275+ }
276+ }
277+ ] ,
278+
279+ } ,
280+ settings : { } ,
281+ } ,
282+ {
283+ ignores : [
284+ 'node_modules/**' ,
285+ 'dist/**' ,
286+ 'coverage/**' ,
287+ '*.js' ,
288+ '*.d.ts' ,
289+ '.eslintrc.js' ,
290+ 'scripts/**'
291+ ] ,
292+ } ,
293+ prettier ,
294+ ] ;
0 commit comments