staticql
Version:
Type-safe query engine for static content including Markdown, YAML, JSON, and more.
37 lines (36 loc) • 1.59 kB
JavaScript
import { SourceConfigResolver } from "./SourceConfigResolver.js";
import { registerParser } from "./parser/index.js";
import { StaticQL } from "./StaticQL.js";
import { MultiRepository } from "./repository/MultiRepository.js";
/**
* Factory function to create a StaticQL instance.
*
* @param config - The StaticQL configuration object.
* @returns A factory function that accepts a repository and optional init options.
*/
export function defineStaticQL(config) {
return ({ repository, defaultRepository, sourceRepositories, writeRepository, options = {}, }) => {
// inject custom parsers if provided via options
if (options.parsers) {
for (const [type, parser] of Object.entries(options.parsers)) {
registerParser(type, parser);
}
}
const sourceConfigResolver = new SourceConfigResolver(config.sources);
let repo;
if (defaultRepository || sourceRepositories || writeRepository) {
repo = new MultiRepository(defaultRepository ?? repository, sourceRepositories, writeRepository ?? defaultRepository ?? repository);
}
else {
if (!repository) {
throw new Error("StaticQL requires a repository instance");
}
repo = repository;
}
if ("setResolver" in repo && typeof repo.setResolver === "function") {
repo.setResolver(sourceConfigResolver);
}
return new StaticQL(config, repo, sourceConfigResolver, options);
};
}
export { ConsoleLogger } from "./logger/ConsoleLogger.js";