import AwakenDirective from "./AwakenDirective" import HomePageDirective from "./HomePageDirective" import CloseMenuDirective from "./CloseMenuDirective/index" import ByeDirective from "./ByeDirective" import OpenMenuDirective from "./OpenMenuDirective/index" import TestDirective from "./TestDirective" const DirectiveTypes = (process.env.NODE_ENV == "development" ? [TestDirective] : []).concat([ // AwakenDirective, HomePageDirective, OpenMenuDirective, CloseMenuDirective ]) const AllDirectiveTypes = DirectiveTypes.concat(ByeDirective) class Directive { constructor (options = {}) { this.directiveTypes = options.directiveTypes || DirectiveTypes this._directiveTypes = this.parseDirectiveTypes(); this.params = options.params || {} this.directives = [] } parseDirectiveTypes () { const directiveTypes = [] this.directiveTypes.map(directiveType => { this.circlePushDirective(directiveType , directiveTypes) }) return directiveTypes } circlePushDirective(directiveType, directiveTypes) { if(directiveType.beforeLoadDirectives && directiveType.beforeLoadDirectives.length > 0 ) { directiveType.beforeLoadDirectives.map(i => this.circlePushDirective(i, directiveTypes)) } directiveTypes.push(directiveType) } parse ({text}) { let isHasSuccess = false for(let i = 0 ; i < this._directiveTypes.length ; i++) { const directive = new this._directiveTypes[i]({text , directives : this.directives, params : this.params}) if(directive.match()) { isHasSuccess = true this.directives.push(directive) break } } return isHasSuccess ? this.directives.at(-1) : null } async excute (directive = this.directives.at(-1)) { if(!directive) return const data = await directive.excute() return data } destroy () { } } export default Directive export { DirectiveTypes, AllDirectiveTypes }