Browse Source

use biome noRestrictedImports instead of eslint

Yuki Takei 5 months ago
parent
commit
42e09bd401

+ 0 - 4
apps/app/.eslintrc.js

@@ -58,10 +58,6 @@ module.exports = {
     },
   },
   rules: {
-    'no-restricted-imports': ['error', {
-      name: 'axios',
-      message: 'Please use src/utils/axios instead.',
-    }],
     '@typescript-eslint/no-var-requires': 'off',
 
     // set 'warn' temporarily -- 2021.08.02 Yuki Takei

+ 1 - 1
apps/app/src/client/services/user-ui-settings.ts

@@ -1,4 +1,4 @@
-// eslint-disable-next-line no-restricted-imports
+// biome-ignore lint/style/noRestrictedImports: Type-only import from axios
 import type { AxiosResponse } from 'axios';
 import { debounce } from 'throttle-debounce';
 

+ 1 - 3
apps/app/src/client/util/apiv3-client.ts

@@ -1,9 +1,7 @@
-// eslint-disable-next-line no-restricted-imports
+// biome-ignore lint/style/noRestrictedImports: Type-only import from axios
 import type { AxiosResponse } from 'axios';
 import urljoin from 'url-join';
 
-// eslint-disable-next-line no-restricted-imports
-
 import { toArrayIfNot } from '~/utils/array-utils';
 import axios from '~/utils/axios';
 import loggerFactory from '~/utils/logger';

+ 0 - 12
apps/app/src/components/.eslintrc.js

@@ -1,12 +0,0 @@
-module.exports = {
-  extends: '../../.eslintrc.js',
-  rules: {
-    // restrict importing from client/ and components/ directories
-    'no-restricted-imports': ['error', {
-      patterns: [
-        '~/client/',
-        'client/',
-      ],
-    }],
-  },
-};

+ 1 - 1
apps/app/src/features/growi-plugin/server/services/growi-plugin/growi-plugin.ts

@@ -5,7 +5,7 @@ import {
   importPackageJson,
   validateGrowiDirective,
 } from '@growi/pluginkit/dist/v4/server/index.cjs';
-// eslint-disable-next-line no-restricted-imports
+// biome-ignore lint/style/noRestrictedImports: Direct axios usage for plugin downloading
 import axios from 'axios';
 import fs, { readFileSync } from 'fs';
 import type mongoose from 'mongoose';

+ 0 - 12
apps/app/src/models/.eslintrc.js

@@ -1,12 +0,0 @@
-module.exports = {
-  extends: '../../.eslintrc.js',
-  rules: {
-    // restrict importing from client/ and components/ directories
-    'no-restricted-imports': ['error', {
-      patterns: [
-        '~/client/',
-        'client/',
-      ],
-    }],
-  },
-};

+ 0 - 12
apps/app/src/pages/.eslintrc.js

@@ -1,12 +0,0 @@
-module.exports = {
-  extends: '../../.eslintrc.js',
-  rules: {
-    // restrict importing from client/ and components/ directories
-    'no-restricted-imports': ['error', {
-      patterns: [
-        '~/client/',
-        'client/',
-      ],
-    }],
-  },
-};

+ 0 - 12
apps/app/src/server/.eslintrc.js

@@ -1,12 +0,0 @@
-module.exports = {
-  extends: '../../.eslintrc.js',
-  rules: {
-    // restrict importing from client/ and components/ directories
-    'no-restricted-imports': ['error', {
-      patterns: [
-        '~/client/',
-        'client/',
-      ],
-    }],
-  },
-};

+ 1 - 1
apps/app/src/server/routes/ogp.ts

@@ -3,7 +3,7 @@ import path from 'path';
 
 import { getIdStringForRef, type IUser } from '@growi/core';
 import { DevidedPagePath } from '@growi/core/dist/models';
-// eslint-disable-next-line no-restricted-imports
+// biome-ignore lint/style/noRestrictedImports: Direct axios usage for OGP image fetching
 import axios from 'axios';
 import type {
   Request, Response, NextFunction,

+ 1 - 1
apps/app/src/server/service/file-uploader/gcs/multipart-uploader.ts

@@ -1,5 +1,5 @@
 import type { Bucket, File } from '@google-cloud/storage';
-// eslint-disable-next-line no-restricted-imports
+// biome-ignore lint/style/noRestrictedImports: Direct axios usage for GCS multipart upload
 import axios from 'axios';
 import urljoin from 'url-join';
 

+ 1 - 2
apps/app/src/server/service/g2g-transfer.ts

@@ -3,9 +3,8 @@ import { createReadStream } from 'fs';
 import { basename } from 'path';
 import type { Readable } from 'stream';
 
-// eslint-disable-next-line no-restricted-imports
-import type { IUser } from '@growi/core';
 import { ConfigSource } from '@growi/core';
+import type { IUser } from '@growi/core/dist/interfaces';
 import rawAxios, { type AxiosRequestConfig } from 'axios';
 import FormData from 'form-data';
 import mongoose, { Types as MongooseTypes } from 'mongoose';

+ 1 - 1
apps/app/src/server/service/s2s-messaging/nchan.ts

@@ -1,6 +1,6 @@
 import path from 'path';
 
-// eslint-disable-next-line no-restricted-imports
+// biome-ignore lint/style/noRestrictedImports: Direct axios usage for external S2S messaging
 import axios from 'axios';
 import ReconnectingWebSocket from 'reconnecting-websocket';
 import WebSocket from 'ws';

+ 0 - 12
apps/app/src/services/.eslintrc.js

@@ -1,12 +0,0 @@
-module.exports = {
-  extends: '../../.eslintrc.js',
-  rules: {
-    // restrict importing from client/ and components/ directories
-    'no-restricted-imports': ['error', {
-      patterns: [
-        '~/client/',
-        'client/',
-      ],
-    }],
-  },
-};

+ 0 - 12
apps/app/src/stores-universal/.eslintrc.js

@@ -1,12 +0,0 @@
-module.exports = {
-  extends: '../../.eslintrc.js',
-  rules: {
-    // restrict importing from client/ and components/ directories
-    'no-restricted-imports': ['error', {
-      patterns: [
-        '~/client/',
-        'client/',
-      ],
-    }],
-  },
-};

+ 0 - 12
apps/app/src/utils/.eslintrc.js

@@ -1,12 +0,0 @@
-module.exports = {
-  extends: '../../.eslintrc.js',
-  rules: {
-    // restrict importing from client/ and components/ directories
-    'no-restricted-imports': ['error', {
-      patterns: [
-        '~/client/',
-        'client/',
-      ],
-    }],
-  },
-};

+ 2 - 2
apps/app/src/utils/axios.ts

@@ -1,9 +1,9 @@
-// eslint-disable-next-line no-restricted-imports
+// biome-ignore lint/style/noRestrictedImports: This is the axios wrapper utility
 import axios from 'axios';
 import { formatISO } from 'date-fns';
 import qs from 'qs';
 
-// eslint-disable-next-line no-restricted-imports
+// biome-ignore lint/style/noRestrictedImports: Re-exporting axios types
 export * from 'axios';
 
 const isoDateRegex =

+ 78 - 27
biome.json

@@ -3,41 +3,41 @@
   "files": {
     "includes": [
       "**",
-      "!**/dist/**",
-      "!**/node_modules/**",
-      "!**/.pnpm-store/**",
-      "!**/coverage/**",
+      "!**/dist",
+      "!**/node_modules",
+      "!**/.pnpm-store",
+      "!**/coverage",
       "!**/vite.config.ts.timestamp-*",
       "!**/vite.server.config.ts.timestamp-*",
       "!**/vite.client.config.ts.timestamp-*",
-      "!**/.turbo/**",
-      "!**/.vscode/**",
+      "!**/.turbo",
+      "!**/.vscode",
       "!**/turbo.json",
-      "!**/.claude/**",
-      "!**/.next/**",
-      "!**/.terraform/**",
-      "!bin/**",
+      "!**/.claude",
+      "!**/.next",
+      "!**/.terraform",
+      "!bin",
       "!tsconfig.base.json",
-      "!**/.devcontainer/**",
+      "!**/.devcontainer",
       "!**/.eslintrc.js",
       "!**/.stylelintrc.json",
       "!**/package.json",
-      "!apps/app/src/styles/prebuilt/**",
-      "!apps/app/tmp/**",
-      "!apps/slackbot-proxy/src/public/bootstrap/**",
+      "!apps/app/src/styles/prebuilt",
+      "!apps/app/tmp",
+      "!apps/slackbot-proxy/src/public/bootstrap",
       "!packages/pdf-converter-client/src/index.ts",
-      "!packages/pdf-converter-client/specs/**",
-      "!apps/app/playwright/**",
-      "!apps/app/src/client/**",
-      "!apps/app/src/components/**",
-      "!apps/app/src/features/openai/**",
-      "!apps/app/src/pages/**",
-      "!apps/app/src/server/**",
-      "!apps/app/src/services/**",
-      "!apps/app/src/stores/**",
-      "!apps/app/src/styles/**",
-      "!apps/app/test-with-vite/**",
-      "!apps/app/tmp/**"
+      "!packages/pdf-converter-client/specs",
+      "!apps/app/playwright",
+      "!apps/app/src/client",
+      "!apps/app/src/components",
+      "!apps/app/src/features/openai",
+      "!apps/app/src/pages",
+      "!apps/app/src/server",
+      "!apps/app/src/services",
+      "!apps/app/src/stores",
+      "!apps/app/src/styles",
+      "!apps/app/test-with-vite",
+      "!apps/app/tmp"
     ]
   },
   "formatter": {
@@ -71,7 +71,10 @@
   "linter": {
     "enabled": true,
     "rules": {
-      "recommended": true
+      "recommended": true,
+      "correctness": {
+        "useUniqueElementIds": "warn"
+      }
     }
   },
   "javascript": {
@@ -92,6 +95,54 @@
           }
         }
       }
+    },
+    {
+      "includes": ["apps/app/**"],
+      "linter": {
+        "rules": {
+          "style": {
+            "noRestrictedImports": {
+              "level": "error",
+              "options": {
+                "paths": {
+                  "axios": "Please use src/utils/axios instead."
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    {
+      "includes": [
+        "apps/app/src/stores-universal/**",
+        "apps/app/src/utils/**",
+        "apps/app/src/models/**",
+        "apps/app/src/services/**",
+        "apps/app/src/pages/**",
+        "apps/app/src/server/**",
+        "apps/app/src/components/**"
+      ],
+      "linter": {
+        "rules": {
+          "style": {
+            "noRestrictedImports": {
+              "level": "error",
+              "options": {
+                "paths": {
+                  "axios": "Please use src/utils/axios instead."
+                },
+                "patterns": [
+                  {
+                    "group": ["~/client/*", "client/*"],
+                    "message": "Importing from client/ directories is restricted."
+                  }
+                ]
+              }
+            }
+          }
+        }
+      }
     }
   ]
 }