{"version":3,"file":"index.cjs","sources":["../../../src/fql/index.ts"],"sourcesContent":["/**\n * FQL (Fuzzy Query Language) - Main entry point\n */\n\nimport type { FuzzyIndex, SuggestionResult, SearchOptions } from \"../core/types.js\";\nimport { FQLLexer } from \"./lexer.js\";\nimport { FQLParser, FQLSyntaxError } from \"./parser.js\";\nimport { FQLExecutor, FQLTimeoutError } from \"./executor.js\";\n\n/**\n * Check if a query is an FQL query\n */\nexport function isFQLQuery(query: string): boolean {\n  const trimmed = query.trim();\n  return trimmed.startsWith(\"fql(\") && trimmed.endsWith(\")\");\n}\n\n/**\n * Extract FQL query from fql(...) wrapper\n */\nexport function extractFQLQuery(query: string): string {\n  const trimmed = query.trim();\n  if (!isFQLQuery(trimmed)) {\n    throw new Error(\"Not a valid FQL query. Must be wrapped in fql(...)\");\n  }\n  \n  // Remove fql( and )\n  return trimmed.slice(4, -1).trim();\n}\n\n/**\n * Execute an FQL query\n */\nexport function executeFQLQuery(\n  index: FuzzyIndex,\n  query: string,\n  maxResults?: number,\n  options: SearchOptions = {}\n): SuggestionResult[] {\n  try {\n    // Extract query from fql(...)\n    const fqlQuery = extractFQLQuery(query);\n    \n    // Lexer: tokenize\n    const lexer = new FQLLexer();\n    const tokens = lexer.tokenize(fqlQuery);\n    \n    // Parser: build AST\n    const parser = new FQLParser();\n    const ast = parser.parse(tokens);\n    \n    // Executor: run query\n    const executor = new FQLExecutor(index, options);\n    const results = executor.execute(ast);\n    \n    // Apply maxResults limit\n    const limit = maxResults || options.maxResults || 10;\n    return results.slice(0, limit);\n  } catch (error) {\n    // Re-throw FQL-specific errors\n    if (error instanceof FQLSyntaxError || error instanceof FQLTimeoutError) {\n      throw error;\n    }\n    \n    // Wrap other errors\n    throw new Error(`FQL execution error: ${(error as Error).message}`);\n  }\n}\n\n// Export all FQL components\nexport { FQLLexer } from \"./lexer.js\";\nexport { FQLParser, FQLSyntaxError } from \"./parser.js\";\nexport { FQLExecutor, FQLTimeoutError } from \"./executor.js\";\nexport type { FQLNode } from \"./ast.js\";\nexport { TokenType } from \"./lexer.js\";\n"],"names":["lexer","FQLLexer","parser","FQLParser","executor","FQLExecutor","FQLSyntaxError","FQLTimeoutError"],"mappings":";;;;;AAYO,SAAS,WAAW,OAAwB;AACjD,QAAM,UAAU,MAAM,KAAA;AACtB,SAAO,QAAQ,WAAW,MAAM,KAAK,QAAQ,SAAS,GAAG;AAC3D;AAKO,SAAS,gBAAgB,OAAuB;AACrD,QAAM,UAAU,MAAM,KAAA;AACtB,MAAI,CAAC,WAAW,OAAO,GAAG;AACxB,UAAM,IAAI,MAAM,oDAAoD;AAAA,EACtE;AAGA,SAAO,QAAQ,MAAM,GAAG,EAAE,EAAE,KAAA;AAC9B;AAKO,SAAS,gBACd,OACA,OACA,YACA,UAAyB,CAAA,GACL;AACpB,MAAI;AAEF,UAAM,WAAW,gBAAgB,KAAK;AAGtC,UAAMA,UAAQ,IAAIC,eAAA;AAClB,UAAM,SAASD,QAAM,SAAS,QAAQ;AAGtC,UAAME,WAAS,IAAIC,iBAAA;AACnB,UAAM,MAAMD,SAAO,MAAM,MAAM;AAG/B,UAAME,aAAW,IAAIC,qBAAY,OAAO,OAAO;AAC/C,UAAM,UAAUD,WAAS,QAAQ,GAAG;AAGpC,UAAM,QAAQ,cAAc,QAAQ,cAAc;AAClD,WAAO,QAAQ,MAAM,GAAG,KAAK;AAAA,EAC/B,SAAS,OAAO;AAEd,QAAI,iBAAiBE,OAAAA,kBAAkB,iBAAiBC,0BAAiB;AACvE,YAAM;AAAA,IACR;AAGA,UAAM,IAAI,MAAM,wBAAyB,MAAgB,OAAO,EAAE;AAAA,EACpE;AACF;;;;;;;;;;"}