рдЖрдЬ, рд╣рдо 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
рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ
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() {
рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдкрд╛рд░реНрд╕рд░реНрд╕ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдмрддрд╛рдпрд╛ред рдЗрд╕рд▓рд┐рдП,
рдпрд╣рд╛рдВ рдФрд░
рд╡рд╣рд╛рдВ - рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЙрдкрдпреЛрдЧреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗред рдореИрдВрдиреЗ рдЙрдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рдХреБрдЫ рд╕реАрдЦрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдЖрдкрдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛ рд╕рдХрддреА рд╣реИ рдХрд┐ рдореИрдВ рдмреИрдмрд▓ рдПрдПрд╕рдЯреА рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдореЗрдВ рдмрдирд╛рдП рдЧрдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рдХрд▓реНрдкрдирд╛ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬрдм рдореИрдВрдиреЗ рдПрдПрд╕рдЯреА рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реА рдирдИ "
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([]); }
рдпрджрд┐ рдЖрдк рдЬреЗрдПрд╕ рдореЗрдВ рдХрд░реА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рддрдВрддреНрд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ -
рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдо, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрджрд▓рдирд╛ рдЬреЛ рдХрд░реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
рдЕрднреА рдХреЗ рд▓рд┐рдП, рд╣рдо рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ
рдлрд╝рдВрдХреНрд╢рдВрд╕ рдмрдврд╝рд╛рдиреЗ рдХреЗ рддрдВрддреНрд░ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдВрдЧреЗ, рдЬреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдлрд╝рдВрдХреНрд╢рди
foo
рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛрдб рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
babel-plugin-transformation-curry-function.js export default function ourBabelPlugin() { return {
function.js babel-plugin-transformation-curry-function.js export default function ourBabelPlugin() { return {
рдЖрдкрдХреЗ рд▓рд┐рдП рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ рдХрд┐ рдпрджрд┐ рдЖрдк рдмреИрдмрд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВред
рдЕрдм рд╣рдо рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рддрдВрддреНрд░ рдХреЛ
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()
:
рдпрд╣
this.addHelper
рдХрдорд╛рдВрдб, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдореНрдмреЗрдб рдХрд░реЗрдЧрд╛ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ
Identifier
рд▓реМрдЯрд╛рдПрдЧрд╛ред
рдиреЛрдЯ
рдореИрдВ рдХрд╛рдлреА рд╕рдордп рд╕реЗ рдмреИрдмреЗрд▓ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рддрдХ рдкрд╛рд░реНрд╕рд░ рдХреЛ рдирдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдирд╣реАрдВ рдкрдбрд╝рд╛ рд╣реИред рдореИрдВрдиреЗ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдмрдЧ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдФрд░ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╕реБрдзрд╛рд░ рд▓рд╛рдиреЗ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдм рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рднрд╛рд╖рд╛ рдореЗрдВ рдирдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдирддреАрдЬрддрди, рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рд▓рд┐рдЦрдиреЗ рдФрд░ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕рд╛ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛ред
рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рднрд╛рд╖рд╛ рдХреЗ рд╡рд╛рдХреНрдп рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░реЗрд░рдгрд╛ рдХрд╛ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╕реНрд░реЛрдд рд╣реИред рдпрд╣ рдХреБрдЫ рдЬрдЯрд┐рд▓ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ, рдХрдо рдХреЛрдб рд▓рд┐рдЦрдиреЗ, рдпрд╛ рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рд░рд▓ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред рд╕рд░рд▓ рдХреЛрдб рдХреЛ рдЬрдЯрд┐рд▓ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╣реИрдВ рдФрд░ рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ
async/await
рдирд░рдХ рдХреЙрд▓рдмреИрдХ рдФрд░ рд╡рд╛рджреЛрдВ рдХреА рд▓рдВрдмреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред
рдкрд░рд┐рдгрд╛рдо
рдпрд╣рд╛рдВ рд╣рдордиреЗ рдмрд╛рдмреЗрд▓ рдкрд╛рд░реНрд╕рд░ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА, рд╣рдордиреЗ рдЕрдкрдирд╛ рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд▓рдЧрдЗрди рд▓рд┐рдЦрд╛,
@babel/generator
рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрд╛рдд рдХреА рдФрд░
@babel/helpers
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреАред рдХреЛрдб рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗрд╡рд▓ рдпреЛрдЬрдирд╛рдмрджреНрдз рд░реВрдк рд╕реЗ рджреА рдЧрдИ рд╣реИред рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдпрд╣рд╛рдБ рдФрд░ рдкрдврд╝реЗрдВред
рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╣рдордиреЗ рдкрд╛рд░реНрд╕рд░реНрд╕ рдХреА рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЫреБрдЖред рдпрджрд┐ рдЖрдк рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ - рддреЛ,
рдпрд╣рд╛рдБ рдФрд░
рд╡рд╣рд╛рдБ - рд╕рдВрд╕рд╛рдзрди рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИрдВред
рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдХреА рдЧрдИ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдХреНрд░рдо рдЙрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рднрд╛рдЧ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЬреЛ TC39 рдореЗрдВ рдПрдХ рдирдпрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлреАрдЪрд░ рдЬрдорд╛ рдХрд░рдиреЗ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣рд╛рдВ TC39 рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдкреЗрдЬ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рд╡рд░реНрддрдорд╛рди рдСрдлрд╝рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣рд╛рдВ рдЖрдк рд╕рдорд╛рди рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдирдИ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддреЗ рд╕рдордп, рдЬреЛ рдЗрд╕реЗ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдЖрдорддреМрд░ рдкрд░ рдкреЙрд▓реАрдлрд╝рд┐рд▓реНрд╕ рд▓рд┐рдЦрддрд╛ рд╣реИ рдпрд╛, рдмреИрдмреЗрд▓ рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджреЗрдХрд░, рдпрд╣ рд╕рд╛рдмрд┐рдд рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдкреНрд░рджрд░реНрд╢рди рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рдХреНрдп рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкрд╛рд░реНрд╕рд░ рдХрд╛ рдХрд╛рдВрдЯрд╛ рдмрдирд╛рдирд╛ рдпрд╛ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рд▓рд┐рдЦрдирд╛ рдЬреЗрдПрд╕ рдХреА рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╕рдмрд╕реЗ рдХрдард┐рди рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдФрд░ рд╕реАрдорд╛рд╡рд░реНрддреА рдорд╛рдорд▓реЛрдВ рдХреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдФрд░ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╡рд╛рдЪрд╛рд░ рдХреЗ рд╡рд┐рд╖рдп рдХреНрд╖реЗрддреНрд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ; рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╕рдореБрджрд╛рдп рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреА рд░рд╛рдп рдФрд░ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЙрди рд╕рднреА рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдЖрднрд╛рд░ рд╡реНрдпрдХреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ TC39 рдирдИ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рдиреЗ рдХреА рддрд╛рдХрдд рдкрд╛рддреЗ рд╣реИрдВ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЗрд╕ рднрд╛рд╖рд╛ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдпрд╣рд╛рдБ GitHub рдкрд░
рдПрдХ рдкреГрд╖реНрда рд╣реИ рдЬреЛ рдЖрдкрдХреЛ
рдпрд╣рд╛рдБ рдкрд░ рдХрд┐рдП рдЧрдП рдмрдбрд╝реЗ рдЪрд┐рддреНрд░ рдХреЛ рджреЗрдЦрдиреЗ рджреЗрдЧрд╛ред
рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдХреНрдпрд╛ рдЖрдк рдХрднреА рднреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?
