“use strict”;
module.exports = CSSselect;
var Pseudos = require(“./lib/pseudos.js”),
DomUtils = require("domutils"), findOne = DomUtils.findOne, findAll = DomUtils.findAll, getChildren = DomUtils.getChildren, removeSubsets = DomUtils.removeSubsets, falseFunc = require("boolbase").falseFunc, compile = require("./lib/compile.js"), compileUnsafe = compile.compileUnsafe, compileToken = compile.compileToken;
function getSelectorFunc(searchFunc){
return function select(query, elems, options){ if(typeof query !== "function") query = compileUnsafe(query, options, elems); if(!Array.isArray(elems)) elems = getChildren(elems); else elems = removeSubsets(elems); return searchFunc(query, elems); };
}
var selectAll = getSelectorFunc(function selectAll(query, elems){
return (query === falseFunc || !elems || elems.length === 0) ? [] : findAll(query, elems);
});
var selectOne = getSelectorFunc(function selectOne(query, elems){
return (query === falseFunc || !elems || elems.length === 0) ? null : findOne(query, elems);
});
function is(elem, query, options){
return (typeof query === "function" ? query : compile(query, options))(elem);
}
/*
the exported interface
*/ function CSSselect(query, elems, options){
return selectAll(query, elems, options);
}
CSSselect.compile = compile; CSSselect.filters = Pseudos.filters; CSSselect.pseudos = Pseudos.pseudos;
CSSselect.selectAll = selectAll; CSSselect.selectOne = selectOne;
CSSselect.is = is;
//legacy methods (might be removed) CSSselect.parse = compile; CSSselect.iterate = selectAll;
//hooks CSSselect._compileUnsafe = compileUnsafe; CSSselect._compileToken = compileToken;