From 796154b7bda848c83aba391088d42a4dbf40f111 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=97=8D+85CD?= <50108258+kwaa@users.noreply.github.com> Date: Wed, 22 Jan 2025 21:52:11 +0800 Subject: [PATCH] fix: lint errors --- README.md | 4 +-- cspell.config.yaml | 8 ++--- docs/app/docs/[[...slug]]/page.tsx | 36 +++++++++---------- docs/components/shadcn/button.tsx | 1 + docs/components/ui/background-lines.tsx | 9 +++-- docs/components/ui/hover-border-gradient.tsx | 3 ++ docs/components/ui/spotlight.tsx | 2 +- docs/generate-files.ts | 1 + docs/tailwind.config.ts | 3 ++ eslint.config.ts | 28 ++++++++++++--- packages/embed/src/utils/embed.ts | 1 + packages/embed/test/embed-many.test.ts | 2 +- packages/embed/test/embed.test.ts | 2 +- packages/generate-object/src/index.ts | 1 - packages/generate-object/test/index.test.ts | 1 - packages/generate-speech/test/index.test.ts | 2 -- packages/generate-text/src/index.ts | 1 - packages/generate-transcription/src/index.ts | 1 - .../generate-transcription/test/index.test.ts | 1 - packages/model/src/utils/list-models.ts | 1 - packages/model/test/index.test.ts | 1 - .../shared-chat/src/types/finish-reason.ts | 1 + packages/shared/src/utils/response-json.ts | 1 - packages/stream-object/src/index.ts | 1 - packages/stream-object/test/index.test.ts | 1 - packages/stream-text/src/index.ts | 1 - packages/stream-text/test/index.test.ts | 1 - packages/tool/test/index.test.ts | 28 --------------- 28 files changed, 67 insertions(+), 76 deletions(-) diff --git a/README.md b/README.md index 14e962f1..1c990068 100644 --- a/README.md +++ b/README.md @@ -18,9 +18,7 @@ import { generateText } from '@xsai/generate-text' import { createOpenAI } from '@xsai/providers' import { env } from 'node:process' -const openai = createOpenAI({ - apiKey: env.OPENAI_API_KEY -}) +const openai = createOpenAI({ apiKey: env.OPENAI_API_KEY! }) const { text } = await generateText({ ...openai.chat('gpt-4o'), diff --git a/cspell.config.yaml b/cspell.config.yaml index 0752c7af..9cc5d382 100644 --- a/cspell.config.yaml +++ b/cspell.config.yaml @@ -1,4 +1,4 @@ -version: "0.2" +version: '0.2' ignorePaths: [] dictionaryDefinitions: [] dictionaries: [] @@ -14,13 +14,13 @@ words: - importantimport - koemotion - masknet - - Moeru + - moeru - moeru-ai - mxbai-embed-large - nemo - nemotron - nomic-embed-text - - Ollama + - ollama - pkgroll - qwen - sonarjs @@ -28,7 +28,7 @@ words: - typeschema - unspeech - valibot - - Vitest + - vitest - xsai ignoreWords: [] import: [] diff --git a/docs/app/docs/[[...slug]]/page.tsx b/docs/app/docs/[[...slug]]/page.tsx index 78eb30b3..52e37d81 100644 --- a/docs/app/docs/[[...slug]]/page.tsx +++ b/docs/app/docs/[[...slug]]/page.tsx @@ -12,6 +12,24 @@ import { } from 'fumadocs-ui/page' import { notFound } from 'next/navigation' +export const generateStaticParams = async () => + source.generateParams() + +export const generateMetadata = async (props: { + params: Promise<{ slug?: string[] }> +}) => { + const params = await props.params + const page = source.getPage(params.slug) + if (!page) + notFound() + + return metadataImage.withImage(page.slugs, { + description: page.data.description, + metadataBase: new URL('https://xsai.js.org'), + title: page.data.title, + }) +} + export default async (props: { params: Promise<{ slug?: string[] }> }) => { @@ -54,21 +72,3 @@ export default async (props: { ) } - -export const generateStaticParams = async () => - source.generateParams() - -export const generateMetadata = async (props: { - params: Promise<{ slug?: string[] }> -}) => { - const params = await props.params - const page = source.getPage(params.slug) - if (!page) - notFound() - - return metadataImage.withImage(page.slugs, { - description: page.data.description, - metadataBase: new URL('https://xsai.js.org'), - title: page.data.title, - }) -} diff --git a/docs/components/shadcn/button.tsx b/docs/components/shadcn/button.tsx index 92f2b5f9..1ca10ba2 100644 --- a/docs/components/shadcn/button.tsx +++ b/docs/components/shadcn/button.tsx @@ -50,6 +50,7 @@ const Button = forwardRef( ) }, ) +// eslint-disable-next-line @masknet/no-top-level Button.displayName = 'Button' export { Button, buttonVariants } diff --git a/docs/components/ui/background-lines.tsx b/docs/components/ui/background-lines.tsx index 8cc9eef6..8283eb2d 100644 --- a/docs/components/ui/background-lines.tsx +++ b/docs/components/ui/background-lines.tsx @@ -1,3 +1,4 @@ +// eslint-disable-next-line @masknet/no-top-level 'use client' import { cn } from '@/lib/utils' import { motion } from 'framer-motion' @@ -86,10 +87,12 @@ const SVG = ({ strokeLinecap="round" strokeWidth="2.3" transition={{ + // eslint-disable-next-line sonarjs/pseudo-random delay: Math.floor(Math.random() * 10), - duration: svgOptions?.duration || 10, + duration: svgOptions?.duration ?? 10, ease: 'linear', repeat: Infinity, + // eslint-disable-next-line sonarjs/pseudo-random repeatDelay: Math.floor(Math.random() * 10 + 2), repeatType: 'loop', }} @@ -108,10 +111,12 @@ const SVG = ({ strokeLinecap="round" strokeWidth="2.3" transition={{ + // eslint-disable-next-line sonarjs/pseudo-random delay: Math.floor(Math.random() * 10), - duration: svgOptions?.duration || 10, + duration: svgOptions?.duration ?? 10, ease: 'linear', repeat: Infinity, + // eslint-disable-next-line sonarjs/pseudo-random repeatDelay: Math.floor(Math.random() * 10 + 2), repeatType: 'loop', }} diff --git a/docs/components/ui/hover-border-gradient.tsx b/docs/components/ui/hover-border-gradient.tsx index 788e580f..fa98fd16 100644 --- a/docs/components/ui/hover-border-gradient.tsx +++ b/docs/components/ui/hover-border-gradient.tsx @@ -1,3 +1,4 @@ +// eslint-disable-next-line @masknet/no-top-level 'use client' import { cn } from '@/lib/utils' import { motion } from 'framer-motion' @@ -49,9 +50,11 @@ export function HoverBorderGradient({ useEffect(() => { if (hovered) return + // eslint-disable-next-line @masknet/no-timer const interval = setInterval(() => { setDirection(prevState => rotateDirection(prevState)) }, duration * 1000) + // eslint-disable-next-line @masknet/no-timer return () => clearInterval(interval) }, [hovered]) return ( diff --git a/docs/components/ui/spotlight.tsx b/docs/components/ui/spotlight.tsx index 9a3b3db1..a968a8ae 100644 --- a/docs/components/ui/spotlight.tsx +++ b/docs/components/ui/spotlight.tsx @@ -20,7 +20,7 @@ export const Spotlight = ({ className, fill }: SpotlightProps) => ( [`--${key}`, val]), ) + // eslint-disable-next-line ts/no-unsafe-call addBase({ ':root': newVars, }) diff --git a/eslint.config.ts b/eslint.config.ts index b5dd64bc..843e8579 100644 --- a/eslint.config.ts +++ b/eslint.config.ts @@ -1,5 +1,25 @@ -import { defineConfig } from '@importantimport/eslint-config' +// import { defineConfig } from '@importantimport/eslint-config' -export default defineConfig({ - typescript: { tsconfigPath: './tsconfig.json' }, -}) +// export default defineConfig({ +// typescript: { tsconfigPath: './tsconfig.json' }, +// }) + +import antfu, { GLOB_MARKDOWN_CODE, GLOB_TESTS } from '@antfu/eslint-config' +import { ii } from '@importantimport/eslint-config' + +export default antfu({ typescript: { tsconfigPath: './tsconfig.json' } }) + .append(ii({ typescript: { tsconfigPath: './tsconfig.json' } })) + .append({ + rules: { + '@masknet/no-default-error': 'off', + '@masknet/no-then': 'off', + 'sonarjs/todo-tag': 'warn', + }, + }) + .append({ + files: [...GLOB_TESTS, GLOB_MARKDOWN_CODE], + rules: { + '@masknet/no-top-level': 'off', + '@masknet/unicode-specific-set': 'off', + }, + }) diff --git a/packages/embed/src/utils/embed.ts b/packages/embed/src/utils/embed.ts index 89c14e69..34f09e80 100644 --- a/packages/embed/src/utils/embed.ts +++ b/packages/embed/src/utils/embed.ts @@ -12,6 +12,7 @@ export interface EmbedResponse { object: 'embedding' }[] model: string + // eslint-disable-next-line sonarjs/no-useless-intersection object: 'list' | (string & {}) system_fingerprint?: string usage: EmbedResponseUsage diff --git a/packages/embed/test/embed-many.test.ts b/packages/embed/test/embed-many.test.ts index 17e0a4ac..8e09031a 100644 --- a/packages/embed/test/embed-many.test.ts +++ b/packages/embed/test/embed-many.test.ts @@ -6,7 +6,7 @@ import { embedMany } from '../src' describe('@xsai/embed', () => { it('array', async () => { const { embeddings, usage } = await embedMany({ - ...ollama.embeddings('nomic-embed-text'), + ...ollama.embed('nomic-embed-text'), input: ['why is the sky blue?', 'why is the grass green?'], }) diff --git a/packages/embed/test/embed.test.ts b/packages/embed/test/embed.test.ts index 0dbe4ece..55023862 100644 --- a/packages/embed/test/embed.test.ts +++ b/packages/embed/test/embed.test.ts @@ -6,7 +6,7 @@ import { embed } from '../src' describe('@xsai/embed', () => { it('embed', async () => { const { embedding, usage } = await embed({ - ...ollama.embeddings('nomic-embed-text'), + ...ollama.embed('nomic-embed-text'), input: 'sunny day at the beach', }) diff --git a/packages/generate-object/src/index.ts b/packages/generate-object/src/index.ts index 1fd0b63a..6df2d0ff 100644 --- a/packages/generate-object/src/index.ts +++ b/packages/generate-object/src/index.ts @@ -14,7 +14,6 @@ export interface GenerateObjectResult extends Omit(options: GenerateObjectOptions): Promise> => - // eslint-disable-next-line @masknet/no-then generateText({ ...options, response_format: { diff --git a/packages/generate-object/test/index.test.ts b/packages/generate-object/test/index.test.ts index 1ad3db7e..f3a80fed 100644 --- a/packages/generate-object/test/index.test.ts +++ b/packages/generate-object/test/index.test.ts @@ -4,7 +4,6 @@ import { describe, expect, it } from 'vitest' import { generateObject } from '../src' -// eslint-disable-next-line @masknet/no-top-level describe('@xsai/generate-object', () => { it('basic', async () => { const { object } = await generateObject({ diff --git a/packages/generate-speech/test/index.test.ts b/packages/generate-speech/test/index.test.ts index 4ec6144a..fb38c257 100644 --- a/packages/generate-speech/test/index.test.ts +++ b/packages/generate-speech/test/index.test.ts @@ -3,7 +3,6 @@ import { describe, expect, it } from 'vitest' import { generateSpeech } from '../src' -// eslint-disable-next-line @masknet/no-top-level describe('@xsai/generate-speech', () => { it('basic', async () => { const speech = await generateSpeech({ @@ -18,7 +17,6 @@ describe('@xsai/generate-speech', () => { it('chinese', async () => { const speech = await generateSpeech({ baseURL: new URL('http://localhost:5050'), - // eslint-disable-next-line @masknet/unicode-specific-set input: '我能吞下玻璃而不伤身体。', model: 'tts-1', voice: 'zh-CN-XiaoyiNeural', diff --git a/packages/generate-text/src/index.ts b/packages/generate-text/src/index.ts index dd3a543c..bf28b812 100644 --- a/packages/generate-text/src/index.ts +++ b/packages/generate-text/src/index.ts @@ -72,7 +72,6 @@ type RawGenerateTextTrampoline = Promise<(() => RawGenerateTextTrampoline) /** @internal */ const rawGenerateText: RawGenerateText = async (options: GenerateTextOptions) => - // eslint-disable-next-line @masknet/no-then chat({ ...options, maxSteps: undefined, diff --git a/packages/generate-transcription/src/index.ts b/packages/generate-transcription/src/index.ts index 25eca785..bcee1c36 100644 --- a/packages/generate-transcription/src/index.ts +++ b/packages/generate-transcription/src/index.ts @@ -24,7 +24,6 @@ export const generateTranscription = async (options: GenerateTranscriptionOption body.append('model', options.model) body.append('file', options.file, options.fileName) - // eslint-disable-next-line @masknet/no-then return (options.fetch ?? globalThis.fetch)(requestURL('audio/transcriptions', options.baseURL), { body, headers: requestHeaders(options.headers, options.apiKey), diff --git a/packages/generate-transcription/test/index.test.ts b/packages/generate-transcription/test/index.test.ts index a0666ff2..829fb125 100644 --- a/packages/generate-transcription/test/index.test.ts +++ b/packages/generate-transcription/test/index.test.ts @@ -3,7 +3,6 @@ import { describe, expect, it } from 'vitest' import { generateTranscription } from '../src' -// eslint-disable-next-line @masknet/no-top-level describe('@xsai/generate-transcription', () => { it('basic', async () => { const { text } = await generateTranscription({ diff --git a/packages/model/src/utils/list-models.ts b/packages/model/src/utils/list-models.ts index 8ed38f34..f4824b01 100644 --- a/packages/model/src/utils/list-models.ts +++ b/packages/model/src/utils/list-models.ts @@ -10,7 +10,6 @@ export interface ListModelsResponse { } export const listModels = async (options: ListModelsOptions): Promise => - // eslint-disable-next-line @masknet/no-then (options.fetch ?? globalThis.fetch)(requestURL('models', options.baseURL), { headers: requestHeaders({ 'Content-Type': 'application/json', diff --git a/packages/model/test/index.test.ts b/packages/model/test/index.test.ts index 5b42af12..a71dbf96 100644 --- a/packages/model/test/index.test.ts +++ b/packages/model/test/index.test.ts @@ -3,7 +3,6 @@ import { describe, expect, it } from 'vitest' import { listModels, retrieveModel } from '../src' -// eslint-disable-next-line @masknet/no-top-level describe('@xsai/model', () => { it('listModels', async () => { const models = await listModels({ diff --git a/packages/shared-chat/src/types/finish-reason.ts b/packages/shared-chat/src/types/finish-reason.ts index ebfb70ad..071e0911 100644 --- a/packages/shared-chat/src/types/finish-reason.ts +++ b/packages/shared-chat/src/types/finish-reason.ts @@ -1 +1,2 @@ +// eslint-disable-next-line sonarjs/no-useless-intersection export type FinishReason = 'content_filter' | 'error' | 'length' | 'other' | 'stop' | 'tool-calls' | (string & {}) diff --git a/packages/shared/src/utils/response-json.ts b/packages/shared/src/utils/response-json.ts index 788beef2..4c8f2d3f 100644 --- a/packages/shared/src/utils/response-json.ts +++ b/packages/shared/src/utils/response-json.ts @@ -1,6 +1,5 @@ import { responseCatch } from './response-catch' export const responseJSON = async (res: Response) => - // eslint-disable-next-line @masknet/no-then responseCatch(res) .then(async res => res.json() as Promise) diff --git a/packages/stream-object/src/index.ts b/packages/stream-object/src/index.ts index 088bf432..a398d0d6 100644 --- a/packages/stream-object/src/index.ts +++ b/packages/stream-object/src/index.ts @@ -16,7 +16,6 @@ export interface StreamObjectResult extends StreamTextResult { /** @experimental WIP */ export const streamObject = async (options: StreamObjectOptions): Promise> => -// eslint-disable-next-line @masknet/no-then streamText({ ...options, response_format: { diff --git a/packages/stream-object/test/index.test.ts b/packages/stream-object/test/index.test.ts index bfc48602..ad4b1678 100644 --- a/packages/stream-object/test/index.test.ts +++ b/packages/stream-object/test/index.test.ts @@ -13,7 +13,6 @@ declare global { } } -// eslint-disable-next-line @masknet/no-top-level describe('@xsai/stream-object', () => { it('basic', async () => { const { partialObjectStream } = await streamObject({ diff --git a/packages/stream-text/src/index.ts b/packages/stream-text/src/index.ts index b9f2cc89..2a7d1fb5 100644 --- a/packages/stream-text/src/index.ts +++ b/packages/stream-text/src/index.ts @@ -50,7 +50,6 @@ const chunkHeaderPrefix = 'data:' /** * @experimental WIP, does not support function calling (tools). */ -// eslint-disable-next-line @masknet/no-then export const streamText = async (options: StreamTextOptions): Promise => chat({ ...options, stream: true, diff --git a/packages/stream-text/test/index.test.ts b/packages/stream-text/test/index.test.ts index 46a7f515..4afce3e5 100644 --- a/packages/stream-text/test/index.test.ts +++ b/packages/stream-text/test/index.test.ts @@ -13,7 +13,6 @@ declare global { } } -// eslint-disable-next-line @masknet/no-top-level describe('@xsai/stream-text', () => { it('basic', async () => { const { textStream } = await streamText({ diff --git a/packages/tool/test/index.test.ts b/packages/tool/test/index.test.ts index e28318b6..5dd6dbee 100644 --- a/packages/tool/test/index.test.ts +++ b/packages/tool/test/index.test.ts @@ -6,34 +6,6 @@ import { describe, expect, it } from 'vitest' import { tool } from '../src' describe('@xsai/tool', () => { - it('basic', async () => { - const t = await tool({ - description: 'Get the weather in a location', - execute: ({ location }) => JSON.stringify({ - location, - temperature: 72 + Math.floor(Math.random() * 21) - 10, - }), - name: 'weather', - parameters: object({ - location: pipe( - string(), - description('The location to get the weather for'), - ), - }), - }) - - expect(t.function.parameters).toStrictEqual({ - properties: { - location: { - description: 'The location to get the weather for', - type: 'string', - }, - }, - required: ['location'], - type: 'object', - }) - }) - it('generateText with tool', async () => { const weather = await tool({ description: 'Get the weather in a location',