UNPKG

@yuebai008/cli

Version:

Command line interface for rapid qg-minigame development

1 lines 1.63 kB
import*as Platform from"../../core/platform/platform.js";export class SearchConfig{#e;#r;#t;#s;#i;constructor(e,r,t){this.#e=e,this.#r=r,this.#t=t;const{queries:s,fileRegexQueries:i}=SearchConfig.#u(e,r,t);this.#s=s,this.#i=i}static fromPlainObject(e){return new SearchConfig(e.query,e.ignoreCase,e.isRegex)}filePathMatchesFileQuery(e){return this.#i.every((({regex:r,shouldMatch:t})=>Boolean(e.match(r))===t))}queries(){return this.#s}query(){return this.#e}ignoreCase(){return this.#r}isRegex(){return this.#t}toPlainObject(){return{query:this.query(),ignoreCase:this.ignoreCase(),isRegex:this.isRegex()}}static#u(e,r,t){const s=/(\s*(?!-?f(ile)?:)[^\\ ]|\\.)+/,i=s.source+"(\\s+"+s.source+")*",u=["(\\s*"+FilePatternRegex.source+"\\s*)","("+/"([^\\"]|\\.)+"/.source+")","("+i+")"].join("|"),a=new RegExp(u,"g"),n=e.match(a)||[],o=[],c=[];for(const e of n){if(!e)continue;const s=SearchConfig.#a(e);if(s){const e=new RegExp(s.text,r?"i":"");c.push({regex:e,shouldMatch:s.shouldMatch})}else t?o.push(e):e.startsWith('"')&&e.endsWith('"')?o.push(SearchConfig.#n(e)):o.push(SearchConfig.#o(e))}return{queries:o,fileRegexQueries:c}}static#o(e){return e.replace(/\\(.)/g,"$1")}static#n(e){return e.substring(1,e.length-1).replace(/\\(.)/g,"$1")}static#a(e){const r=e.match(FilePatternRegex);if(!r)return null;e=r[3];let t="";for(let r=0;r<e.length;++r){const s=e[r];if("*"===s)t+=".*";else if("\\"===s){++r;" "===e[r]&&(t+=" ")}else-1!==Platform.StringUtilities.regexSpecialCharacters().indexOf(e.charAt(r))&&(t+="\\"),t+=e.charAt(r)}return{text:t,shouldMatch:!Boolean(r[1])}}}const FilePatternRegex=/(-)?f(ile)?:((?:[^\\ ]|\\.)+)/;