npm package: @skblab/angular-defaults
Description: SKBLAB Angular defaults
Author: SKBLAB
Latest version: 9.113.2

# SKBLAB Angular defaults

## Установка

### Подключение пакета

Заменить в `packages.json` все стандартные пакеты на `"@skblab/angular-defaults": "^9.0.0"`, удалить `node_modules` и `package-lock.json`, запустить `npm install`.

**ВАЖНО** Yarn не тестируется, не поддерживается, и скорее всего работает не правильно.

```json
{
    "dependencies": {
        "@skblab/angular-defaults": "^9.0.0"
    },
    "devDependencies": {
    }
}
```

### Подключение полифиллов

Заменить стандартную часть файла `polyfills.ts` на импорт `@skblab/angular-defaults/polyfills`.  

```typescript
import '@skblab/angular-defaults/polyfills';
```

Состав полифиллов описан ниже.


### Подключение линтера

Добавить в секцию `extends` файла `tslint.json` импорт из `@skblab/angular-defaults/tslint.json`. 

```json
{
    "extends": [
        "@skblab/angular-defaults/tslint.json"
    ]
}
``` 

### Настройка IDE

Для включения поддержки Angular в WebStorm добавить в раздел `devDependencies` пакет `"@angular/core": "*"`.

```json
{
    "dependencies": {
        "@skblab/angular-defaults": "^9.112.0"
    },
    "devDependencies": {
        "@angular/core": "*"
    }
}
```

Для включения подсказок для Angular и RxJS в WebStorm добавить пути к `node_modules/@angular` и `node_modules/rxjs` в раздел **Languages & Frameworks > JavaScript > Libraries** настроек.


## Обновление

**ВАЖНО** Нельзя просто так обновить версию пакета, может произойти что угодно.

Для обновления нужно вернуть обратно все стандартные пакеты, прогнать инструкцию из https://update.angular.io/, и заменить стандартные пакеты на очередную версию `@skblab/angular-defaults`.  


## Angular Elements

Для включения полифилла добавить в файл `polyfills.ts` импорт `document-register-element` после импорта `@skblab/angular-defaults/polyfills`.

```typescript
import '@skblab/angular-defaults/polyfills';

import 'document-register-element';
```


## normalize.css

```json
{
  "projects": {
    "project-name": {
      "architect": {
        "build": {
          "options": {
            "styles": [
              "node_modules/normalize.css/normalize.css"
            ]
          }
        }
      }
    }  
  }
}
```


## ES5 Polyfills

### Default Angular Polyfills

[github:angular/angular-cli](https://github.com/angular/angular-cli/blob/v9.1.12/packages/angular_devkit/build_angular/src/angular-cli-files/models/es5-polyfills.js)

```typescript
// ES2015 symbol capabilities
import 'core-js/es/symbol';

// ES2015 function capabilities
import 'core-js/modules/es.function.bind';
import 'core-js/modules/es.function.name';
import 'core-js/modules/es.function.has-instance';

// ES2015 object capabilities
import 'core-js/modules/es.object.create';
import 'core-js/modules/es.object.define-property';
import 'core-js/modules/es.object.define-properties';
import 'core-js/modules/es.object.get-own-property-descriptor';
import 'core-js/modules/es.object.get-prototype-of';
import 'core-js/modules/es.object.keys';
import 'core-js/modules/es.object.get-own-property-names';
import 'core-js/modules/es.object.freeze';
import 'core-js/modules/es.object.seal';
import 'core-js/modules/es.object.prevent-extensions';
import 'core-js/modules/es.object.is-frozen';
import 'core-js/modules/es.object.is-sealed';
import 'core-js/modules/es.object.is-extensible';
import 'core-js/modules/es.object.assign';
import 'core-js/modules/es.object.is';
import 'core-js/modules/es.object.set-prototype-of';
import 'core-js/modules/es.object.to-string';

// ES2015 array capabilities
import 'core-js/modules/es.array.concat';
import 'core-js/modules/es.array.is-array';
import 'core-js/modules/es.array.from';
import 'core-js/modules/es.array.of';
import 'core-js/modules/es.array.join';
import 'core-js/modules/es.array.slice';
import 'core-js/modules/es.array.splice';
import 'core-js/modules/es.array.sort';
import 'core-js/modules/es.array.for-each';
import 'core-js/modules/es.array.map';
import 'core-js/modules/es.array.filter';
import 'core-js/modules/es.array.some';
import 'core-js/modules/es.array.every';
import 'core-js/modules/es.array.reduce';
import 'core-js/modules/es.array.reduce-right';
import 'core-js/modules/es.array.index-of';
import 'core-js/modules/es.array.last-index-of';
import 'core-js/modules/es.array.copy-within';
import 'core-js/modules/es.array.fill';
import 'core-js/modules/es.array.find';
import 'core-js/modules/es.array.find-index';
import 'core-js/modules/es.array.iterator';

// ES2015 string capabilities
import 'core-js/modules/es.string.from-code-point';
import 'core-js/modules/es.string.raw';
import 'core-js/modules/es.string.trim';
import 'core-js/modules/es.string.iterator';
import 'core-js/modules/es.string.code-point-at';
import 'core-js/modules/es.string.ends-with';
import 'core-js/modules/es.string.includes';
import 'core-js/modules/es.string.repeat';
import 'core-js/modules/es.string.starts-with';
import 'core-js/modules/es.string.anchor';
import 'core-js/modules/es.string.big';
import 'core-js/modules/es.string.blink';
import 'core-js/modules/es.string.bold';
import 'core-js/modules/es.string.fixed';
import 'core-js/modules/es.string.fontcolor';
import 'core-js/modules/es.string.fontsize';
import 'core-js/modules/es.string.italics';
import 'core-js/modules/es.string.link';
import 'core-js/modules/es.string.small';
import 'core-js/modules/es.string.strike';
import 'core-js/modules/es.string.sub';
import 'core-js/modules/es.string.sup';
import 'core-js/modules/es.string.match';
import 'core-js/modules/es.string.replace';
import 'core-js/modules/es.string.search';
import 'core-js/modules/es.string.split';

import 'core-js/modules/es.parse-int';
import 'core-js/modules/es.parse-float';

import 'core-js/es/number';
import 'core-js/es/math';
import 'core-js/es/date';

import 'core-js/modules/es.regexp.constructor';
import 'core-js/modules/es.regexp.to-string';
import 'core-js/modules/es.regexp.flags';

import 'core-js/modules/es.map';
import 'core-js/modules/es.weak-map';
import 'core-js/modules/es.set';
import 'core-js/modules/web.dom-collections.for-each';
import 'core-js/modules/web.dom-collections.iterator';
import 'core-js/modules/es.promise';
import 'core-js/modules/es.json.to-string-tag';

import 'regenerator-runtime/runtime';
```


### Добавлено

```typescript
import 'core-js/modules/es.array.includes';
import 'core-js/modules/es.array.reverse';
import 'core-js/modules/es.object.values';
import 'core-js/modules/es.object.entries';
import 'core-js/modules/es.string.pad-start';
import 'core-js/modules/es.string.pad-end';
```


## Известные проблемы установки

Обновление tslint, возможно придётся деградировать его до 5.x 

```
npm WARN tslint-consistent-codestyle@1.16.0 requires a peer of tslint@^5.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN tslint-sonarts@1.9.0 requires a peer of tslint@^5.11.0 but none is installed. You must install peer dependencies yourself.
npm WARN tslint-eslint-rules@5.4.0 requires a peer of tslint@^5.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN @fimbul/bifrost@0.21.0 requires a peer of tslint@^5.0.0 but none is installed. You must install peer dependencies yourself.
```

Стандартные ошибки v9

```
npm WARN sass-loader@8.0.2 requires a peer of node-sass@^4.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN sass-loader@8.0.2 requires a peer of fibers@>= 3.1.0 but none is installed. You must install peer dependencies yourself.
npm WARN webpack-subresource-integrity@1.4.0 requires a peer of html-webpack-plugin@^2.21.0 || ~3 || >=4.0.0-alpha.2 <5 but none is installed. You must install peer dependencies yourself.
npm WARN ws@7.4.3 requires a peer of bufferutil@^4.0.1 but none is installed. You must install peer dependencies yourself.
npm WARN ws@7.4.3 requires a peer of utf-8-validate@^5.0.2 but none is installed. You must install peer dependencies yourself.
```