ing
This commit is contained in:
parent
b5fd2de001
commit
bd8104ffe2
|
@ -1,12 +1,12 @@
|
||||||
{
|
{
|
||||||
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
|
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
|
||||||
"project": {
|
"project": {
|
||||||
"name": "js"
|
"name": "example-app"
|
||||||
},
|
},
|
||||||
"apps": [
|
"apps": [
|
||||||
{
|
{
|
||||||
"root": "src",
|
"root": "example-app",
|
||||||
"outDir": "dist",
|
"outDir": "example-dist",
|
||||||
"assets": [
|
"assets": [
|
||||||
"assets",
|
"assets",
|
||||||
"favicon.ico"
|
"favicon.ico"
|
||||||
|
@ -17,7 +17,7 @@
|
||||||
"test": "test.ts",
|
"test": "test.ts",
|
||||||
"tsconfig": "tsconfig.app.json",
|
"tsconfig": "tsconfig.app.json",
|
||||||
"testTsconfig": "tsconfig.spec.json",
|
"testTsconfig": "tsconfig.spec.json",
|
||||||
"prefix": "app",
|
"prefix": "of",
|
||||||
"styles": [
|
"styles": [
|
||||||
"styles.css"
|
"styles.css"
|
||||||
],
|
],
|
||||||
|
@ -36,11 +36,11 @@
|
||||||
},
|
},
|
||||||
"lint": [
|
"lint": [
|
||||||
{
|
{
|
||||||
"project": "src/tsconfig.app.json",
|
"project": "example-app/tsconfig.app.json",
|
||||||
"exclude": "**/node_modules/**"
|
"exclude": "**/node_modules/**"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"project": "src/tsconfig.spec.json",
|
"project": "example-app/tsconfig.spec.json",
|
||||||
"exclude": "**/node_modules/**"
|
"exclude": "**/node_modules/**"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -54,7 +54,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"defaults": {
|
"defaults": {
|
||||||
"styleExt": "css",
|
"styleExt": "scss",
|
||||||
"component": {}
|
"component": {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
12
example-app/app/app-routing.module.ts
Normal file
12
example-app/app/app-routing.module.ts
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { Routes, RouterModule, PreloadAllModules } from '@angular/router';
|
||||||
|
|
||||||
|
const routes: Routes = [
|
||||||
|
{ path: 'auth', loadChildren: './pages/auth/auth-page.module#AuthPageModule' },
|
||||||
|
];
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
imports: [RouterModule.forRoot(routes, {useHash: true, preloadingStrategy: PreloadAllModules})],
|
||||||
|
exports: [RouterModule],
|
||||||
|
})
|
||||||
|
export class AppRoutingModule { }
|
23
example-app/app/app-store.module.ts
Normal file
23
example-app/app/app-store.module.ts
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { StoreModule, combineReducers, ActionReducer, ActionReducerMap, MetaReducer } from '@ngrx/store';
|
||||||
|
|
||||||
|
import { environment } from '../environments/environment';
|
||||||
|
|
||||||
|
import {
|
||||||
|
NgRxStoreModule,
|
||||||
|
} from '@loafer/ngrx-store';
|
||||||
|
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
exports: [
|
||||||
|
StoreModule,
|
||||||
|
],
|
||||||
|
imports: [
|
||||||
|
StoreModule.forRoot({}),
|
||||||
|
NgRxStoreModule,
|
||||||
|
],
|
||||||
|
providers: [
|
||||||
|
],
|
||||||
|
|
||||||
|
})
|
||||||
|
export class AppStoreModule { }
|
1
example-app/app/app.component.html
Normal file
1
example-app/app/app.component.html
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<router-outlet></router-outlet>
|
|
@ -1,16 +1,21 @@
|
||||||
import { BrowserModule } from '@angular/platform-browser';
|
import { BrowserModule } from '@angular/platform-browser';
|
||||||
import { NgModule } from '@angular/core';
|
import { NgModule } from '@angular/core';
|
||||||
|
|
||||||
|
import { AppStoreModule } from './app-store.module';
|
||||||
|
import { AppRoutingModule } from './app-routing.module';
|
||||||
|
|
||||||
|
|
||||||
import { AppComponent } from './app.component';
|
import { AppComponent } from './app.component';
|
||||||
|
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [
|
declarations: [
|
||||||
AppComponent
|
AppComponent,
|
||||||
],
|
],
|
||||||
imports: [
|
imports: [
|
||||||
BrowserModule
|
BrowserModule,
|
||||||
|
AppRoutingModule,
|
||||||
|
AppStoreModule,
|
||||||
],
|
],
|
||||||
providers: [],
|
providers: [],
|
||||||
bootstrap: [AppComponent]
|
bootstrap: [AppComponent]
|
23
example-app/app/pages/auth/auth-page-routing.module.ts
Normal file
23
example-app/app/pages/auth/auth-page-routing.module.ts
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { Routes, RouterModule } from '@angular/router';
|
||||||
|
import { AuthPageComponent } from './auth-page.component';
|
||||||
|
|
||||||
|
import { SigninPageComponent } from './signin/signin-page.component';
|
||||||
|
|
||||||
|
const routes: Routes = [
|
||||||
|
{
|
||||||
|
path: '',
|
||||||
|
component: AuthPageComponent,
|
||||||
|
children: [
|
||||||
|
{ path: '', redirectTo: 'signin' },
|
||||||
|
{ path: 'signin', component: SigninPageComponent },
|
||||||
|
]
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
imports: [RouterModule.forChild(routes)],
|
||||||
|
exports: [RouterModule]
|
||||||
|
})
|
||||||
|
export class AuthPageRoutingModule { }
|
||||||
|
|
1
example-app/app/pages/auth/auth-page.component.html
Normal file
1
example-app/app/pages/auth/auth-page.component.html
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<router-outlet></router-outlet>
|
25
example-app/app/pages/auth/auth-page.component.spec.ts
Normal file
25
example-app/app/pages/auth/auth-page.component.spec.ts
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { AuthPageComponent } from './auth-page.component';
|
||||||
|
|
||||||
|
describe('AuthPageComponent', () => {
|
||||||
|
let component: AuthPageComponent;
|
||||||
|
let fixture: ComponentFixture<AuthPageComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [ AuthPageComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(AuthPageComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
15
example-app/app/pages/auth/auth-page.component.ts
Normal file
15
example-app/app/pages/auth/auth-page.component.ts
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'of-pages-auth',
|
||||||
|
templateUrl: './auth-page.component.html',
|
||||||
|
styleUrls: ['./auth-page.component.scss']
|
||||||
|
})
|
||||||
|
export class AuthPageComponent implements OnInit {
|
||||||
|
|
||||||
|
constructor() { }
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
24
example-app/app/pages/auth/auth-page.module.ts
Normal file
24
example-app/app/pages/auth/auth-page.module.ts
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { CommonModule } from '@angular/common';
|
||||||
|
|
||||||
|
import { MemberModule } from '../../../packages/member/member.module';
|
||||||
|
|
||||||
|
import { AuthPageComponent } from './auth-page.component';
|
||||||
|
import { AuthPageRoutingModule } from './auth-page-routing.module';
|
||||||
|
|
||||||
|
import { SigninPageComponent } from './signin/signin-page.component';
|
||||||
|
|
||||||
|
export const COMPONENTS = [
|
||||||
|
AuthPageComponent,
|
||||||
|
SigninPageComponent,
|
||||||
|
];
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
imports: [
|
||||||
|
CommonModule,
|
||||||
|
AuthPageRoutingModule,
|
||||||
|
MemberModule,
|
||||||
|
],
|
||||||
|
declarations: COMPONENTS,
|
||||||
|
})
|
||||||
|
export class AuthPageModule { }
|
12
example-app/app/pages/auth/signin/signin-page.component.html
Normal file
12
example-app/app/pages/auth/signin/signin-page.component.html
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<div fxLayout="column" fxFlexFill fxLayoutAlign="center center" style="background-image:url('../../../../../assets/images/login11.jpg');
|
||||||
|
margin-top: 10px;
|
||||||
|
height: 100%;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center;
|
||||||
|
background-size: cover; ">
|
||||||
|
<div fxLayout="column" >
|
||||||
|
<div class=" mat-elevation-z4">
|
||||||
|
<of-member-signin></of-member-signin>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -0,0 +1,9 @@
|
||||||
|
.signin-form {
|
||||||
|
min-width: 150px;
|
||||||
|
max-width: 500px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.signin-full-width {
|
||||||
|
width: 100%;
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { SigninPageComponent } from './signin-page.component';
|
||||||
|
|
||||||
|
describe('SigninPageComponent', () => {
|
||||||
|
let component: SigninPageComponent;
|
||||||
|
let fixture: ComponentFixture<SigninPageComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [ SigninPageComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(SigninPageComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
25
example-app/app/pages/auth/signin/signin-page.component.ts
Normal file
25
example-app/app/pages/auth/signin/signin-page.component.ts
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
import { ActivatedRoute, Router } from '@angular/router';
|
||||||
|
import { Form, FormBuilder, FormGroup, FormGroupDirective, FormControl, NgForm, Validators } from '@angular/forms';
|
||||||
|
import { ErrorStateMatcher } from '@angular/material/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'of-pages-auth-signin',
|
||||||
|
templateUrl: './signin-page.component.html',
|
||||||
|
styleUrls: ['./signin-page.component.scss'],
|
||||||
|
})
|
||||||
|
export class SigninPageComponent implements OnInit {
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
private router: Router,
|
||||||
|
private activatedRoute: ActivatedRoute,
|
||||||
|
) { }
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
initForm() {
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
0
example-app/assets/.gitkeep
Normal file
0
example-app/assets/.gitkeep
Normal file
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 5.3 KiB |
|
@ -0,0 +1 @@
|
||||||
|
<div>works</div>
|
|
@ -0,0 +1,37 @@
|
||||||
|
$gray-lighter: #eceeef !default;
|
||||||
|
$image_path: "/assets/images/" !default;
|
||||||
|
|
||||||
|
$prefix: 'sigin';
|
||||||
|
|
||||||
|
.#{$prefix} {
|
||||||
|
|
||||||
|
&-conainer {
|
||||||
|
min-height: 100%;
|
||||||
|
background-size: cover;
|
||||||
|
padding: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-main {
|
||||||
|
position: relative;
|
||||||
|
margin: 0 auto;
|
||||||
|
width: 500px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.full-width {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.help {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-danger {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.redirect {
|
||||||
|
font-size: 14px;
|
||||||
|
margin-left: 10px;
|
||||||
|
color: #00AAAA;
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { SigninComponent } from './signin.component';
|
||||||
|
|
||||||
|
describe('SigninComponent', () => {
|
||||||
|
let component: SigninComponent;
|
||||||
|
let fixture: ComponentFixture<SigninComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [ SigninComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(SigninComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,39 @@
|
||||||
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
import { ActivatedRoute, Router } from '@angular/router';
|
||||||
|
import { FormGroup, FormBuilder, Validators } from '@angular/forms';
|
||||||
|
import { Store, select } from '@ngrx/store';
|
||||||
|
|
||||||
|
import { State } from '../../store/auth.state';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'of-member-signin',
|
||||||
|
templateUrl: './signin.component.html',
|
||||||
|
styleUrls: ['./signin.component.scss']
|
||||||
|
})
|
||||||
|
export class SigninComponent implements OnInit {
|
||||||
|
constructor(
|
||||||
|
private activatedRoute: ActivatedRoute,
|
||||||
|
private router: Router,
|
||||||
|
private store: Store<State>,
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
this.initForm();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
initForm() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
resetPasswordBtnClick() {
|
||||||
|
this.router.navigateByUrl('/auth/reset-password');
|
||||||
|
}
|
||||||
|
|
||||||
|
signupBtnClick() {
|
||||||
|
this.router.navigateByUrl('/auth/signup');
|
||||||
|
}
|
||||||
|
signin() {
|
||||||
|
}
|
||||||
|
}
|
27
example-app/packages/member/member.module.ts
Normal file
27
example-app/packages/member/member.module.ts
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
import { BrowserModule } from '@angular/platform-browser';
|
||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
|
||||||
|
import {
|
||||||
|
NgRxStoreModule,
|
||||||
|
} from '@loafer/ngrx-store';
|
||||||
|
|
||||||
|
import { SigninComponent } from './component/signin/signin.component';
|
||||||
|
import { MemberService } from './service/member.service';
|
||||||
|
import { AuthStore } from './store/auth.store';
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
declarations: [
|
||||||
|
SigninComponent
|
||||||
|
],
|
||||||
|
exports: [
|
||||||
|
SigninComponent,
|
||||||
|
],
|
||||||
|
imports: [
|
||||||
|
NgRxStoreModule.forFeature('member'),
|
||||||
|
],
|
||||||
|
providers: [
|
||||||
|
MemberService,
|
||||||
|
AuthStore
|
||||||
|
]
|
||||||
|
})
|
||||||
|
export class MemberModule { }
|
24
example-app/packages/member/service/member.service.ts
Normal file
24
example-app/packages/member/service/member.service.ts
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import { Observable } from 'rxjs/Observable';
|
||||||
|
import { Subject } from 'rxjs/Subject';
|
||||||
|
|
||||||
|
import 'rxjs/add/operator/map';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class MemberService {
|
||||||
|
|
||||||
|
public constructor(
|
||||||
|
) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public signin(email: string, password: string): Observable<any> {
|
||||||
|
const body = {
|
||||||
|
signinId: email,
|
||||||
|
signinPw: password,
|
||||||
|
};
|
||||||
|
|
||||||
|
const subject: Subject<any> = new Subject();
|
||||||
|
return subject;
|
||||||
|
}
|
||||||
|
}
|
25
example-app/packages/member/store/auth.action.ts
Normal file
25
example-app/packages/member/store/auth.action.ts
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
import { Action } from '@ngrx/store';
|
||||||
|
|
||||||
|
export enum ActionType {
|
||||||
|
Signin = '[member.auth] Signin',
|
||||||
|
SigninSuccess = '[member.auth] SigninSuccess',
|
||||||
|
SigninFailure = '[member.auth] SigninFailure',
|
||||||
|
}
|
||||||
|
|
||||||
|
export class Signin implements Action {
|
||||||
|
readonly type = ActionType.Signin;
|
||||||
|
|
||||||
|
constructor(public payload: {email: string, password: string, returnURL: string}) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class SigninSuccess implements Action {
|
||||||
|
readonly type = ActionType.SigninSuccess;
|
||||||
|
|
||||||
|
constructor(public payload: any) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class SigninFailure implements Action {
|
||||||
|
readonly type = ActionType.SigninFailure;
|
||||||
|
|
||||||
|
constructor(public payload: any) {}
|
||||||
|
}
|
9
example-app/packages/member/store/auth.state.ts
Normal file
9
example-app/packages/member/store/auth.state.ts
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
export interface State {
|
||||||
|
signined: boolean;
|
||||||
|
pending: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const initialState: State = {
|
||||||
|
signined: false,
|
||||||
|
pending: false,
|
||||||
|
};
|
59
example-app/packages/member/store/auth.store.ts
Normal file
59
example-app/packages/member/store/auth.store.ts
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
import { Actions } from '@ngrx/effects';
|
||||||
|
|
||||||
|
import { Observable } from 'rxjs/Observable';
|
||||||
|
import 'rxjs/add/operator/switchMap';
|
||||||
|
import 'rxjs/add/operator/map';
|
||||||
|
|
||||||
|
import {
|
||||||
|
Store,
|
||||||
|
Action,
|
||||||
|
Effect,
|
||||||
|
ofAction,
|
||||||
|
} from '@loafer/ngrx-store';
|
||||||
|
|
||||||
|
import {
|
||||||
|
Signin,
|
||||||
|
SigninSuccess,
|
||||||
|
SigninFailure,
|
||||||
|
} from './auth.action';
|
||||||
|
|
||||||
|
import {
|
||||||
|
State,
|
||||||
|
initialState,
|
||||||
|
} from './auth.state';
|
||||||
|
|
||||||
|
import { MemberService } from '../service/member.service';
|
||||||
|
|
||||||
|
@Store(initialState)
|
||||||
|
export class AuthStore {
|
||||||
|
|
||||||
|
public constructor(
|
||||||
|
private actions$: Actions,
|
||||||
|
private memberService: MemberService,
|
||||||
|
) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Action(Signin)
|
||||||
|
signin(state: State, action: Signin) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Action(SigninSuccess)
|
||||||
|
signinSuccess(state: State, action: SigninSuccess) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Action(SigninFailure)
|
||||||
|
signinFailure(state: State, action: SigninFailure) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Effect(Signin)
|
||||||
|
signinEffect(state: State, { payload }: Signin) {
|
||||||
|
this.memberService.signin(payload.email, payload.password)
|
||||||
|
.map((result: any) => {
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,6 +4,12 @@
|
||||||
"outDir": "../out-tsc/app",
|
"outDir": "../out-tsc/app",
|
||||||
"baseUrl": "./",
|
"baseUrl": "./",
|
||||||
"module": "es2015",
|
"module": "es2015",
|
||||||
|
"paths": {
|
||||||
|
"@loafer/ngrx-store": [
|
||||||
|
"../modules/ngrx-store"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"rootDir": "../",
|
||||||
"types": []
|
"types": []
|
||||||
},
|
},
|
||||||
"exclude": [
|
"exclude": [
|
2
modules/ngrx-store/index.ts
Normal file
2
modules/ngrx-store/index.ts
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
export * from './public_api';
|
||||||
|
|
28
modules/ngrx-store/package.json
Normal file
28
modules/ngrx-store/package.json
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
"name": "@loafer/ngrx-store",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"module": "@loafer/ngrx-store.es5.js",
|
||||||
|
"es2015": "@loafer/ngrx-store.js",
|
||||||
|
"main": "bundles/ngrx-store.umd.js",
|
||||||
|
"typings": "ngrx-store.d.ts",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.loafle.net/loafer/js.git"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"RxJS",
|
||||||
|
"Angular",
|
||||||
|
"Redux"
|
||||||
|
],
|
||||||
|
"author": "Rob Wormald <robwormald@gmail.com>",
|
||||||
|
"license": "MIT",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://www.loafle.com"
|
||||||
|
},
|
||||||
|
"homepage": "https://www.loafle.com",
|
||||||
|
"peerDependencies": {
|
||||||
|
"@angular/core": "^5.0.0",
|
||||||
|
"@ngrx/store": "^5.2.0",
|
||||||
|
"rxjs": "^5.5.0"
|
||||||
|
}
|
||||||
|
}
|
15
modules/ngrx-store/public_api.ts
Normal file
15
modules/ngrx-store/public_api.ts
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
export { NgRxStoreModule } from './src/ngrx-store.module';
|
||||||
|
export {
|
||||||
|
createReducer,
|
||||||
|
ofAction,
|
||||||
|
} from './src/core';
|
||||||
|
export {
|
||||||
|
Action,
|
||||||
|
Effect,
|
||||||
|
Store,
|
||||||
|
Select,
|
||||||
|
} from './src/decorator';
|
||||||
|
export {
|
||||||
|
NgRxStoreSelect,
|
||||||
|
} from './src/service';
|
||||||
|
|
56
modules/ngrx-store/src/core/factory.ts
Normal file
56
modules/ngrx-store/src/core/factory.ts
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
import { Action } from '@ngrx/store';
|
||||||
|
import { take, materialize } from 'rxjs/operators';
|
||||||
|
|
||||||
|
import { NGRX_STORE_META, StoreMetadata } from './meta-data';
|
||||||
|
import { NgRxStoreSelect } from '../service';
|
||||||
|
|
||||||
|
export function createReducer<State = any>(
|
||||||
|
store: | {new (...args: any[]): any} | any
|
||||||
|
): (state: State, action: Action | any) => State {
|
||||||
|
const isInstance = !store.prototype;
|
||||||
|
const clazz = isInstance ? store.constructor : store;
|
||||||
|
|
||||||
|
if (!clazz.hasOwnProperty(NGRX_STORE_META)) {
|
||||||
|
throw new Error('A reducer can be created from a @Store decorated class only.');
|
||||||
|
}
|
||||||
|
|
||||||
|
const instance = isInstance ? store : new store();
|
||||||
|
const { initialState, actions, effects } = clazz[NGRX_STORE_META] as StoreMetadata;
|
||||||
|
|
||||||
|
return function(state: any = initialState, action: Action) {
|
||||||
|
const actionMeta = actions[action.type];
|
||||||
|
if (actionMeta) {
|
||||||
|
const result = instance[actionMeta.methodName](state, action);
|
||||||
|
if (result === undefined) {
|
||||||
|
if (Array.isArray(state)) {
|
||||||
|
return [...state];
|
||||||
|
} else {
|
||||||
|
return { ...state };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
state = result;
|
||||||
|
}
|
||||||
|
|
||||||
|
const effectMeta = effects[action.type];
|
||||||
|
if (effectMeta) {
|
||||||
|
const retVal = instance[effectMeta.methodName](state, action);
|
||||||
|
if (retVal) {
|
||||||
|
if (retVal.subscribe) {
|
||||||
|
retVal.pipe(materialize()).subscribe((res: any) => {
|
||||||
|
if (res.value && NgRxStoreSelect.store) {
|
||||||
|
NgRxStoreSelect.store.dispatch(res.value);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else if (NgRxStoreSelect.store) {
|
||||||
|
if (Array.isArray(retVal)) {
|
||||||
|
retVal.forEach(r => NgRxStoreSelect.store && NgRxStoreSelect.store.dispatch(r));
|
||||||
|
} else {
|
||||||
|
NgRxStoreSelect.store.dispatch(retVal);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return state;
|
||||||
|
};
|
||||||
|
}
|
6
modules/ngrx-store/src/core/index.ts
Normal file
6
modules/ngrx-store/src/core/index.ts
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
export * from './factory';
|
||||||
|
export * from './meta-data';
|
||||||
|
export * from './of-action';
|
||||||
|
export * from './token';
|
||||||
|
export * from './type';
|
||||||
|
|
28
modules/ngrx-store/src/core/meta-data.ts
Normal file
28
modules/ngrx-store/src/core/meta-data.ts
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
import { ActionType } from './type';
|
||||||
|
|
||||||
|
export const NGRX_STORE_META = '__ngrx__store__';
|
||||||
|
|
||||||
|
export interface StoreMetadata {
|
||||||
|
initialState?: any;
|
||||||
|
actions: ActionsMeta;
|
||||||
|
effects: ActionsMeta;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ActionMeta {
|
||||||
|
action: ActionType;
|
||||||
|
methodName: string;
|
||||||
|
type: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ActionsMeta {
|
||||||
|
[type: string]: ActionMeta;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function ensureStoreMetadata(target: any): StoreMetadata {
|
||||||
|
// see https://github.com/angular/angular/blob/master/packages/core/src/util/decorators.ts#L60
|
||||||
|
if (!target.hasOwnProperty(NGRX_STORE_META)) {
|
||||||
|
const defaultMetadata: StoreMetadata = { actions: {}, effects: {} };
|
||||||
|
Object.defineProperty(target, NGRX_STORE_META, { value: defaultMetadata });
|
||||||
|
}
|
||||||
|
return target[NGRX_STORE_META];
|
||||||
|
}
|
15
modules/ngrx-store/src/core/of-action.ts
Normal file
15
modules/ngrx-store/src/core/of-action.ts
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
import { Action } from '@ngrx/store';
|
||||||
|
import { filter } from 'rxjs/operators';
|
||||||
|
import { OperatorFunction } from 'rxjs/interfaces';
|
||||||
|
import { ActionType } from './type';
|
||||||
|
|
||||||
|
export function ofAction<T extends Action>(allowedType: ActionType<T>): OperatorFunction<Action, T>;
|
||||||
|
export function ofAction<T extends Action>(...allowedTypes: ActionType[]): OperatorFunction<Action, T>;
|
||||||
|
export function ofAction(...allowedTypes: ActionType[]): OperatorFunction<Action, Action> {
|
||||||
|
const allowedMap: {[key: string]: any} = {};
|
||||||
|
|
||||||
|
allowedTypes.forEach(clazz => (allowedMap[new clazz().type] = true));
|
||||||
|
return filter((action: Action) => {
|
||||||
|
return allowedMap[action.type];
|
||||||
|
});
|
||||||
|
}
|
4
modules/ngrx-store/src/core/token.ts
Normal file
4
modules/ngrx-store/src/core/token.ts
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
import { InjectionToken } from '@angular/core';
|
||||||
|
|
||||||
|
export const _STORE = new InjectionToken<any>('@loafer/ngrx-store Internal Store');
|
||||||
|
export const _STORE_FEATURE = new InjectionToken<any>('@loafer/ngrx-store Internal Store Features');
|
5
modules/ngrx-store/src/core/type.ts
Normal file
5
modules/ngrx-store/src/core/type.ts
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
import { Action } from '@ngrx/store';
|
||||||
|
|
||||||
|
export interface ActionType<T extends Action = Action> {
|
||||||
|
new (...args: any[]): T;
|
||||||
|
}
|
27
modules/ngrx-store/src/decorator/action.ts
Normal file
27
modules/ngrx-store/src/decorator/action.ts
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
import {
|
||||||
|
ActionType,
|
||||||
|
ensureStoreMetadata,
|
||||||
|
} from '../core';
|
||||||
|
|
||||||
|
export function Action(...actionsClasses: ActionType[]) {
|
||||||
|
return function(target: any, name: string, descriptor: TypedPropertyDescriptor<any>) {
|
||||||
|
const meta = ensureStoreMetadata(target.constructor);
|
||||||
|
|
||||||
|
for (const clazz of actionsClasses) {
|
||||||
|
const inst = new clazz();
|
||||||
|
const type = inst.type;
|
||||||
|
|
||||||
|
if (meta.actions[type]) {
|
||||||
|
throw new Error(
|
||||||
|
`@Action for '${type}' is defined multiple times in functions '${meta.actions[type].methodName}' and '${name}'`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
meta.actions[type] = {
|
||||||
|
action: clazz,
|
||||||
|
methodName: name,
|
||||||
|
type
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
27
modules/ngrx-store/src/decorator/effect.ts
Normal file
27
modules/ngrx-store/src/decorator/effect.ts
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
import {
|
||||||
|
ActionType,
|
||||||
|
ensureStoreMetadata,
|
||||||
|
} from '../core';
|
||||||
|
|
||||||
|
export function Effect(...effectClasses: ActionType[]) {
|
||||||
|
return function(target: any, name: string, descriptor: TypedPropertyDescriptor<any>) {
|
||||||
|
const meta = ensureStoreMetadata(target.constructor);
|
||||||
|
|
||||||
|
for (const clazz of effectClasses) {
|
||||||
|
const inst = new clazz();
|
||||||
|
const type = inst.type;
|
||||||
|
|
||||||
|
if (meta.effects[type]) {
|
||||||
|
throw new Error(
|
||||||
|
`@Effect for '${type}' is defined multiple times in functions '${meta.effects[type].methodName}' and '${name}'`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
meta.effects[type] = {
|
||||||
|
action: clazz,
|
||||||
|
methodName: name,
|
||||||
|
type
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
4
modules/ngrx-store/src/decorator/index.ts
Normal file
4
modules/ngrx-store/src/decorator/index.ts
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
export * from './action';
|
||||||
|
export * from './effect';
|
||||||
|
export * from './select';
|
||||||
|
export * from './store';
|
76
modules/ngrx-store/src/decorator/select.ts
Normal file
76
modules/ngrx-store/src/decorator/select.ts
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
import { Selector } from '@ngrx/store';
|
||||||
|
|
||||||
|
import { NgRxStoreSelect } from '../service';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Slice state from the store.
|
||||||
|
*/
|
||||||
|
export function Select<State = any, Value = any>(selector: Selector<State, Value>): (target: any, name: string) => void;
|
||||||
|
export function Select<State = any, Value = any>(selectorOrFeature?: string, ...paths: string[]): (target: any, name: string) => void;
|
||||||
|
export function Select<State = any, Value = any>(selectorOrFeature?: string | Selector<State, Value>, ...paths: string[]) {
|
||||||
|
return function(target: any, name: string): void {
|
||||||
|
const selectorFnName = '__' + name + '__selector';
|
||||||
|
let fn: Selector<State, Value>;
|
||||||
|
// Nothing here? Use propery name as selector
|
||||||
|
if (!selectorOrFeature) {
|
||||||
|
selectorOrFeature = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle string vs Selector<TState, TValue>
|
||||||
|
if (typeof selectorOrFeature === 'string') {
|
||||||
|
const propsArray = paths.length ? [selectorOrFeature, ...paths] : selectorOrFeature.split('.');
|
||||||
|
fn = fastPropGetter(propsArray);
|
||||||
|
} else {
|
||||||
|
fn = selectorOrFeature;
|
||||||
|
}
|
||||||
|
|
||||||
|
const createSelect = () => {
|
||||||
|
const store = NgRxStoreSelect.store;
|
||||||
|
if (!store) {
|
||||||
|
throw new Error('NgRxStoreSelect not connected to store!');
|
||||||
|
}
|
||||||
|
return store.select(fn);
|
||||||
|
};
|
||||||
|
|
||||||
|
if (target[selectorFnName]) {
|
||||||
|
throw new Error('You cannot use @Select decorator and a ' + selectorFnName + ' property.');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Redefine property
|
||||||
|
if (delete target[name]) {
|
||||||
|
Object.defineProperty(target, selectorFnName, {
|
||||||
|
writable: true,
|
||||||
|
enumerable: false,
|
||||||
|
configurable: true
|
||||||
|
});
|
||||||
|
|
||||||
|
Object.defineProperty(target, name, {
|
||||||
|
get: function() {
|
||||||
|
return target[selectorFnName] || (target[selectorFnName] = createSelect.apply(target));
|
||||||
|
// return this[selectorFnName] || (this[selectorFnName] = createSelect.apply(this));
|
||||||
|
},
|
||||||
|
enumerable: true,
|
||||||
|
configurable: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The generated function is faster than:
|
||||||
|
* - pluck (Observable operator)
|
||||||
|
* - memoize (old ngrx-actions implementation)
|
||||||
|
* - MemoizedSelector (ngrx)
|
||||||
|
*/
|
||||||
|
export function fastPropGetter(paths: string[]): (x: any) => any {
|
||||||
|
const segments = paths;
|
||||||
|
let seg = 'store.' + segments[0],
|
||||||
|
i = 0;
|
||||||
|
const l = segments.length;
|
||||||
|
let expr = seg;
|
||||||
|
while (++i < l) {
|
||||||
|
expr = expr + ' && ' + (seg = seg + '.' + segments[i]);
|
||||||
|
}
|
||||||
|
const fn = new Function('store', 'return ' + expr + ';');
|
||||||
|
return <(x: any) => any>fn;
|
||||||
|
}
|
12
modules/ngrx-store/src/decorator/store.ts
Normal file
12
modules/ngrx-store/src/decorator/store.ts
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
import {
|
||||||
|
ensureStoreMetadata,
|
||||||
|
} from '../core';
|
||||||
|
|
||||||
|
export function Store<State>(initialState?: State): (target: Function) => void;
|
||||||
|
export function Store(initialState?: any): (target: Function) => void;
|
||||||
|
export function Store(initialState: any = {}) {
|
||||||
|
return function(target: Function) {
|
||||||
|
const meta = ensureStoreMetadata(target);
|
||||||
|
meta.initialState = initialState;
|
||||||
|
};
|
||||||
|
}
|
101
modules/ngrx-store/src/ngrx-store.module.ts
Normal file
101
modules/ngrx-store/src/ngrx-store.module.ts
Normal file
|
@ -0,0 +1,101 @@
|
||||||
|
import {
|
||||||
|
NgModule,
|
||||||
|
Inject,
|
||||||
|
Optional,
|
||||||
|
ModuleWithProviders,
|
||||||
|
OnDestroy,
|
||||||
|
InjectionToken,
|
||||||
|
Injector,
|
||||||
|
} from '@angular/core';
|
||||||
|
|
||||||
|
import {
|
||||||
|
StoreModule,
|
||||||
|
Store,
|
||||||
|
combineReducers,
|
||||||
|
ReducerManager,
|
||||||
|
} from '@ngrx/store';
|
||||||
|
|
||||||
|
import {
|
||||||
|
_STORE,
|
||||||
|
_STORE_FEATURE,
|
||||||
|
createReducer,
|
||||||
|
} from './core';
|
||||||
|
|
||||||
|
import { NgRxStoreSelect } from './service';
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
imports: [
|
||||||
|
StoreModule,
|
||||||
|
],
|
||||||
|
providers: [
|
||||||
|
NgRxStoreSelect,
|
||||||
|
],
|
||||||
|
})
|
||||||
|
export class NgRxStoreModule {
|
||||||
|
static forRoot(reducers: any): ModuleWithProviders {
|
||||||
|
return {
|
||||||
|
ngModule: NgRxStoreModule,
|
||||||
|
providers: [
|
||||||
|
{ provide: _STORE, useValue: reducers },
|
||||||
|
],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
static forFeature(featureName: string, reducers?: any): ModuleWithProviders {
|
||||||
|
return {
|
||||||
|
ngModule: NgRxStoreModule,
|
||||||
|
providers: [
|
||||||
|
{ provide: _STORE_FEATURE, useValue: { featureName, reducers } },
|
||||||
|
],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
@Optional() @Inject(_STORE) reducers: any,
|
||||||
|
@Optional() @Inject(_STORE_FEATURE) featureReducers: any,
|
||||||
|
|
||||||
|
reducerFactory: ReducerManager,
|
||||||
|
store: Store<any>,
|
||||||
|
parentInjector: Injector,
|
||||||
|
select: NgRxStoreSelect,
|
||||||
|
) {
|
||||||
|
select.connect(store);
|
||||||
|
|
||||||
|
if (reducers) {
|
||||||
|
for (const key in reducers) {
|
||||||
|
if (!reducers.hasOwnProperty(key)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const clazz = reducers[key];
|
||||||
|
const inst = parentInjector.get(clazz, new clazz());
|
||||||
|
reducerFactory.addReducer(key, createReducer(inst));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (featureReducers) {
|
||||||
|
if (typeof featureReducers.key !== 'string') {
|
||||||
|
featureReducers.reducers = featureReducers.key;
|
||||||
|
featureReducers.key = undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
const mapped: {[key: string]: any} = {};
|
||||||
|
for (const key in featureReducers.reducers) {
|
||||||
|
if (!featureReducers.reducers.hasOwnProperty(key)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const clazz = featureReducers.reducers[key];
|
||||||
|
const inst = parentInjector.get(clazz, new clazz());
|
||||||
|
mapped[key] = createReducer(inst);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (featureReducers.key) {
|
||||||
|
reducerFactory.addFeature({
|
||||||
|
reducers: mapped,
|
||||||
|
reducerFactory: <any>combineReducers,
|
||||||
|
key: featureReducers.key
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
1
modules/ngrx-store/src/service/index.ts
Normal file
1
modules/ngrx-store/src/service/index.ts
Normal file
|
@ -0,0 +1 @@
|
||||||
|
export * from './ngrx-store-select';
|
11
modules/ngrx-store/src/service/ngrx-store-select.ts
Normal file
11
modules/ngrx-store/src/service/ngrx-store-select.ts
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import { Store } from '@ngrx/store';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class NgRxStoreSelect {
|
||||||
|
static store: Store<any> | undefined = undefined;
|
||||||
|
|
||||||
|
connect(store: Store<any>) {
|
||||||
|
NgRxStoreSelect.store = store;
|
||||||
|
}
|
||||||
|
}
|
32
modules/ngrx-store/tsconfig-build.json
Normal file
32
modules/ngrx-store/tsconfig-build.json
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
|
||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"baseUrl": ".",
|
||||||
|
"declaration": true,
|
||||||
|
"experimentalDecorators": true,
|
||||||
|
"inlineSources": true,
|
||||||
|
"lib": [
|
||||||
|
"es2015",
|
||||||
|
"dom"
|
||||||
|
],
|
||||||
|
"module": "es2015",
|
||||||
|
"moduleResolution": "node",
|
||||||
|
"outDir": "../../dist/packages/ngrx-store",
|
||||||
|
"paths": { },
|
||||||
|
"rootDir": ".",
|
||||||
|
"skipLibCheck": true,
|
||||||
|
"strict": true,
|
||||||
|
"stripInternal": true,
|
||||||
|
"sourceMap": true,
|
||||||
|
"target": "es2015"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"public_api.ts"
|
||||||
|
],
|
||||||
|
"angularCompilerOptions": {
|
||||||
|
"annotateForClosureCompiler": true,
|
||||||
|
"strictMetadataEmit": true,
|
||||||
|
"flatModuleOutFile": "index.js",
|
||||||
|
"flatModuleId": "@loafer/ngrx-store"
|
||||||
|
}
|
||||||
|
}
|
46
package.json
46
package.json
|
@ -1,38 +1,46 @@
|
||||||
{
|
{
|
||||||
"name": "js",
|
"name": "@loafer/js",
|
||||||
"version": "0.0.0",
|
"version": "0.0.1",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"ng": "ng",
|
"build": "ts-node ./build/index.ts",
|
||||||
"start": "ng serve",
|
"deploy:builds": "ts-node ./build/deploy-build.ts",
|
||||||
"build": "ng build --prod",
|
"test:unit": "node ./tests.js",
|
||||||
"test": "ng test",
|
"test": "nyc yarn run test:unit",
|
||||||
"lint": "ng lint",
|
"clean": "git clean -xdf && yarn && yarn run bootstrap",
|
||||||
"e2e": "ng e2e"
|
"cli": "ng",
|
||||||
|
"example:start": "yarn run cli serve"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8.6.0",
|
||||||
|
"npm": ">=5.3.0",
|
||||||
|
"yarn": ">=1.3.0 <2.0.0"
|
||||||
},
|
},
|
||||||
"private": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@angular/cdk": "^5.2.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
"@angular/animations": "^5.2.0",
|
"@angular/animations": "^5.2.0",
|
||||||
|
"@angular/cli": "1.6.5",
|
||||||
"@angular/common": "^5.2.0",
|
"@angular/common": "^5.2.0",
|
||||||
"@angular/compiler": "^5.2.0",
|
"@angular/compiler": "^5.2.0",
|
||||||
|
"@angular/compiler-cli": "^5.2.0",
|
||||||
"@angular/core": "^5.2.0",
|
"@angular/core": "^5.2.0",
|
||||||
"@angular/forms": "^5.2.0",
|
"@angular/forms": "^5.2.0",
|
||||||
"@angular/http": "^5.2.0",
|
"@angular/http": "^5.2.0",
|
||||||
|
"@angular/material": "^5.2.0",
|
||||||
"@angular/platform-browser": "^5.2.0",
|
"@angular/platform-browser": "^5.2.0",
|
||||||
"@angular/platform-browser-dynamic": "^5.2.0",
|
"@angular/platform-browser-dynamic": "^5.2.0",
|
||||||
|
"@angular/platform-server": "^5.2.0",
|
||||||
"@angular/router": "^5.2.0",
|
"@angular/router": "^5.2.0",
|
||||||
"core-js": "^2.4.1",
|
"@ngrx/effects": "^5.2.0",
|
||||||
"rxjs": "^5.5.6",
|
"@ngrx/store": "^5.2.0",
|
||||||
"zone.js": "^0.8.19"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"@angular/cli": "1.6.5",
|
|
||||||
"@angular/compiler-cli": "^5.2.0",
|
|
||||||
"@angular/language-service": "^5.2.0",
|
|
||||||
"@types/jasmine": "~2.8.3",
|
"@types/jasmine": "~2.8.3",
|
||||||
"@types/jasminewd2": "~2.0.2",
|
"@types/jasminewd2": "~2.0.2",
|
||||||
"@types/node": "~6.0.60",
|
"@types/node": "~6.0.60",
|
||||||
"codelyzer": "^4.0.1",
|
"codelyzer": "^4.0.1",
|
||||||
|
"core-js": "^2.4.1",
|
||||||
|
"hammerjs": "^2.0.8",
|
||||||
"jasmine-core": "~2.8.0",
|
"jasmine-core": "~2.8.0",
|
||||||
"jasmine-spec-reporter": "~4.2.1",
|
"jasmine-spec-reporter": "~4.2.1",
|
||||||
"karma": "~2.0.0",
|
"karma": "~2.0.0",
|
||||||
|
@ -42,8 +50,10 @@
|
||||||
"karma-jasmine": "~1.1.0",
|
"karma-jasmine": "~1.1.0",
|
||||||
"karma-jasmine-html-reporter": "^0.2.2",
|
"karma-jasmine-html-reporter": "^0.2.2",
|
||||||
"protractor": "~5.1.2",
|
"protractor": "~5.1.2",
|
||||||
|
"rxjs": "^5.5.6",
|
||||||
"ts-node": "~4.1.0",
|
"ts-node": "~4.1.0",
|
||||||
"tslint": "~5.9.1",
|
"tslint": "~5.9.1",
|
||||||
"typescript": "~2.5.3"
|
"typescript": "~2.5.3",
|
||||||
|
"zone.js": "^0.8.19"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,20 +0,0 @@
|
||||||
<!--The content below is only a placeholder and can be replaced.-->
|
|
||||||
<div style="text-align:center">
|
|
||||||
<h1>
|
|
||||||
Welcome to {{ title }}!
|
|
||||||
</h1>
|
|
||||||
<img width="300" alt="Angular Logo" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTAgMjUwIj4KICAgIDxwYXRoIGZpbGw9IiNERDAwMzEiIGQ9Ik0xMjUgMzBMMzEuOSA2My4ybDE0LjIgMTIzLjFMMTI1IDIzMGw3OC45LTQzLjcgMTQuMi0xMjMuMXoiIC8+CiAgICA8cGF0aCBmaWxsPSIjQzMwMDJGIiBkPSJNMTI1IDMwdjIyLjItLjFWMjMwbDc4LjktNDMuNyAxNC4yLTEyMy4xTDEyNSAzMHoiIC8+CiAgICA8cGF0aCAgZmlsbD0iI0ZGRkZGRiIgZD0iTTEyNSA1Mi4xTDY2LjggMTgyLjZoMjEuN2wxMS43LTI5LjJoNDkuNGwxMS43IDI5LjJIMTgzTDEyNSA1Mi4xem0xNyA4My4zaC0zNGwxNy00MC45IDE3IDQwLjl6IiAvPgogIDwvc3ZnPg==">
|
|
||||||
</div>
|
|
||||||
<h2>Here are some links to help you start: </h2>
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
<h2><a target="_blank" rel="noopener" href="https://angular.io/tutorial">Tour of Heroes</a></h2>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<h2><a target="_blank" rel="noopener" href="https://github.com/angular/angular-cli/wiki">CLI Documentation</a></h2>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<h2><a target="_blank" rel="noopener" href="https://blog.angular.io/">Angular blog</a></h2>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
|
|
|
@ -1,19 +1,34 @@
|
||||||
{
|
{
|
||||||
|
"buildOnSave": false,
|
||||||
"compileOnSave": false,
|
"compileOnSave": false,
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"outDir": "./dist/out-tsc",
|
"baseUrl": "",
|
||||||
"sourceMap": true,
|
|
||||||
"declaration": false,
|
"declaration": false,
|
||||||
"moduleResolution": "node",
|
|
||||||
"emitDecoratorMetadata": true,
|
"emitDecoratorMetadata": true,
|
||||||
"experimentalDecorators": true,
|
"experimentalDecorators": true,
|
||||||
"target": "es5",
|
|
||||||
"typeRoots": [
|
|
||||||
"node_modules/@types"
|
|
||||||
],
|
|
||||||
"lib": [
|
"lib": [
|
||||||
"es2017",
|
"es2017",
|
||||||
"dom"
|
"dom"
|
||||||
|
],
|
||||||
|
"module": "commonjs",
|
||||||
|
"moduleResolution": "node",
|
||||||
|
"noStrictGenericChecks": true,
|
||||||
|
"outDir": "../out-tsc/app",
|
||||||
|
"paths": {
|
||||||
|
"@loafer/ngrx-store": [
|
||||||
|
"./modules/ngrx-store"
|
||||||
]
|
]
|
||||||
}
|
},
|
||||||
|
"rootDir": "./",
|
||||||
|
"sourceMap": true,
|
||||||
|
"strict": true,
|
||||||
|
"target": "es5",
|
||||||
|
"typeRoots": [
|
||||||
|
"node_modules/@types"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"exclude": [
|
||||||
|
"node_modules",
|
||||||
|
"**/*/node_modules"
|
||||||
|
],
|
||||||
}
|
}
|
||||||
|
|
207
yarn.lock
207
yarn.lock
|
@ -33,6 +33,12 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
tslib "^1.7.1"
|
tslib "^1.7.1"
|
||||||
|
|
||||||
|
"@angular/cdk@^5.2.0":
|
||||||
|
version "5.2.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/@angular/cdk/-/cdk-5.2.4.tgz#c0a429a8710d8fedb157f546e21cb49d4335f7f7"
|
||||||
|
dependencies:
|
||||||
|
tslib "^1.7.1"
|
||||||
|
|
||||||
"@angular/cli@1.6.5":
|
"@angular/cli@1.6.5":
|
||||||
version "1.6.5"
|
version "1.6.5"
|
||||||
resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-1.6.5.tgz#9217c5d5c366292aca61fb0328c406bb5b0f2d76"
|
resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-1.6.5.tgz#9217c5d5c366292aca61fb0328c406bb5b0f2d76"
|
||||||
|
@ -136,9 +142,11 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
tslib "^1.7.1"
|
tslib "^1.7.1"
|
||||||
|
|
||||||
"@angular/language-service@^5.2.0":
|
"@angular/material@^5.2.0":
|
||||||
version "5.2.9"
|
version "5.2.4"
|
||||||
resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-5.2.9.tgz#4838bb6319c99e8f5beb08bdfb392ee9a1173766"
|
resolved "https://registry.yarnpkg.com/@angular/material/-/material-5.2.4.tgz#9e823798324283d23ea839156fac5bcb73443d55"
|
||||||
|
dependencies:
|
||||||
|
tslib "^1.7.1"
|
||||||
|
|
||||||
"@angular/platform-browser-dynamic@^5.2.0":
|
"@angular/platform-browser-dynamic@^5.2.0":
|
||||||
version "5.2.9"
|
version "5.2.9"
|
||||||
|
@ -152,12 +160,28 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
tslib "^1.7.1"
|
tslib "^1.7.1"
|
||||||
|
|
||||||
|
"@angular/platform-server@^5.2.0":
|
||||||
|
version "5.2.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/@angular/platform-server/-/platform-server-5.2.9.tgz#9905cc152242472da2557bf9fec73685449b92c4"
|
||||||
|
dependencies:
|
||||||
|
domino "^1.0.29"
|
||||||
|
tslib "^1.7.1"
|
||||||
|
xhr2 "^0.1.4"
|
||||||
|
|
||||||
"@angular/router@^5.2.0":
|
"@angular/router@^5.2.0":
|
||||||
version "5.2.9"
|
version "5.2.9"
|
||||||
resolved "https://registry.yarnpkg.com/@angular/router/-/router-5.2.9.tgz#0369df6e60c6da3a5842c6eb35e3958d4ffe727e"
|
resolved "https://registry.yarnpkg.com/@angular/router/-/router-5.2.9.tgz#0369df6e60c6da3a5842c6eb35e3958d4ffe727e"
|
||||||
dependencies:
|
dependencies:
|
||||||
tslib "^1.7.1"
|
tslib "^1.7.1"
|
||||||
|
|
||||||
|
"@ngrx/effects@^5.2.0":
|
||||||
|
version "5.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ngrx/effects/-/effects-5.2.0.tgz#aa762b69cb6fd4644d724a1cecd265caa42baf09"
|
||||||
|
|
||||||
|
"@ngrx/store@^5.2.0":
|
||||||
|
version "5.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ngrx/store/-/store-5.2.0.tgz#627ed74c9cd95462930485d912a557117b23903e"
|
||||||
|
|
||||||
"@ngtools/json-schema@1.1.0", "@ngtools/json-schema@^1.1.0":
|
"@ngtools/json-schema@1.1.0", "@ngtools/json-schema@^1.1.0":
|
||||||
version "1.1.0"
|
version "1.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ngtools/json-schema/-/json-schema-1.1.0.tgz#c3a0c544d62392acc2813a42c8a0dc6f58f86922"
|
resolved "https://registry.yarnpkg.com/@ngtools/json-schema/-/json-schema-1.1.0.tgz#c3a0c544d62392acc2813a42c8a0dc6f58f86922"
|
||||||
|
@ -288,7 +312,7 @@ ajv@^4.9.1:
|
||||||
co "^4.6.0"
|
co "^4.6.0"
|
||||||
json-stable-stringify "^1.0.1"
|
json-stable-stringify "^1.0.1"
|
||||||
|
|
||||||
ajv@^5.0.0, ajv@^5.1.0, ajv@^5.1.5, ajv@~5.5.1:
|
ajv@^5.0.0, ajv@^5.1.5, ajv@~5.5.1:
|
||||||
version "5.5.2"
|
version "5.5.2"
|
||||||
resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
|
resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -579,11 +603,7 @@ aws-sign2@~0.6.0:
|
||||||
version "0.6.0"
|
version "0.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
|
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
|
||||||
|
|
||||||
aws-sign2@~0.7.0:
|
aws4@^1.2.1:
|
||||||
version "0.7.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
|
|
||||||
|
|
||||||
aws4@^1.2.1, aws4@^1.6.0:
|
|
||||||
version "1.6.0"
|
version "1.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
|
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
|
||||||
|
|
||||||
|
@ -796,18 +816,6 @@ boom@2.x.x:
|
||||||
dependencies:
|
dependencies:
|
||||||
hoek "2.x.x"
|
hoek "2.x.x"
|
||||||
|
|
||||||
boom@4.x.x:
|
|
||||||
version "4.3.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31"
|
|
||||||
dependencies:
|
|
||||||
hoek "4.x.x"
|
|
||||||
|
|
||||||
boom@5.x.x:
|
|
||||||
version "5.2.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02"
|
|
||||||
dependencies:
|
|
||||||
hoek "4.x.x"
|
|
||||||
|
|
||||||
brace-expansion@^1.1.7:
|
brace-expansion@^1.1.7:
|
||||||
version "1.1.11"
|
version "1.1.11"
|
||||||
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
||||||
|
@ -1366,7 +1374,7 @@ combine-source-map@~0.8.0:
|
||||||
lodash.memoize "~3.0.3"
|
lodash.memoize "~3.0.3"
|
||||||
source-map "~0.5.3"
|
source-map "~0.5.3"
|
||||||
|
|
||||||
combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5:
|
combined-stream@^1.0.5, combined-stream@~1.0.5:
|
||||||
version "1.0.6"
|
version "1.0.6"
|
||||||
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818"
|
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818"
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -1589,12 +1597,6 @@ cryptiles@2.x.x:
|
||||||
dependencies:
|
dependencies:
|
||||||
boom "2.x.x"
|
boom "2.x.x"
|
||||||
|
|
||||||
cryptiles@3.x.x:
|
|
||||||
version "3.1.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe"
|
|
||||||
dependencies:
|
|
||||||
boom "5.x.x"
|
|
||||||
|
|
||||||
crypto-browserify@^3.0.0, crypto-browserify@^3.11.0:
|
crypto-browserify@^3.0.0, crypto-browserify@^3.11.0:
|
||||||
version "3.12.0"
|
version "3.12.0"
|
||||||
resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
|
resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
|
||||||
|
@ -1755,15 +1757,15 @@ date-now@^0.1.4:
|
||||||
version "0.1.4"
|
version "0.1.4"
|
||||||
resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
|
resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
|
||||||
|
|
||||||
debug@*, debug@^3.1.0, debug@~3.1.0:
|
debug@*, debug@2, debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.6, debug@^2.6.8, debug@~2.6.4, debug@~2.6.6:
|
||||||
version "3.1.0"
|
version "2.6.9"
|
||||||
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
|
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
||||||
dependencies:
|
dependencies:
|
||||||
ms "2.0.0"
|
ms "2.0.0"
|
||||||
|
|
||||||
debug@2, debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.6, debug@^2.6.8, debug@~2.6.4, debug@~2.6.6:
|
debug@^3.1.0, debug@~3.1.0:
|
||||||
version "2.6.9"
|
version "3.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
|
||||||
dependencies:
|
dependencies:
|
||||||
ms "2.0.0"
|
ms "2.0.0"
|
||||||
|
|
||||||
|
@ -2001,6 +2003,10 @@ domhandler@2.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
domelementtype "1"
|
domelementtype "1"
|
||||||
|
|
||||||
|
domino@^1.0.29:
|
||||||
|
version "1.0.30"
|
||||||
|
resolved "https://registry.yarnpkg.com/domino/-/domino-1.0.30.tgz#54a4154ecae968616680f8feba3cedff355c71f4"
|
||||||
|
|
||||||
domutils@1.1:
|
domutils@1.1:
|
||||||
version "1.1.6"
|
version "1.1.6"
|
||||||
resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485"
|
resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485"
|
||||||
|
@ -2416,7 +2422,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2:
|
||||||
assign-symbols "^1.0.0"
|
assign-symbols "^1.0.0"
|
||||||
is-extendable "^1.0.1"
|
is-extendable "^1.0.1"
|
||||||
|
|
||||||
extend@3, extend@^3.0.0, extend@~3.0.0, extend@~3.0.1:
|
extend@3, extend@^3.0.0, extend@~3.0.0:
|
||||||
version "3.0.1"
|
version "3.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
|
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
|
||||||
|
|
||||||
|
@ -2627,14 +2633,6 @@ form-data@~2.1.1:
|
||||||
combined-stream "^1.0.5"
|
combined-stream "^1.0.5"
|
||||||
mime-types "^2.1.12"
|
mime-types "^2.1.12"
|
||||||
|
|
||||||
form-data@~2.3.1:
|
|
||||||
version "2.3.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099"
|
|
||||||
dependencies:
|
|
||||||
asynckit "^0.4.0"
|
|
||||||
combined-stream "1.0.6"
|
|
||||||
mime-types "^2.1.12"
|
|
||||||
|
|
||||||
forwarded@~0.1.2:
|
forwarded@~0.1.2:
|
||||||
version "0.1.2"
|
version "0.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
|
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
|
||||||
|
@ -2880,6 +2878,10 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6:
|
||||||
version "4.1.11"
|
version "4.1.11"
|
||||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
|
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
|
||||||
|
|
||||||
|
hammerjs@^2.0.8:
|
||||||
|
version "2.0.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/hammerjs/-/hammerjs-2.0.8.tgz#04ef77862cff2bb79d30f7692095930222bf60f1"
|
||||||
|
|
||||||
handle-thing@^1.2.5:
|
handle-thing@^1.2.5:
|
||||||
version "1.2.5"
|
version "1.2.5"
|
||||||
resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4"
|
resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4"
|
||||||
|
@ -2898,10 +2900,6 @@ har-schema@^1.0.5:
|
||||||
version "1.0.5"
|
version "1.0.5"
|
||||||
resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e"
|
resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e"
|
||||||
|
|
||||||
har-schema@^2.0.0:
|
|
||||||
version "2.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
|
|
||||||
|
|
||||||
har-validator@~2.0.6:
|
har-validator@~2.0.6:
|
||||||
version "2.0.6"
|
version "2.0.6"
|
||||||
resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d"
|
resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d"
|
||||||
|
@ -2918,13 +2916,6 @@ har-validator@~4.2.1:
|
||||||
ajv "^4.9.1"
|
ajv "^4.9.1"
|
||||||
har-schema "^1.0.5"
|
har-schema "^1.0.5"
|
||||||
|
|
||||||
har-validator@~5.0.3:
|
|
||||||
version "5.0.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd"
|
|
||||||
dependencies:
|
|
||||||
ajv "^5.1.0"
|
|
||||||
har-schema "^2.0.0"
|
|
||||||
|
|
||||||
has-ansi@^2.0.0:
|
has-ansi@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
|
resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
|
||||||
|
@ -3019,15 +3010,6 @@ hawk@3.1.3, hawk@~3.1.3:
|
||||||
hoek "2.x.x"
|
hoek "2.x.x"
|
||||||
sntp "1.x.x"
|
sntp "1.x.x"
|
||||||
|
|
||||||
hawk@~6.0.2:
|
|
||||||
version "6.0.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038"
|
|
||||||
dependencies:
|
|
||||||
boom "4.x.x"
|
|
||||||
cryptiles "3.x.x"
|
|
||||||
hoek "4.x.x"
|
|
||||||
sntp "2.x.x"
|
|
||||||
|
|
||||||
he@1.1.x:
|
he@1.1.x:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
|
resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
|
||||||
|
@ -3051,10 +3033,6 @@ hoek@2.x.x:
|
||||||
version "2.16.3"
|
version "2.16.3"
|
||||||
resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
|
resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
|
||||||
|
|
||||||
hoek@4.x.x:
|
|
||||||
version "4.2.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb"
|
|
||||||
|
|
||||||
homedir-polyfill@^1.0.1:
|
homedir-polyfill@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc"
|
resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc"
|
||||||
|
@ -3168,14 +3146,6 @@ http-signature@~1.1.0:
|
||||||
jsprim "^1.2.2"
|
jsprim "^1.2.2"
|
||||||
sshpk "^1.7.0"
|
sshpk "^1.7.0"
|
||||||
|
|
||||||
http-signature@~1.2.0:
|
|
||||||
version "1.2.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
|
|
||||||
dependencies:
|
|
||||||
assert-plus "^1.0.0"
|
|
||||||
jsprim "^1.2.2"
|
|
||||||
sshpk "^1.7.0"
|
|
||||||
|
|
||||||
httpntlm@1.6.1:
|
httpntlm@1.6.1:
|
||||||
version "1.6.1"
|
version "1.6.1"
|
||||||
resolved "https://registry.yarnpkg.com/httpntlm/-/httpntlm-1.6.1.tgz#ad01527143a2e8773cfae6a96f58656bb52a34b2"
|
resolved "https://registry.yarnpkg.com/httpntlm/-/httpntlm-1.6.1.tgz#ad01527143a2e8773cfae6a96f58656bb52a34b2"
|
||||||
|
@ -4687,7 +4657,7 @@ number-is-nan@^1.0.0:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
|
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
|
||||||
|
|
||||||
oauth-sign@~0.8.1, oauth-sign@~0.8.2:
|
oauth-sign@~0.8.1:
|
||||||
version "0.8.2"
|
version "0.8.2"
|
||||||
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
|
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
|
||||||
|
|
||||||
|
@ -5020,10 +4990,6 @@ performance-now@^0.2.0:
|
||||||
version "0.2.0"
|
version "0.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
|
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
|
||||||
|
|
||||||
performance-now@^2.1.0:
|
|
||||||
version "2.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
|
|
||||||
|
|
||||||
pify@^2.0.0, pify@^2.3.0:
|
pify@^2.0.0, pify@^2.3.0:
|
||||||
version "2.3.0"
|
version "2.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
|
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
|
||||||
|
@ -5487,7 +5453,7 @@ qjobs@^1.1.4:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071"
|
resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071"
|
||||||
|
|
||||||
qs@6.5.1, qs@~6.5.1:
|
qs@6.5.1:
|
||||||
version "6.5.1"
|
version "6.5.1"
|
||||||
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8"
|
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8"
|
||||||
|
|
||||||
|
@ -5780,32 +5746,32 @@ repeating@^2.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
is-finite "^1.0.0"
|
is-finite "^1.0.0"
|
||||||
|
|
||||||
request@2, request@^2.0.0, request@^2.74.0, request@^2.78.0:
|
request@2, request@2.81.0, request@^2.0.0, request@^2.74.0, request@^2.78.0:
|
||||||
version "2.85.0"
|
version "2.81.0"
|
||||||
resolved "https://registry.yarnpkg.com/request/-/request-2.85.0.tgz#5a03615a47c61420b3eb99b7dba204f83603e1fa"
|
resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0"
|
||||||
dependencies:
|
dependencies:
|
||||||
aws-sign2 "~0.7.0"
|
aws-sign2 "~0.6.0"
|
||||||
aws4 "^1.6.0"
|
aws4 "^1.2.1"
|
||||||
caseless "~0.12.0"
|
caseless "~0.12.0"
|
||||||
combined-stream "~1.0.5"
|
combined-stream "~1.0.5"
|
||||||
extend "~3.0.1"
|
extend "~3.0.0"
|
||||||
forever-agent "~0.6.1"
|
forever-agent "~0.6.1"
|
||||||
form-data "~2.3.1"
|
form-data "~2.1.1"
|
||||||
har-validator "~5.0.3"
|
har-validator "~4.2.1"
|
||||||
hawk "~6.0.2"
|
hawk "~3.1.3"
|
||||||
http-signature "~1.2.0"
|
http-signature "~1.1.0"
|
||||||
is-typedarray "~1.0.0"
|
is-typedarray "~1.0.0"
|
||||||
isstream "~0.1.2"
|
isstream "~0.1.2"
|
||||||
json-stringify-safe "~5.0.1"
|
json-stringify-safe "~5.0.1"
|
||||||
mime-types "~2.1.17"
|
mime-types "~2.1.7"
|
||||||
oauth-sign "~0.8.2"
|
oauth-sign "~0.8.1"
|
||||||
performance-now "^2.1.0"
|
performance-now "^0.2.0"
|
||||||
qs "~6.5.1"
|
qs "~6.4.0"
|
||||||
safe-buffer "^5.1.1"
|
safe-buffer "^5.0.1"
|
||||||
stringstream "~0.0.5"
|
stringstream "~0.0.4"
|
||||||
tough-cookie "~2.3.3"
|
tough-cookie "~2.3.0"
|
||||||
tunnel-agent "^0.6.0"
|
tunnel-agent "^0.6.0"
|
||||||
uuid "^3.1.0"
|
uuid "^3.0.0"
|
||||||
|
|
||||||
request@2.75.x:
|
request@2.75.x:
|
||||||
version "2.75.0"
|
version "2.75.0"
|
||||||
|
@ -5833,33 +5799,6 @@ request@2.75.x:
|
||||||
tough-cookie "~2.3.0"
|
tough-cookie "~2.3.0"
|
||||||
tunnel-agent "~0.4.1"
|
tunnel-agent "~0.4.1"
|
||||||
|
|
||||||
request@2.81.0:
|
|
||||||
version "2.81.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0"
|
|
||||||
dependencies:
|
|
||||||
aws-sign2 "~0.6.0"
|
|
||||||
aws4 "^1.2.1"
|
|
||||||
caseless "~0.12.0"
|
|
||||||
combined-stream "~1.0.5"
|
|
||||||
extend "~3.0.0"
|
|
||||||
forever-agent "~0.6.1"
|
|
||||||
form-data "~2.1.1"
|
|
||||||
har-validator "~4.2.1"
|
|
||||||
hawk "~3.1.3"
|
|
||||||
http-signature "~1.1.0"
|
|
||||||
is-typedarray "~1.0.0"
|
|
||||||
isstream "~0.1.2"
|
|
||||||
json-stringify-safe "~5.0.1"
|
|
||||||
mime-types "~2.1.7"
|
|
||||||
oauth-sign "~0.8.1"
|
|
||||||
performance-now "^0.2.0"
|
|
||||||
qs "~6.4.0"
|
|
||||||
safe-buffer "^5.0.1"
|
|
||||||
stringstream "~0.0.4"
|
|
||||||
tough-cookie "~2.3.0"
|
|
||||||
tunnel-agent "^0.6.0"
|
|
||||||
uuid "^3.0.0"
|
|
||||||
|
|
||||||
request@~2.79.0:
|
request@~2.79.0:
|
||||||
version "2.79.0"
|
version "2.79.0"
|
||||||
resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de"
|
resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de"
|
||||||
|
@ -6269,12 +6208,6 @@ sntp@1.x.x:
|
||||||
dependencies:
|
dependencies:
|
||||||
hoek "2.x.x"
|
hoek "2.x.x"
|
||||||
|
|
||||||
sntp@2.x.x:
|
|
||||||
version "2.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8"
|
|
||||||
dependencies:
|
|
||||||
hoek "4.x.x"
|
|
||||||
|
|
||||||
socket.io-adapter@~1.1.0:
|
socket.io-adapter@~1.1.0:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b"
|
resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b"
|
||||||
|
@ -6597,7 +6530,7 @@ string_decoder@~0.10.x:
|
||||||
version "0.10.31"
|
version "0.10.31"
|
||||||
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
|
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
|
||||||
|
|
||||||
stringstream@~0.0.4, stringstream@~0.0.5:
|
stringstream@~0.0.4:
|
||||||
version "0.0.5"
|
version "0.0.5"
|
||||||
resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
|
resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
|
||||||
|
|
||||||
|
@ -6830,7 +6763,7 @@ toposort@^1.0.0:
|
||||||
version "1.0.6"
|
version "1.0.6"
|
||||||
resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.6.tgz#c31748e55d210effc00fdcdc7d6e68d7d7bb9cec"
|
resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.6.tgz#c31748e55d210effc00fdcdc7d6e68d7d7bb9cec"
|
||||||
|
|
||||||
tough-cookie@~2.3.0, tough-cookie@~2.3.3:
|
tough-cookie@~2.3.0:
|
||||||
version "2.3.4"
|
version "2.3.4"
|
||||||
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655"
|
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655"
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -7159,7 +7092,7 @@ utils-merge@1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
|
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
|
||||||
|
|
||||||
uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0:
|
uuid@^3.0.0, uuid@^3.0.1:
|
||||||
version "3.2.1"
|
version "3.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14"
|
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14"
|
||||||
|
|
||||||
|
@ -7433,6 +7366,10 @@ ws@~3.3.1:
|
||||||
safe-buffer "~5.1.0"
|
safe-buffer "~5.1.0"
|
||||||
ultron "~1.1.0"
|
ultron "~1.1.0"
|
||||||
|
|
||||||
|
xhr2@^0.1.4:
|
||||||
|
version "0.1.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/xhr2/-/xhr2-0.1.4.tgz#7f87658847716db5026323812f818cadab387a5f"
|
||||||
|
|
||||||
xml-char-classes@^1.0.0:
|
xml-char-classes@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/xml-char-classes/-/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d"
|
resolved "https://registry.yarnpkg.com/xml-char-classes/-/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d"
|
||||||
|
|
Loading…
Reference in New Issue
Block a user