@solvro/config 2.0.0-beta.3 → 2.0.0-beta.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 CHANGED
@@ -1,15 +1,45 @@
1
1
  # @solvro/config
2
2
 
3
+ [![CI](https://github.com/Solvro/lib-web-solvro-config/workflows/CI/badge.svg)](https://github.com/Solvro/lib-web-solvro-config/actions/workflows/ci.yml)
4
+ [![Integration Tests](https://github.com/Solvro/lib-web-solvro-config/workflows/Integration%20Tests/badge.svg)](https://github.com/Solvro/lib-web-solvro-config/actions/workflows/integration-tests.yml)
5
+
3
6
  ## Instalacja
4
7
 
5
8
  Wszystkie konfiguracje są zawarte w jednej paczce `@solvro/config`. Aby zainstalować:
6
9
 
10
+ ### Tryb interaktywny (zalecany)
11
+
7
12
  ```sh
8
13
  npx @solvro/config
9
14
  ```
10
15
 
11
16
  I przeklikaj się przez kreatora, polecam klikać cały czas enter, to dostaniesz zalecane konfiguracje. Można uruchamiać pare razy :3
12
17
 
18
+ ### Tryb nieinteraktywny (z flagami CLI)
19
+
20
+ Jeśli pracujesz w środowisku bez interaktywnej powłoki (np. CI/CD), możesz użyć flag CLI:
21
+
22
+ ```sh
23
+ # Zainstaluj wszystkie narzędzia
24
+ npx @solvro/config --all
25
+
26
+ # Zainstaluj wybrane narzędzia
27
+ npx @solvro/config --eslint --prettier --commitlint
28
+
29
+ # Wymuś instalację bez sprawdzania Git
30
+ npx @solvro/config --force --all
31
+ ```
32
+
33
+ #### Dostępne flagi
34
+
35
+ - `--all`, `-a` - zainstaluj wszystkie narzędzia (ESLint, Prettier, GitHub Actions, Commitlint)
36
+ - `--eslint` - zainstaluj konfigurację ESLint
37
+ - `--prettier` - zainstaluj konfigurację Prettier
38
+ - `--gh-action` - zainstaluj GitHub Actions
39
+ - `--commitlint` - zainstaluj konfigurację Commitlint
40
+ - `--force`, `-f` - pomiń sprawdzenie czy Git jest czysty
41
+ - `--help` - wyświetl pomoc
42
+
13
43
  ## Prettier
14
44
 
15
45
  Aby użyć configu dodaj to pole w `package.json`:
@@ -40,3 +70,36 @@ export default solvro();
40
70
  ```
41
71
 
42
72
  Config sam wykryje czy używasz NextJSa czy Adonisa.
73
+
74
+ ## Development & Testing
75
+
76
+ ### Integration Tests
77
+
78
+ Projekt zawiera kompleksowe testy integracyjne, które testują instalację i działanie konfiguracji na świeżej aplikacji Next.js:
79
+
80
+ ```sh
81
+ # Uruchom testy integracyjne lokalnie
82
+ npm run test:integration
83
+
84
+ # Lub bezpośrednio
85
+ ./scripts/test-integration.sh
86
+ ```
87
+
88
+ ### Continuous Integration
89
+
90
+ Testy integracyjne są automatycznie uruchamiane w CI/CD dla:
91
+
92
+ - Różnych wersji Node.js (20, 22)
93
+ - Różnych wersji Next.js (latest, canary)
94
+ - Testowania poszczególnych narzędzi (ESLint, Prettier, Commitlint, GitHub Actions)
95
+ - Warunków błędów i edge cases
96
+
97
+ Testy obejmują:
98
+
99
+ - ✅ Tworzenie świeżej aplikacji Next.js
100
+ - ✅ Instalację @solvro/config
101
+ - ✅ Konfigurację wszystkich narzędzi
102
+ - ✅ Uruchamianie ESLint i Prettier
103
+ - ✅ Weryfikację formatowania kodu
104
+ - ✅ Build aplikacji Next.js
105
+ - ✅ Testowanie warunków błędów
@@ -0,0 +1,56 @@
1
+ import {
2
+ node
3
+ } from "./chunk-AQ5RXFKK.js";
4
+ import {
5
+ imports
6
+ } from "./chunk-DHQ2VVRM.js";
7
+ import "./chunk-HM3MY7J3.js";
8
+ import {
9
+ init_esm_shims
10
+ } from "./chunk-J5OUMHDO.js";
11
+
12
+ // src/eslint/presets/adonis.ts
13
+ init_esm_shims();
14
+ import { configApp } from "@adonisjs/eslint-config";
15
+ var adonisPreset = () => {
16
+ const builtinAdonisConfig = configApp();
17
+ return [
18
+ ...builtinAdonisConfig,
19
+ ...node(),
20
+ ...imports(),
21
+ {
22
+ rules: {
23
+ "@typescript-eslint/naming-convention": [
24
+ "error",
25
+ {
26
+ selector: ["enum", "enumMember", "class", "interface", "typeLike"],
27
+ format: ["PascalCase"],
28
+ leadingUnderscore: "allow",
29
+ trailingUnderscore: "allow"
30
+ },
31
+ {
32
+ selector: [
33
+ "classProperty",
34
+ "classMethod",
35
+ "method",
36
+ "variableLike"
37
+ ],
38
+ format: ["camelCase"],
39
+ leadingUnderscore: "allow",
40
+ trailingUnderscore: "allow"
41
+ },
42
+ {
43
+ selector: "variable",
44
+ format: ["camelCase", "UPPER_CASE", "PascalCase"],
45
+ leadingUnderscore: "allow",
46
+ trailingUnderscore: "allow"
47
+ }
48
+ ]
49
+ }
50
+ }
51
+ ];
52
+ };
53
+ export {
54
+ adonisPreset
55
+ };
56
+ //# sourceMappingURL=adonis-HMBH6E55.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/eslint/presets/adonis.ts"],"sourcesContent":["import type { ConfigWithExtends } from \"typescript-eslint\";\n\nimport { configApp } from \"@adonisjs/eslint-config\";\n\nimport { imports } from \"../configs/imports\";\nimport { node } from \"../configs/node\";\n\nexport const adonisPreset = (): ConfigWithExtends[] => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const builtinAdonisConfig: ConfigWithExtends[] = configApp();\n\n return [\n ...builtinAdonisConfig,\n ...node(),\n ...imports(),\n {\n rules: {\n \"@typescript-eslint/naming-convention\": [\n \"error\",\n {\n selector: [\"enum\", \"enumMember\", \"class\", \"interface\", \"typeLike\"],\n format: [\"PascalCase\"],\n leadingUnderscore: \"allow\",\n trailingUnderscore: \"allow\",\n },\n {\n selector: [\n \"classProperty\",\n \"classMethod\",\n \"method\",\n \"variableLike\",\n ],\n format: [\"camelCase\"],\n leadingUnderscore: \"allow\",\n trailingUnderscore: \"allow\",\n },\n {\n selector: \"variable\",\n format: [\"camelCase\", \"UPPER_CASE\", \"PascalCase\"],\n leadingUnderscore: \"allow\",\n trailingUnderscore: \"allow\",\n },\n ],\n },\n },\n ];\n};\n"],"mappings":";;;;;;;;;;;;AAAA;AAEA,SAAS,iBAAiB;AAKnB,IAAM,eAAe,MAA2B;AAErD,QAAM,sBAA2C,UAAU;AAE3D,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG,KAAK;AAAA,IACR,GAAG,QAAQ;AAAA,IACX;AAAA,MACE,OAAO;AAAA,QACL,wCAAwC;AAAA,UACtC;AAAA,UACA;AAAA,YACE,UAAU,CAAC,QAAQ,cAAc,SAAS,aAAa,UAAU;AAAA,YACjE,QAAQ,CAAC,YAAY;AAAA,YACrB,mBAAmB;AAAA,YACnB,oBAAoB;AAAA,UACtB;AAAA,UACA;AAAA,YACE,UAAU;AAAA,cACR;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,YACA,QAAQ,CAAC,WAAW;AAAA,YACpB,mBAAmB;AAAA,YACnB,oBAAoB;AAAA,UACtB;AAAA,UACA;AAAA,YACE,UAAU;AAAA,YACV,QAAQ,CAAC,aAAa,cAAc,YAAY;AAAA,YAChD,mBAAmB;AAAA,YACnB,oBAAoB;AAAA,UACtB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,34 @@
1
+ import {
2
+ default4 as default2
3
+ } from "./chunk-HM3MY7J3.js";
4
+ import {
5
+ init_esm_shims
6
+ } from "./chunk-J5OUMHDO.js";
7
+
8
+ // src/eslint/configs/node.ts
9
+ init_esm_shims();
10
+ function node() {
11
+ return [
12
+ {
13
+ name: "solvro/node/rules",
14
+ plugins: {
15
+ node: default2
16
+ },
17
+ rules: {
18
+ "node/handle-callback-err": ["error", "^(err|error)$"],
19
+ "node/no-deprecated-api": "error",
20
+ "node/no-exports-assign": "error",
21
+ "node/no-new-require": "error",
22
+ "node/no-path-concat": "error",
23
+ "node/prefer-global/buffer": ["error"],
24
+ "node/prefer-global/process": ["error"],
25
+ "node/process-exit-as-throw": "error"
26
+ }
27
+ }
28
+ ];
29
+ }
30
+
31
+ export {
32
+ node
33
+ };
34
+ //# sourceMappingURL=chunk-AQ5RXFKK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/eslint/configs/node.ts"],"sourcesContent":["import type { ConfigWithExtends } from \"typescript-eslint\";\n\nimport { pluginNode } from \"../plugins\";\n\nexport function node(): ConfigWithExtends[] {\n return [\n {\n name: \"solvro/node/rules\",\n plugins: {\n node: pluginNode,\n },\n rules: {\n \"node/handle-callback-err\": [\"error\", \"^(err|error)$\"],\n \"node/no-deprecated-api\": \"error\",\n \"node/no-exports-assign\": \"error\",\n \"node/no-new-require\": \"error\",\n \"node/no-path-concat\": \"error\",\n \"node/prefer-global/buffer\": [\"error\"],\n \"node/prefer-global/process\": [\"error\"],\n \"node/process-exit-as-throw\": \"error\",\n },\n },\n ];\n}\n"],"mappings":";;;;;;;;AAAA;AAIO,SAAS,OAA4B;AAC1C,SAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP,MAAMA;AAAA,MACR;AAAA,MACA,OAAO;AAAA,QACL,4BAA4B,CAAC,SAAS,eAAe;AAAA,QACrD,0BAA0B;AAAA,QAC1B,0BAA0B;AAAA,QAC1B,uBAAuB;AAAA,QACvB,uBAAuB;AAAA,QACvB,6BAA6B,CAAC,OAAO;AAAA,QACrC,8BAA8B,CAAC,OAAO;AAAA,QACtC,8BAA8B;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AACF;","names":["default"]}
@@ -0,0 +1,86 @@
1
+ import {
2
+ default2,
3
+ default3
4
+ } from "./chunk-HM3MY7J3.js";
5
+ import {
6
+ init_esm_shims
7
+ } from "./chunk-J5OUMHDO.js";
8
+
9
+ // src/eslint/configs/imports.ts
10
+ init_esm_shims();
11
+ var forbiddenUiLibraries = [
12
+ "@headlessui/react",
13
+ "@mui/material",
14
+ "@chakra-ui/react",
15
+ "@chakra-ui/core",
16
+ "@nextui-org/react",
17
+ "react-bootstrap",
18
+ "antd"
19
+ ];
20
+ function imports({
21
+ forbidDefaultExport = true
22
+ } = {}) {
23
+ const config = [
24
+ default3.flatConfigs.typescript,
25
+ {
26
+ name: "solvro/imports/rules",
27
+ plugins: {
28
+ antfu: default2
29
+ },
30
+ rules: {
31
+ "antfu/import-dedupe": "error",
32
+ "antfu/no-import-dist": "error",
33
+ "antfu/no-import-node-modules-by-path": "error",
34
+ ...default3.flatConfigs.recommended.rules,
35
+ "import/no-dynamic-require": "warn",
36
+ "import/no-unresolved": "off",
37
+ "import/consistent-type-specifier-style": "warn",
38
+ "@typescript-eslint/no-restricted-imports": [
39
+ "error",
40
+ {
41
+ paths: [
42
+ {
43
+ name: "axios",
44
+ message: "Please use fetch instead"
45
+ },
46
+ ...forbiddenUiLibraries.map((library) => ({
47
+ name: library,
48
+ message: `Please use ui.shadcn.com components instead.`
49
+ }))
50
+ ]
51
+ }
52
+ ]
53
+ }
54
+ }
55
+ ];
56
+ if (forbidDefaultExport) {
57
+ config.push(
58
+ {
59
+ rules: { "import/no-default-export": "error" }
60
+ },
61
+ {
62
+ files: [
63
+ "tsup.config.*",
64
+ "eslint.config.*",
65
+ ".commitlintrc.*",
66
+ "knip.*",
67
+ "next.config.*",
68
+ "commitlint.config.*",
69
+ ".releaserc.*",
70
+ "vitest.config.*",
71
+ "postcss.config.*",
72
+ "playwright.config.*"
73
+ ],
74
+ rules: {
75
+ "import/no-default-export": "off"
76
+ }
77
+ }
78
+ );
79
+ }
80
+ return config;
81
+ }
82
+
83
+ export {
84
+ imports
85
+ };
86
+ //# sourceMappingURL=chunk-DHQ2VVRM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/eslint/configs/imports.ts"],"sourcesContent":["import type { Config, ConfigWithExtends } from \"typescript-eslint\";\n\nimport { pluginAntfu, pluginImport } from \"../plugins\";\n\nconst forbiddenUiLibraries = [\n \"@headlessui/react\",\n \"@mui/material\",\n \"@chakra-ui/react\",\n \"@chakra-ui/core\",\n \"@nextui-org/react\",\n \"react-bootstrap\",\n \"antd\",\n];\n\nexport function imports({\n forbidDefaultExport = true,\n} = {}): ConfigWithExtends[] {\n const config: Config = [\n pluginImport.flatConfigs.typescript,\n {\n name: \"solvro/imports/rules\",\n plugins: {\n antfu: pluginAntfu,\n },\n\n rules: {\n \"antfu/import-dedupe\": \"error\",\n \"antfu/no-import-dist\": \"error\",\n \"antfu/no-import-node-modules-by-path\": \"error\",\n\n ...(pluginImport.flatConfigs.recommended\n .rules as ConfigWithExtends[\"rules\"]),\n \"import/no-dynamic-require\": \"warn\",\n \"import/no-unresolved\": \"off\",\n \"import/consistent-type-specifier-style\": \"warn\",\n \"@typescript-eslint/no-restricted-imports\": [\n \"error\",\n {\n paths: [\n {\n name: \"axios\",\n message: \"Please use fetch instead\",\n },\n ...forbiddenUiLibraries.map((library) => ({\n name: library,\n message: `Please use ui.shadcn.com components instead.`,\n })),\n ],\n },\n ],\n },\n },\n ] satisfies Config;\n\n if (forbidDefaultExport) {\n config.push(\n {\n rules: { \"import/no-default-export\": \"error\" },\n },\n {\n files: [\n \"tsup.config.*\",\n \"eslint.config.*\",\n \".commitlintrc.*\",\n \"knip.*\",\n \"next.config.*\",\n \"commitlint.config.*\",\n \".releaserc.*\",\n \"vitest.config.*\",\n \"postcss.config.*\",\n \"playwright.config.*\",\n ],\n rules: {\n \"import/no-default-export\": \"off\",\n },\n },\n );\n }\n\n return config;\n}\n"],"mappings":";;;;;;;;;AAAA;AAIA,IAAM,uBAAuB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,SAAS,QAAQ;AAAA,EACtB,sBAAsB;AACxB,IAAI,CAAC,GAAwB;AAC3B,QAAM,SAAiB;AAAA,IACrBA,SAAa,YAAY;AAAA,IACzB;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP,OAAOA;AAAA,MACT;AAAA,MAEA,OAAO;AAAA,QACL,uBAAuB;AAAA,QACvB,wBAAwB;AAAA,QACxB,wCAAwC;AAAA,QAExC,GAAIA,SAAa,YAAY,YAC1B;AAAA,QACH,6BAA6B;AAAA,QAC7B,wBAAwB;AAAA,QACxB,0CAA0C;AAAA,QAC1C,4CAA4C;AAAA,UAC1C;AAAA,UACA;AAAA,YACE,OAAO;AAAA,cACL;AAAA,gBACE,MAAM;AAAA,gBACN,SAAS;AAAA,cACX;AAAA,cACA,GAAG,qBAAqB,IAAI,CAAC,aAAa;AAAA,gBACxC,MAAM;AAAA,gBACN,SAAS;AAAA,cACX,EAAE;AAAA,YACJ;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,qBAAqB;AACvB,WAAO;AAAA,MACL;AAAA,QACE,OAAO,EAAE,4BAA4B,QAAQ;AAAA,MAC/C;AAAA,MACA;AAAA,QACE,OAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,OAAO;AAAA,UACL,4BAA4B;AAAA,QAC9B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;","names":["default"]}
@@ -0,0 +1,22 @@
1
+ import {
2
+ init_esm_shims
3
+ } from "./chunk-J5OUMHDO.js";
4
+
5
+ // src/eslint/plugins.ts
6
+ init_esm_shims();
7
+ import { default as default2 } from "@eslint-community/eslint-plugin-eslint-comments";
8
+ import { default as default3 } from "eslint-plugin-antfu";
9
+ import { default as default4 } from "eslint-plugin-import";
10
+ import { default as default5 } from "eslint-plugin-n";
11
+ import { default as default6 } from "eslint-plugin-unicorn";
12
+ import { default as default7 } from "eslint-plugin-unused-imports";
13
+
14
+ export {
15
+ default2 as default,
16
+ default3 as default2,
17
+ default4 as default3,
18
+ default5 as default4,
19
+ default6 as default5,
20
+ default7 as default6
21
+ };
22
+ //# sourceMappingURL=chunk-HM3MY7J3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/eslint/plugins.ts"],"sourcesContent":["//@ts-expect-error not working\nexport { default as pluginComments } from \"@eslint-community/eslint-plugin-eslint-comments\";\nexport { default as pluginAntfu } from \"eslint-plugin-antfu\";\nexport { default as pluginImport } from \"eslint-plugin-import\";\nexport { default as pluginNode } from \"eslint-plugin-n\";\nexport { default as pluginUnicorn } from \"eslint-plugin-unicorn\";\nexport { default as pluginUnusedImports } from \"eslint-plugin-unused-imports\";\n"],"mappings":";;;;;AAAA;AACA,SAAoB,WAAXA,gBAAiC;AAC1C,SAAoB,WAAXA,gBAA8B;AACvC,SAAoB,WAAXA,gBAA+B;AACxC,SAAoB,WAAXA,gBAA6B;AACtC,SAAoB,WAAXA,gBAAgC;AACzC,SAAoB,WAAXA,gBAAsC;","names":["default"]}
@@ -0,0 +1,44 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __esm = (fn, res) => function __init() {
8
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
9
+ };
10
+ var __commonJS = (cb, mod) => function __require() {
11
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+
30
+ // node_modules/tsup/assets/esm_shims.js
31
+ import path from "path";
32
+ import { fileURLToPath } from "url";
33
+ var init_esm_shims = __esm({
34
+ "node_modules/tsup/assets/esm_shims.js"() {
35
+ "use strict";
36
+ }
37
+ });
38
+
39
+ export {
40
+ __commonJS,
41
+ __toESM,
42
+ init_esm_shims
43
+ };
44
+ //# sourceMappingURL=chunk-J5OUMHDO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../node_modules/tsup/assets/esm_shims.js"],"sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAF9B;AAAA;AAAA;AAAA;AAAA;","names":[]}
@@ -0,0 +1,189 @@
1
+ import {
2
+ default2,
3
+ default5 as default3
4
+ } from "./chunk-HM3MY7J3.js";
5
+ import {
6
+ init_esm_shims
7
+ } from "./chunk-J5OUMHDO.js";
8
+
9
+ // src/eslint/configs/typescript-strict.ts
10
+ init_esm_shims();
11
+ import tseslint from "typescript-eslint";
12
+ function typescriptStrict() {
13
+ return [
14
+ ...tseslint.configs.strictTypeChecked,
15
+ ...tseslint.configs.stylisticTypeChecked,
16
+ {
17
+ name: "solvro/typescript-strict/setup",
18
+ plugins: {
19
+ antfu: default2
20
+ }
21
+ },
22
+ {
23
+ files: ["**/*.{ts,tsx}"],
24
+ name: "solvro/typescript-strict/rules",
25
+ rules: {
26
+ "@typescript-eslint/ban-ts-comment": [
27
+ "error",
28
+ { "ts-expect-error": "allow-with-description" }
29
+ ],
30
+ "@typescript-eslint/consistent-type-definitions": [
31
+ "error",
32
+ "interface"
33
+ ],
34
+ "@typescript-eslint/consistent-type-imports": [
35
+ "error",
36
+ {
37
+ disallowTypeAnnotations: false,
38
+ prefer: "type-imports"
39
+ }
40
+ ],
41
+ "@typescript-eslint/method-signature-style": ["error", "property"],
42
+ // https://www.totaltypescript.com/method-shorthand-syntax-considered-harmful
43
+ "@typescript-eslint/no-dupe-class-members": "error",
44
+ "@typescript-eslint/no-empty-object-type": [
45
+ "error",
46
+ { allowInterfaces: "always" }
47
+ ],
48
+ "@typescript-eslint/no-import-type-side-effects": "error",
49
+ "@typescript-eslint/no-redeclare": ["error", { builtinGlobals: false }],
50
+ "@typescript-eslint/no-require-imports": "error",
51
+ "@typescript-eslint/no-unused-expressions": [
52
+ "error",
53
+ {
54
+ allowShortCircuit: true,
55
+ allowTaggedTemplates: true,
56
+ allowTernary: true
57
+ }
58
+ ],
59
+ "@typescript-eslint/no-use-before-define": [
60
+ "error",
61
+ { classes: false, functions: false, variables: true }
62
+ ],
63
+ "@typescript-eslint/no-wrapper-object-types": "error",
64
+ // prevent unnecessary use of void operator
65
+ "@typescript-eslint/no-meaningless-void-operator": "error",
66
+ // "using non-null assertions cancels the benefits of the strict
67
+ // null-checking mode."
68
+ // warn when one of the types in union / intersection overrides others
69
+ "@typescript-eslint/no-redundant-type-constituents": "warn",
70
+ // prevent variables shadowing
71
+ "no-shadow": "error",
72
+ "@typescript-eslint/no-shadow": "error",
73
+ // prevent assignment of this, signals a wrong usage of it
74
+ "@typescript-eslint/no-this-alias": "error",
75
+ // prevent throwing non-error
76
+ "no-throw-literal": "off",
77
+ // prevent unnecessary explicitly adding a default type argument
78
+ "@typescript-eslint/no-unnecessary-type-arguments": "error",
79
+ // prevent unnecessary assertions that won't change the outcome
80
+ "@typescript-eslint/no-unnecessary-type-assertion": "error",
81
+ // prevent extending default types
82
+ "@typescript-eslint/no-unnecessary-type-constraint": "error",
83
+ // force typing out function arguments
84
+ "@typescript-eslint/no-unsafe-argument": "error",
85
+ // prevent usage of any via reassigning
86
+ "@typescript-eslint/no-unsafe-assignment": "error",
87
+ // prevent usage of any via calling it
88
+ "@typescript-eslint/no-unsafe-call": "error",
89
+ // prevent usage of any via using it's members
90
+ "@typescript-eslint/no-unsafe-member-access": "error",
91
+ // prevent reverting any from functions
92
+ "@typescript-eslint/no-unsafe-return": "error",
93
+ // prevent unused expressions
94
+ "no-unused-expressions": "off",
95
+ // var<'string'> = 'string' -> var = 'string' as const
96
+ "@typescript-eslint/prefer-as-const": "error",
97
+ // force initializing enums
98
+ "@typescript-eslint/prefer-enum-initializers": "error",
99
+ // prefer for x of obj to for let i = 0...
100
+ "@typescript-eslint/prefer-for-of": "error",
101
+ // prefer includes() to indexOf()
102
+ "@typescript-eslint/prefer-includes": "error",
103
+ // use literals for enum initialization
104
+ "@typescript-eslint/prefer-literal-enum-member": "error",
105
+ // prefer safe cascade of a value when dealing with undefined or null
106
+ "@typescript-eslint/prefer-nullish-coalescing": "error",
107
+ // prefer optional chaining (a?.b)
108
+ "@typescript-eslint/prefer-optional-chain": "error",
109
+ // prefer using type parameter for Array.reduce
110
+ "@typescript-eslint/prefer-reduce-type-parameter": "error",
111
+ // prefer RegExp#exec when no /g flag in regex
112
+ "@typescript-eslint/prefer-regexp-exec": "error",
113
+ // enforce `this` as a type when stating type for a method
114
+ "@typescript-eslint/prefer-return-this-type": "error",
115
+ // enforce startsWith to indexOf === 0
116
+ "@typescript-eslint/prefer-string-starts-ends-with": "error",
117
+ // prevents default behavior of .sort() - which is confusing
118
+ "@typescript-eslint/require-array-sort-compare": "error",
119
+ // no async functions without awaits in body
120
+ "require-await": "off",
121
+ "@typescript-eslint/require-await": "error",
122
+ // prevent number + string
123
+ "@typescript-eslint/restrict-plus-operands": "error",
124
+ // only allow string in templates
125
+ "@typescript-eslint/restrict-template-expressions": "error",
126
+ // prevent returning await
127
+ "no-return-await": "off",
128
+ "@typescript-eslint/return-await": "error",
129
+ // only booleans in ifs and whiles
130
+ "@typescript-eslint/strict-boolean-expressions": "error",
131
+ // check if all paths are followed in code
132
+ "@typescript-eslint/switch-exhaustiveness-check": "error",
133
+ "dot-notation": "off",
134
+ "no-implied-eval": "off",
135
+ "@typescript-eslint/await-thenable": "error",
136
+ "@typescript-eslint/dot-notation": ["error", { allowKeywords: true }],
137
+ "@typescript-eslint/no-floating-promises": "error",
138
+ "@typescript-eslint/no-for-in-array": "error",
139
+ "@typescript-eslint/no-implied-eval": "error",
140
+ "@typescript-eslint/no-misused-promises": "error",
141
+ "@typescript-eslint/promise-function-async": "error",
142
+ "@typescript-eslint/unbound-method": "error",
143
+ "no-restricted-imports": "off"
144
+ }
145
+ }
146
+ ];
147
+ }
148
+
149
+ // src/eslint/configs/unicorn.ts
150
+ init_esm_shims();
151
+ function unicorn() {
152
+ return [
153
+ {
154
+ name: "solvro/unicorn/rules",
155
+ plugins: {
156
+ unicorn: default3
157
+ },
158
+ rules: {
159
+ ...default3.configs.recommended.rules,
160
+ "unicorn/no-array-reduce": "off",
161
+ "unicorn/no-null": "off",
162
+ "unicorn/no-useless-switch-case": "off",
163
+ "unicorn/prefer-global-this": "off",
164
+ "unicorn/prevent-abbreviations": [
165
+ "error",
166
+ {
167
+ replacements: {
168
+ env: false,
169
+ envs: false,
170
+ props: false,
171
+ prop: false,
172
+ ref: false
173
+ },
174
+ allowList: {
175
+ e2e: true
176
+ },
177
+ ignore: [String.raw`e2e`]
178
+ }
179
+ ]
180
+ }
181
+ }
182
+ ];
183
+ }
184
+
185
+ export {
186
+ typescriptStrict,
187
+ unicorn
188
+ };
189
+ //# sourceMappingURL=chunk-OEFF22F3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/eslint/configs/typescript-strict.ts","../src/eslint/configs/unicorn.ts"],"sourcesContent":["import tseslint from \"typescript-eslint\";\nimport type { ConfigWithExtends } from \"typescript-eslint\";\n\nimport { pluginAntfu } from \"../plugins\";\n\nexport function typescriptStrict(): ConfigWithExtends[] {\n return [\n ...tseslint.configs.strictTypeChecked,\n ...tseslint.configs.stylisticTypeChecked,\n {\n name: \"solvro/typescript-strict/setup\",\n plugins: {\n antfu: pluginAntfu,\n },\n },\n {\n files: [\"**/*.{ts,tsx}\"],\n name: \"solvro/typescript-strict/rules\",\n rules: {\n \"@typescript-eslint/ban-ts-comment\": [\n \"error\",\n { \"ts-expect-error\": \"allow-with-description\" },\n ],\n \"@typescript-eslint/consistent-type-definitions\": [\n \"error\",\n \"interface\",\n ],\n \"@typescript-eslint/consistent-type-imports\": [\n \"error\",\n {\n disallowTypeAnnotations: false,\n prefer: \"type-imports\",\n },\n ],\n \"@typescript-eslint/method-signature-style\": [\"error\", \"property\"], // https://www.totaltypescript.com/method-shorthand-syntax-considered-harmful\n \"@typescript-eslint/no-dupe-class-members\": \"error\",\n \"@typescript-eslint/no-empty-object-type\": [\n \"error\",\n { allowInterfaces: \"always\" },\n ],\n \"@typescript-eslint/no-import-type-side-effects\": \"error\",\n \"@typescript-eslint/no-redeclare\": [\"error\", { builtinGlobals: false }],\n \"@typescript-eslint/no-require-imports\": \"error\",\n \"@typescript-eslint/no-unused-expressions\": [\n \"error\",\n {\n allowShortCircuit: true,\n allowTaggedTemplates: true,\n allowTernary: true,\n },\n ],\n \"@typescript-eslint/no-use-before-define\": [\n \"error\",\n { classes: false, functions: false, variables: true },\n ],\n \"@typescript-eslint/no-wrapper-object-types\": \"error\",\n // prevent unnecessary use of void operator\n \"@typescript-eslint/no-meaningless-void-operator\": \"error\",\n // \"using non-null assertions cancels the benefits of the strict\n // null-checking mode.\"\n // warn when one of the types in union / intersection overrides others\n \"@typescript-eslint/no-redundant-type-constituents\": \"warn\",\n // prevent variables shadowing\n \"no-shadow\": \"error\",\n \"@typescript-eslint/no-shadow\": \"error\",\n // prevent assignment of this, signals a wrong usage of it\n \"@typescript-eslint/no-this-alias\": \"error\",\n // prevent throwing non-error\n \"no-throw-literal\": \"off\",\n\n // prevent unnecessary explicitly adding a default type argument\n \"@typescript-eslint/no-unnecessary-type-arguments\": \"error\",\n // prevent unnecessary assertions that won't change the outcome\n \"@typescript-eslint/no-unnecessary-type-assertion\": \"error\",\n // prevent extending default types\n \"@typescript-eslint/no-unnecessary-type-constraint\": \"error\",\n // force typing out function arguments\n \"@typescript-eslint/no-unsafe-argument\": \"error\",\n // prevent usage of any via reassigning\n \"@typescript-eslint/no-unsafe-assignment\": \"error\",\n // prevent usage of any via calling it\n \"@typescript-eslint/no-unsafe-call\": \"error\",\n // prevent usage of any via using it's members\n \"@typescript-eslint/no-unsafe-member-access\": \"error\",\n // prevent reverting any from functions\n \"@typescript-eslint/no-unsafe-return\": \"error\",\n // prevent unused expressions\n \"no-unused-expressions\": \"off\",\n // var<'string'> = 'string' -> var = 'string' as const\n \"@typescript-eslint/prefer-as-const\": \"error\",\n // force initializing enums\n \"@typescript-eslint/prefer-enum-initializers\": \"error\",\n // prefer for x of obj to for let i = 0...\n \"@typescript-eslint/prefer-for-of\": \"error\",\n // prefer includes() to indexOf()\n \"@typescript-eslint/prefer-includes\": \"error\",\n // use literals for enum initialization\n \"@typescript-eslint/prefer-literal-enum-member\": \"error\",\n // prefer safe cascade of a value when dealing with undefined or null\n \"@typescript-eslint/prefer-nullish-coalescing\": \"error\",\n // prefer optional chaining (a?.b)\n \"@typescript-eslint/prefer-optional-chain\": \"error\",\n // prefer using type parameter for Array.reduce\n \"@typescript-eslint/prefer-reduce-type-parameter\": \"error\",\n // prefer RegExp#exec when no /g flag in regex\n \"@typescript-eslint/prefer-regexp-exec\": \"error\",\n // enforce `this` as a type when stating type for a method\n \"@typescript-eslint/prefer-return-this-type\": \"error\",\n // enforce startsWith to indexOf === 0\n \"@typescript-eslint/prefer-string-starts-ends-with\": \"error\",\n // prevents default behavior of .sort() - which is confusing\n \"@typescript-eslint/require-array-sort-compare\": \"error\",\n // no async functions without awaits in body\n \"require-await\": \"off\",\n \"@typescript-eslint/require-await\": \"error\",\n // prevent number + string\n \"@typescript-eslint/restrict-plus-operands\": \"error\",\n // only allow string in templates\n \"@typescript-eslint/restrict-template-expressions\": \"error\",\n // prevent returning await\n \"no-return-await\": \"off\",\n \"@typescript-eslint/return-await\": \"error\",\n // only booleans in ifs and whiles\n \"@typescript-eslint/strict-boolean-expressions\": \"error\",\n // check if all paths are followed in code\n \"@typescript-eslint/switch-exhaustiveness-check\": \"error\",\n \"dot-notation\": \"off\",\n \"no-implied-eval\": \"off\",\n \"@typescript-eslint/await-thenable\": \"error\",\n \"@typescript-eslint/dot-notation\": [\"error\", { allowKeywords: true }],\n \"@typescript-eslint/no-floating-promises\": \"error\",\n \"@typescript-eslint/no-for-in-array\": \"error\",\n \"@typescript-eslint/no-implied-eval\": \"error\",\n \"@typescript-eslint/no-misused-promises\": \"error\",\n \"@typescript-eslint/promise-function-async\": \"error\",\n \"@typescript-eslint/unbound-method\": \"error\",\n \"no-restricted-imports\": \"off\",\n },\n },\n ];\n}\n","import type { ConfigWithExtends } from \"typescript-eslint\";\n\nimport { pluginUnicorn } from \"../plugins\";\n\nexport function unicorn(): ConfigWithExtends[] {\n return [\n {\n name: \"solvro/unicorn/rules\",\n plugins: {\n unicorn: pluginUnicorn,\n },\n rules: {\n ...pluginUnicorn.configs.recommended.rules,\n \"unicorn/no-array-reduce\": \"off\",\n \"unicorn/no-null\": \"off\",\n \"unicorn/no-useless-switch-case\": \"off\",\n \"unicorn/prefer-global-this\": \"off\",\n \"unicorn/prevent-abbreviations\": [\n \"error\",\n {\n replacements: {\n env: false,\n envs: false,\n props: false,\n prop: false,\n ref: false,\n },\n allowList: {\n e2e: true,\n },\n ignore: [String.raw`e2e`],\n },\n ],\n },\n },\n ];\n}\n"],"mappings":"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","names":["default","default"]}