recogn-parse
Version:
recogn-parse 提供了 识别--解析 的机制,使用者只需要添加识别器 和 解析器,然后就可以对事件进行识别和解析,适合用所有具备 识别--解析 流程的场景中,如:加载并显示各种模型、预览文件等
2 lines (1 loc) • 5.97 kB
JavaScript
(function(d,l){typeof exports=="object"&&typeof module<"u"?l(exports,require("type-tls")):typeof define=="function"&&define.amd?define(["exports","type-tls"],l):(d=typeof globalThis<"u"?globalThis:d||self,l(d.RecognParse={},d.typeTls))})(this,function(d,l){"use strict";var b=Object.defineProperty;var j=(d,l,h)=>l in d?b(d,l,{enumerable:!0,configurable:!0,writable:!0,value:h}):d[l]=h;var a=(d,l,h)=>j(d,typeof l!="symbol"?l+"":l,h);function h(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}class m{constructor(){a(this,"_preJudgers",[]);a(this,"_postJudgers",[]);a(this,"namedJudgers",new Map);a(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())h(u,r).length>0&&(s=!0),u.length===0&&t.delete(i);const n=this.judgers;h(n,r).length>0&&(s=!0);const c=[...n];for(const i of c)if(Array.isArray(i)&&(h(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=l.waitAsyncable(n,u=>t?v(t,e,r,u):p(this.allJudgers,0,e,r,u)),i=this.postJudgers;return i.length===0?c:l.waitAsyncable(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 z(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=v(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 v(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=z(c),u=e+1;return l.waitAsyncable(i,f=>A(o,u,r,s,f??null))}class _{constructor(){a(this,"_preParses");a(this,"_postParses",[]);a(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 h(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=l.waitAsyncable(c,g=>P(n,0,r,s,g,t)),f=this.postParses;return f.length===0?u:l.waitAsyncable(u,(g,y)=>y?u:P(f,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),f=e+1;return l.waitAsyncable(u,(g,y)=>y&&!c?null:P(o,f,r,s,g,n))}class w{constructor(){a(this,"_recognizer");a(this,"_resolver")}get recognizer(){return this._recognizer||(this._recognizer=new m)}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 _)}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 f=null;if(c)u&&(f=[{type:u}]);else if(i=i??n,f=this.recognizer.recogn(e,r,i),f instanceof Promise)return f.then(g=>this.parse(g,e,r));return this.parse(f,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}}d.RecognParse=w,d.Recognizer=m,d.Resolver=_,Object.defineProperty(d,Symbol.toStringTag,{value:"Module"})});