
рдореВрд▓ рдкреЛрд╕реНрдЯ рд░реВрд╕реА рдореЗрдВ
рдЬрдм рдЖрдк рдЕрдХреЗрд▓реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рддрдм рднреА рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рд░реВрдкрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рдХрд╛рдо рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдХрд┐рд╕реА рдЯреАрдо рдХреЗ рд╕рд╛рде рдпрд╛ рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╕рдм рдХрдард┐рди рд╣реЛрдиреЗ рд▓рдЧрддрд╛ рд╣реИред рд╣рд░ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЕрдкрдиреА рдЦреБрдж рдХреА рдХреЛрдб рд╢реИрд▓реА рд╣реЛрддреА рд╣реИ, рдХреЛрдИ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдЪрд▓рд╛рддрд╛ рд╣реИ, рдФрд░ рдХреЛрдИ рднреА рджрд╕реНрддрд╛рд╡реЗрдЬ рдирд╣реАрдВ рд▓рд┐рдЦрддрд╛ рд╣реИред рдпрд╣ рд▓реЗрдЦ рдЖрдкрдХреЛ рдЗрди рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ - рдЗрд╕ рджрд┐рдирдЪрд░реНрдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрднреА рди рдХрд░реЗрдВред
рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ рдЕрдЧрд▓реА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ npm-рддреИрдпрд╛рд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдорд┐рд▓реЗрдЧрд╛:
- рдкрд╛рда рд╕реНрд╡рд░реВрдкрдг рдФрд░ рдХреЛрдб рд╢реИрд▓реА
- рдХреЛрдб рдХрд╡рд░реЗрдЬ рдФрд░ рджрд╣рд▓реАрдЬ рдХреЗ рд╕рд╛рде рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдг
- рдПрдХреАрдХреГрдд рдкреНрд░рддрд┐рдмрджреНрдз рд╢реИрд▓реА
- рдХреЛрдб рд╕реЗ рдЙрддреНрдкрдиреНрди рдкреНрд░рд▓реЗрдЦрди рдФрд░ рдХрдорд┐рдЯ рдХрд░рддрд╛ рд╣реИ
- рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреНрд░рдХрд╛рд╢рд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛
рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВ!
рдЖрд╡рд╢реНрдпрдХ рд╢рд░реНрддреЗрдВ
рдПрдХ рдирдпрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВ, рдирдП рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рд╢реБрд░реВ рдХрд░реЗрдВ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд░реЗрдВ рдФрд░ рдЕрдЧрд▓реЗ рдЪрд░рдг рдкрд░ рдЬрд╛рдПрдВред
git init npm init npm i -D typescript ./node_modules/.bin/tsc --init
рдЖрдЗрдП рдХреЛрдб рд╕реНрд╡рд░реВрдкрдг рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВ - рдЗрдВрдбрд┐рдХреЗрд╢рди рдкреНрд░рдХрд╛рд░, рдЖрдХрд╛рд░ рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдкрд╣рд▓рд╛ рдЙрдкрдХрд░рдг .editorconfig рдлрд╝рд╛рдЗрд▓ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ IDE рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрд╣ рдЖрдкрдХреА рд╕реНрд╡рддрдГ рдкреВрд░реНрдгрддрд╛ рдХреЛ рдЖрдкрдХреА рдЯреАрдо рдХреЗ рд╕рднреА рд╕реНрддрд░реЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рдмрдирд╛рдП рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
рдЕрдЧрд▓реА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрдбрд╝ рдореЗрдВ .editorconfig рдмрдирд╛рдПрдВ (рдЕрдкрдиреА рдЗрдЪреНрдЫрд┐рдд рд╢реИрд▓реА рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ)
#root = true [*] indent_style = space end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true max_line_length = 100 indent_size = 4 [*.md] trim_trailing_whitespace = false
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рднрдпрд╛рдирдХ рд╣реИ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдпрд╣ рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╢рдХреНрддрд┐ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рднреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рд░реВрдкрд┐рдд рдкреНрд░реАрдЯрд┐рдпрд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдХреЛрдб рдХреЛ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рдирд╛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░реАрдЯреАрдпрд░ рдЖрдкрдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд░ рджреЗрдЧрд╛ред
npm i -D prettier
рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
"prettier": "prettier --config .prettierrc.json --write src/**/*.ts"
рдФрд░ рдкреНрд░реЙрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдЯ рдореЗрдВ рдЕрдкрдиреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде .prettierrc.json рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ
{ "tabWidth": 4, "useTabs": false, "semi": true, "singleQuote": true, "trailingComma": "es5", "arrowParens": "always" }
рдЕрдм рдЖрдк рдХреБрдЫ рдХреЛрдб рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ "npm run prettier" рдЪрд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Prettier src рдлреЛрд▓реНрдбрд░ рдХреЛ рдЪреЗрдХ рдХрд░реЗрдЧрд╛ рдФрд░ рдЖрдкрдХреА рддрд░рдл рд╕реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдорджрдж рдХреЗ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдЕрдкрдиреЗ рдЖрдк рдлреЙрд░реНрдореЗрдЯ рдХрд░ рджреЗрдЧрд╛!
рдХреЛрдб рд╢реИрд▓реА
рдХреЛрдб рд╢реИрд▓реА - рдЬреИрд╕реЗ === рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдирд╛ = = рдпрд╛ рдЫрд╛рдпрд╛рдВрдХрди рдЪрд░ рдХреА рднреА рдЬрд╛рдБрдЪ рдХрд░рдиреА рд╣реЛрдЧреАред рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП, рд╣рдо tslint рд▓реЗрдВрдЧреЗ ред рдпрджрд┐ рдЖрдк рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ - рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрд╕реНрд▓рд┐рдВрдЯ рд▓реЗрдВ ред
npm i -D tslint ./node_modules/.bin/tslint --init
рдЕрдВрддрд┐рдо рдХрдорд╛рдВрдб рдЖрдкрдХреЗ рд▓рд┐рдП tslint.json рдлрд╛рдЗрд▓ рдмрдирд╛рдПрдЧреАред рдпрд╣ рдЖрдкрдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА tslint рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ: рдирд┐рдпрдореЛрдВ рдХреЗ рд╕реЗрдЯ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЬреЛ рдЪрд╛рд╣реЗрдВ рдЙрдиреНрд╣реЗрдВ рдмрдврд╝рд╛ рдпрд╛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдкрдиреЗ package.json рдореЗрдВ рд▓рд┐рдВрдЯ рдХрдорд╛рдВрдб рдЬреЛрдбрд╝рдирд╛ рди рднреВрд▓реЗрдВред
package.json
"lint": "tslint -c tslint.json 'src/**/*.ts' 'tests/**/*.spec.ts'"
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЗрд╕реЗ src рдФрд░ рдкрд░реАрдХреНрд╖рдг рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрдЕрдк рджреЗрдЦрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЗ рд╕рднреА рдХреЛрдб рдХреЛ рд╡рд╣рд╛рдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкрд░реАрдХреНрд╖рдг
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдХрд░реНрдо рдФрд░ рдЕрдиреНрдп рд╕рдВрдмрдВрдзрд┐рдд рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
npm i -D karma karma-jasmine jasmine karma-typescript karma-chrome-launcher @types/jasmine ./node_modules/.bin/karma init
рдФрд░ рдирдП рдмрдирд╛рдП рдЧрдП рдмреНрд▓реЙрдХ рдХреЛ рдирдП рдмрдирд╛рдП рдЧрдП рдХрд░реНрдо рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ редconf.js
karma.conf.js karmaTypescriptConfig : { include: ["./src/**/*.ts", "./tests/**/*.spec.ts"], tsconfig: "./tsconfig.json", reports: { "html": "coverage", "lcovonly": { directory: './coverage', filename: '../lcov.dat' } }, coverageOptions: { threshold: { global: { statements: 60, branches: 60, functions: 60, lines: 60 }, file: { statements: 60, branches: 60, functions: 60, lines: 60, } } }, }
рдпрд╣ рдХреЛрдб-рдХрд╡рд░реЗрдЬ рдлрд╝рд╛рдЗрд▓ рдФрд░ рдереНрд░реЗрд╢реЛрд▓реНрдб рд╕реНрддрд░ рд╕реЗрдЯрдЕрдк рдХрд░реЗрдЧрд╛ред рджреЛрдиреЛрдВ рд╣реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред рдкрд╣рд▓рд╛ рдЖрдкрдХреЗ рдХрд╡рд░реЗрдЬ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдореЗрдВ рдЖрдкрдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИ рдФрд░ рджреВрд╕рд░рд╛ рдЖрдкрдХреЗ рдХрд╡рд░реЗрдЬ рдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрддрд░ рдкрд░ рд░рдЦрддрд╛ рд╣реИред
рдЕрджреНрдпрддрди рдкреИрдХреЗрдЬред Json
"test": "karma start"
рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рдкрд░реАрдХреНрд╖рдг рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ src рдлрд╝реЛрд▓реНрдбрд░ рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдЕрдВрджрд░ рдХреБрдЫ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рди рднреВрд▓реЗрдВред рдЗрд╕ рддрд░рд╣ рдЖрдкрдХреА рдХреЛрдб рдХрд╡рд░реЗрдЬ рд░рд┐рдкреЛрд░реНрдЯ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:

Btw, рдпрджрд┐ рдЖрдк рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг (рдЬреИрд╕реЗ рдЯреНрд░реИрд╡рд┐рд╕, рдЬреЗрдирдХрд┐рдВрд╕ рдпрд╛ рдЗрддрдиреЗ рдкрд░) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ рддреЛ рдХреНрд░реЛрдо рдзрд╛рд╡рдХ рдХреЛ рд╣реЗрдбрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рдХрдардкреБрддрд▓реА рдХреЗ рд░реВрдк рдореЗрдВ рдмрджрд▓рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред HeadlessChrome рдФрд░ CI рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП - GitHub рдкрд░ рдореЗрд░реЗ рдбреЗрдореЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред
рдкреНрд░рддрд┐рдмрджреНрдз рд╢реИрд▓реА
рдЖрдорддреМрд░ рдкрд░, рд╕рднреА рдХреБрдЫ "рдпрд╛рджреГрдЪреНрдЫрд┐рдХ" рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд╛рдЧрд░рд┐рдХ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдЙрдкрдХрд░рдг рдХреБрдЫ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рдХрд░рддрд╛ рд╣реИред рдПрдХ рдФрд░ рдЕрдЪреНрдЫреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдХрдорд┐рдЯрдореЗрдВрдЯ рдХреА рдорджрдж рд╕реЗ рд▓рд┐рдЦреЗ рдЧрдП рдХрдорд┐рдЯ рд╕реЗ рдЪреЗрдВрдЬ-рд▓реЙрдЧ рдлрд╛рдЗрд▓ рдЬрдирд░реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХрдорд┐рдЯрдореИрди рдФрд░ рдкрд╛рд░рдВрдкрд░рд┐рдХ-рдЪреИрдВрдЬ рдПрдбрд╛рдкреНрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
npm i -D commitizen npm i -D cz-conventional-changelog
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ
"commit":"git-cz"
рдкреИрдХреЗрдЬ рдХреЗ рдЕрдВрджрд░ рдирдпрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЕрдиреБрднрд╛рдЧ рдЬреЛрдбрд╝реЗрдВред рдирд╛рдЧрд░рд┐рдХ рдХреЗ рд▓рд┐рдП рд╕рдВрджреЗрд╢ред
"config": { "commitizen": { "path": "./node_modules/cz-conventional-changelog" } }
рдПрдХ рдЫрд╡рд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЫрд╡рд┐ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рдмрджреНрдз рдмрдирд╛рдиреЗ рдпрд╛ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛:

рдкреНрд░рд▓реЗрдЦрди
рдпрджрд┐ рдЖрдкрдХрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдмрдбрд╝рд╛ рд╣реИ, рддреЛ рдХреБрдЫ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдФрд░ рдпрд╣ рддрдм рднреА рдмреЗрд╣рддрд░ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреБрдЫ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЙрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдкреНрдбреЛрдХ рдореМрдЬреВрдж рд╣реИред рдпрд╣ рдЖрдкрдХреА .ts рдлрд╛рдЗрд▓реЗрдВ, рдЖрдкрдХреА jsdoc рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЕрдЪреНрдЫрд╛ рдФрд░ рдЪрдордХрджрд╛рд░ рджрд╕реНрддрд╛рд╡реЗрдЬ рдмрдирд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ - рдЖрдк рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрд╕реНрдХреЙрдХ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣рд╛рдБ рдпрд╣ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдХрд┐ рдЯрд╛рдЗрдкреНрдбреЛрдХ рдиреЗ рдореЗрд░реЗ рдХрд╛рд░реНрдп рдХрд╛ рд╡рд░реНрдгрди рдХреИрд╕реЗ рдХрд┐рдпрд╛ рд╣реИ редNumberStrict:

npm i -D typedoc
package.json
"doc": "typedoc --out docs/src"
рдПрдХ рдФрд░ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдЕрдкрдиреА рдкрд░рд┐рд╡рд░реНрддрди-рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдСрдЯреЛ-рдЬрдирд░реЗрдЯ рдХрд░рдирд╛ рднреА рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдХрдорд┐рдЯрдореЗрдВрдЯ рдкрд╛рд░рдВрдкрд░рд┐рдХ-рдЪреЗрдВрдЧрд▓реЙрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдХрдорд┐рдЯ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкрд░рд┐рд╡рд░реНрддрди-рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдкрд╛рд░рдВрдкрд░рд┐рдХ-рдЪреИрдВрдЬ-рдХреНрд▓реЛрдЧ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
npm i -D conventional-changelog-cli
рдФрд░ рдирдП рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде package.json рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -s"
рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ, рдХреЛрдгреАрдп рдХрд╛ рдЕрд░реНрде рдХреЗрд╡рд▓ рд╢реИрд▓реА рдкреНрд░рд╛рд░реВрдкрдг рдФрд░ рдЕрдзрд┐рдХ рдХреБрдЫ рдирд╣реАрдВ рд╣реИред рдЕрдм, рдЖрдкрдХрд╛ рдЪреИрдВрдЬ рдмреЛрдЧреЛ рдХреА рддрд░рд╣ рдмрди рдЬрд╛рдПрдЧрд╛:

рдмрд┐рд▓реНрдб
рдмрд┐рд▓реНрдб рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ рдФрд░ рдкреИрдХреЗрдЬ рдореЗрдВ рдХреЗрд╡рд▓ рдирд┐рд░реНрдорд╛рдг рдФрд░ рд╕реНрд╡рдЪреНрдЫ рдХрдорд╛рдВрдб рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдмрд╛рдд рд╣реИ
"clean":"rmdir dist /S /Q", "build": "tsc --p ./ --sourceMap false",
рдпрджрд┐ рдЖрдкрдХреЛ рдмрдВрдбрд▓рд┐рдВрдЧ рдпрд╛ рдорд┐рдирд┐рдлрд┐рдХреЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рддреЛ рдХреБрд░рдХреБрд░реАрдЬрд╝ рдХреЛ рдЖрдЬрд╝рдорд╛рдПрдВ ред
рд╕реНрд╡рдЪрд╛рд▓рди
рдареАрдХ рд╣реИ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╣рд┐рд╕реНрд╕рд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рдпрд╛ред рд╣рдордиреЗ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рд╕рд╛рдл рдФрд░ рд╕рд╣реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдмрдирд╛рдпрд╛ред рд▓реЗрдХрд┐рди рд╣рд░ рдмрд╛рд░ рдЙрдиреНрд╣реЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдирд╛ рдХрд╛рдлреА рдЙрдмрд╛рдК рдХрд╛рдо рд╣реИ рдФрд░ рдЗрд╕рд╕реЗ рдЧрд▓рддрд┐рдпрд╛рдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЬрдм рдЖрдк рдХреБрдЫ рдХрдорд┐рдЯ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреБрдЫ рдШрдЯрдирд╛рдПрдБ рд╕рд╛рдордиреЗ рдЖрддреА рд╣реИрдВ - рдкреНрд░реА-рдХрдорд┐рдЯ, рдкреЛрд╕реНрдЯ-рдХрдорд┐рдЯ рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдХреЛрдб рдХреЛ рдХрдорд┐рдЯ рдпрд╛ рдкреБрд╢ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдо рдЕрдкрдиреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ - рдЧрд┐рдЯ рд╣реБрдХ рд╢рд░реНрдордирд╛рдХ рдирд╣реАрдВ рд╣реИрдВред рдФрд░ рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдХрд░реНрдХрд╢ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдкреИрдХреЗрдЬ git рдЗрд╡реЗрдВрдЯ рдХреЛ рд▓рдкреЗрдЯрддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ package.json рд╕реЗ рдЪрд▓рд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд┐рдлрд▓ рд╣реЛрддреА рд╣реИ, рддреЛ рдХрдорд┐рдЯ рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рд╕рдВрджреЗрд╢ рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реЛ рд░рд╣рд╛ рд╣реИред
рдХрд░реНрдХрд╢ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
npm i -D husky
рдФрд░ package.json рдХреЗ рдЕрдВрджрд░ рдХреБрдЫ рд╣реБрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ
"precommit":"npm run prettier", "prepush": "call npm run lint && call npm run test"
рдЕрдм, рдЬрдм рдЖрдк рдПрдХ рдХрдорд┐рдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗ рддреЛ рд╕рднреА рдлреЙрд░реНрдореЗрдЯрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛рдПрдБ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдВрдЧреАред рдЬрдм рдЖрдк рдПрдХ рдзрдХреНрдХрд╛ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ - рдХреЛрдб рд╢реИрд▓реА рдФрд░ рдкрд░реАрдХреНрд╖рдг рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди, рдПрдХреНрд╕реНрдЯреНрд░рд╛ рдЪреЗрдХ рдЖрджрд┐ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕ рдХрдорд╛рдВрдб рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛
рдорд╣рд╛рди, рд╣рдо рд▓рдЧрднрдЧ рд╣реЛ рдЪреБрдХреЗ рд╣реИрдВред рддреЛ, рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо npm рдкрд░ рдкреИрдХреЗрдЬ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдкрд░реАрдХреНрд╖рдг, рдкреНрд░рд▓реЗрдЦрди рдЕрджреНрдпрддрди, рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдЯреИрдЧ рдЕрдкрдбреЗрдЯ рд╕реЗ рдкрд╣рд▓реЗ рдмрд╣реБрдд рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреБрдЫ рднреВрд▓рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рд╣рд╛рдБ? рддреЛ, рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рднреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдЙрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП, рд╣рдо рдореВрд▓ npm рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ - рдкреНрд░рдЪрд▓рд┐рдд, рд╕рдВрд╕реНрдХрд░рдг, рдФрд░ рдкреЛрд╕реНрдЯрд╡реЙрд░реНрд╢рдиред рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдХреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВред json
"preversion": "npm run test", "version": "call npm run clean && call npm run build && call npm run doc && call npm run changelog && git add . && git commit -m 'changelogupdate' --no-verify", "postversion": "git add . && git push && git push --tags"
рдЬрдм рдЖрдк npm рд╕рдВрд╕реНрдХрд░рдг рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВрдЧреЗ, рддреЛ рдкреНрд░рдЪрд▓рд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдЧреА, рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдкрдХреЗ рдХреЛрдб рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдЧреА рдФрд░ рд╕рднреА рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧреАред рдлрд┐рд░ рд╕рдВрд╕реНрдХрд░рдг рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдлрд┐рд░ рд╕рднреА рдХреЛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдмрд╛рд╣рд░ рдзрдХреЗрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЕрдм рдЖрдк рд╕рднреА рдХреА рдЬрд░реВрд░рдд рд╣реИ npm рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдпрд╣ рд╕рдм рд╣реИред рдмрд╕ рдЖрджреЗрд╢ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдЖрдкрдХреА рддрд░рдл рд╕реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреНрд░рдпрд╛рд╕ рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЕрдВрдд рдореЗрдВ, рд╣рдореЗрдВ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХрд┐рди рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЬрд╣рд╛рдВ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рд╕реНрдерд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдкреИрдХреЗрдЬ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ
"main": "./dist/index.min.js", "types": "./dist/index.d.ts", "files": [ "dist/", "src/", "tests/" ]
рдпрд╣ рд╕рдм, рдЖрдкрдХрд╛ рднрдпрд╛рдирдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ!
рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ
рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдпрджрд┐ рдЖрдкрдХреЗ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдореЗрд░реЗ рдбреЗрдореЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ рдпрд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдкреВрдЫреЗрдВред
рдЖрдкрдХрд╛ рджрд┐рди рд╢реБрдн рд╣реЛ!