UNPKG

@microsearch/lightning

Version:

Lightning fast text search for Node.js - blazing fast markdown and text search engine ⚡

46 lines 1.94 kB
import dotenv from 'dotenv'; import { z } from 'zod'; import path from 'path'; import { fileURLToPath } from 'url'; // Load environment variables dotenv.config(); // Get __dirname equivalent for ES modules const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); // Configuration schema const configSchema = z.object({ ROOT_DOCS_FOLDER: z.string().default('./benchmarks/data/markdown'), MAX_DOCS: z.coerce.number().positive().default(100000), SEARCH_MAX_RESULTS: z.coerce.number().positive().default(10), METRICS_FILE: z.string().default('./metrics/search-benchmarks.json'), BENCHMARK_RUNS: z.coerce.number().positive().default(1000), VERBOSE: z.coerce.boolean().default(false), ALLOW_FUZZY_SEARCH: z.coerce.boolean().default(false), ALLOW_PHRASE_SEARCH: z.coerce.boolean().default(true), TIMEOUT_WARN_MS: z.coerce.number().positive().default(100), TOKENIZATION_MODE: z.enum(['word', 'ngram', 'whitespace']).default('word'), REMOVE_STOPWORDS: z.coerce.boolean().default(true), TIMEZONE: z.string().default('UTC'), FIELD_WEIGHTS: z .string() .transform((str) => { try { return JSON.parse(str); } catch { return { title: 2, content: 1 }; } }) .default('{"title":2,"content":1}'), INDEX_BATCH_SIZE: z.coerce.number().positive().default(1000), SNIPPET_LENGTH: z.coerce.number().positive().default(150), SNIPPET_CONTEXT_WORDS: z.coerce.number().positive().default(10), }); // Parse and validate configuration const config = configSchema.parse(process.env); // Resolve paths relative to project root const projectRoot = path.resolve(__dirname, '../../../'); config.ROOT_DOCS_FOLDER = path.resolve(projectRoot, config.ROOT_DOCS_FOLDER); config.METRICS_FILE = path.resolve(projectRoot, config.METRICS_FILE); export default config; //# sourceMappingURL=index.js.map