@stll/oxlint-config 0.3.0 → 0.4.0

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/dist/index.cjs CHANGED
@@ -11,6 +11,15 @@ const libraryIgnorePatterns = [
11
11
  "dist/",
12
12
  "coverage/"
13
13
  ];
14
+ const libraryPlugins = [
15
+ "eslint",
16
+ "typescript",
17
+ "unicorn",
18
+ "oxc",
19
+ "import",
20
+ "promise",
21
+ "react"
22
+ ];
14
23
  const libraryRules = {
15
24
  "no-console": "off",
16
25
  "no-shadow": "error",
@@ -21,8 +30,12 @@ const libraryRules = {
21
30
  "no-loop-func": "error",
22
31
  "no-nested-ternary": "error",
23
32
  "no-void": ["error", { allowAsStatement: true }],
33
+ "prefer-arrow-callback": "error",
24
34
  "stella-lowercase/stella-lowercase": "error",
25
35
  "no-raw-colors/no-raw-colors": "error",
36
+ "oxc/no-accumulating-spread": "error",
37
+ "oxc/no-map-spread": "error",
38
+ "oxc/branches-sharing-code": "error",
26
39
  "typescript/no-explicit-any": "error",
27
40
  "typescript/no-dynamic-delete": "error",
28
41
  "typescript/no-misused-promises": ["error", { checksVoidReturn: { attributes: false } }],
@@ -57,13 +70,35 @@ const libraryRules = {
57
70
  "unicorn/prefer-ternary": "off",
58
71
  "unicorn/no-array-reduce": "error",
59
72
  "unicorn/no-nested-ternary": "off",
73
+ "unicorn/no-array-fill-with-reference-type": "error",
60
74
  "import/no-cycle": "error",
61
75
  "import/consistent-type-specifier-style": "off",
76
+ "import/newline-after-import": "error",
62
77
  "promise/always-return": "error",
63
78
  "promise/no-return-in-finally": "error",
64
79
  "promise/prefer-await-to-then": "off",
65
80
  "promise/prefer-await-to-callbacks": "off",
66
81
  "promise/avoid-new": "off",
82
+ "react/exhaustive-deps": "off",
83
+ "react/forward-ref-uses-ref": "off",
84
+ "react/jsx-key": "off",
85
+ "react/jsx-no-duplicate-props": "off",
86
+ "react/jsx-no-undef": "off",
87
+ "react/jsx-props-no-spread-multi": "off",
88
+ "react/no-children-prop": "off",
89
+ "react/no-danger-with-children": "off",
90
+ "react/no-did-mount-set-state": "off",
91
+ "react/no-did-update-set-state": "off",
92
+ "react/no-direct-mutation-state": "off",
93
+ "react/no-find-dom-node": "off",
94
+ "react/no-is-mounted": "off",
95
+ "react/no-render-return-value": "off",
96
+ "react/no-string-refs": "off",
97
+ "react/no-this-in-sfc": "off",
98
+ "react/no-unsafe": "off",
99
+ "react/no-will-update-set-state": "off",
100
+ "react/void-dom-elements-no-children": "off",
101
+ "react/react-compiler": "error",
67
102
  "sort-keys": "off",
68
103
  "no-plusplus": "off",
69
104
  "no-inline-comments": "off",
@@ -101,6 +136,7 @@ const library = (options = {}) => (0, oxlint.defineConfig)({
101
136
  typeAware: true,
102
137
  ...options.options
103
138
  },
139
+ plugins: Array.from(new Set([...libraryPlugins, ...options.plugins ?? []])),
104
140
  jsPlugins: [
105
141
  stellaLowercasePluginSpecifier,
106
142
  noRawColorsPluginSpecifier,
@@ -119,6 +155,7 @@ exports.default = src_default;
119
155
  exports.library = library;
120
156
  exports.libraryIgnorePatterns = libraryIgnorePatterns;
121
157
  exports.libraryOverrides = libraryOverrides;
158
+ exports.libraryPlugins = libraryPlugins;
122
159
  exports.libraryRules = libraryRules;
123
160
  exports.noRawColorsPluginSpecifier = noRawColorsPluginSpecifier;
124
161
  exports.stellaLowercasePluginSpecifier = stellaLowercasePluginSpecifier;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { defineConfig, type OxlintConfig, type OxlintOverride } from \"oxlint\";\n\ntype Rules = NonNullable<OxlintConfig[\"rules\"]>;\ntype JsPlugins = NonNullable<OxlintConfig[\"jsPlugins\"]>;\ntype Options = NonNullable<OxlintConfig[\"options\"]>;\n\nexport type LibraryOptions = {\n jsPlugins?: JsPlugins;\n ignorePatterns?: string[];\n options?: Options;\n overrides?: OxlintOverride[];\n rules?: Rules;\n};\n\nexport const stellaLowercasePluginSpecifier = \"@stll/oxlint-config/plugin\";\nexport const noRawColorsPluginSpecifier = \"@stll/oxlint-config/no-raw-colors\";\n\nexport const libraryIgnorePatterns = [\"node_modules/\", \"dist/\", \"coverage/\"];\n\nexport const libraryRules = {\n \"no-console\": \"off\",\n \"no-shadow\": \"error\",\n \"require-await\": \"error\",\n \"no-useless-catch\": \"error\",\n \"no-non-null-assertion\": \"error\",\n \"no-useless-assignment\": \"error\",\n \"no-loop-func\": \"error\",\n \"no-nested-ternary\": \"error\",\n \"no-void\": [\"error\", { allowAsStatement: true }],\n \"stella-lowercase/stella-lowercase\": \"error\",\n \"no-raw-colors/no-raw-colors\": \"error\",\n\n \"typescript/no-explicit-any\": \"error\",\n \"typescript/no-dynamic-delete\": \"error\",\n \"typescript/no-misused-promises\": [\n \"error\",\n { checksVoidReturn: { attributes: false } },\n ],\n \"typescript/consistent-type-definitions\": [\"error\", \"type\"],\n \"typescript/consistent-return\": \"error\",\n \"typescript/dot-notation\": \"error\",\n \"typescript/no-inferrable-types\": \"off\",\n \"typescript/no-unnecessary-type-conversion\": \"error\",\n \"typescript/no-unnecessary-condition\": [\n \"error\",\n { allowConstantLoopConditions: \"only-allowed-literals\" },\n ],\n \"typescript/no-unnecessary-type-arguments\": \"error\",\n \"typescript/switch-exhaustiveness-check\": [\n \"error\",\n { considerDefaultExhaustiveForUnions: true },\n ],\n \"typescript/strict-boolean-expressions\": [\n \"error\",\n { allowNullableString: true, allowNullableBoolean: true },\n ],\n \"typescript/no-confusing-void-expression\": [\n \"error\",\n { ignoreArrowShorthand: true, ignoreVoidReturningFunctions: true },\n ],\n \"typescript/prefer-nullish-coalescing\": [\n \"error\",\n { ignorePrimitives: { string: true, boolean: true } },\n ],\n \"typescript/only-throw-error\": \"error\",\n \"typescript/return-await\": [\"error\", \"error-handling-correctness-only\"],\n\n \"unicorn/no-useless-undefined\": \"off\",\n \"unicorn/prefer-array-find\": \"error\",\n \"unicorn/prefer-at\": \"error\",\n \"unicorn/prefer-set-has\": \"error\",\n \"unicorn/filename-case\": \"off\",\n \"unicorn/consistent-function-scoping\": \"off\",\n \"unicorn/prefer-ternary\": \"off\",\n \"unicorn/no-array-reduce\": \"error\",\n \"unicorn/no-nested-ternary\": \"off\",\n\n \"import/no-cycle\": \"error\",\n \"import/consistent-type-specifier-style\": \"off\",\n\n \"promise/always-return\": \"error\",\n \"promise/no-return-in-finally\": \"error\",\n \"promise/prefer-await-to-then\": \"off\",\n \"promise/prefer-await-to-callbacks\": \"off\",\n \"promise/avoid-new\": \"off\",\n\n \"sort-keys\": \"off\",\n \"no-plusplus\": \"off\",\n \"no-inline-comments\": \"off\",\n \"max-statements\": \"off\",\n \"prefer-destructuring\": \"off\",\n \"no-negated-condition\": \"off\",\n \"no-use-before-define\": \"off\",\n \"no-useless-return\": \"off\",\n \"no-warning-comments\": \"off\",\n \"no-unexpected-multiline\": \"off\",\n \"max-classes-per-file\": \"off\",\n \"class-methods-use-this\": \"off\",\n \"no-unmodified-loop-condition\": \"off\",\n complexity: \"off\",\n \"func-style\": \"off\",\n \"func-names\": \"off\",\n \"default-case\": \"off\",\n} satisfies Rules;\n\nexport const libraryOverrides = [\n {\n files: [\"**/*.{test,spec}.{ts,tsx,js,jsx}\", \"__test__/**\", \"__tests__/**\"],\n rules: {\n \"no-console\": \"off\",\n \"require-await\": \"off\",\n \"no-non-null-assertion\": \"off\",\n },\n },\n] satisfies OxlintOverride[];\n\nexport const library = (options: LibraryOptions = {}): OxlintConfig =>\n defineConfig({\n options: {\n denyWarnings: true,\n reportUnusedDisableDirectives: \"error\",\n typeAware: true,\n ...options.options,\n },\n jsPlugins: [\n stellaLowercasePluginSpecifier,\n noRawColorsPluginSpecifier,\n ...(options.jsPlugins ?? []),\n ],\n ignorePatterns: [\n ...libraryIgnorePatterns,\n ...(options.ignorePatterns ?? []),\n ],\n rules: {\n ...libraryRules,\n ...options.rules,\n },\n overrides: [...libraryOverrides, ...(options.overrides ?? [])],\n });\n\nexport default library();\n"],"mappings":";;;;;;AAcA,MAAa,iCAAiC;AAC9C,MAAa,6BAA6B;AAE1C,MAAa,wBAAwB;CAAC;CAAiB;CAAS;AAAW;AAE3E,MAAa,eAAe;CAC1B,cAAc;CACd,aAAa;CACb,iBAAiB;CACjB,oBAAoB;CACpB,yBAAyB;CACzB,yBAAyB;CACzB,gBAAgB;CAChB,qBAAqB;CACrB,WAAW,CAAC,SAAS,EAAE,kBAAkB,KAAK,CAAC;CAC/C,qCAAqC;CACrC,+BAA+B;CAE/B,8BAA8B;CAC9B,gCAAgC;CAChC,kCAAkC,CAChC,SACA,EAAE,kBAAkB,EAAE,YAAY,MAAM,EAAE,CAC5C;CACA,0CAA0C,CAAC,SAAS,MAAM;CAC1D,gCAAgC;CAChC,2BAA2B;CAC3B,kCAAkC;CAClC,6CAA6C;CAC7C,uCAAuC,CACrC,SACA,EAAE,6BAA6B,wBAAwB,CACzD;CACA,4CAA4C;CAC5C,0CAA0C,CACxC,SACA,EAAE,oCAAoC,KAAK,CAC7C;CACA,yCAAyC,CACvC,SACA;EAAE,qBAAqB;EAAM,sBAAsB;CAAK,CAC1D;CACA,2CAA2C,CACzC,SACA;EAAE,sBAAsB;EAAM,8BAA8B;CAAK,CACnE;CACA,wCAAwC,CACtC,SACA,EAAE,kBAAkB;EAAE,QAAQ;EAAM,SAAS;CAAK,EAAE,CACtD;CACA,+BAA+B;CAC/B,2BAA2B,CAAC,SAAS,iCAAiC;CAEtE,gCAAgC;CAChC,6BAA6B;CAC7B,qBAAqB;CACrB,0BAA0B;CAC1B,yBAAyB;CACzB,uCAAuC;CACvC,0BAA0B;CAC1B,2BAA2B;CAC3B,6BAA6B;CAE7B,mBAAmB;CACnB,0CAA0C;CAE1C,yBAAyB;CACzB,gCAAgC;CAChC,gCAAgC;CAChC,qCAAqC;CACrC,qBAAqB;CAErB,aAAa;CACb,eAAe;CACf,sBAAsB;CACtB,kBAAkB;CAClB,wBAAwB;CACxB,wBAAwB;CACxB,wBAAwB;CACxB,qBAAqB;CACrB,uBAAuB;CACvB,2BAA2B;CAC3B,wBAAwB;CACxB,0BAA0B;CAC1B,gCAAgC;CAChC,YAAY;CACZ,cAAc;CACd,cAAc;CACd,gBAAgB;AAClB;AAEA,MAAa,mBAAmB,CAC9B;CACE,OAAO;EAAC;EAAoC;EAAe;CAAc;CACzE,OAAO;EACL,cAAc;EACd,iBAAiB;EACjB,yBAAyB;CAC3B;AACF,CACF;AAEA,MAAa,WAAW,UAA0B,CAAC,OAAA,GAAA,OAAA,cACpC;CACX,SAAS;EACP,cAAc;EACd,+BAA+B;EAC/B,WAAW;EACX,GAAG,QAAQ;CACb;CACA,WAAW;EACT;EACA;EACA,GAAI,QAAQ,aAAa,CAAC;CAC5B;CACA,gBAAgB,CACd,GAAG,uBACH,GAAI,QAAQ,kBAAkB,CAAC,CACjC;CACA,OAAO;EACL,GAAG;EACH,GAAG,QAAQ;CACb;CACA,WAAW,CAAC,GAAG,kBAAkB,GAAI,QAAQ,aAAa,CAAC,CAAE;AAC/D,CAAC;AAEH,IAAA,cAAe,QAAQ"}
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { defineConfig, type OxlintConfig, type OxlintOverride } from \"oxlint\";\n\ntype Rules = NonNullable<OxlintConfig[\"rules\"]>;\ntype JsPlugins = NonNullable<OxlintConfig[\"jsPlugins\"]>;\ntype Options = NonNullable<OxlintConfig[\"options\"]>;\ntype Plugins = NonNullable<OxlintConfig[\"plugins\"]>;\n\nexport type LibraryOptions = {\n jsPlugins?: JsPlugins;\n ignorePatterns?: string[];\n options?: Options;\n overrides?: OxlintOverride[];\n plugins?: Plugins;\n rules?: Rules;\n};\n\nexport const stellaLowercasePluginSpecifier = \"@stll/oxlint-config/plugin\";\nexport const noRawColorsPluginSpecifier = \"@stll/oxlint-config/no-raw-colors\";\n\nexport const libraryIgnorePatterns = [\"node_modules/\", \"dist/\", \"coverage/\"];\n\n// Setting oxlint's `plugins` config replaces its built-in default list rather\n// than appending to it. This must stay in sync with every plugin-prefixed\n// rule below: `import/*` and `promise/*` rules are configured further down,\n// but oxlint disables both plugins unless they are listed here, which left\n// `import/no-cycle` and every `promise/*` rule silently unenforced. `react`\n// is enabled for `react/react-compiler`; see the comment on that rule for\n// why every other `react/*` rule is explicitly turned back off below.\nexport const libraryPlugins = [\n \"eslint\",\n \"typescript\",\n \"unicorn\",\n \"oxc\",\n \"import\",\n \"promise\",\n \"react\",\n] satisfies Plugins;\n\nexport const libraryRules = {\n \"no-console\": \"off\",\n \"no-shadow\": \"error\",\n \"require-await\": \"error\",\n \"no-useless-catch\": \"error\",\n \"no-non-null-assertion\": \"error\",\n \"no-useless-assignment\": \"error\",\n \"no-loop-func\": \"error\",\n \"no-nested-ternary\": \"error\",\n \"no-void\": [\"error\", { allowAsStatement: true }],\n // Callback expressions should stay lexically scoped; avoids accidental `this` rebinding.\n \"prefer-arrow-callback\": \"error\",\n \"stella-lowercase/stella-lowercase\": \"error\",\n \"no-raw-colors/no-raw-colors\": \"error\",\n\n // Spreading into an accumulator on every loop iteration is O(n^2); push/concat instead.\n \"oxc/no-accumulating-spread\": \"error\",\n // Spreading inside `.map()` allocates a new array per callback invocation; push instead.\n \"oxc/no-map-spread\": \"error\",\n // Flags `if`/`switch` branches with identical bodies: likely dead logic or a missed merge.\n \"oxc/branches-sharing-code\": \"error\",\n\n \"typescript/no-explicit-any\": \"error\",\n \"typescript/no-dynamic-delete\": \"error\",\n \"typescript/no-misused-promises\": [\n \"error\",\n { checksVoidReturn: { attributes: false } },\n ],\n \"typescript/consistent-type-definitions\": [\"error\", \"type\"],\n \"typescript/consistent-return\": \"error\",\n \"typescript/dot-notation\": \"error\",\n \"typescript/no-inferrable-types\": \"off\",\n \"typescript/no-unnecessary-type-conversion\": \"error\",\n \"typescript/no-unnecessary-condition\": [\n \"error\",\n { allowConstantLoopConditions: \"only-allowed-literals\" },\n ],\n \"typescript/no-unnecessary-type-arguments\": \"error\",\n \"typescript/switch-exhaustiveness-check\": [\n \"error\",\n { considerDefaultExhaustiveForUnions: true },\n ],\n \"typescript/strict-boolean-expressions\": [\n \"error\",\n { allowNullableString: true, allowNullableBoolean: true },\n ],\n \"typescript/no-confusing-void-expression\": [\n \"error\",\n { ignoreArrowShorthand: true, ignoreVoidReturningFunctions: true },\n ],\n \"typescript/prefer-nullish-coalescing\": [\n \"error\",\n { ignorePrimitives: { string: true, boolean: true } },\n ],\n \"typescript/only-throw-error\": \"error\",\n \"typescript/return-await\": [\"error\", \"error-handling-correctness-only\"],\n\n \"unicorn/no-useless-undefined\": \"off\",\n \"unicorn/prefer-array-find\": \"error\",\n \"unicorn/prefer-at\": \"error\",\n \"unicorn/prefer-set-has\": \"error\",\n \"unicorn/filename-case\": \"off\",\n \"unicorn/consistent-function-scoping\": \"off\",\n \"unicorn/prefer-ternary\": \"off\",\n \"unicorn/no-array-reduce\": \"error\",\n \"unicorn/no-nested-ternary\": \"off\",\n // `Array.from({ length }).fill(obj)` shares one reference across every slot.\n \"unicorn/no-array-fill-with-reference-type\": \"error\",\n\n \"import/no-cycle\": \"error\",\n \"import/consistent-type-specifier-style\": \"off\",\n // Keep a blank line after the import block so it stays visually separate from module body.\n \"import/newline-after-import\": \"error\",\n\n \"promise/always-return\": \"error\",\n \"promise/no-return-in-finally\": \"error\",\n \"promise/prefer-await-to-then\": \"off\",\n \"promise/prefer-await-to-callbacks\": \"off\",\n \"promise/avoid-new\": \"off\",\n\n // Enabling the `react` plugin (above) turns on its whole correctness-category\n // rule set at \"warn\" by default, not just react-compiler. Only react-compiler\n // is a deliberate addition here, so the rest are turned off to keep this\n // package's blast radius scoped to the one rule being added; lift any of\n // these independently if a future change wants them.\n \"react/exhaustive-deps\": \"off\",\n \"react/forward-ref-uses-ref\": \"off\",\n \"react/jsx-key\": \"off\",\n \"react/jsx-no-duplicate-props\": \"off\",\n \"react/jsx-no-undef\": \"off\",\n \"react/jsx-props-no-spread-multi\": \"off\",\n \"react/no-children-prop\": \"off\",\n \"react/no-danger-with-children\": \"off\",\n \"react/no-did-mount-set-state\": \"off\",\n \"react/no-did-update-set-state\": \"off\",\n \"react/no-direct-mutation-state\": \"off\",\n \"react/no-find-dom-node\": \"off\",\n \"react/no-is-mounted\": \"off\",\n \"react/no-render-return-value\": \"off\",\n \"react/no-string-refs\": \"off\",\n \"react/no-this-in-sfc\": \"off\",\n \"react/no-unsafe\": \"off\",\n \"react/no-will-update-set-state\": \"off\",\n \"react/void-dom-elements-no-children\": \"off\",\n // Requires oxlint >= 1.70. Nursery rule upstream: flags violations of the\n // Rules of React that block compiler memoization; diagnostics may shift\n // between oxlint minors, so re-audit findings after bumping the oxlint\n // devDependency. oxlint has no bulk-suppression/baseline mechanism as of\n // 1.72.0 (oxc-project/oxc#10549 tracks the upstream feature request and is\n // still open); consumers adopting this against an existing findings\n // backlog should carve out temporary `overrides` entries per legacy path\n // (or per rule, at `\"off\"`) and fix forward, rather than expecting a\n // generated suppression file.\n \"react/react-compiler\": \"error\",\n\n \"sort-keys\": \"off\",\n \"no-plusplus\": \"off\",\n \"no-inline-comments\": \"off\",\n \"max-statements\": \"off\",\n \"prefer-destructuring\": \"off\",\n \"no-negated-condition\": \"off\",\n \"no-use-before-define\": \"off\",\n \"no-useless-return\": \"off\",\n \"no-warning-comments\": \"off\",\n \"no-unexpected-multiline\": \"off\",\n \"max-classes-per-file\": \"off\",\n \"class-methods-use-this\": \"off\",\n \"no-unmodified-loop-condition\": \"off\",\n complexity: \"off\",\n \"func-style\": \"off\",\n \"func-names\": \"off\",\n \"default-case\": \"off\",\n} satisfies Rules;\n\nexport const libraryOverrides = [\n {\n files: [\"**/*.{test,spec}.{ts,tsx,js,jsx}\", \"__test__/**\", \"__tests__/**\"],\n rules: {\n \"no-console\": \"off\",\n \"require-await\": \"off\",\n \"no-non-null-assertion\": \"off\",\n },\n },\n] satisfies OxlintOverride[];\n\nexport const library = (options: LibraryOptions = {}): OxlintConfig =>\n defineConfig({\n options: {\n denyWarnings: true,\n reportUnusedDisableDirectives: \"error\",\n typeAware: true,\n ...options.options,\n },\n plugins: Array.from(\n new Set([...libraryPlugins, ...(options.plugins ?? [])]),\n ),\n jsPlugins: [\n stellaLowercasePluginSpecifier,\n noRawColorsPluginSpecifier,\n ...(options.jsPlugins ?? []),\n ],\n ignorePatterns: [\n ...libraryIgnorePatterns,\n ...(options.ignorePatterns ?? []),\n ],\n rules: {\n ...libraryRules,\n ...options.rules,\n },\n overrides: [...libraryOverrides, ...(options.overrides ?? [])],\n });\n\nexport default library();\n"],"mappings":"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"}
package/dist/index.d.cts CHANGED
@@ -4,16 +4,19 @@ import { OxlintConfig, OxlintOverride } from "oxlint";
4
4
  type Rules = NonNullable<OxlintConfig["rules"]>;
5
5
  type JsPlugins = NonNullable<OxlintConfig["jsPlugins"]>;
6
6
  type Options = NonNullable<OxlintConfig["options"]>;
7
+ type Plugins = NonNullable<OxlintConfig["plugins"]>;
7
8
  type LibraryOptions = {
8
9
  jsPlugins?: JsPlugins;
9
10
  ignorePatterns?: string[];
10
11
  options?: Options;
11
12
  overrides?: OxlintOverride[];
13
+ plugins?: Plugins;
12
14
  rules?: Rules;
13
15
  };
14
16
  declare const stellaLowercasePluginSpecifier = "@stll/oxlint-config/plugin";
15
17
  declare const noRawColorsPluginSpecifier = "@stll/oxlint-config/no-raw-colors";
16
18
  declare const libraryIgnorePatterns: string[];
19
+ declare const libraryPlugins: ("eslint" | "react" | "unicorn" | "typescript" | "oxc" | "import" | "promise")[];
17
20
  declare const libraryRules: {
18
21
  "no-console": "off";
19
22
  "no-shadow": "error";
@@ -24,45 +27,49 @@ declare const libraryRules: {
24
27
  "no-loop-func": "error";
25
28
  "no-nested-ternary": "error";
26
29
  "no-void": ["error", {
27
- allowAsStatement: boolean;
30
+ allowAsStatement: true;
28
31
  }];
32
+ "prefer-arrow-callback": "error";
29
33
  "stella-lowercase/stella-lowercase": "error";
30
34
  "no-raw-colors/no-raw-colors": "error";
35
+ "oxc/no-accumulating-spread": "error";
36
+ "oxc/no-map-spread": "error";
37
+ "oxc/branches-sharing-code": "error";
31
38
  "typescript/no-explicit-any": "error";
32
39
  "typescript/no-dynamic-delete": "error";
33
40
  "typescript/no-misused-promises": ["error", {
34
41
  checksVoidReturn: {
35
- attributes: boolean;
42
+ attributes: false;
36
43
  };
37
44
  }];
38
- "typescript/consistent-type-definitions": ["error", string];
45
+ "typescript/consistent-type-definitions": ["error", "type"];
39
46
  "typescript/consistent-return": "error";
40
47
  "typescript/dot-notation": "error";
41
48
  "typescript/no-inferrable-types": "off";
42
49
  "typescript/no-unnecessary-type-conversion": "error";
43
50
  "typescript/no-unnecessary-condition": ["error", {
44
- allowConstantLoopConditions: string;
51
+ allowConstantLoopConditions: "only-allowed-literals";
45
52
  }];
46
53
  "typescript/no-unnecessary-type-arguments": "error";
47
54
  "typescript/switch-exhaustiveness-check": ["error", {
48
- considerDefaultExhaustiveForUnions: boolean;
55
+ considerDefaultExhaustiveForUnions: true;
49
56
  }];
50
57
  "typescript/strict-boolean-expressions": ["error", {
51
- allowNullableString: boolean;
52
- allowNullableBoolean: boolean;
58
+ allowNullableString: true;
59
+ allowNullableBoolean: true;
53
60
  }];
54
61
  "typescript/no-confusing-void-expression": ["error", {
55
- ignoreArrowShorthand: boolean;
56
- ignoreVoidReturningFunctions: boolean;
62
+ ignoreArrowShorthand: true;
63
+ ignoreVoidReturningFunctions: true;
57
64
  }];
58
65
  "typescript/prefer-nullish-coalescing": ["error", {
59
66
  ignorePrimitives: {
60
- string: boolean;
61
- boolean: boolean;
67
+ string: true;
68
+ boolean: true;
62
69
  };
63
70
  }];
64
71
  "typescript/only-throw-error": "error";
65
- "typescript/return-await": ["error", string];
72
+ "typescript/return-await": ["error", "error-handling-correctness-only"];
66
73
  "unicorn/no-useless-undefined": "off";
67
74
  "unicorn/prefer-array-find": "error";
68
75
  "unicorn/prefer-at": "error";
@@ -72,13 +79,35 @@ declare const libraryRules: {
72
79
  "unicorn/prefer-ternary": "off";
73
80
  "unicorn/no-array-reduce": "error";
74
81
  "unicorn/no-nested-ternary": "off";
82
+ "unicorn/no-array-fill-with-reference-type": "error";
75
83
  "import/no-cycle": "error";
76
84
  "import/consistent-type-specifier-style": "off";
85
+ "import/newline-after-import": "error";
77
86
  "promise/always-return": "error";
78
87
  "promise/no-return-in-finally": "error";
79
88
  "promise/prefer-await-to-then": "off";
80
89
  "promise/prefer-await-to-callbacks": "off";
81
90
  "promise/avoid-new": "off";
91
+ "react/exhaustive-deps": "off";
92
+ "react/forward-ref-uses-ref": "off";
93
+ "react/jsx-key": "off";
94
+ "react/jsx-no-duplicate-props": "off";
95
+ "react/jsx-no-undef": "off";
96
+ "react/jsx-props-no-spread-multi": "off";
97
+ "react/no-children-prop": "off";
98
+ "react/no-danger-with-children": "off";
99
+ "react/no-did-mount-set-state": "off";
100
+ "react/no-did-update-set-state": "off";
101
+ "react/no-direct-mutation-state": "off";
102
+ "react/no-find-dom-node": "off";
103
+ "react/no-is-mounted": "off";
104
+ "react/no-render-return-value": "off";
105
+ "react/no-string-refs": "off";
106
+ "react/no-this-in-sfc": "off";
107
+ "react/no-unsafe": "off";
108
+ "react/no-will-update-set-state": "off";
109
+ "react/void-dom-elements-no-children": "off";
110
+ "react/react-compiler": "error";
82
111
  "sort-keys": "off";
83
112
  "no-plusplus": "off";
84
113
  "no-inline-comments": "off";
@@ -108,5 +137,5 @@ declare const libraryOverrides: {
108
137
  declare const library: (options?: LibraryOptions) => OxlintConfig;
109
138
  declare const _default: OxlintConfig;
110
139
  //#endregion
111
- export { LibraryOptions, _default as default, library, libraryIgnorePatterns, libraryOverrides, libraryRules, noRawColorsPluginSpecifier, stellaLowercasePluginSpecifier };
140
+ export { LibraryOptions, _default as default, library, libraryIgnorePatterns, libraryOverrides, libraryPlugins, libraryRules, noRawColorsPluginSpecifier, stellaLowercasePluginSpecifier };
112
141
  //# sourceMappingURL=index.d.cts.map
package/dist/index.d.mts CHANGED
@@ -4,16 +4,19 @@ import { OxlintConfig, OxlintOverride } from "oxlint";
4
4
  type Rules = NonNullable<OxlintConfig["rules"]>;
5
5
  type JsPlugins = NonNullable<OxlintConfig["jsPlugins"]>;
6
6
  type Options = NonNullable<OxlintConfig["options"]>;
7
+ type Plugins = NonNullable<OxlintConfig["plugins"]>;
7
8
  type LibraryOptions = {
8
9
  jsPlugins?: JsPlugins;
9
10
  ignorePatterns?: string[];
10
11
  options?: Options;
11
12
  overrides?: OxlintOverride[];
13
+ plugins?: Plugins;
12
14
  rules?: Rules;
13
15
  };
14
16
  declare const stellaLowercasePluginSpecifier = "@stll/oxlint-config/plugin";
15
17
  declare const noRawColorsPluginSpecifier = "@stll/oxlint-config/no-raw-colors";
16
18
  declare const libraryIgnorePatterns: string[];
19
+ declare const libraryPlugins: ("eslint" | "react" | "unicorn" | "typescript" | "oxc" | "import" | "promise")[];
17
20
  declare const libraryRules: {
18
21
  "no-console": "off";
19
22
  "no-shadow": "error";
@@ -24,45 +27,49 @@ declare const libraryRules: {
24
27
  "no-loop-func": "error";
25
28
  "no-nested-ternary": "error";
26
29
  "no-void": ["error", {
27
- allowAsStatement: boolean;
30
+ allowAsStatement: true;
28
31
  }];
32
+ "prefer-arrow-callback": "error";
29
33
  "stella-lowercase/stella-lowercase": "error";
30
34
  "no-raw-colors/no-raw-colors": "error";
35
+ "oxc/no-accumulating-spread": "error";
36
+ "oxc/no-map-spread": "error";
37
+ "oxc/branches-sharing-code": "error";
31
38
  "typescript/no-explicit-any": "error";
32
39
  "typescript/no-dynamic-delete": "error";
33
40
  "typescript/no-misused-promises": ["error", {
34
41
  checksVoidReturn: {
35
- attributes: boolean;
42
+ attributes: false;
36
43
  };
37
44
  }];
38
- "typescript/consistent-type-definitions": ["error", string];
45
+ "typescript/consistent-type-definitions": ["error", "type"];
39
46
  "typescript/consistent-return": "error";
40
47
  "typescript/dot-notation": "error";
41
48
  "typescript/no-inferrable-types": "off";
42
49
  "typescript/no-unnecessary-type-conversion": "error";
43
50
  "typescript/no-unnecessary-condition": ["error", {
44
- allowConstantLoopConditions: string;
51
+ allowConstantLoopConditions: "only-allowed-literals";
45
52
  }];
46
53
  "typescript/no-unnecessary-type-arguments": "error";
47
54
  "typescript/switch-exhaustiveness-check": ["error", {
48
- considerDefaultExhaustiveForUnions: boolean;
55
+ considerDefaultExhaustiveForUnions: true;
49
56
  }];
50
57
  "typescript/strict-boolean-expressions": ["error", {
51
- allowNullableString: boolean;
52
- allowNullableBoolean: boolean;
58
+ allowNullableString: true;
59
+ allowNullableBoolean: true;
53
60
  }];
54
61
  "typescript/no-confusing-void-expression": ["error", {
55
- ignoreArrowShorthand: boolean;
56
- ignoreVoidReturningFunctions: boolean;
62
+ ignoreArrowShorthand: true;
63
+ ignoreVoidReturningFunctions: true;
57
64
  }];
58
65
  "typescript/prefer-nullish-coalescing": ["error", {
59
66
  ignorePrimitives: {
60
- string: boolean;
61
- boolean: boolean;
67
+ string: true;
68
+ boolean: true;
62
69
  };
63
70
  }];
64
71
  "typescript/only-throw-error": "error";
65
- "typescript/return-await": ["error", string];
72
+ "typescript/return-await": ["error", "error-handling-correctness-only"];
66
73
  "unicorn/no-useless-undefined": "off";
67
74
  "unicorn/prefer-array-find": "error";
68
75
  "unicorn/prefer-at": "error";
@@ -72,13 +79,35 @@ declare const libraryRules: {
72
79
  "unicorn/prefer-ternary": "off";
73
80
  "unicorn/no-array-reduce": "error";
74
81
  "unicorn/no-nested-ternary": "off";
82
+ "unicorn/no-array-fill-with-reference-type": "error";
75
83
  "import/no-cycle": "error";
76
84
  "import/consistent-type-specifier-style": "off";
85
+ "import/newline-after-import": "error";
77
86
  "promise/always-return": "error";
78
87
  "promise/no-return-in-finally": "error";
79
88
  "promise/prefer-await-to-then": "off";
80
89
  "promise/prefer-await-to-callbacks": "off";
81
90
  "promise/avoid-new": "off";
91
+ "react/exhaustive-deps": "off";
92
+ "react/forward-ref-uses-ref": "off";
93
+ "react/jsx-key": "off";
94
+ "react/jsx-no-duplicate-props": "off";
95
+ "react/jsx-no-undef": "off";
96
+ "react/jsx-props-no-spread-multi": "off";
97
+ "react/no-children-prop": "off";
98
+ "react/no-danger-with-children": "off";
99
+ "react/no-did-mount-set-state": "off";
100
+ "react/no-did-update-set-state": "off";
101
+ "react/no-direct-mutation-state": "off";
102
+ "react/no-find-dom-node": "off";
103
+ "react/no-is-mounted": "off";
104
+ "react/no-render-return-value": "off";
105
+ "react/no-string-refs": "off";
106
+ "react/no-this-in-sfc": "off";
107
+ "react/no-unsafe": "off";
108
+ "react/no-will-update-set-state": "off";
109
+ "react/void-dom-elements-no-children": "off";
110
+ "react/react-compiler": "error";
82
111
  "sort-keys": "off";
83
112
  "no-plusplus": "off";
84
113
  "no-inline-comments": "off";
@@ -108,5 +137,5 @@ declare const libraryOverrides: {
108
137
  declare const library: (options?: LibraryOptions) => OxlintConfig;
109
138
  declare const _default: OxlintConfig;
110
139
  //#endregion
111
- export { LibraryOptions, _default as default, library, libraryIgnorePatterns, libraryOverrides, libraryRules, noRawColorsPluginSpecifier, stellaLowercasePluginSpecifier };
140
+ export { LibraryOptions, _default as default, library, libraryIgnorePatterns, libraryOverrides, libraryPlugins, libraryRules, noRawColorsPluginSpecifier, stellaLowercasePluginSpecifier };
112
141
  //# sourceMappingURL=index.d.mts.map
package/dist/index.mjs CHANGED
@@ -7,6 +7,15 @@ const libraryIgnorePatterns = [
7
7
  "dist/",
8
8
  "coverage/"
9
9
  ];
10
+ const libraryPlugins = [
11
+ "eslint",
12
+ "typescript",
13
+ "unicorn",
14
+ "oxc",
15
+ "import",
16
+ "promise",
17
+ "react"
18
+ ];
10
19
  const libraryRules = {
11
20
  "no-console": "off",
12
21
  "no-shadow": "error",
@@ -17,8 +26,12 @@ const libraryRules = {
17
26
  "no-loop-func": "error",
18
27
  "no-nested-ternary": "error",
19
28
  "no-void": ["error", { allowAsStatement: true }],
29
+ "prefer-arrow-callback": "error",
20
30
  "stella-lowercase/stella-lowercase": "error",
21
31
  "no-raw-colors/no-raw-colors": "error",
32
+ "oxc/no-accumulating-spread": "error",
33
+ "oxc/no-map-spread": "error",
34
+ "oxc/branches-sharing-code": "error",
22
35
  "typescript/no-explicit-any": "error",
23
36
  "typescript/no-dynamic-delete": "error",
24
37
  "typescript/no-misused-promises": ["error", { checksVoidReturn: { attributes: false } }],
@@ -53,13 +66,35 @@ const libraryRules = {
53
66
  "unicorn/prefer-ternary": "off",
54
67
  "unicorn/no-array-reduce": "error",
55
68
  "unicorn/no-nested-ternary": "off",
69
+ "unicorn/no-array-fill-with-reference-type": "error",
56
70
  "import/no-cycle": "error",
57
71
  "import/consistent-type-specifier-style": "off",
72
+ "import/newline-after-import": "error",
58
73
  "promise/always-return": "error",
59
74
  "promise/no-return-in-finally": "error",
60
75
  "promise/prefer-await-to-then": "off",
61
76
  "promise/prefer-await-to-callbacks": "off",
62
77
  "promise/avoid-new": "off",
78
+ "react/exhaustive-deps": "off",
79
+ "react/forward-ref-uses-ref": "off",
80
+ "react/jsx-key": "off",
81
+ "react/jsx-no-duplicate-props": "off",
82
+ "react/jsx-no-undef": "off",
83
+ "react/jsx-props-no-spread-multi": "off",
84
+ "react/no-children-prop": "off",
85
+ "react/no-danger-with-children": "off",
86
+ "react/no-did-mount-set-state": "off",
87
+ "react/no-did-update-set-state": "off",
88
+ "react/no-direct-mutation-state": "off",
89
+ "react/no-find-dom-node": "off",
90
+ "react/no-is-mounted": "off",
91
+ "react/no-render-return-value": "off",
92
+ "react/no-string-refs": "off",
93
+ "react/no-this-in-sfc": "off",
94
+ "react/no-unsafe": "off",
95
+ "react/no-will-update-set-state": "off",
96
+ "react/void-dom-elements-no-children": "off",
97
+ "react/react-compiler": "error",
63
98
  "sort-keys": "off",
64
99
  "no-plusplus": "off",
65
100
  "no-inline-comments": "off",
@@ -97,6 +132,7 @@ const library = (options = {}) => defineConfig({
97
132
  typeAware: true,
98
133
  ...options.options
99
134
  },
135
+ plugins: Array.from(new Set([...libraryPlugins, ...options.plugins ?? []])),
100
136
  jsPlugins: [
101
137
  stellaLowercasePluginSpecifier,
102
138
  noRawColorsPluginSpecifier,
@@ -111,6 +147,6 @@ const library = (options = {}) => defineConfig({
111
147
  });
112
148
  var src_default = library();
113
149
  //#endregion
114
- export { src_default as default, library, libraryIgnorePatterns, libraryOverrides, libraryRules, noRawColorsPluginSpecifier, stellaLowercasePluginSpecifier };
150
+ export { src_default as default, library, libraryIgnorePatterns, libraryOverrides, libraryPlugins, libraryRules, noRawColorsPluginSpecifier, stellaLowercasePluginSpecifier };
115
151
 
116
152
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { defineConfig, type OxlintConfig, type OxlintOverride } from \"oxlint\";\n\ntype Rules = NonNullable<OxlintConfig[\"rules\"]>;\ntype JsPlugins = NonNullable<OxlintConfig[\"jsPlugins\"]>;\ntype Options = NonNullable<OxlintConfig[\"options\"]>;\n\nexport type LibraryOptions = {\n jsPlugins?: JsPlugins;\n ignorePatterns?: string[];\n options?: Options;\n overrides?: OxlintOverride[];\n rules?: Rules;\n};\n\nexport const stellaLowercasePluginSpecifier = \"@stll/oxlint-config/plugin\";\nexport const noRawColorsPluginSpecifier = \"@stll/oxlint-config/no-raw-colors\";\n\nexport const libraryIgnorePatterns = [\"node_modules/\", \"dist/\", \"coverage/\"];\n\nexport const libraryRules = {\n \"no-console\": \"off\",\n \"no-shadow\": \"error\",\n \"require-await\": \"error\",\n \"no-useless-catch\": \"error\",\n \"no-non-null-assertion\": \"error\",\n \"no-useless-assignment\": \"error\",\n \"no-loop-func\": \"error\",\n \"no-nested-ternary\": \"error\",\n \"no-void\": [\"error\", { allowAsStatement: true }],\n \"stella-lowercase/stella-lowercase\": \"error\",\n \"no-raw-colors/no-raw-colors\": \"error\",\n\n \"typescript/no-explicit-any\": \"error\",\n \"typescript/no-dynamic-delete\": \"error\",\n \"typescript/no-misused-promises\": [\n \"error\",\n { checksVoidReturn: { attributes: false } },\n ],\n \"typescript/consistent-type-definitions\": [\"error\", \"type\"],\n \"typescript/consistent-return\": \"error\",\n \"typescript/dot-notation\": \"error\",\n \"typescript/no-inferrable-types\": \"off\",\n \"typescript/no-unnecessary-type-conversion\": \"error\",\n \"typescript/no-unnecessary-condition\": [\n \"error\",\n { allowConstantLoopConditions: \"only-allowed-literals\" },\n ],\n \"typescript/no-unnecessary-type-arguments\": \"error\",\n \"typescript/switch-exhaustiveness-check\": [\n \"error\",\n { considerDefaultExhaustiveForUnions: true },\n ],\n \"typescript/strict-boolean-expressions\": [\n \"error\",\n { allowNullableString: true, allowNullableBoolean: true },\n ],\n \"typescript/no-confusing-void-expression\": [\n \"error\",\n { ignoreArrowShorthand: true, ignoreVoidReturningFunctions: true },\n ],\n \"typescript/prefer-nullish-coalescing\": [\n \"error\",\n { ignorePrimitives: { string: true, boolean: true } },\n ],\n \"typescript/only-throw-error\": \"error\",\n \"typescript/return-await\": [\"error\", \"error-handling-correctness-only\"],\n\n \"unicorn/no-useless-undefined\": \"off\",\n \"unicorn/prefer-array-find\": \"error\",\n \"unicorn/prefer-at\": \"error\",\n \"unicorn/prefer-set-has\": \"error\",\n \"unicorn/filename-case\": \"off\",\n \"unicorn/consistent-function-scoping\": \"off\",\n \"unicorn/prefer-ternary\": \"off\",\n \"unicorn/no-array-reduce\": \"error\",\n \"unicorn/no-nested-ternary\": \"off\",\n\n \"import/no-cycle\": \"error\",\n \"import/consistent-type-specifier-style\": \"off\",\n\n \"promise/always-return\": \"error\",\n \"promise/no-return-in-finally\": \"error\",\n \"promise/prefer-await-to-then\": \"off\",\n \"promise/prefer-await-to-callbacks\": \"off\",\n \"promise/avoid-new\": \"off\",\n\n \"sort-keys\": \"off\",\n \"no-plusplus\": \"off\",\n \"no-inline-comments\": \"off\",\n \"max-statements\": \"off\",\n \"prefer-destructuring\": \"off\",\n \"no-negated-condition\": \"off\",\n \"no-use-before-define\": \"off\",\n \"no-useless-return\": \"off\",\n \"no-warning-comments\": \"off\",\n \"no-unexpected-multiline\": \"off\",\n \"max-classes-per-file\": \"off\",\n \"class-methods-use-this\": \"off\",\n \"no-unmodified-loop-condition\": \"off\",\n complexity: \"off\",\n \"func-style\": \"off\",\n \"func-names\": \"off\",\n \"default-case\": \"off\",\n} satisfies Rules;\n\nexport const libraryOverrides = [\n {\n files: [\"**/*.{test,spec}.{ts,tsx,js,jsx}\", \"__test__/**\", \"__tests__/**\"],\n rules: {\n \"no-console\": \"off\",\n \"require-await\": \"off\",\n \"no-non-null-assertion\": \"off\",\n },\n },\n] satisfies OxlintOverride[];\n\nexport const library = (options: LibraryOptions = {}): OxlintConfig =>\n defineConfig({\n options: {\n denyWarnings: true,\n reportUnusedDisableDirectives: \"error\",\n typeAware: true,\n ...options.options,\n },\n jsPlugins: [\n stellaLowercasePluginSpecifier,\n noRawColorsPluginSpecifier,\n ...(options.jsPlugins ?? []),\n ],\n ignorePatterns: [\n ...libraryIgnorePatterns,\n ...(options.ignorePatterns ?? []),\n ],\n rules: {\n ...libraryRules,\n ...options.rules,\n },\n overrides: [...libraryOverrides, ...(options.overrides ?? [])],\n });\n\nexport default library();\n"],"mappings":";;AAcA,MAAa,iCAAiC;AAC9C,MAAa,6BAA6B;AAE1C,MAAa,wBAAwB;CAAC;CAAiB;CAAS;AAAW;AAE3E,MAAa,eAAe;CAC1B,cAAc;CACd,aAAa;CACb,iBAAiB;CACjB,oBAAoB;CACpB,yBAAyB;CACzB,yBAAyB;CACzB,gBAAgB;CAChB,qBAAqB;CACrB,WAAW,CAAC,SAAS,EAAE,kBAAkB,KAAK,CAAC;CAC/C,qCAAqC;CACrC,+BAA+B;CAE/B,8BAA8B;CAC9B,gCAAgC;CAChC,kCAAkC,CAChC,SACA,EAAE,kBAAkB,EAAE,YAAY,MAAM,EAAE,CAC5C;CACA,0CAA0C,CAAC,SAAS,MAAM;CAC1D,gCAAgC;CAChC,2BAA2B;CAC3B,kCAAkC;CAClC,6CAA6C;CAC7C,uCAAuC,CACrC,SACA,EAAE,6BAA6B,wBAAwB,CACzD;CACA,4CAA4C;CAC5C,0CAA0C,CACxC,SACA,EAAE,oCAAoC,KAAK,CAC7C;CACA,yCAAyC,CACvC,SACA;EAAE,qBAAqB;EAAM,sBAAsB;CAAK,CAC1D;CACA,2CAA2C,CACzC,SACA;EAAE,sBAAsB;EAAM,8BAA8B;CAAK,CACnE;CACA,wCAAwC,CACtC,SACA,EAAE,kBAAkB;EAAE,QAAQ;EAAM,SAAS;CAAK,EAAE,CACtD;CACA,+BAA+B;CAC/B,2BAA2B,CAAC,SAAS,iCAAiC;CAEtE,gCAAgC;CAChC,6BAA6B;CAC7B,qBAAqB;CACrB,0BAA0B;CAC1B,yBAAyB;CACzB,uCAAuC;CACvC,0BAA0B;CAC1B,2BAA2B;CAC3B,6BAA6B;CAE7B,mBAAmB;CACnB,0CAA0C;CAE1C,yBAAyB;CACzB,gCAAgC;CAChC,gCAAgC;CAChC,qCAAqC;CACrC,qBAAqB;CAErB,aAAa;CACb,eAAe;CACf,sBAAsB;CACtB,kBAAkB;CAClB,wBAAwB;CACxB,wBAAwB;CACxB,wBAAwB;CACxB,qBAAqB;CACrB,uBAAuB;CACvB,2BAA2B;CAC3B,wBAAwB;CACxB,0BAA0B;CAC1B,gCAAgC;CAChC,YAAY;CACZ,cAAc;CACd,cAAc;CACd,gBAAgB;AAClB;AAEA,MAAa,mBAAmB,CAC9B;CACE,OAAO;EAAC;EAAoC;EAAe;CAAc;CACzE,OAAO;EACL,cAAc;EACd,iBAAiB;EACjB,yBAAyB;CAC3B;AACF,CACF;AAEA,MAAa,WAAW,UAA0B,CAAC,MACjD,aAAa;CACX,SAAS;EACP,cAAc;EACd,+BAA+B;EAC/B,WAAW;EACX,GAAG,QAAQ;CACb;CACA,WAAW;EACT;EACA;EACA,GAAI,QAAQ,aAAa,CAAC;CAC5B;CACA,gBAAgB,CACd,GAAG,uBACH,GAAI,QAAQ,kBAAkB,CAAC,CACjC;CACA,OAAO;EACL,GAAG;EACH,GAAG,QAAQ;CACb;CACA,WAAW,CAAC,GAAG,kBAAkB,GAAI,QAAQ,aAAa,CAAC,CAAE;AAC/D,CAAC;AAEH,IAAA,cAAe,QAAQ"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { defineConfig, type OxlintConfig, type OxlintOverride } from \"oxlint\";\n\ntype Rules = NonNullable<OxlintConfig[\"rules\"]>;\ntype JsPlugins = NonNullable<OxlintConfig[\"jsPlugins\"]>;\ntype Options = NonNullable<OxlintConfig[\"options\"]>;\ntype Plugins = NonNullable<OxlintConfig[\"plugins\"]>;\n\nexport type LibraryOptions = {\n jsPlugins?: JsPlugins;\n ignorePatterns?: string[];\n options?: Options;\n overrides?: OxlintOverride[];\n plugins?: Plugins;\n rules?: Rules;\n};\n\nexport const stellaLowercasePluginSpecifier = \"@stll/oxlint-config/plugin\";\nexport const noRawColorsPluginSpecifier = \"@stll/oxlint-config/no-raw-colors\";\n\nexport const libraryIgnorePatterns = [\"node_modules/\", \"dist/\", \"coverage/\"];\n\n// Setting oxlint's `plugins` config replaces its built-in default list rather\n// than appending to it. This must stay in sync with every plugin-prefixed\n// rule below: `import/*` and `promise/*` rules are configured further down,\n// but oxlint disables both plugins unless they are listed here, which left\n// `import/no-cycle` and every `promise/*` rule silently unenforced. `react`\n// is enabled for `react/react-compiler`; see the comment on that rule for\n// why every other `react/*` rule is explicitly turned back off below.\nexport const libraryPlugins = [\n \"eslint\",\n \"typescript\",\n \"unicorn\",\n \"oxc\",\n \"import\",\n \"promise\",\n \"react\",\n] satisfies Plugins;\n\nexport const libraryRules = {\n \"no-console\": \"off\",\n \"no-shadow\": \"error\",\n \"require-await\": \"error\",\n \"no-useless-catch\": \"error\",\n \"no-non-null-assertion\": \"error\",\n \"no-useless-assignment\": \"error\",\n \"no-loop-func\": \"error\",\n \"no-nested-ternary\": \"error\",\n \"no-void\": [\"error\", { allowAsStatement: true }],\n // Callback expressions should stay lexically scoped; avoids accidental `this` rebinding.\n \"prefer-arrow-callback\": \"error\",\n \"stella-lowercase/stella-lowercase\": \"error\",\n \"no-raw-colors/no-raw-colors\": \"error\",\n\n // Spreading into an accumulator on every loop iteration is O(n^2); push/concat instead.\n \"oxc/no-accumulating-spread\": \"error\",\n // Spreading inside `.map()` allocates a new array per callback invocation; push instead.\n \"oxc/no-map-spread\": \"error\",\n // Flags `if`/`switch` branches with identical bodies: likely dead logic or a missed merge.\n \"oxc/branches-sharing-code\": \"error\",\n\n \"typescript/no-explicit-any\": \"error\",\n \"typescript/no-dynamic-delete\": \"error\",\n \"typescript/no-misused-promises\": [\n \"error\",\n { checksVoidReturn: { attributes: false } },\n ],\n \"typescript/consistent-type-definitions\": [\"error\", \"type\"],\n \"typescript/consistent-return\": \"error\",\n \"typescript/dot-notation\": \"error\",\n \"typescript/no-inferrable-types\": \"off\",\n \"typescript/no-unnecessary-type-conversion\": \"error\",\n \"typescript/no-unnecessary-condition\": [\n \"error\",\n { allowConstantLoopConditions: \"only-allowed-literals\" },\n ],\n \"typescript/no-unnecessary-type-arguments\": \"error\",\n \"typescript/switch-exhaustiveness-check\": [\n \"error\",\n { considerDefaultExhaustiveForUnions: true },\n ],\n \"typescript/strict-boolean-expressions\": [\n \"error\",\n { allowNullableString: true, allowNullableBoolean: true },\n ],\n \"typescript/no-confusing-void-expression\": [\n \"error\",\n { ignoreArrowShorthand: true, ignoreVoidReturningFunctions: true },\n ],\n \"typescript/prefer-nullish-coalescing\": [\n \"error\",\n { ignorePrimitives: { string: true, boolean: true } },\n ],\n \"typescript/only-throw-error\": \"error\",\n \"typescript/return-await\": [\"error\", \"error-handling-correctness-only\"],\n\n \"unicorn/no-useless-undefined\": \"off\",\n \"unicorn/prefer-array-find\": \"error\",\n \"unicorn/prefer-at\": \"error\",\n \"unicorn/prefer-set-has\": \"error\",\n \"unicorn/filename-case\": \"off\",\n \"unicorn/consistent-function-scoping\": \"off\",\n \"unicorn/prefer-ternary\": \"off\",\n \"unicorn/no-array-reduce\": \"error\",\n \"unicorn/no-nested-ternary\": \"off\",\n // `Array.from({ length }).fill(obj)` shares one reference across every slot.\n \"unicorn/no-array-fill-with-reference-type\": \"error\",\n\n \"import/no-cycle\": \"error\",\n \"import/consistent-type-specifier-style\": \"off\",\n // Keep a blank line after the import block so it stays visually separate from module body.\n \"import/newline-after-import\": \"error\",\n\n \"promise/always-return\": \"error\",\n \"promise/no-return-in-finally\": \"error\",\n \"promise/prefer-await-to-then\": \"off\",\n \"promise/prefer-await-to-callbacks\": \"off\",\n \"promise/avoid-new\": \"off\",\n\n // Enabling the `react` plugin (above) turns on its whole correctness-category\n // rule set at \"warn\" by default, not just react-compiler. Only react-compiler\n // is a deliberate addition here, so the rest are turned off to keep this\n // package's blast radius scoped to the one rule being added; lift any of\n // these independently if a future change wants them.\n \"react/exhaustive-deps\": \"off\",\n \"react/forward-ref-uses-ref\": \"off\",\n \"react/jsx-key\": \"off\",\n \"react/jsx-no-duplicate-props\": \"off\",\n \"react/jsx-no-undef\": \"off\",\n \"react/jsx-props-no-spread-multi\": \"off\",\n \"react/no-children-prop\": \"off\",\n \"react/no-danger-with-children\": \"off\",\n \"react/no-did-mount-set-state\": \"off\",\n \"react/no-did-update-set-state\": \"off\",\n \"react/no-direct-mutation-state\": \"off\",\n \"react/no-find-dom-node\": \"off\",\n \"react/no-is-mounted\": \"off\",\n \"react/no-render-return-value\": \"off\",\n \"react/no-string-refs\": \"off\",\n \"react/no-this-in-sfc\": \"off\",\n \"react/no-unsafe\": \"off\",\n \"react/no-will-update-set-state\": \"off\",\n \"react/void-dom-elements-no-children\": \"off\",\n // Requires oxlint >= 1.70. Nursery rule upstream: flags violations of the\n // Rules of React that block compiler memoization; diagnostics may shift\n // between oxlint minors, so re-audit findings after bumping the oxlint\n // devDependency. oxlint has no bulk-suppression/baseline mechanism as of\n // 1.72.0 (oxc-project/oxc#10549 tracks the upstream feature request and is\n // still open); consumers adopting this against an existing findings\n // backlog should carve out temporary `overrides` entries per legacy path\n // (or per rule, at `\"off\"`) and fix forward, rather than expecting a\n // generated suppression file.\n \"react/react-compiler\": \"error\",\n\n \"sort-keys\": \"off\",\n \"no-plusplus\": \"off\",\n \"no-inline-comments\": \"off\",\n \"max-statements\": \"off\",\n \"prefer-destructuring\": \"off\",\n \"no-negated-condition\": \"off\",\n \"no-use-before-define\": \"off\",\n \"no-useless-return\": \"off\",\n \"no-warning-comments\": \"off\",\n \"no-unexpected-multiline\": \"off\",\n \"max-classes-per-file\": \"off\",\n \"class-methods-use-this\": \"off\",\n \"no-unmodified-loop-condition\": \"off\",\n complexity: \"off\",\n \"func-style\": \"off\",\n \"func-names\": \"off\",\n \"default-case\": \"off\",\n} satisfies Rules;\n\nexport const libraryOverrides = [\n {\n files: [\"**/*.{test,spec}.{ts,tsx,js,jsx}\", \"__test__/**\", \"__tests__/**\"],\n rules: {\n \"no-console\": \"off\",\n \"require-await\": \"off\",\n \"no-non-null-assertion\": \"off\",\n },\n },\n] satisfies OxlintOverride[];\n\nexport const library = (options: LibraryOptions = {}): OxlintConfig =>\n defineConfig({\n options: {\n denyWarnings: true,\n reportUnusedDisableDirectives: \"error\",\n typeAware: true,\n ...options.options,\n },\n plugins: Array.from(\n new Set([...libraryPlugins, ...(options.plugins ?? [])]),\n ),\n jsPlugins: [\n stellaLowercasePluginSpecifier,\n noRawColorsPluginSpecifier,\n ...(options.jsPlugins ?? []),\n ],\n ignorePatterns: [\n ...libraryIgnorePatterns,\n ...(options.ignorePatterns ?? []),\n ],\n rules: {\n ...libraryRules,\n ...options.rules,\n },\n overrides: [...libraryOverrides, ...(options.overrides ?? [])],\n });\n\nexport default library();\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stll/oxlint-config",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "Shared general oxlint configuration for stella packages.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -61,11 +61,11 @@
61
61
  "devDependencies": {
62
62
  "@stll/typescript-config": "workspace:*",
63
63
  "oxfmt": "0.48.0",
64
- "oxlint": "1.67.0",
64
+ "oxlint": "1.71.0",
65
65
  "typescript": "6.0.3"
66
66
  },
67
67
  "peerDependencies": {
68
- "oxlint": ">=1.66.0",
68
+ "oxlint": ">=1.70.0",
69
69
  "oxlint-tsgolint": ">=0.23.0"
70
70
  },
71
71
  "engines": {