@js-toolkit/configs 3.101.3 → 3.101.4
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 +175 -3
- package/eslint/common.js +1 -1
- package/package.json +1 -1
- package/ts/common.tsconfig.json +1 -1
package/README.md
CHANGED
|
@@ -1,7 +1,179 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @js-toolkit/configs
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.org/package/@js-toolkit/configs)
|
|
4
|
+
[](https://www.npmjs.org/package/@js-toolkit/configs)
|
|
4
5
|
|
|
5
|
-
Preconfigured configurations for Webpack, ESLint, Babel, Prettier, TypeScript, JavaScript, CSS,
|
|
6
|
+
Preconfigured configurations for Webpack, ESLint, Babel, Prettier, TypeScript, JavaScript, and CSS. Utilities for project environment variables, build config, and path resolution.
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
## Install
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
yarn add @js-toolkit/configs
|
|
12
|
+
# or
|
|
13
|
+
npm install @js-toolkit/configs
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Requirements
|
|
17
|
+
|
|
18
|
+
- Node.js 16+
|
|
19
|
+
- Peer dependencies: install as needed for the modules you use (e.g. `eslint`, `webpack`, `typescript`, `prettier`)
|
|
20
|
+
|
|
21
|
+
## Package Contents
|
|
22
|
+
|
|
23
|
+
| Module | Description |
|
|
24
|
+
|--------|--------------|
|
|
25
|
+
| `eslint/common` | Base ESLint rules (JS/TS, import, promise, standard) |
|
|
26
|
+
| `eslint/web` | ESLint for web (React, JSX, a11y) |
|
|
27
|
+
| `eslint/universal` | Universal ESLint config |
|
|
28
|
+
| `paths` | Project paths, glob helpers for TS/JS |
|
|
29
|
+
| `webpack/web.config` | Webpack config for browser builds |
|
|
30
|
+
| `webpack/node.config` | Webpack config for Node builds |
|
|
31
|
+
| `buildConfig` | Build config from `build.config.js` |
|
|
32
|
+
| `appEnv` | NODE_ENV and APP_* environment variables |
|
|
33
|
+
| `getInstalledPackage` | Check if a package is installed (from cwd) |
|
|
34
|
+
| `prettier` | Prettier config |
|
|
35
|
+
| `ts/common` | TypeScript config for libraries |
|
|
36
|
+
| `ts/bundler` | TypeScript config for bundler targets |
|
|
37
|
+
| `babel/*` | Babel presets (react, ts, env) |
|
|
38
|
+
| `css/postcssConfig` | PostCSS config |
|
|
39
|
+
| `css/stylelintrc` | Stylelint config |
|
|
40
|
+
|
|
41
|
+
## Usage Examples
|
|
42
|
+
|
|
43
|
+
### ESLint
|
|
44
|
+
|
|
45
|
+
```javascript
|
|
46
|
+
// eslint.config.js (flat config)
|
|
47
|
+
const common = require('@js-toolkit/configs/eslint/common');
|
|
48
|
+
|
|
49
|
+
module.exports = [
|
|
50
|
+
...common,
|
|
51
|
+
{
|
|
52
|
+
rules: {
|
|
53
|
+
'@typescript-eslint/no-explicit-any': 'off',
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
];
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
```javascript
|
|
60
|
+
// eslint.config.js with web (React) rules
|
|
61
|
+
const { getTSExtensions, getFilesGlob } = require('@js-toolkit/configs/paths');
|
|
62
|
+
|
|
63
|
+
module.exports = [
|
|
64
|
+
...require('@js-toolkit/configs/eslint/common'),
|
|
65
|
+
...require('@js-toolkit/configs/eslint/web'),
|
|
66
|
+
{
|
|
67
|
+
rules: { 'class-methods-use-this': 'off' },
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
files: [getFilesGlob(getTSExtensions(), 'src/')],
|
|
71
|
+
languageOptions: {
|
|
72
|
+
parserOptions: { projectService: { defaultProject: 'tsconfig.json' } },
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
];
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Paths and globs
|
|
79
|
+
|
|
80
|
+
```javascript
|
|
81
|
+
const {
|
|
82
|
+
getFilesGlob,
|
|
83
|
+
getTSExtensions,
|
|
84
|
+
getJSExtensions,
|
|
85
|
+
getTSXExtensions,
|
|
86
|
+
} = require('@js-toolkit/configs/paths');
|
|
87
|
+
|
|
88
|
+
// Glob for all TS files in src/
|
|
89
|
+
getFilesGlob(getTSExtensions(), 'src/'); // 'src/**/*.{ts,mts,cts,tsx,...}'
|
|
90
|
+
|
|
91
|
+
// Extensions arrays
|
|
92
|
+
getTSExtensions(); // ['.ts', '.mts', '.cts', '.tsx', ...]
|
|
93
|
+
getJSExtensions(); // ['.js', '.mjs', '.cjs', '.jsx', ...]
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Build config
|
|
97
|
+
|
|
98
|
+
Create `build.config.js` in your project root:
|
|
99
|
+
|
|
100
|
+
```javascript
|
|
101
|
+
module.exports = {
|
|
102
|
+
output: { root: 'dist' },
|
|
103
|
+
web: {
|
|
104
|
+
root: 'web',
|
|
105
|
+
sources: ['src'],
|
|
106
|
+
assets: ['src/assets'],
|
|
107
|
+
staticContent: ['public'],
|
|
108
|
+
tsconfig: 'tsconfig.json',
|
|
109
|
+
output: { root: 'web', js: 'js' },
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
```javascript
|
|
115
|
+
const { getBuildConfig, resolveConfigPath } = require('@js-toolkit/configs/buildConfig');
|
|
116
|
+
|
|
117
|
+
const config = getBuildConfig();
|
|
118
|
+
config.envStringify(); // { 'process.env.buildConfig': '...' }
|
|
119
|
+
|
|
120
|
+
// Custom config path
|
|
121
|
+
const configPath = resolveConfigPath(['build.config', 'build.config.local'], [process.cwd()]);
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### App environment
|
|
125
|
+
|
|
126
|
+
```javascript
|
|
127
|
+
const appEnv = require('@js-toolkit/configs/appEnv').default;
|
|
128
|
+
|
|
129
|
+
if (appEnv.dev) {
|
|
130
|
+
// development mode
|
|
131
|
+
}
|
|
132
|
+
appEnv.ifDev(devValue, prodValue);
|
|
133
|
+
appEnv.ifProd(prodValue, devValue);
|
|
134
|
+
|
|
135
|
+
// Custom APP_* vars (from process.env)
|
|
136
|
+
appEnv.raw.APP_API_URL;
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Prettier
|
|
140
|
+
|
|
141
|
+
```javascript
|
|
142
|
+
// prettier.config.js
|
|
143
|
+
module.exports = require('@js-toolkit/configs/prettier');
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### TypeScript
|
|
147
|
+
|
|
148
|
+
```json
|
|
149
|
+
// tsconfig.json
|
|
150
|
+
{
|
|
151
|
+
"extends": "@js-toolkit/configs/ts/common.tsconfig.json",
|
|
152
|
+
"compilerOptions": {
|
|
153
|
+
"outDir": "dist"
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Check installed package
|
|
159
|
+
|
|
160
|
+
```javascript
|
|
161
|
+
const { getInstalledPackage } = require('@js-toolkit/configs/getInstalledPackage');
|
|
162
|
+
|
|
163
|
+
// Resolve from project's node_modules (cwd)
|
|
164
|
+
const pkg = getInstalledPackage('typescript-eslint', { resolveFromCwd: true });
|
|
165
|
+
// pkg === 'typescript-eslint' if installed, undefined otherwise
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
## build.config.js structure
|
|
169
|
+
|
|
170
|
+
| Key | Description |
|
|
171
|
+
|-----|-------------|
|
|
172
|
+
| `output.root` | Output directory (default: `build`) |
|
|
173
|
+
| `web` | Web app config: `root`, `sources`, `assets`, `staticContent`, `tsconfig`, `output` |
|
|
174
|
+
| `node` | Node app config: `root`, `sources`, `tsconfig`, `output` |
|
|
175
|
+
| `shared` | Shared code: `root`, `sources`, `tsconfig` |
|
|
176
|
+
|
|
177
|
+
## Repository
|
|
178
|
+
|
|
179
|
+
[https://github.com/js-toolkit/configs](https://github.com/js-toolkit/configs)
|
package/eslint/common.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,r,s){void 0===s&&(s=r);var n=Object.getOwnPropertyDescriptor(t,r);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,s,n)}:function(e,t,r,s){void 0===s&&(s=r),e[s]=t[r]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||function(){var e=function(t){return e=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},e(t)};return function(t){if(t&&t.__esModule)return t;var r={};if(null!=t)for(var s=e(t),n=0;n<s.length;n++)"default"!==s[n]&&__createBinding(r,t,s[n]);return __setModuleDefault(r,t),r}}(),__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.createTypeScriptImportResolver=createTypeScriptImportResolver,exports.create=create;const fs_1=__importDefault(require("fs")),path_1=__importDefault(require("path")),globals_1=__importDefault(require("globals")),config_1=require("eslint/config"),js_1=__importDefault(require("@eslint/js")),compat_1=require("@eslint/compat"),paths_1=__importStar(require("../paths")),getInstalledPackage_1=require("../getInstalledPackage"),consts_1=require("./consts"),hasBabelParser=!!(0,getInstalledPackage_1.getInstalledPackage)("@babel/eslint-parser",{resolveFromCwd:!0}),hasPromisePlugin=!!(0,getInstalledPackage_1.getInstalledPackage)("eslint-plugin-promise",{resolveFromCwd:!0}),hasImportXPlugin=!!(0,getInstalledPackage_1.getInstalledPackage)("eslint-plugin-import-x",{resolveFromCwd:!0}),hasImportPlugin=!!(0,getInstalledPackage_1.getInstalledPackage)("eslint-plugin-import",{resolveFromCwd:!0}),hasConfigStandard=!!(0,getInstalledPackage_1.getInstalledPackage)("eslint-config-standard",{resolveFromCwd:!0}),hasConfigAirbnbBase=!!(0,getInstalledPackage_1.getInstalledPackage)("eslint-config-airbnb-base",{resolveFromCwd:!0}),hasJsDocPlugin=!!(0,getInstalledPackage_1.getInstalledPackage)("eslint-plugin-jsdoc",{resolveFromCwd:!0}),hasTsDocPlugin=!!(0,getInstalledPackage_1.getInstalledPackage)("eslint-plugin-tsdoc",{resolveFromCwd:!0}),hasPrettierEslintPlugin=!!(0,getInstalledPackage_1.getInstalledPackage)("eslint-plugin-prettier/recommended",{resolveFromCwd:!0}),hasTypescriptEslintPlugin=!!(0,getInstalledPackage_1.getInstalledPackage)("typescript-eslint",{resolveFromCwd:!0}),hasImportResolverTypescript=!!(0,getInstalledPackage_1.getInstalledPackage)("eslint-import-resolver-typescript",{resolveFromCwd:!0}),withFilteredStandardRules=()=>{const e=!!(0,getInstalledPackage_1.getInstalledPackage)("eslint-plugin-n",{resolveFromCwd:!0});return{rules:Object.entries(require("eslint-config-standard").rules??{}).reduce((t,[r,s])=>(r.startsWith("import/")?hasImportPlugin&&!hasImportXPlugin?t[r]=s:hasImportXPlugin&&(t[r.replace("import/","import-x/")]=s):r.startsWith("n/")?e&&(t[r]=s):r.startsWith("promise/")?hasPromisePlugin&&(t[r]=s):t[r]=s,t),{})}},filterAirbnbRules=()=>{const e=require("eslint-config-airbnb-base").extends.map(e=>({rules:e.endsWith("imports.js")?hasImportXPlugin&&Object.entries(require(e).rules).reduce((e,[t,r])=>(e[t.replace("import/","import-x/")]=r,e),{})||hasImportPlugin&&require(e).rules||{}:require(e).rules}));return(0,compat_1.fixupConfigRules)(e)};function createTypeScriptImportResolver(e){return require("eslint-import-resolver-typescript").createTypeScriptImportResolver({extensions:paths_1.moduleExtensions,...e})}function create(e){const t=hasTypescriptEslintPlugin&&path_1.default.resolve(e,consts_1.eslintTsProject),r=t&&fs_1.default.existsSync(t)?t:path_1.default.resolve(e,"tsconfig.json");return[js_1.default.configs.recommended,...hasPromisePlugin?[require("eslint-plugin-promise").configs["flat/recommended"]]:[],...hasImportPlugin&&!hasImportXPlugin?require("eslint-plugin-import").flatConfigs.recommended:[],...hasImportXPlugin?[require("eslint-plugin-import-x").flatConfigs.recommended]:[],...hasConfigStandard?[withFilteredStandardRules()]:[],...hasJsDocPlugin?[{...require("eslint-plugin-jsdoc").configs["flat/recommended"],files:[(0,paths_1.getFilesGlob)((0,paths_1.getJSExtensions)())]}]:[],...hasConfigAirbnbBase?filterAirbnbRules():[],{languageOptions:{ecmaVersion:"latest",parserOptions:{ecmaVersion:"latest"},globals:{...globals_1.default.node},...hasBabelParser&&{parser:require("@babel/eslint-parser"),parserOptions:{requireConfigFile:!1}}},linterOptions:{reportUnusedDisableDirectives:!0},settings:{...hasImportPlugin&&!hasImportXPlugin&&{"import/extensions":(0,paths_1.getJSExtensions)(),"import-x/extensions":(0,paths_1.getJSExtensions)(),"import/resolver":{node:{extensions:(0,paths_1.getJSExtensions)(),moduleDirectory:["node_modules",...paths_1.default.web.sources,...paths_1.default.node.sources,...paths_1.default.shared.sources].filter(e=>!!e)}},...hasBabelParser&&{"import/parsers":{"@babel/eslint-parser":(0,paths_1.getJSExtensions)()}}},...hasImportXPlugin&&{"import-x/resolver-next":[require("eslint-plugin-import-x").createNodeResolver({extensions:(0,paths_1.getJSExtensions)(),modules:["node_modules",...paths_1.default.web.sources,...paths_1.default.node.sources,...paths_1.default.shared.sources].filter(e=>!!e)})],...hasBabelParser&&{"import-x/parsers":{"@babel/eslint-parser":(0,paths_1.getJSExtensions)()}}}},rules:{"lines-between-class-members":["error","always",{exceptAfterSingleLine:!0}],"func-names":["warn","as-needed",{generators:"as-needed"}],"no-console":"off","no-unused-expressions":["error",{allowShortCircuit:!0}],"no-plusplus":["error",{allowForLoopAfterthoughts:!0}],"no-param-reassign":["error",{props:!1}],"no-promise-executor-return":["error",{allowVoid:!0}],"no-restricted-exports":["error",{restrictedNamedExports:["then"],restrictDefaultExports:{named:!0,namedFrom:!0,namespaceFrom:!0,defaultFrom:!1}}],"no-restricted-syntax":["error","ForInStatement","LabeledStatement","WithStatement","CallExpression[callee.name='setTimeout'][arguments.length!=2]","CallExpression[arguments.length!=2] > MemberExpression[object.name='window'][property.name='setTimeout']"],...(hasImportPlugin||hasImportXPlugin)&&Object.entries({"import/no-extraneous-dependencies":["error",{devDependencies:!0}],"import/extensions":["error","ignorePackages",paths_1.moduleExtensions.reduce((e,t)=>({...e,[t.substring(1)]:"never"}),{"":"never"})],"import/order":["error",{groups:["builtin","external","internal","parent","sibling","index","object"]}],"import/prefer-default-export":"off"}).reduce((e,[t,r])=>(hasImportXPlugin?e[t.replace("import/","import-x/")]=r:e[t]=r,e),{}),...hasPromisePlugin&&{"promise/always-return":"off","promise/catch-or-return":["error",{allowFinally:!0,allowThenStrict:!0}]}}},...hasTypescriptEslintPlugin?(()=>{const t=require("typescript-eslint");return(0,config_1.defineConfig)({extends:[...t.configs.strictTypeChecked,...t.configs.stylisticTypeChecked,...hasImportPlugin&&!hasImportXPlugin?require("eslint-plugin-import").flatConfigs.recommended:[],...hasImportXPlugin?[require("eslint-plugin-import-x").flatConfigs.typescript]:[]],files:[(0,paths_1.getFilesGlob)((0,paths_1.getTSExtensions)())],plugins:{...hasTsDocPlugin&&{tsdoc:require("eslint-plugin-tsdoc")}},languageOptions:{parserOptions:{tsconfigRootDir:e,projectService:{defaultProject:r,allowDefaultProject:["*.config.ts","*.config.mts","packages/*/*.config.ts","packages/*/*.config.mts"]}}},settings:{...hasImportPlugin&&!hasImportXPlugin&&{"import/extensions":paths_1.moduleExtensions,"import/resolver":{node:{extensions:paths_1.moduleExtensions},typescript:{project:r}},"import/parsers":{"@typescript-eslint/parser":paths_1.moduleExtensions,...hasBabelParser&&{"@babel/eslint-parser":[]}}},...hasImportXPlugin&&{"import-x/extensions":paths_1.moduleExtensions,"import-x/external-module-folders":["node_modules","node_modules/@types"],"import-x/parsers":{"@typescript-eslint/parser":paths_1.moduleExtensions,...hasBabelParser&&{"@babel/eslint-parser":[]}},"import-x/resolver-next":[hasImportResolverTypescript?createTypeScriptImportResolver({project:r}):[],require("eslint-plugin-import-x").createNodeResolver({extensions:paths_1.moduleExtensions,tsconfig:{configFile:r}})]}},rules:{"no-useless-constructor":"off","no-void":["error",{allowAsStatement:!0}],"@typescript-eslint/explicit-member-accessibility":"off","@typescript-eslint/explicit-function-return-type":["warn",{allowExpressions:!0,allowTypedFunctionExpressions:!0,allowHigherOrderFunctions:!0,allowDirectConstAssertionInArrowFunctions:!0,allowConciseArrowFunctionExpressionsStartingWithVoid:!0}],"no-use-before-define":"off","@typescript-eslint/no-use-before-define":"error","no-shadow":"off","@typescript-eslint/no-shadow":["error",{ignoreTypeValueShadow:!0}],"no-empty-function":"off","@typescript-eslint/no-empty-function":["error",{allow:["private-constructors","protected-constructors","decoratedFunctions"]}],"@typescript-eslint/no-unused-expressions":["error",{allowShortCircuit:!0}],"@typescript-eslint/prefer-nullish-coalescing":["error",{ignorePrimitives:{string:!0},ignoreMixedLogicalExpressions:!0}],"@typescript-eslint/no-unnecessary-condition":["error",{checkTypePredicates:!0,allowConstantLoopConditions:"only-allowed-literals"}],"@typescript-eslint/no-confusing-void-expression":["error",{ignoreVoidReturningFunctions:!0}],...hasImportXPlugin&&{"import-x/named":"off"},...hasTsDocPlugin&&{"tsdoc/syntax":"warn"}}})})():[],...hasPrettierEslintPlugin?[require("eslint-plugin-prettier/recommended")]:[],{files:[(0,paths_1.getFilesGlob)([".d.ts"])],rules:{"max-classes-per-file":"off"}},{ignores:["node_modules","dist","build",".yarn"]}]}const config=create(process.cwd());module.exports=config,module.exports.create=create,module.exports.createTypeScriptImportResolver=createTypeScriptImportResolver,exports.default=config;
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,r,s){void 0===s&&(s=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,s,o)}:function(e,t,r,s){void 0===s&&(s=r),e[s]=t[r]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||function(){var e=function(t){return e=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},e(t)};return function(t){if(t&&t.__esModule)return t;var r={};if(null!=t)for(var s=e(t),o=0;o<s.length;o++)"default"!==s[o]&&__createBinding(r,t,s[o]);return __setModuleDefault(r,t),r}}(),__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.createTypeScriptImportResolver=createTypeScriptImportResolver,exports.create=create;const fs_1=__importDefault(require("fs")),path_1=__importDefault(require("path")),globals_1=__importDefault(require("globals")),config_1=require("eslint/config"),js_1=__importDefault(require("@eslint/js")),compat_1=require("@eslint/compat"),paths_1=__importStar(require("../paths")),getInstalledPackage_1=require("../getInstalledPackage"),consts_1=require("./consts"),hasBabelParser=!!(0,getInstalledPackage_1.getInstalledPackage)("@babel/eslint-parser",{resolveFromCwd:!0}),hasPromisePlugin=!!(0,getInstalledPackage_1.getInstalledPackage)("eslint-plugin-promise",{resolveFromCwd:!0}),hasImportXPlugin=!!(0,getInstalledPackage_1.getInstalledPackage)("eslint-plugin-import-x",{resolveFromCwd:!0}),hasImportPlugin=!!(0,getInstalledPackage_1.getInstalledPackage)("eslint-plugin-import",{resolveFromCwd:!0}),hasConfigStandard=!!(0,getInstalledPackage_1.getInstalledPackage)("eslint-config-standard",{resolveFromCwd:!0}),hasConfigAirbnbBase=!!(0,getInstalledPackage_1.getInstalledPackage)("eslint-config-airbnb-base",{resolveFromCwd:!0}),hasJsDocPlugin=!!(0,getInstalledPackage_1.getInstalledPackage)("eslint-plugin-jsdoc",{resolveFromCwd:!0}),hasTsDocPlugin=!!(0,getInstalledPackage_1.getInstalledPackage)("eslint-plugin-tsdoc",{resolveFromCwd:!0}),hasPrettierEslintPlugin=!!(0,getInstalledPackage_1.getInstalledPackage)("eslint-plugin-prettier/recommended",{resolveFromCwd:!0}),hasTypescriptEslintPlugin=!!(0,getInstalledPackage_1.getInstalledPackage)("typescript-eslint",{resolveFromCwd:!0}),hasImportResolverTypescript=!!(0,getInstalledPackage_1.getInstalledPackage)("eslint-import-resolver-typescript",{resolveFromCwd:!0}),withFilteredStandardRules=()=>{const e=!!(0,getInstalledPackage_1.getInstalledPackage)("eslint-plugin-n",{resolveFromCwd:!0});return{rules:Object.entries(require("eslint-config-standard").rules??{}).reduce((t,[r,s])=>(r.startsWith("import/")?hasImportPlugin&&!hasImportXPlugin?t[r]=s:hasImportXPlugin&&(t[r.replace("import/","import-x/")]=s):r.startsWith("n/")?e&&(t[r]=s):r.startsWith("promise/")?hasPromisePlugin&&(t[r]=s):t[r]=s,t),{})}},filterAirbnbRules=()=>{const e=require("eslint-config-airbnb-base").extends.map(e=>({rules:e.endsWith("imports.js")?hasImportXPlugin&&Object.entries(require(e).rules).reduce((e,[t,r])=>(e[t.replace("import/","import-x/")]=r,e),{})||hasImportPlugin&&require(e).rules||{}:require(e).rules}));return(0,compat_1.fixupConfigRules)(e)};function createTypeScriptImportResolver(e){return require("eslint-import-resolver-typescript").createTypeScriptImportResolver({extensions:paths_1.moduleExtensions,...e})}function create(e){const t=hasTypescriptEslintPlugin&&path_1.default.resolve(e,consts_1.eslintTsProject),r=t&&fs_1.default.existsSync(t)?t:path_1.default.resolve(e,"tsconfig.json");return[js_1.default.configs.recommended,...hasPromisePlugin?[require("eslint-plugin-promise").configs["flat/recommended"]]:[],...hasImportPlugin&&!hasImportXPlugin?require("eslint-plugin-import").flatConfigs.recommended:[],...hasImportXPlugin?[require("eslint-plugin-import-x").flatConfigs.recommended]:[],...hasConfigStandard?[withFilteredStandardRules()]:[],...hasJsDocPlugin?[{...require("eslint-plugin-jsdoc").configs["flat/recommended"],files:[(0,paths_1.getFilesGlob)((0,paths_1.getJSExtensions)())]}]:[],...hasConfigAirbnbBase?filterAirbnbRules():[],{languageOptions:{ecmaVersion:"latest",parserOptions:{ecmaVersion:"latest"},globals:{...globals_1.default.node},...hasBabelParser&&{parser:require("@babel/eslint-parser"),parserOptions:{requireConfigFile:!1}}},linterOptions:{reportUnusedDisableDirectives:!0},settings:{...hasImportPlugin&&!hasImportXPlugin&&{"import/extensions":(0,paths_1.getJSExtensions)(),"import-x/extensions":(0,paths_1.getJSExtensions)(),"import/resolver":{node:{extensions:(0,paths_1.getJSExtensions)(),moduleDirectory:["node_modules",...paths_1.default.web.sources,...paths_1.default.node.sources,...paths_1.default.shared.sources].filter(e=>!!e)}},...hasBabelParser&&{"import/parsers":{"@babel/eslint-parser":(0,paths_1.getJSExtensions)()}}},...hasImportXPlugin&&{"import-x/resolver-next":[require("eslint-plugin-import-x").createNodeResolver({extensions:(0,paths_1.getJSExtensions)(),modules:["node_modules",...paths_1.default.web.sources,...paths_1.default.node.sources,...paths_1.default.shared.sources].filter(e=>!!e)})],...hasBabelParser&&{"import-x/parsers":{"@babel/eslint-parser":(0,paths_1.getJSExtensions)()}}}},rules:{"lines-between-class-members":["error","always",{exceptAfterSingleLine:!0}],"func-names":["warn","as-needed",{generators:"as-needed"}],"no-console":"off","no-unused-expressions":["error",{allowShortCircuit:!0}],"no-plusplus":["error",{allowForLoopAfterthoughts:!0}],"no-param-reassign":["error",{props:!1}],"no-promise-executor-return":["error",{allowVoid:!0}],"no-restricted-exports":["error",{restrictedNamedExports:["then"],restrictDefaultExports:{named:!0,namedFrom:!0,namespaceFrom:!0,defaultFrom:!1}}],"no-restricted-syntax":["error","ForInStatement","LabeledStatement","WithStatement","CallExpression[callee.name='setTimeout'][arguments.length!=2]","CallExpression[arguments.length!=2] > MemberExpression[object.name='window'][property.name='setTimeout']"],...(hasImportPlugin||hasImportXPlugin)&&Object.entries({"import/no-extraneous-dependencies":["error",{devDependencies:!0}],"import/extensions":["error","ignorePackages",paths_1.moduleExtensions.reduce((e,t)=>({...e,[t.substring(1)]:"never"}),{"":"never"})],"import/order":["error",{groups:["builtin","external","internal","parent","sibling","index","object"]}],"import/prefer-default-export":"off"}).reduce((e,[t,r])=>(hasImportXPlugin?e[t.replace("import/","import-x/")]=r:e[t]=r,e),{}),...hasPromisePlugin&&{"promise/always-return":"off","promise/catch-or-return":["error",{allowFinally:!0,allowThenStrict:!0}]}}},...hasTypescriptEslintPlugin?(()=>{const t=require("typescript-eslint");return(0,config_1.defineConfig)({extends:[...t.configs.strictTypeChecked,...t.configs.stylisticTypeChecked,...hasImportPlugin&&!hasImportXPlugin?require("eslint-plugin-import").flatConfigs.recommended:[],...hasImportXPlugin?[require("eslint-plugin-import-x").flatConfigs.typescript]:[]],files:[(0,paths_1.getFilesGlob)((0,paths_1.getTSExtensions)())],plugins:{...hasTsDocPlugin&&{tsdoc:require("eslint-plugin-tsdoc")}},languageOptions:{parserOptions:{tsconfigRootDir:e,projectService:{defaultProject:r,allowDefaultProject:["*.config.ts","*.config.mts","packages/*/*.config.ts","packages/*/*.config.mts"]}}},settings:{...hasImportPlugin&&!hasImportXPlugin&&{"import/extensions":paths_1.moduleExtensions,"import/resolver":{node:{extensions:paths_1.moduleExtensions},typescript:{project:r}},"import/parsers":{"@typescript-eslint/parser":paths_1.moduleExtensions,...hasBabelParser&&{"@babel/eslint-parser":[]}}},...hasImportXPlugin&&{"import-x/extensions":paths_1.moduleExtensions,"import-x/external-module-folders":["node_modules","node_modules/@types"],"import-x/parsers":{"@typescript-eslint/parser":paths_1.moduleExtensions,...hasBabelParser&&{"@babel/eslint-parser":[]}},"import-x/resolver-next":[hasImportResolverTypescript?createTypeScriptImportResolver({project:r}):[],require("eslint-plugin-import-x").createNodeResolver({extensions:paths_1.moduleExtensions,tsconfig:{configFile:r}})]}},rules:{"no-useless-constructor":"off","no-void":["error",{allowAsStatement:!0}],"@typescript-eslint/explicit-member-accessibility":"off","@typescript-eslint/explicit-function-return-type":["warn",{allowExpressions:!0,allowTypedFunctionExpressions:!0,allowHigherOrderFunctions:!0,allowDirectConstAssertionInArrowFunctions:!0,allowConciseArrowFunctionExpressionsStartingWithVoid:!0}],"no-use-before-define":"off","@typescript-eslint/no-use-before-define":"error","no-shadow":"off","@typescript-eslint/no-shadow":["error",{ignoreTypeValueShadow:!0}],"no-empty-function":"off","@typescript-eslint/no-empty-function":["error",{allow:["private-constructors","protected-constructors","decoratedFunctions"]}],"@typescript-eslint/no-unused-expressions":["error",{allowShortCircuit:!0}],"@typescript-eslint/prefer-nullish-coalescing":["error",{ignorePrimitives:{string:!0,number:!0},ignoreMixedLogicalExpressions:!0}],"@typescript-eslint/no-unnecessary-condition":["error",{checkTypePredicates:!1,allowConstantLoopConditions:"only-allowed-literals"}],"@typescript-eslint/no-confusing-void-expression":["error",{ignoreVoidReturningFunctions:!0}],"@typescript-eslint/restrict-template-expressions":["error",{allowNumber:!0,allowBoolean:!0}],...hasImportXPlugin&&{"import-x/named":"off"},...hasTsDocPlugin&&{"tsdoc/syntax":"warn"}}})})():[],...hasPrettierEslintPlugin?[require("eslint-plugin-prettier/recommended")]:[],{files:[(0,paths_1.getFilesGlob)([".d.ts"])],rules:{"max-classes-per-file":"off"}},{ignores:["node_modules","dist","build",".yarn"]}]}const config=create(process.cwd());module.exports=config,module.exports.create=create,module.exports.createTypeScriptImportResolver=createTypeScriptImportResolver,exports.default=config;
|
package/package.json
CHANGED
package/ts/common.tsconfig.json
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"noImplicitReturns": true,
|
|
17
17
|
"noFallthroughCasesInSwitch": true,
|
|
18
18
|
"noImplicitOverride": true,
|
|
19
|
-
"noUncheckedIndexedAccess":
|
|
19
|
+
"noUncheckedIndexedAccess": true,
|
|
20
20
|
"exactOptionalPropertyTypes": true,
|
|
21
21
|
"skipLibCheck": true,
|
|
22
22
|
"importHelpers": true,
|