This commit is contained in:
geek 2018-04-24 21:20:01 +09:00
commit f47354cd49
74 changed files with 965 additions and 0 deletions

45
.gitignore vendored Normal file
View File

@ -0,0 +1,45 @@
# See http://help.github.com/ignore-files/ for more about ignoring files.
# compiled output
/dist
/dist-server
/tmp
/out-tsc
# dependencies
/node_modules
# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace
# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
# misc
/.sass-cache
/connect.lock
/coverage
/libpeerconnection.log
npm-debug.log
testem.log
/typings
# e2e
/e2e/*.js
/e2e/*.map
# System Files
.DS_Store
Thumbs.db
yarn.lock

12
package.json Normal file
View File

@ -0,0 +1,12 @@
{
"name": "commons-typescript",
"version": "0.0.1",
"license": "COMMERCIAL",
"private": true,
"dependencies": {
},
"devDependencies": {
}
}

5
src/model/alert/Alert.ts Normal file
View File

@ -0,0 +1,5 @@
export interface Alert {
created: string;
msg: string;
}

View File

@ -0,0 +1,5 @@
import {Alert} from './Alert';
export interface AlertMetric extends Alert {
status: string;
}

View File

@ -0,0 +1,6 @@
import {Alert} from './Alert';
export interface AlertSystem extends Alert {
status?: string; // test
}

3
src/model/alert/index.ts Normal file
View File

@ -0,0 +1,3 @@
export * from './Alert';
export * from './AlertMetric';
export * from './AlertSystem';

View File

@ -0,0 +1,10 @@
import { DiscoveryPort } from './DiscoveryPort';
export interface DiscoveryHost {
firstScanRange?: string;
lastScanRange?: string;
excludeHosts?: string[];
includeHosts?: string[];
discoveryPort?: DiscoveryPort;
}

View File

@ -0,0 +1,11 @@
import { DiscoveryService } from './DiscoveryService';
export interface DiscoveryPort {
firstScanRange: number;
lastScanRange: number;
excludePorts: number[];
includeTCP: boolean;
includeUDP: boolean;
discoveryService?: DiscoveryService;
}

View File

@ -0,0 +1,3 @@
export interface DiscoveryService {
includeServices: string[];
}

View File

@ -0,0 +1,11 @@
export interface DiscoveryStartInfo {
startIp: string;
endIP: string;
excludeIp?: string;
startPort?: string;
endPort?: string;
services?: Array<string>;
}
// export default DiscoveryStartInfo;

View File

@ -0,0 +1,7 @@
import { DiscoveryHost } from './DiscoveryHost';
export interface DiscoveryZone {
excludePatterns?: string[];
discoveryHost?: DiscoveryHost;
}

View File

@ -0,0 +1,15 @@
import { Zone } from './Zone';
import { Port } from './Port';
export interface Host {
id?: number;
ip: string;
mac: number;
os: string;
discoveredDate?: Date;
zone?: Zone;
target?: boolean;
ports: Map<number, Port> | null;
portList: Port[] | null;
}

View File

@ -0,0 +1,15 @@
import { Host } from './Host';
import { PortType } from './PortType';
import { Service } from './Service';
export interface Port {
id?: number;
portType: PortType;
portNumber: number;
discoveredDate?: Date;
host: Host;
target?: boolean;
services: Map<string, Service> | null;
serviceList: Service[] | null;
}

View File

@ -0,0 +1,8 @@
// enum PortType {
// TCP = 1,
// UDP = 2,
// TLS = 3,
// }
export type PortType = 'TCP' | 'UDP' | 'TLS';

View File

@ -0,0 +1,10 @@
import { Port } from './Port';
export interface Service {
id: number;
cryptoType: string;
serviceName: string;
discoveredDate?: Date;
port: Port;
target?: boolean;
}

View File

@ -0,0 +1,12 @@
import { Host } from './Host';
export interface Zone {
id?: number;
network?: string;
ip?: string;
iface?: string;
mac?: string;
discoveredDate?: Date;
hosts: Map<string, Host> | null;
}

View File

@ -0,0 +1,11 @@
export * from './DiscoveryHost';
export * from './DiscoveryPort';
export * from './DiscoveryService';
export * from './DiscoveryZone';
export * from './DiscoveryStartInfo';
export * from './Host';
export * from './Port';
export * from './PortType';
export * from './Service';
export * from './Zone';

View File

@ -0,0 +1,5 @@
export interface Domain {
id?: number;
name?: string;
createDate?: Date;
}

View File

@ -0,0 +1,9 @@
import { Domain } from './Domain';
import { Member } from 'model/member';
export interface DomainMember {
id: number;
createDate: Date;
member: Member;
domain: Domain;
}

View File

@ -0,0 +1,2 @@
export * from './Domain';
export * from './DomainMember';

13
src/model/infra/Infra.ts Normal file
View File

@ -0,0 +1,13 @@
import { Probe } from 'model/probe';
import { Target } from 'model/target';
import { MetaInfraType } from 'model/meta/infra-type/MetaInfraType';
export interface Infra {
id?: number;
infraType?: MetaInfraType;
childId?: number;
createDate?: Date;
probe?: Probe;
target?: Target;
}

View File

@ -0,0 +1,10 @@
import { InfraOS } from './InfraOS';
import { Infra } from './Infra';
export interface InfraHost extends Infra {
// id?: number;
os?: InfraOS;
ip?: number;
mac?: number;
createDate?: Date;
}

View File

@ -0,0 +1,8 @@
import { Infra } from './Infra';
export interface InfraMachine extends Infra {
// id?: number;
meta?: string;
createDate?: Date;
}

View File

@ -0,0 +1,11 @@
import { InfraMachine } from './InfraMachine';
import { Infra } from './Infra';
import { MetaInfraVendor } from 'model/meta/infra-vendor/MetaInfraVendor';
export interface InfraOS extends Infra {
// id?: number;
machine?: InfraMachine;
meta?: string;
createDate?: Date;
vendor?: MetaInfraVendor;
}

View File

@ -0,0 +1,10 @@
import { InfraOS } from './InfraOS';
import { Infra } from './Infra';
export interface InfraOSApplication extends Infra {
// id?: number;
os?: InfraOS;
name?: string;
createDate?: Date;
}

View File

@ -0,0 +1,9 @@
import { InfraOS } from './InfraOS';
import { Infra } from './Infra';
export interface InfraOSDaemon extends Infra {
// id?: number;
os?: InfraOS;
name?: string;
createDate?: Date;
}

View File

@ -0,0 +1,13 @@
import { InfraOS } from './InfraOS';
import { Infra } from './Infra';
import { MetaInfraVendor } from 'model/meta/infra-vendor/MetaInfraVendor';
export interface InfraOSPort extends Infra {
// id?: number;
os?: InfraOS;
createDate?: Date;
port?: number;
portType?: string;
vendor?: MetaInfraVendor;
tlsType?: boolean;
}

View File

@ -0,0 +1,13 @@
import { InfraHost } from './InfraHost';
import { Infra } from './Infra';
import { MetaInfraVendor } from 'model/meta/infra-vendor/MetaInfraVendor';
export interface InfraService extends Infra {
// id?: number;
host?: InfraHost;
portType?: string;
port?: number;
vendor?: MetaInfraVendor;
createDate?: Date;
tlsType?: boolean;
}

8
src/model/infra/index.ts Normal file
View File

@ -0,0 +1,8 @@
export * from './InfraHost';
export * from './InfraMachine';
export * from './InfraOSApplication';
export * from './InfraOSDaemon';
export * from './InfraOSPort';
export * from './InfraOS';
export * from './InfraService';
export * from './Infra';

View File

@ -0,0 +1,13 @@
import { MetaMemberStatus } from 'model/meta/member-status/MetaMemberStatus';
export interface Member {
id?: number;
email?: string;
password?: string;
name?: string;
phone?: string;
companyName?: string;
createDate?: Date;
totpType?: boolean;
status?: MetaMemberStatus;
}

View File

@ -0,0 +1,6 @@
export enum MemberStatus {
NOAUTH = 1,
NORMAL = 2,
DORMANCY = 3,
WITHDRAWAL = 4,
}

View File

@ -0,0 +1,10 @@
import { Member } from 'model/member';
export interface MemberTotp {
id?: number;
member: Member;
secretCode?: string;
createDate?: Date;
updateDate?: Date;
otpAuthUrl?: string;
}

View File

@ -0,0 +1 @@
export * from './Member';

View File

@ -0,0 +1,17 @@
import { MetaInputType } from 'model/meta/input-type/MetaInputType';
import { MetaCrawler } from 'model/meta/crawler/MetaCrawler';
export interface MetaCrawlerInputItem {
id?: number;
inputType?: MetaInputType;
crawler?: MetaCrawler;
description?: string;
name?: string;
createDate?: Date;
required?: boolean;
defaultValue?: string;
pattern?: string;
keyName?: string;
keyValue?: string;
}

View File

@ -0,0 +1,34 @@
export interface MetaCrawler {
id: number;
createDate?: Date;
name?: string;
description?: string;
}
export enum MetaCrawler_ID {
ACTIVEDIRECTORY_CRAWLER = 1,
CASSANDRA_CRAWLER = 2,
DHCP_CRAWLER = 3,
DNS_CRAWLER = 4,
FTP_CRAWLER = 5,
HTTP_CRAWLER = 6,
IMAP_CRAWLER = 7,
LDAP_CRAWLER = 8,
MONGODB_CRAWLER = 9,
MSSQL_CRAWLER = 10,
MYSQL_CRAWLER = 11,
NETBIOS_CRAWLER = 12,
ORACLE_CRAWLER = 13,
POP_CRAWLER = 14,
POSTGRESQL_CRAWLER = 15,
REDIS_CRAWLER = 16,
RMI_CRAWLER = 17,
SMB_CRAWLER = 18,
SMTP_CRAWLER = 19,
SNMP_CRAWLER = 20,
SSH_CRAWLER = 21,
TELNET_CRAWLER = 22,
WMI_CRAWLER = 23,
UNKNOWN_CRAWLER = 24,
}

View File

@ -0,0 +1,14 @@
export interface MetaHistoryType {
id?: number;
name?: string;
createDate?: Date;
}
export enum MetaHistoryType_ID {
Member = 1,
Probe = 2,
Discovery = 3,
Target = 4,
Crawler = 5,
Sensor = 6,
}

View File

@ -0,0 +1,15 @@
export interface MetaInfraType {
id?: number;
name?: string;
createDate?: Date;
}
export enum MetaInfraType_ID {
MACHINE = 1,
HOST = 2,
OS = 3,
OS_APPLICATION = 4,
OS_DAEMON = 5,
OS_PORT = 6,
OS_SERVICE = 7,
}

View File

@ -0,0 +1,65 @@
import { MetaInfraType } from 'model/meta/infra-type/MetaInfraType';
export interface MetaInfraVendor {
id?: number;
name?: string;
createDate?: Date;
infraType?: MetaInfraType;
}
export enum MetaInfraVendor_Machine_ID {
APPLE = 1,
MICROSOFT = 2,
ASUS = 3,
HP = 4,
DELL = 5,
LENOVO = 6,
ACER = 7,
SAMSUNG = 8,
LG = 9,
CISCO = 10,
}
export enum MetaInfraVendor_HOST_ID {
Windows = 11,
Linux = 12,
MacOS = 13,
Ubuntu = 14,
CentOS = 15,
Fedora = 16,
RedHat = 17,
Debian = 18,
SUSE = 19,
CoreOS = 20,
AmazonLinux = 21,
Kubernetes = 22,
Docker = 23,
iOS = 24,
Android = 25,
}
export enum MetaInfraVendor_OS_ID {
Windows = 26,
MacOS = 27,
Ubuntu = 28,
CentOS = 29,
Fedora = 30,
RedHat = 31,
Debian = 32,
SUSE = 33,
CoreOS = 34,
AmazonLinux = 35,
Kubernetes = 36,
Docker = 37,
iOS = 38,
Android = 39,
}
export enum MetaInfraVendor_SERVICE_ID {
MySql = 40,
PostgreSQL = 41,
WMI = 42,
SNMP_V2 = 43,
UNKNOWN = 44,
}

View File

@ -0,0 +1,14 @@
export interface MetaInputType {
id?: number;
name: string;
description: string;
createDate: Date;
}
export enum MetaInputType_ID {
TEXT_TYPE = 1,
PASSWORD_TYPE = 2,
NUMBER_TYPE = 3,
BOOLEAN_TYPE = 4,
SELECT_TYPE = 5,
}

View File

@ -0,0 +1,11 @@
export interface MetaMemberStatus {
id: number;
name: string;
}
export enum MetaMemberStatus_ID {
NOAUTH = 1,
NORMAL = 2,
DIAPAUSE = 3,
WITHDRAWAL = 4,
}

View File

@ -0,0 +1,10 @@
import { MetaCrawler } from 'model/meta/crawler/MetaCrawler';
import { MetaInfraVendor } from 'model/meta/infra-vendor/MetaInfraVendor';
export interface MetaVendorCrawler {
id?: number;
crawler: MetaCrawler;
infraVendor: MetaInfraVendor;
createDate: Date;
}

View File

@ -0,0 +1,13 @@
import { MetaSensorItem } from 'model/meta/sensor-item/MetaSensorItem';
import { MetaInfraVendor } from 'model/meta/infra-vendor/MetaInfraVendor';
export interface MetaVendorCrawlerSensorItem {
id?: number;
interval: string;
warnCondition: string;
createDate: Date;
sensorItem: MetaSensorItem;
vendor: MetaInfraVendor;
crawlerId: number;
}

View File

View File

@ -0,0 +1,11 @@
export interface MetaNoAuthProbeStatus {
id?: number;
name: string;
}
export enum MetaNoAuthProbeStatus_ID {
ACCEPT = 1,
DENY = 2,
PROCESS = 3,
}

View File

@ -0,0 +1,7 @@
export interface MetaNotification {
id?: number;
createDate: Date;
name: string;
description: string;
}

View File

@ -0,0 +1,11 @@
export interface MetaProbeArchitecture {
id?: number;
architecture: string;
createDate: Date;
}
export enum MetaProbeArchitecture_ID {
x86_64bit = 1,
}

View File

@ -0,0 +1,13 @@
export interface MetaProbeOs {
id?: number;
name: string;
createDate: Date;
}
export enum MetaProbeOs_ID {
Windows = 1,
Debian = 2,
Ubuntu = 3,
Fedora = 4,
}

View File

@ -0,0 +1,11 @@
import { MetaProbeVersion } from 'model/meta/probe-version/MetaProbeVersion';
import { MetaProbeOs } from 'model/meta/probe-os/MetaProbeOs';
import { MetaProbeArchitecture } from 'model/meta/probe-architecture/MetaProbeArchitecture';
export interface MetaProbePackage {
id?: number;
version: MetaProbeVersion;
os: MetaProbeOs;
architecture: MetaProbeArchitecture;
createDate: Date;
}

View File

@ -0,0 +1,10 @@
export interface MetaProbeStatus {
id: number;
name: string;
}
export enum MetaProbeStatus_ID {
INITIAL = 1,
NORMAL = 2,
}

View File

@ -0,0 +1,7 @@
export interface MetaProbeTaskType {
id?: number;
name: string;
description: string;
createDate: Date;
}

View File

@ -0,0 +1,5 @@
export interface MetaProbeVersion {
id?: number;
version: string;
createDate: Date;
}

View File

@ -0,0 +1,15 @@
import { MetaCrawler } from 'model/meta/crawler/MetaCrawler';
import { MetaSensorItemUnit } from 'model/meta/sensor-item-unit/MetaSensorItemUnit';
import { MetaSensorItemType } from 'model/meta/sensor-item-type/MetaSensorItemType';
export interface MetaSensorDisplayItem {
id?: number;
key?: string;
displayName?: string;
description?: string;
crawler?: MetaCrawler;
unit?: MetaSensorItemUnit;
createDate?: Date;
default?: boolean;
itemType?: MetaSensorItemType;
}

View File

@ -0,0 +1,12 @@
import { MetaSensorItem } from 'model/meta/sensor-item/MetaSensorItem';
import { MetaCrawler } from 'model/meta/crawler/MetaCrawler';
export interface MetaSensorItemKey {
id: number;
item: MetaSensorItem;
key: string;
froms: string;
option: string;
crawler: MetaCrawler;
createDate: Date;
}

View File

@ -0,0 +1,6 @@
export interface MetaSensorItemType {
id?: number;
name?: string;
description?: string;
createDate?: Date;
}

View File

@ -0,0 +1,6 @@
export interface MetaSensorItemUnit {
id: number;
unit: string;
createDate: Date;
mark: string;
}

View File

@ -0,0 +1,10 @@
import { MetaSensorItemType } from 'model/meta/sensor-item-type/MetaSensorItemType';
export interface MetaSensorItem {
id?: number;
itemType?: MetaSensorItemType;
key?: string;
name?: string;
createDate?: Date;
}

View File

@ -0,0 +1,10 @@
export interface MetaSensorStatus {
id?: number;
name?: string;
}
export enum MetaSensorStatus_ID {
RUNNING = 1,
STOPPED = 2,
}

View File

@ -0,0 +1,24 @@
import { Probe } from 'model/probe';
import { Domain } from 'model/domain';
import { MetaNoAuthProbeStatus } from 'model/meta/noauth-probe-status/MetaNoAuthProbeStatus';
export interface NoAuthProbe {
// id?: number;
// hostName?: string;
// macAddress?: number;
// ipAddress?: number;
// status?: MetaNoAuthProbeStatus;
// tempProbeKey?: string;
// createDate?: Date;
// apiKey?: string;
// domain?: Domain;
// probe?: Probe;
id?: number;
description?: string;
status?: MetaNoAuthProbeStatus;
tempProbeKey?: string;
createDate?: Date;
apiKey?: string;
domain?: Domain;
probe?: Probe;
}

View File

@ -0,0 +1 @@
export * from './NoAuthProbe';

View File

@ -0,0 +1,14 @@
import { Member } from 'model/member';
export interface Notification {
id?: number;
createDate?: Date;
title?: string;
message?: string;
member?: Member;
confirmDate?: Date;
url?: string;
}

View File

@ -0,0 +1 @@
export * from './Notification';

20
src/model/probe/Probe.ts Normal file
View File

@ -0,0 +1,20 @@
import { Domain } from 'model/domain/';
import { Member } from 'model/member/';
import { Infra } from 'model/infra/';
import { MetaProbeStatus } from 'model/meta/probe-status/MetaProbeStatus';
export interface Probe {
id?: number;
status?: MetaProbeStatus; // INITIAL / NORMAL
description?: string;
createDate?: Date;
domain?: Domain;
probeKey?: string;
encryptionKey?: string;
displayName?: string;
cidr?: string;
authorizeDate?: Date;
authorizeMember?: Member;
// host?: InfraHost;
targets?: Infra[];
}

View File

@ -0,0 +1,9 @@
import { Probe } from './Probe';
import { InfraHost } from 'model/infra';
export interface ProbeHost {
id?: number;
probe?: Probe;
host?: InfraHost;
}

View File

@ -0,0 +1,14 @@
import { Probe } from './Probe';
import { MetaProbeTaskType } from 'model/meta/probe-task-type/MetaProbeTaskType';
export interface ProbeTask {
id?: number;
taskType: MetaProbeTaskType;
probe: Probe;
data: string;
createDate: Date;
sendDate: Date;
startDate: Date;
endDate: Date;
succeed: boolean;
}

3
src/model/probe/index.ts Normal file
View File

@ -0,0 +1,3 @@
export * from './Probe';
export * from './ProbeHost';
export * from './ProbeTask';

View File

@ -0,0 +1,9 @@
import { MetaSensorDisplayItem } from 'model/meta/sensor-display-item/MetaSensorDisplayItem';
import { Sensor } from 'model/sensor';
export interface SensorItem {
id?: number;
sensor?: Sensor;
item?: MetaSensorDisplayItem;
createDate?: Date;
}

View File

@ -0,0 +1,8 @@
import { MetaSensorDisplayItem } from 'model/meta/sensor-display-item/MetaSensorDisplayItem';
import { MetaSensorItemKey } from 'model/meta/sensor-item-key/MetaSensorItemKey';
export interface SensorItemDependency {
id?: number;
item?: MetaSensorDisplayItem;
sensorItem?: MetaSensorItemKey;
}

View File

@ -0,0 +1,14 @@
import { Target } from 'model/target';
import { MetaSensorStatus } from 'model/meta/sensor-status/MetaSensorStatus';
import { MetaCrawler } from 'model/meta/crawler/MetaCrawler';
export interface Sensor {
id?: number;
createDate?: Date;
description?: string;
status?: MetaSensorStatus;
target?: Target;
crawler?: MetaCrawler;
crawlerInputItems?: string;
itemCount?: number;
}

View File

@ -0,0 +1,14 @@
import { Infra } from 'model/infra';
import { MetaCrawler } from 'model/meta/crawler/MetaCrawler';
import { MetaSensorDisplayItem } from 'model/meta/sensor-display-item/MetaSensorDisplayItem';
export interface SensorRegistInfo {
sensorItemMap: Map<number, Array<MetaSensorDisplayItem>>;
crawler: MetaCrawler;
// targetId: number;
interval: number;
// type: string;
infra: Infra;
crawlerAuth: string;
}

View File

@ -0,0 +1,2 @@
export * from './Sensor';
export * from './SensorRegistInfo';

View File

@ -0,0 +1,11 @@
import { Probe } from 'model/probe';
import { Infra } from 'model/infra';
import { Sensor } from 'model/sensor';
export interface Target {
id?: number;
createDate?: Date;
displayName?: string;
description?: string;
sensors?: Sensor[];
}

View File

@ -0,0 +1 @@
export * from './Target';

24
tsconfig.json Normal file
View File

@ -0,0 +1,24 @@
{
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "./src",
"outDir": "./dist/out-tsc",
"sourceMap": true,
"declaration": false,
"newLine": "LF",
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es5",
"typeRoots": [
"node_modules/@types"
],
"types": [
"reflect-metadata",
],
"lib": [
"es2017",
"dom"
]
}
}

139
tslint.json Normal file
View File

@ -0,0 +1,139 @@
{
"rulesDirectory": [
"node_modules/codelyzer"
],
"rules": {
"arrow-return-shorthand": true,
"callable-types": true,
"class-name": true,
"comment-format": [
true,
"check-space"
],
"curly": true,
"eofline": true,
"forin": true,
"import-blacklist": [
true,
"rxjs"
],
"import-spacing": true,
"indent": [
true,
"spaces"
],
"interface-over-type-literal": true,
"label-position": true,
"max-line-length": [
true,
140
],
"member-access": false,
"member-ordering": [
true,
{
"order": [
"static-field",
"instance-field",
"static-method",
"instance-method"
]
}
],
"no-arg": true,
"no-bitwise": true,
"no-console": [
true,
"debug",
"info",
"time",
"timeEnd",
"trace"
],
"no-construct": true,
"no-debugger": true,
"no-duplicate-super": true,
"no-empty": false,
"no-empty-interface": true,
"no-eval": true,
"no-inferrable-types": [
true,
"ignore-params"
],
"no-misused-new": true,
"no-non-null-assertion": true,
"no-shadowed-variable": true,
"no-string-literal": false,
"no-string-throw": true,
"no-switch-case-fall-through": true,
"no-trailing-whitespace": true,
"no-unnecessary-initializer": true,
"no-unused-expression": true,
"no-use-before-define": ["error", { "functions": true, "classes": true }],
"no-var-keyword": true,
"object-literal-sort-keys": false,
"one-line": [
true,
"check-open-brace",
"check-catch",
"check-else",
"check-whitespace"
],
"prefer-const": true,
"quotemark": [
true,
"single"
],
"radix": true,
"semicolon": [
true,
"always"
],
"triple-equals": [
true,
"allow-null-check"
],
"typedef-whitespace": [
true,
{
"call-signature": "nospace",
"index-signature": "nospace",
"parameter": "nospace",
"property-declaration": "nospace",
"variable-declaration": "nospace"
}
],
"typeof-compare": true,
"unified-signatures": true,
"variable-name": false,
"whitespace": [
true,
"check-branch",
"check-decl",
"check-operator",
"check-separator",
"check-type"
],
"directive-selector": [
true,
"attribute",
"of",
"camelCase"
],
"component-selector": [
true,
"element",
"of",
"kebab-case"
],
"use-input-property-decorator": true,
"use-output-property-decorator": true,
"use-host-property-decorator": true,
"no-input-rename": true,
"no-output-rename": true,
"use-life-cycle-interface": true,
"use-pipe-transform-interface": true,
"component-class-suffix": true,
"directive-class-suffix": true
}
}