UNPKG

recogn-parse

Version:

recogn-parse 提供了 识别--解析 的机制,使用者只需要添加识别器 和 解析器,然后就可以对事件进行识别和解析,适合用所有具备 识别--解析 流程的场景中,如:加载并显示各种模型、预览文件等

2 lines (1 loc) 6.03 kB
var RecognParse=function(d){"use strict";var w=Object.defineProperty;var q=(d,l,f)=>l in d?w(d,l,{enumerable:!0,configurable:!0,writable:!0,value:f}):d[l]=f;var h=(d,l,f)=>q(d,typeof l!="symbol"?l+"":l,f);function l(o,e){const r=[];for(const s of e){const t=e.indexOf(s);t!==-1&&(o.splice(t,1),r.push(s))}return r}function f(o,e){return o instanceof Promise?o.then(r=>e(r,!1,void 0),r=>e(void 0,!0,r)):e(o,!1,void 0)}var m=(o=>(o.equal="equal",o.intersect="intersect",o.intersectEqual="intersectEqual",o))(m||{});(o=>{function e(r){let s;switch(r){case"equal":s=(t,n)=>t===n;case"intersect":s=(t,n)=>t&n;default:s=(t,n)=>(t&n)===t}return s}o.getEqualFun=e})(m||(m={}));class y{constructor(){h(this,"_preJudgers",[]);h(this,"_postJudgers",[]);h(this,"namedJudgers",new Map);h(this,"judgers",[])}get preJudgers(){return this._preJudgers||(this._preJudgers=[])}set preJudgers(e){this._preJudgers=e}get postJudgers(){return this._postJudgers||(this._postJudgers=[])}set postJudgers(e){this._postJudgers=e}get allJudgers(){const e=this.namedJudgers.values();return[...this.judgers,...e]}add(e,r){if(r){const s=this.namedJudgers,t=s.get(r)??[];s.set(r,t.concat(e))}else{const s=this.judgers;s.includes(e)||s.push(e)}}addJudgers(e){if(Array.isArray(e)){for(const r of e)this.add(r);return}for(const[r,s]of Object.entries(e))this.add(s,r)}removeByName(e){const r=typeof e=="string"?[e]:e,s=this.namedJudgers;for(const t of r)s.delete(t);return!0}remove(e){const r=this.judgers,s=r.indexOf(e);if(s!==-1)return r.splice(s,1),!0;const t=this.namedJudgers,n=Array.from(t);if(Array.isArray(e)){const i=n.find(u=>u[1]===e);if(i){const u=i[0];return t.delete(u),!0}}return!1}removeJudges(e){if(this.remove(e))return!0;const r=Array.isArray(e)?e:[e];let s=!1;const t=this.namedJudgers;for(const[i,u]of t.entries())l(u,r).length>0&&(s=!0),u.length===0&&t.delete(i);const n=this.judgers;l(n,r).length>0&&(s=!0);const c=[...n];for(const i of c)if(Array.isArray(i)&&(l(i,r).length>0&&(s=!0),i.length===0)){const u=n.indexOf(i);i.splice(u,1)}return s}recogn(e,r,s){let t;if(s!=null&&!(t=this.namedJudgers.get(s)))return null;const n=p(this.preJudgers,0,e,r,null),c=f(n,u=>t?_(t,e,r,u):p(this.allJudgers,0,e,r,u)),i=this.postJudgers;return i.length===0?c:f(c,u=>p(i,0,e,r,u))}recognAsync(e,r,s){const t=this.recogn(e,r,s);return t instanceof Promise?t.then(n=>{if(n==null)throw n;return n}):t==null?Promise.reject(t):Promise.resolve(t)}}function J(o){return o?Array.isArray(o)?o.length>0?o:null:[o]:null}function j(o){return o?o instanceof Promise?o.then(e=>J(e),()=>null):J(o):null}function p(o,e,r,s,t){if(e>=o.length)return null;const n=o[e],c=_(n,r,s,t),i=e+1;return c instanceof Promise?c.then(u=>u??p(o,i,r,s,t),()=>p(o,i,r,s,t)):c??p(o,i,r,s,t)}function _(o,e,r,s){const t=typeof o=="function"?[o]:o;return t.length===0?null:A(t,0,e,r,s??null)}function A(o,e,r,s,t){if(e>=o.length)return t;const n=o[e],c=n(r,s,t),i=j(c),u=e+1;return f(i,a=>A(o,u,r,s,a??null))}class z{constructor(){h(this,"_preParses");h(this,"_postParses",[]);h(this,"_typeParsers",null)}get preParses(){return this._preParses||(this._preParses=[])}set preParses(e){this._preParses=e}get postParses(){return this._postParses||(this._postParses=[])}set postParses(e){this._postParses=e}get typeParsers(){return this._typeParsers||(this._typeParsers={})}set typeParsers(e){this._typeParsers=e}add(e,r){const s=this.typeParsers[e]??[];this.typeParsers[e]=s.concat(r)}addParsers(e){const r=this.typeParsers;for(const[s,t]of Object.entries(e)){const n=r[s]??[];r[s]=n.concat(t)}}remove(e,r){const s=this.typeParsers;if(!r)return delete s[e];const t=s[e];if(!t)return!1;const n=Array.isArray(r)?r:[r];return l(t,n).length>0?(t.length===0&&delete s[e],!0):!1}removeType(e){const r=typeof e=="string"?[e]:e,s=this.typeParsers;for(const t of r)delete s[t];return!0}resolve(e,r,s,t){const n=this.typeParsers[e];if(!((n==null?void 0:n.length)>0))return null;let c;const i=this.preParses;i.length>0&&(c=P(i,0,r,s,void 0,t,!0));const u=f(c,g=>P(n,0,r,s,g,t)),a=this.postParses;return a.length===0?u:f(u,(g,v)=>v?u:P(a,0,r,s,g,t,!0))}resolveAsync(e,r,s,t){const n=this.resolve(e,r,s,t);return n instanceof Promise?n.then(c=>{if(c==null)throw c;return c}):n==null?Promise.reject(n):Promise.resolve(n)}}function P(o,e,r,s,t,n,c){if(e>=o.length)return t;const i=o[e],u=i(r,s,t,n),a=e+1;return f(u,(g,v)=>v&&!c?null:P(o,a,r,s,g,n))}class R{constructor(){h(this,"_recognizer");h(this,"_resolver")}get recognizer(){return this._recognizer||(this._recognizer=new y)}set recognizer(e){this._recognizer=e}get preJudgers(){return this.recognizer.preJudgers}set preJudgers(e){this.recognizer.preJudgers=e}get postJudgers(){return this.recognizer.postJudgers}set postJudgers(e){this.recognizer.postJudgers=e}get resolver(){return this._resolver||(this._resolver=new z)}set resolver(e){this._resolver=e}get preParses(){return this.resolver.preParses}set preParses(e){this.resolver.preParses=e}get postParses(){return this.resolver.postParses}set postParses(e){this.resolver.postParses=e}add(e,r){const{judger:s,parser:t}=r;s&&this.recognizer.add(s,e),t&&this.resolver.add(e,t)}addRecognParsers(e){for(const[r,s]of Object.entries(e))this.add(r,s)}remove(e){this.recognizer.removeByName(e),this.resolver.removeType(e)}recogn(e,r,s){return this.recognizer.recogn(e,r,s)}recognAsync(e,r,s){return this.recognizer.recognAsync(e,r,s)}resolve(e,r,s){const t=s??{},{type:n,noRecogn:c}=t;let{recogn:i,parse:u}=t;u=u??n;let a=null;if(c)u&&(a=[{type:u}]);else if(i=i??n,a=this.recognizer.recogn(e,r,i),a instanceof Promise)return a.then(g=>this.parse(g,e,r));return this.parse(a,e,r)}resolveAsync(e,r,s){const t=this.resolve(e,r,s);return t instanceof Promise?t.then(n=>{if(n==null)throw n;return n}):t==null?Promise.reject(t):Promise.resolve(t)}parse(e,r,s){if(e==null)return null;const t={};for(const n of e){const c=n.type,i=this.resolver.resolve(c,r,s,n);t[c]={recogn:n,parse:i}}return t}}return d.RecognParse=R,d.Recognizer=y,d.Resolver=z,Object.defineProperty(d,Symbol.toStringTag,{value:"Module"}),d}({});