diff --git a/packages/remanso-cli/src/lib/config.ts b/packages/remanso-cli/src/lib/config.ts index 36e016c..4fe6049 100644 --- a/packages/remanso-cli/src/lib/config.ts +++ b/packages/remanso-cli/src/lib/config.ts @@ -46,7 +46,7 @@ export async function findConfig( } export async function loadConfig( - configPath?: string, + configPath: string | null, ): Promise<{ config: RemansoConfig; configPath: string }> { const resolvedPath = configPath || (await findConfig()); diff --git a/packages/remanso-cli/src/lib/detect-languages.test.ts b/packages/remanso-cli/src/lib/detect-languages.test.ts new file mode 100644 index 0000000..a2dc12b --- /dev/null +++ b/packages/remanso-cli/src/lib/detect-languages.test.ts @@ -0,0 +1,33 @@ +import { describe, expect, test } from "bun:test"; +import { detectLanguage } from "./detect-languages"; + +describe("Detect languages", () => { + test("Detect English", () => { + const lang = detectLanguage("Hello, World!"); + expect(lang).toBe("eng"); + }); + + test("Detect French", () => { + const lang = detectLanguage("Bonjour le monde !"); + expect(lang).toBe("fra"); + }); + + test("Detect Portuguese", () => { + const lang = detectLanguage("Oi, gente! Tudo bom?"); + expect(lang).toBe("por"); + }); + + test("Detect the most used langage, here French", () => { + const lang = detectLanguage("Hello World! J'espère que vous allez bien."); + + expect(lang).toBe("fra"); + }); + + test("Detect the most used langage, here English", () => { + const lang = detectLanguage( + "Bonjour le monde! I hope, you're doing well in this incredible day!", + ); + + expect(lang).toBe("eng"); + }); +}); diff --git a/packages/remanso-cli/src/lib/detect-languages.ts b/packages/remanso-cli/src/lib/detect-languages.ts new file mode 100644 index 0000000..f4f0145 --- /dev/null +++ b/packages/remanso-cli/src/lib/detect-languages.ts @@ -0,0 +1,15 @@ +import lande, { type Language } from "lande"; + +export const DEFAULT_LANG: Language = "eng"; + +export const detectLanguage = (text: string): Language => { + const probabilities = lande(text); + + if (!probabilities.length) { + return DEFAULT_LANG; + } + + const language = probabilities[0]; + + return language?.[0] ?? DEFAULT_LANG; +}; diff --git a/packages/remanso-cli/src/lib/note.ts b/packages/remanso-cli/src/lib/note.ts index 5901ea9..b44a2f2 100644 --- a/packages/remanso-cli/src/lib/note.ts +++ b/packages/remanso-cli/src/lib/note.ts @@ -3,6 +3,7 @@ import * as fs from "node:fs/promises"; import * as path from "node:path"; import mimeTypes from "mime-types"; import type { BlogPost, BlobObject } from "../../../cli/src/lib/types"; +import { detectLanguage } from "./detect-languages"; const LEXICON = "space.remanso.note"; const MAX_CONTENT = 10000; @@ -201,13 +202,15 @@ async function buildNoteRecord( const title = titleMatch ? titleMatch[1] : post.frontmatter.title; const { content, images } = await processNoteContent(agent, post, options); + const slicedContent = content.slice(0, MAX_CONTENT); const record: Record = { $type: LEXICON, title, - content: content.slice(0, MAX_CONTENT), + content: slicedContent, createdAt: publishDate, publishedAt: publishDate, + language: detectLanguage(title || slicedContent), }; if (images.length > 0) {