Repository navigation
Expand file tree
/
Copy pathindex.ts
More file actions
60 lines (58 loc) · 3.05 KB
/
Copy pathindex.ts
File metadata and controls
60 lines (58 loc) · 3.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
// Copyright (c) Cratis. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
import type { TSESLint } from '@typescript-eslint/utils';
import { packageVersion } from './Version.js';
import { arc0002 } from './rules/arc0002.js';
import { arc0003 } from './rules/arc0003.js';
import { arc0004 } from './rules/arc0004.js';
import { arc0005 } from './rules/arc0005.js';
import { arc0010 } from './rules/arc0010.js';
import { arc0012 } from './rules/arc0012.js';
import { arc0014 } from './rules/arc0014.js';
import { arc0015 } from './rules/arc0015.js';
import { arc0019 } from './rules/arc0019.js';
import { arcchr0003 } from './rules/arcchr0003.js';
import { arcchr0006 } from './rules/arcchr0006.js';
import { arcchr0007 } from './rules/arcchr0007.js';
import { arcchr0009 } from './rules/arcchr0009.js';
import { arcchr0010 } from './rules/arcchr0010.js';
import { missingField } from './rules/missingField.js';
import { declaredField } from './rules/declaredField.js';
import { injectBinding } from './rules/injectBinding.js';
import { queryBinding } from './rules/queryBinding.js';
import { queryArgumentName } from './rules/queryArgumentName.js';
import { misplacedDecorator } from './rules/misplacedDecorator.js';
import { unexportedArtifact } from './rules/unexportedArtifact.js';
import { validatorTarget } from './rules/validatorTarget.js';
/** Arc server diagnostics, including .NET ARC identifiers where semantics overlap. */
const rules = {
arc0002, arc0003, arc0004, arc0005, arc0010, arc0012, arc0014, arc0015, arc0019,
arcchr0003, arcchr0006, arcchr0007, arcchr0009, arcchr0010,
'missing-field': missingField,
'declared-field': declaredField,
'inject-binding': injectBinding,
'query-binding': queryBinding,
'query-argument-name': queryArgumentName,
'misplaced-decorator': misplacedDecorator,
'unexported-artifact': unexportedArtifact,
'validator-target': validatorTarget
};
/** ESLint 10 flat-config plugin for Arc server code. */
const plugin = { meta: { name: '@cratis/eslint-plugin-arc-core', version: packageVersion }, rules,
configs: {} as { recommended: TSESLint.FlatConfig.Config; 'recommended-type-checked': TSESLint.FlatConfig.Config }
} satisfies TSESLint.FlatConfig.Plugin;
const recommended: TSESLint.FlatConfig.Config = {
name: 'arc-core/recommended',
files: ['**/*.ts', '**/*.tsx'],
plugins: { 'arc-core': plugin },
rules: Object.fromEntries(Object.keys(rules).filter(name => name !== 'query-argument-name' && name !== 'arcchr0006' && name !== 'arcchr0010').map(name => [`arc-core/${name}`, 'error']))
};
const recommendedTypeChecked: TSESLint.FlatConfig.Config = {
...recommended,
name: 'arc-core/recommended-type-checked',
languageOptions: { parserOptions: { projectService: true } },
rules: { ...recommended.rules, 'arc-core/arcchr0006': 'error', 'arc-core/arcchr0010': 'error' }
};
plugin.configs = { recommended, 'recommended-type-checked': recommendedTypeChecked };
export { rules, recommended, recommendedTypeChecked };
export default plugin;