UNPKG

@yuebai008/cli

Version:

Command line interface for rapid qg-minigame development

1 lines 3.96 kB
import*as Platform from"../../core/platform/platform.js";import{SearchMatch,SearchMatchExact}from"./ContentProvider.js";import{Text}from"./Text.js";export const Utils={get _keyValueFilterRegex(){return/(?:^|\s)(\-)?([\w\-]+):([^\s]+)/},get _regexFilterRegex(){return/(?:^|\s)(\-)?\/([^\/\\]+(\\.[^\/]+)*)\//},get _textFilterRegex(){return/(?:^|\s)(\-)?([^\s]+)/},get _SpaceCharRegex(){return/\s/},isSpaceChar:function(e){return Utils._SpaceCharRegex.test(e)},lineIndent:function(e){let t=0;for(;t<e.length&&Utils.isSpaceChar(e.charAt(t));)++t;return e.substr(0,t)},splitStringByRegexes(e,t){const n=[],r=[];for(let e=0;e<t.length;e++){const n=t[e];n.global?r.push(n):r.push(new RegExp(n.source,n.flags?n.flags+"g":"g"))}return function e(t,i,s){if(i>=r.length)return void n.push({value:t,position:s,regexIndex:-1,captureGroups:[]});const l=r[i];let o,a=0;l.lastIndex=0;for(;null!==(o=l.exec(t));){const r=t.substring(a,o.index);r&&e(r,i+1,s+a);const l=o[0];n.push({value:l,position:s+o.index,regexIndex:i,captureGroups:o.slice(1)}),a=o.index+l.length}const c=t.substring(a);c&&e(c,i+1,s+a)}(e,0,0),n}};export class FilterParser{keys;constructor(e){this.keys=e}static cloneFilter(e){return{key:e.key,text:e.text,regex:e.regex,negative:e.negative}}parse(e){const t=Utils.splitStringByRegexes(e,[Utils._keyValueFilterRegex,Utils._regexFilterRegex,Utils._textFilterRegex]),n=[];for(const{regexIndex:e,captureGroups:r}of t)if(-1!==e)if(0===e){const e=r[0],t=r[1],i=r[2];-1!==this.keys.indexOf(t)?n.push({key:t,regex:void 0,text:i,negative:Boolean(e)}):n.push({key:void 0,regex:void 0,text:`${t}:${i}`,negative:Boolean(e)})}else if(1===e){const e=r[0],t=r[1];try{n.push({key:void 0,regex:new RegExp(t,"i"),text:void 0,negative:Boolean(e)})}catch(r){n.push({key:void 0,regex:void 0,text:`/${t}/`,negative:Boolean(e)})}}else if(2===e){const e=r[0],t=r[1];n.push({key:void 0,regex:void 0,text:t,negative:Boolean(e)})}return n}}export class BalancedJSONTokenizer{callback;index;balance;buffer;findMultiple;closingDoubleQuoteRegex;lastBalancedIndex;constructor(e,t){this.callback=e,this.index=0,this.balance=0,this.buffer="",this.findMultiple=t||!1,this.closingDoubleQuoteRegex=/[^\\](?:\\\\)*"/g}write(e){this.buffer+=e;const t=this.buffer.length,n=this.buffer;let r;for(r=this.index;r<t;++r){const e=n[r];if('"'===e){if(this.closingDoubleQuoteRegex.lastIndex=r,!this.closingDoubleQuoteRegex.test(n))break;r=this.closingDoubleQuoteRegex.lastIndex-1}else if("{"===e)++this.balance;else if("}"===e){if(--this.balance,this.balance<0)return this.reportBalanced(),!1;if(!this.balance&&(this.lastBalancedIndex=r+1,!this.findMultiple))break}else if("]"===e&&!this.balance)return this.reportBalanced(),!1}return this.index=r,this.reportBalanced(),!0}reportBalanced(){this.lastBalancedIndex&&(this.callback(this.buffer.slice(0,this.lastBalancedIndex)),this.buffer=this.buffer.slice(this.lastBalancedIndex),this.index-=this.lastBalancedIndex,this.lastBalancedIndex=0)}remainder(){return this.buffer}}export const isMinified=function(e){let t=0;for(let n=0;n<e.length;++t){let t=e.indexOf("\n",n);t<0&&(t=e.length),n=t+1}return(e.length-t)/t>=80};export const performSearchInContent=function(e,t,n,r){const i=Platform.StringUtilities.createSearchRegex(t,n,r),s=new Text(e),l=[];for(let e=0;e<s.lineCount();++e){const t=s.lineAt(e);i.lastIndex=0;const n=i.exec(t);n&&l.push(new SearchMatch(e,t,n.index))}return l};export const performExtendedSearchInContent=function(e,t,n,r){const i=Platform.StringUtilities.createSearchRegex(t,n,r),s=new Text(e),l=[];for(let e=0;e<s.lineCount();++e){const t=s.lineAt(e),n=t.matchAll(i);for(const r of n)l.push(new SearchMatchExact(e,t,r.index,r[0].length))}return l};export const performExtendedSearchInSearchMatches=function(e,t,n,r){const i=Platform.StringUtilities.createSearchRegex(t,n,r),s=[];for(const{lineNumber:t,lineContent:n}of e){const e=n.matchAll(i);for(const r of e)s.push(new SearchMatchExact(t,n,r.index,r[0].length))}return s};