рдмрд╛рдмреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╕реНрдЯрдо рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВред рднрд╛рдЧ реи

рдЖрдЬ, рд╣рдо Babel рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдЕрдиреБрд╡рд╛рдж рдХрд╛ рджреВрд╕рд░рд╛ рднрд╛рдЧ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред



тЖТ рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ рдЪрдХреНрдХрд░ рдЖрдирд╛

рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ


рдкрд╛рд░реНрд╕рд░ рдХреЛрдб рдЯреЛрдХрди рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдЯреЛрдХрди рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░, рдПрдХ рдмрд╛рд░ рдореЗрдВ рдЯреЛрдХрди рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реБрдП, рдПрдПрд╕рдЯреА рдмрдирд╛рддрд╛ рд╣реИред рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХрд┐рд╕ рдЯреЛрдХрди рд╕реЗ рдЖрдЧреЗ рдХреА рдЙрдореНрдореАрдж рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдкрд╛рд░реНрд╕рд░ рднрд╛рд╖рд╛ рдХреЗ рд╡реНрдпрд╛рдХрд░рдг рдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред

рд╡реНрдпрд╛рдХрд░рдг рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

... ExponentiationExpression -> UnaryExpression                             UpdateExpression ** ExponentiationExpression MultiplicativeExpression -> ExponentiationExpression                             MultiplicativeExpression ("*" or "/" or "%") ExponentiationExpression AdditiveExpression    -> MultiplicativeExpression                             AdditiveExpression + MultiplicativeExpression                             AdditiveExpression - MultiplicativeExpression ... 

рдпрд╣ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдпрд╛ рдХрдердиреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ AdditiveExpression рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдирд┐рдореНрди рдирд┐рд░реНрдорд╛рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░ рд╕рдХрддреА рд╣реИ:

  • рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ MultiplicativeExpression ред
  • рдПрдХ AdditiveExpression рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐, рдПрдХ + рдЯреЛрдХрди рдСрдкрд░реЗрдЯрд░ рджреНрд╡рд╛рд░рд╛, рдЙрд╕рдХреЗ рдмрд╛рдж рдПрдХ MultiplicativeExpression рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ред
  • рдПрдХ AdditiveExpression рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐, рдЙрд╕рдХреЗ рдмрд╛рдж рдПрдХ " - " рдЯреЛрдХрди, рдЙрд╕рдХреЗ рдмрд╛рдж рдПрдХ MultiplicativeExpression рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ред

рдирддреАрдЬрддрди, рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 1 + 2 * 3 , рддреЛ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:

 (AdditiveExpression "+" 1 (MultiplicativeExpression "*" 2 3)) 

рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛:

 (MultiplicativeExpression "*" (AdditiveExpression "+" 1 2) 3) 

рдХрд╛рд░реНрдпрдХреНрд░рдо, рдЗрди рдирд┐рдпрдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдкрд╛рд░реНрд╕рд░ рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 class Parser {  // ...  parseAdditiveExpression() {    const left = this.parseMultiplicativeExpression();    //    -  `+`  `-`    if (this.match(tt.plus) || this.match(tt.minus)) {      const operator = this.state.type;      //          this.nextToken();      const right = this.parseMultiplicativeExpression();      //        this.finishNode(        {          operator,          left,          right,        },        'BinaryExpression'      );    } else {      //  MultiplicativeExpression      return left;    }  } } 

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣рд╛рдБ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреИрдмреЗрд▓ рдореЗрдВ рдореМрдЬреВрдж рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХреЛрдб рдХрд╛ рдпрд╣ рдЯреБрдХрдбрд╝рд╛ рд╣рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХрд╛ рд╕рд╛рд░ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкрд╛рд░реНрд╕рд░ рд╕реНрд╡рднрд╛рд╡ рд╕реЗ, рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╣реИред рдпрд╣ рд╕рдмрд╕реЗ рдХрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рдбрд┐рдЬрд╛рдЗрдиреЛрдВ рд╕реЗ рдЙрдЪреНрдЪрддрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рдбрд┐рдЬрд╛рдЗрдиреЛрдВ рдХреА рдУрд░ рдмрдврд╝рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, parseAdditiveExpression рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ parseMultiplicativeExpression , рдФрд░ рдпрд╣ рдирд┐рд░реНрдорд╛рдг рдХреЙрд▓ parseExponentiationExpression рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдЗрд╕ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд░рд┐рдХрд░реНрд╕рд┐рд╡ рдбреЗрд╕реЗрдВрдЯ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХрд╛рд░реНрдпред It, it.match, this.next


рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдХреБрдЫ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ред this.eat , this.match , this.next рдФрд░ рдЕрдиреНрдпред рдпреЗ рдмрд╛рдмреЗрд▓ рдкрд╛рд░реНрд╕рд░ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдп рд╣реИрдВред рдпреЗ рдХрд╛рд░реНрдп, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдмреИрдмрд┐рд▓ рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рдирд╣реАрдВ рд╣реИрдВ, рд╡реЗ рдЖрдорддреМрд░ рдкрд░ рдЕрдиреНрдп рдкрд╛рд░реНрд╕рд░ рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВред

  • рдпрд╣ред this.match рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдмреВрд▓рд┐рдпрди рдорд╛рди рджреЗрддрд╛ рд╣реИ рдЬреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдЯреЛрдХрди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред
  • рдпрд╣ this.next рдлрд╝рдВрдХреНрд╢рди рдЯреЛрдХрди рдХреА рд╕реВрдЪреА рдореЗрдВ рдЕрдЧрд▓реЗ рдЯреЛрдХрди рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ this.next ред
  • рдпрд╣ред this.eat рдлрд╝рдВрдХреНрд╢рди рд░рд┐рдЯрд░реНрди рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╣реА рдпрд╣. this.match рдлрд╝рдВрдХреНрд╢рди this.match , рдФрд░ рдпрджрд┐ рдпрд╣ this.match рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛рддрд╛ true , рддреЛ рдпрд╣ this.eat рдХрд░рддрд╛ рд╣реИ, true рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ this.next ред this.next ред
  • рдпрд╣ this.lookahead рдлрд╝рдВрдХреНрд╢рди рдЖрдкрдХреЛ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдЕрдЧрд▓реЗ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рд╡рд░реНрддрдорд╛рди рдиреЛрдб рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдЙрд╕ рдкрд╛рд░реНрд╕рд░ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рдЗрд╕реЗ рдкрдврд╝рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЧрдпрд╛ рд╣реИ:

 packages/babel-parser/src/parser/statement.js export default class StatementParser extends ExpressionParser {  parseStatementContent(/* ...*/) {    // ...    // NOTE:   match        if (this.match(tt._function)) {      this.next();      // NOTE:     ,          this.parseFunction();    }  }  // ...  parseFunction(/* ... */) {    // NOTE:   eat         node.generator = this.eat(tt.star);    node.curry = this.eat(tt.atat);    node.id = this.parseFunctionId();  } } 

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдкрд╛рд░реНрд╕рд░реНрд╕ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдмрддрд╛рдпрд╛ред рдЗрд╕рд▓рд┐рдП, рдпрд╣рд╛рдВ рдФрд░ рд╡рд╣рд╛рдВ - рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЙрдкрдпреЛрдЧреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗред рдореИрдВрдиреЗ рдЙрдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рдХреБрдЫ рд╕реАрдЦрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдЖрдкрдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛ рд╕рдХрддреА рд╣реИ рдХрд┐ рдореИрдВ рдмреИрдмрд▓ рдПрдПрд╕рдЯреА рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдореЗрдВ рдмрдирд╛рдП рдЧрдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рдХрд▓реНрдкрдирд╛ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬрдм рдореИрдВрдиреЗ рдПрдПрд╕рдЯреА рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реА рдирдИ " curry " рд╡рд┐рд╢реЗрд╖рддрд╛ рджрд┐рдЦрд╛рдИ рдереАред

рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╕рдВрднрд╡ рд╣реБрдЖ рдХрд┐ рдореИрдВрдиреЗ рдмреИрдмрд▓ рдПрдПрд╕рдЯреА рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдореЗрдВ рдПрдХ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдЬреЛрдбрд╝реА рдЬреЛ рдЖрдкрдХреЛ рдЗрд╕ рдПрдПрд╕рдЯреА рдЕрдиреБрд╕рдВрдзрд╛рди рдЙрдкрдХрд░рдг рдореЗрдВ рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рдкрд╛рд░реНрд╕рд░ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдкрде packages/babel-parser/lib , рддреЛ рдЖрдк рдкрд╛рд░реНрд╕рд░ рдХрд╛ рд╕рдВрдХрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдПрдХ рдХреЛрдб рдореИрдк рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред Babel AST Explorer рдкреИрдирд▓ рдореЗрдВ, рдЖрдк рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рдкрд╛рд░реНрд╕рд░ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдЯрди рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред packages/babel-parser/lib/index.js рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдХреЗ packages/babel-parser/lib/index.js рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкрд╛рд░реНрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрддреНрдкрдиреНрди рдПрдПрд╕рдЯреА рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдПрдПрд╕рдЯреА рджреГрд╢реНрдп

рдмрд╛рдмреЗрд▓ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдкреНрд▓рдЧрдЗрди


рдЕрдм рдЬрдм рдкрд╛рд░реНрд╕рд░ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрдЗрдП Babel рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рд▓рд┐рдЦреЗрдВред

рд▓реЗрдХрд┐рди, рд╢рд╛рдпрдж рдЕрдм рдЖрдкрдХреЛ рдХреБрдЫ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдмреИрдмрд▓ рдкрд╛рд░реНрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдХрд┐рд╕ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рд╕реНрдЯреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рд╕рдЪ рд╣реИ, рдбрд░рдиреЗ рдХреА рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ рд╣реИред рдмреИрдмрд▓ рдкреНрд▓рдЧрдЗрди рдкрд╛рд░реНрд╕рд░ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╕рдВрдмрдВрдзрд┐рдд рджрд╕реНрддрд╛рд╡реЗрдЬ рдмреЗрдмреЗрд▓ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

 babel-plugin-transformation-curry-function.js import customParser from './custom-parser'; export default function ourBabelPlugin() {  return {    parserOverride(code, opts) {      return customParser.parse(code, opts);    },  }; } function.js babel-plugin-transformation-curry-function.js import customParser from './custom-parser'; export default function ourBabelPlugin() {  return {    parserOverride(code, opts) {      return customParser.parse(code, opts);    },  }; } 

рдЪреВрдВрдХрд┐ рд╣рдордиреЗ рдмреИрдмреЗрд▓ рдкрд╛рд░реНрд╕рд░ рдХрд╛ рдХрд╛рдВрдЯрд╛ рдмрдирд╛рдпрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕рднреА рдореМрдЬреВрджрд╛ рдкрд╛рд░реНрд╕рд░ рдлреАрдЪрд░реНрд╕ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдмрд┐рд▓реНрдЯ-рдЗрди рдкреНрд▓рдЧ рдЗрди рднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдареАрдХ рдХрд╛рдо рдХрд░рддреЗ рд░рд╣реЗрдВрдЧреЗред

рдЗрди рд╢рдВрдХрд╛рдУрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдЗрдП рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдмрдирд╛рдпрд╛ рдЬрд╛рдП рдХрд┐ рдпрд╣ рдХрд░реАрдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдЕрдкреЗрдХреНрд╖рд╛рдУрдВ рдХреЛ рд╕рд╣рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдорд╛рд░реЗ рдкреНрд▓рдЧ-рдЗрди рдХреЛ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рдиреЛрдЯрд┐рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд░реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдп рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рд╣реИрдВред

рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдХреЛ рдкрд╛рд░реНрд╕ рдФрд░ рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдмреИрдмрд▓ рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдореЗрдб рдПрдПрд╕рдЯреА рд╕реЗ рдХреЛрдб рдЬреЗрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @babel/generator рдмреИрдмрд▓ @babel/generator рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЪреВрдБрдХрд┐ @babel/generator рдХреЛ рдирдИ curry рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдкрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИред

рдЕрдЧрд░ рдХрд┐рд╕реА рджрд┐рди рдХрд░реАрдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдп рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдорд╛рдирдХ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдпрд╣рд╛рдВ рдирдпрд╛ рдХреЛрдб рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкреАрдЖрд░ рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред

рдлрд╝рдВрдХреНрд╢рди рд╕рдорд░реНрдерди рдХреЛ рдХрд░реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрд╕реЗ рдЙрдЪреНрдЪ-рдХреНрд░рдо рдлрд╝рдВрдХреНрд╢рди currying рдореЗрдВ рд▓рдкреЗрдЯ рд╕рдХрддреЗ рд╣реИрдВ:

 function currying(fn) {  const numParamsRequired = fn.length;  function curryFactory(params) {    return function (...args) {      const newParams = params.concat(args);      if (newParams.length >= numParamsRequired) {        return fn(...newParams);      }      return curryFactory(newParams);    }  }  return curryFactory([]); } 

рдпрджрд┐ рдЖрдк рдЬреЗрдПрд╕ рдореЗрдВ рдХрд░реА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рддрдВрддреНрд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ - рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдо, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрджрд▓рдирд╛ рдЬреЛ рдХрд░реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

 //   function @@ foo(a, b, c) {  return a + b + c; } //    const foo = currying(function foo(a, b, c) {  return a + b + c; }) 

рдЕрднреА рдХреЗ рд▓рд┐рдП, рд╣рдо рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдмрдврд╝рд╛рдиреЗ рдХреЗ рддрдВрддреНрд░ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдВрдЧреЗ, рдЬреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдлрд╝рдВрдХреНрд╢рди foo рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдпрд╣рд╛рдБ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛрдб рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

 babel-plugin-transformation-curry-function.js export default function ourBabelPlugin() {  return {    // ... <i>    visitor: {      FunctionDeclaration(path) {        if (path.get('curry').node) {          // const foo = curry(function () { ... });          path.node.curry = false;          path.replaceWith(            t.variableDeclaration('const', [              t.variableDeclarator(                t.identifier(path.get('id.name').node),                t.callExpression(t.identifier('currying'), [                  t.toExpression(path.node),                ])              ),            ])          );        }      },    },</i>  }; } function.js babel-plugin-transformation-curry-function.js export default function ourBabelPlugin() {  return {    // ... <i>    visitor: {      FunctionDeclaration(path) {        if (path.get('curry').node) {          // const foo = curry(function () { ... });          path.node.curry = false;          path.replaceWith(            t.variableDeclaration('const', [              t.variableDeclarator(                t.identifier(path.get('id.name').node),                t.callExpression(t.identifier('currying'), [                  t.toExpression(path.node),                ])              ),            ])          );        }      },    },</i>  }; } 

рдЖрдкрдХреЗ рд▓рд┐рдП рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ рдХрд┐ рдпрджрд┐ рдЖрдк рдмреИрдмрд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВред

рдЕрдм рд╣рдо рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рддрдВрддреНрд░ рдХреЛ currying рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ currying ред рдпрд╣рд╛рдВ рдЖрдк рджреЛ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

тЦНрдПрдкреНрд░реЛрдЪ рдирдВрдмрд░ 1: рдпрд╣ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд░реА рдлрдВрдХреНрд╢рди рд╡реИрд╢реНрд╡рд┐рдХ рджрд╛рдпрд░реЗ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ


рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдХрд╛рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрджрд┐ рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ currying рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╣рдо рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ " currying is not defined "ред рдпрд╣ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рдорд╛рди рд╣реИ " рдкреБрдирд░реНрдпреЛрдЬреАRuntime рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ "ред

рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдХреЛрдИ рдЖрдкрдХреЗ babel-plugin-transformation-curry-function рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдпрд╣ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдХрд┐ рдЗрд╕ рдкреНрд▓рдЧрдЗрди рдХреЛ рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕реЗ babel-plugin-transformation-curry-function currying рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

тЦН рджреГрд╖реНрдЯрд┐рдХреЛрдг # 2: рдЖрдк babel / рд╕рд╣рд╛рдпрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ


рдЖрдк @babel/helpers рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ @babel/helpers рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ @babel/helpers ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЖрдкрдХреЛ @babel/core рдХреЛ рдЕрдкрдиреЗ @babel/helpers рдХрд╛ рд╕реНрдерд╛рди рджрд┐рдЦрд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЦреЛрдЬрдирд╛ рд╣реЛрдЧрд╛:

 package.json {  "resolutions": {    "@babel/helpers": "7.6.0--your-custom-forked-version",  } 

рдореИрдВрдиреЗ рдЦреБрдж рдпрд╣ рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рддрдВрддреНрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдЖрдЬрдорд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рднрд╛рдЧрддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реВрдВрдЧрд╛ред

@babel/helpers рд▓рд┐рдП @babel/helpers рдирдпрд╛ рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди @babel/helpers рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рдВрдХреБрд▓ / рдмреЗрдмрд▓-рд╣реЗрд▓реНрдкрд░реНрд╕ / src / helpers.js рдлрд╝рд╛рдЗрд▓ рдкрд░ рдЬрд╛рдПрдБ рдФрд░ рдПрдХ рдирдИ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЬреЛрдбрд╝реЗрдВ:

 helpers.currying = helper("7.6.0")`  export default function currying(fn) {    const numParamsRequired = fn.length;    function curryFactory(params) {      return function (...args) {        const newParams = params.concat(args);        if (newParams.length >= numParamsRequired) {          return fn(...newParams);        }        return curryFactory(newParams);      }    }    return curryFactory([]);  } `; 

рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╕рдордп, рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕реНрдХрд░рдг @babel/core рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣рд╛рдБ рдХреБрдЫ рдХрдард┐рдирд╛рдЗрдпрд╛рдБ currying рдлрд╝рдВрдХреНрд╢рди рдХреЗ export default рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддреА рд╣реИрдВред

рдПрдХ рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВред this.addHelper() :

 // ... path.replaceWith(  t.variableDeclaration('const', [    t.variableDeclarator(      t.identifier(path.get('id.name').node),      t.callExpression(this.addHelper("currying"), [        t.toExpression(path.node),      ])    ),  ]) ); 

рдпрд╣ this.addHelper рдХрдорд╛рдВрдб, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдореНрдмреЗрдб рдХрд░реЗрдЧрд╛ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ Identifier рд▓реМрдЯрд╛рдПрдЧрд╛ред

рдиреЛрдЯ


рдореИрдВ рдХрд╛рдлреА рд╕рдордп рд╕реЗ рдмреИрдмреЗрд▓ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рддрдХ рдкрд╛рд░реНрд╕рд░ рдХреЛ рдирдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдирд╣реАрдВ рдкрдбрд╝рд╛ рд╣реИред рдореИрдВрдиреЗ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдмрдЧ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдФрд░ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╕реБрдзрд╛рд░ рд▓рд╛рдиреЗ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдм рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рднрд╛рд╖рд╛ рдореЗрдВ рдирдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдирддреАрдЬрддрди, рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рд▓рд┐рдЦрдиреЗ рдФрд░ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕рд╛ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛ред

рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рднрд╛рд╖рд╛ рдХреЗ рд╡рд╛рдХреНрдп рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░реЗрд░рдгрд╛ рдХрд╛ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╕реНрд░реЛрдд рд╣реИред рдпрд╣ рдХреБрдЫ рдЬрдЯрд┐рд▓ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ, рдХрдо рдХреЛрдб рд▓рд┐рдЦрдиреЗ, рдпрд╛ рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рд░рд▓ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред рд╕рд░рд▓ рдХреЛрдб рдХреЛ рдЬрдЯрд┐рд▓ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╣реИрдВ рдФрд░ рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ async/await рдирд░рдХ рдХреЙрд▓рдмреИрдХ рдФрд░ рд╡рд╛рджреЛрдВ рдХреА рд▓рдВрдмреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред

рдкрд░рд┐рдгрд╛рдо


рдпрд╣рд╛рдВ рд╣рдордиреЗ рдмрд╛рдмреЗрд▓ рдкрд╛рд░реНрд╕рд░ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА, рд╣рдордиреЗ рдЕрдкрдирд╛ рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд▓рдЧрдЗрди рд▓рд┐рдЦрд╛, @babel/generator рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрд╛рдд рдХреА рдФрд░ @babel/helpers рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреАред рдХреЛрдб рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗрд╡рд▓ рдпреЛрдЬрдирд╛рдмрджреНрдз рд░реВрдк рд╕реЗ рджреА рдЧрдИ рд╣реИред рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдБ рдФрд░ рдкрдврд╝реЗрдВред

рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╣рдордиреЗ рдкрд╛рд░реНрд╕рд░реНрд╕ рдХреА рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЫреБрдЖред рдпрджрд┐ рдЖрдк рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ - рддреЛ, рдпрд╣рд╛рдБ рдФрд░ рд╡рд╣рд╛рдБ - рд╕рдВрд╕рд╛рдзрди рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИрдВред

рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдХреА рдЧрдИ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдХреНрд░рдо рдЙрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рднрд╛рдЧ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЬреЛ TC39 рдореЗрдВ рдПрдХ рдирдпрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлреАрдЪрд░ рдЬрдорд╛ рдХрд░рдиреЗ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдВ TC39 рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдкреЗрдЬ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рд╡рд░реНрддрдорд╛рди рдСрдлрд╝рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдЖрдк рд╕рдорд╛рди рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдирдИ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддреЗ рд╕рдордп, рдЬреЛ рдЗрд╕реЗ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдЖрдорддреМрд░ рдкрд░ рдкреЙрд▓реАрдлрд╝рд┐рд▓реНрд╕ рд▓рд┐рдЦрддрд╛ рд╣реИ рдпрд╛, рдмреИрдмреЗрд▓ рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджреЗрдХрд░, рдпрд╣ рд╕рд╛рдмрд┐рдд рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдкреНрд░рджрд░реНрд╢рди рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рдХреНрдп рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкрд╛рд░реНрд╕рд░ рдХрд╛ рдХрд╛рдВрдЯрд╛ рдмрдирд╛рдирд╛ рдпрд╛ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рд▓рд┐рдЦрдирд╛ рдЬреЗрдПрд╕ рдХреА рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╕рдмрд╕реЗ рдХрдард┐рди рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдФрд░ рд╕реАрдорд╛рд╡рд░реНрддреА рдорд╛рдорд▓реЛрдВ рдХреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдФрд░ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╡рд╛рдЪрд╛рд░ рдХреЗ рд╡рд┐рд╖рдп рдХреНрд╖реЗрддреНрд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ; рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╕рдореБрджрд╛рдп рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреА рд░рд╛рдп рдФрд░ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЙрди рд╕рднреА рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдЖрднрд╛рд░ рд╡реНрдпрдХреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ TC39 рдирдИ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рдиреЗ рдХреА рддрд╛рдХрдд рдкрд╛рддреЗ рд╣реИрдВ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЗрд╕ рднрд╛рд╖рд╛ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдпрд╣рд╛рдБ GitHub рдкрд░ рдПрдХ рдкреГрд╖реНрда рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдпрд╣рд╛рдБ рдкрд░ рдХрд┐рдП рдЧрдП рдмрдбрд╝реЗ рдЪрд┐рддреНрд░ рдХреЛ рджреЗрдЦрдиреЗ рджреЗрдЧрд╛ред

рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдХреНрдпрд╛ рдЖрдк рдХрднреА рднреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?


Source: https://habr.com/ru/post/hi470878/


All Articles