[ADF-3593] remove rxjs-compat layer (#3886)

* remove rxjs-compat layer

* add rxjs linter

* observable new instead of create

* lint fixes

* disable rxjs-no-subject-value for certain scenarios

* fix auth rxjs
This commit is contained in:
Denys Vuika
2018-10-16 19:45:00 +01:00
committed by Eugenio Romano
parent ccc52d40dd
commit f5a7b07370
29 changed files with 3337 additions and 3177 deletions

View File

@@ -112,7 +112,7 @@ describe('ContentNodeDialogService', () => {
it('should be able to open the dialog using a folder id', fakeAsync(() => {
spyOn(documentListService, 'getFolderNode').and.returnValue(of(fakeNode));
service.openFileBrowseDialogByFolderId('fake-folder-id').subscribe();
service.openFileBrowseDialogByFolderId('fake-folder-id').subscribe(() => {});
tick();
expect(spyOnDialogOpen).toHaveBeenCalled();
}));
@@ -120,7 +120,7 @@ describe('ContentNodeDialogService', () => {
it('should be able to open the dialog for files using the first user site', fakeAsync(() => {
spyOn(sitesService, 'getSites').and.returnValue(of(fakeSiteList));
spyOn(documentListService, 'getFolderNode').and.returnValue(of(fakeNode));
service.openFileBrowseDialogBySite().subscribe();
service.openFileBrowseDialogBySite().subscribe(() => {});
tick();
expect(spyOnDialogOpen).toHaveBeenCalled();
}));
@@ -128,7 +128,7 @@ describe('ContentNodeDialogService', () => {
it('should be able to open the dialog for folder using the first user site', fakeAsync(() => {
spyOn(sitesService, 'getSites').and.returnValue(of(fakeSiteList));
spyOn(documentListService, 'getFolderNode').and.returnValue(of(fakeNode));
service.openFolderBrowseDialogBySite().subscribe();
service.openFolderBrowseDialogBySite().subscribe(() => {});
tick();
expect(spyOnDialogOpen).toHaveBeenCalled();
}));

View File

@@ -85,7 +85,7 @@ describe('ContentNodeSelectorComponent', () => {
contentNodeSelectorService = TestBed.get(ContentNodeSelectorService);
cnSearchSpy = spyOn(contentNodeSelectorService, 'search').and.callThrough();
searchSpy = spyOn(searchService, 'searchByQueryBody').and.callFake(() => {
return Observable.create((observer: Observer<NodePaging>) => {
return new Observable((observer: Observer<NodePaging>) => {
_observer = observer;
});
});

View File

@@ -15,6 +15,8 @@
* limitations under the License.
*/
/* tslint:disable:rxjs-no-subject-value */
import {
AfterContentInit, Component, ContentChild, ElementRef, EventEmitter, HostListener, Input, NgZone,
OnChanges, OnDestroy, OnInit, Output, SimpleChanges, TemplateRef, ViewChild, ViewEncapsulation

View File

@@ -42,14 +42,14 @@ export class DocumentListServiceMock extends DocumentListService {
if (this.getFolderReject) {
return throwError(this.getFolderRejectError);
}
return Observable.create(observer => {
return new Observable(observer => {
observer.next(this.getFolderResult);
observer.complete();
});
}
deleteNode(nodeId: string) {
return Observable.create(observer => {
return new Observable(observer => {
observer.next();
observer.complete();
});

View File

@@ -148,12 +148,12 @@ export class SearchControlComponent implements OnInit, OnDestroy {
ngOnDestroy(): void {
if (this.focusSubject) {
this.focusSubject.unsubscribe();
this.focusSubject.complete();
this.focusSubject = null;
}
if (this.toggleSearch) {
this.toggleSearch.unsubscribe();
this.toggleSearch.complete();
this.toggleSearch = null;
}
}

View File

@@ -81,7 +81,6 @@ export class SearchTriggerDirective implements ControlValueAccessor, OnDestroy {
this.onDestroy$.complete();
if (this.escapeEventStream) {
this.escapeEventStream.unsubscribe();
this.escapeEventStream = null;
}
if ( this.closingActionsSubscription ) {
@@ -127,7 +126,8 @@ export class SearchTriggerDirective implements ControlValueAccessor, OnDestroy {
filter((event: MouseEvent | TouchEvent) => {
const clickTarget = event.target as HTMLElement;
return this._panelOpen && clickTarget !== this.element.nativeElement;
})
}),
takeUntil(this.onDestroy$)
);
}
@@ -191,11 +191,11 @@ export class SearchTriggerDirective implements ControlValueAccessor, OnDestroy {
return merge(firstStable, optionChanges)
.pipe(
takeUntil(this.onDestroy$),
switchMap(() => {
this.searchPanel.setVisibility();
return this.panelClosingActions;
})
}),
takeUntil(this.onDestroy$)
)
.subscribe(event => this.setValueAndClose(event));
}

View File

@@ -172,7 +172,7 @@ describe('FormComponent', () => {
it('should get process variable if is a process task', () => {
spyOn(formService, 'getTaskForm').and.callFake((currentTaskId) => {
return Observable.create(observer => {
return new Observable(observer => {
observer.next({ taskId: currentTaskId });
observer.complete();
});
@@ -180,7 +180,7 @@ describe('FormComponent', () => {
spyOn(visibilityService, 'getTaskProcessVariable').and.returnValue(of({}));
spyOn(formService, 'getTask').and.callFake((currentTaskId) => {
return Observable.create(observer => {
return new Observable(observer => {
observer.next({ taskId: currentTaskId, processDefinitionId: '10201' });
observer.complete();
});
@@ -195,7 +195,7 @@ describe('FormComponent', () => {
it('should not get process variable if is not a process task', () => {
spyOn(formService, 'getTaskForm').and.callFake((currentTaskId) => {
return Observable.create(observer => {
return new Observable(observer => {
observer.next({ taskId: currentTaskId });
observer.complete();
});
@@ -203,7 +203,7 @@ describe('FormComponent', () => {
spyOn(visibilityService, 'getTaskProcessVariable').and.returnValue(of({}));
spyOn(formService, 'getTask').and.callFake((currentTaskId) => {
return Observable.create(observer => {
return new Observable(observer => {
observer.next({ taskId: currentTaskId, processDefinitionId: 'null' });
observer.complete();
});
@@ -421,7 +421,7 @@ describe('FormComponent', () => {
it('should fetch and parse form by task id', (done) => {
spyOn(formService, 'getTask').and.returnValue(of({}));
spyOn(formService, 'getTaskForm').and.callFake((currentTaskId) => {
return Observable.create(observer => {
return new Observable(observer => {
observer.next({ taskId: currentTaskId });
observer.complete();
});
@@ -457,7 +457,7 @@ describe('FormComponent', () => {
it('should apply readonly state when getting form by task id', (done) => {
spyOn(formService, 'getTask').and.returnValue(of({}));
spyOn(formService, 'getTaskForm').and.callFake((taskId) => {
return Observable.create(observer => {
return new Observable(observer => {
observer.next({ taskId: taskId });
observer.complete();
});
@@ -473,7 +473,7 @@ describe('FormComponent', () => {
it('should fetch and parse form definition by id', () => {
spyOn(formService, 'getFormDefinitionById').and.callFake((currentFormId) => {
return Observable.create(observer => {
return new Observable(observer => {
observer.next({ id: currentFormId });
observer.complete();
});
@@ -505,14 +505,14 @@ describe('FormComponent', () => {
it('should fetch and parse form definition by form name', () => {
spyOn(formService, 'getFormDefinitionByName').and.callFake((currentFormName) => {
return Observable.create(observer => {
return new Observable(observer => {
observer.next(currentFormName);
observer.complete();
});
});
spyOn(formService, 'getFormDefinitionById').and.callFake((currentFormName) => {
return Observable.create(observer => {
return new Observable(observer => {
observer.next({ name: currentFormName });
observer.complete();
});
@@ -533,7 +533,7 @@ describe('FormComponent', () => {
it('should save task form and raise corresponding event', () => {
spyOn(formService, 'saveTaskForm').and.callFake(() => {
return Observable.create(observer => {
return new Observable(observer => {
observer.next();
observer.complete();
});
@@ -598,7 +598,7 @@ describe('FormComponent', () => {
it('should complete form form and raise corresponding event', () => {
spyOn(formService, 'completeTaskForm').and.callFake(() => {
return Observable.create(observer => {
return new Observable(observer => {
observer.next();
observer.complete();
});
@@ -703,7 +703,7 @@ describe('FormComponent', () => {
it('should load form for ecm node', () => {
let metadata = {};
spyOn(nodeService, 'getNodeMetadata').and.returnValue(
Observable.create(observer => {
new Observable(observer => {
observer.next({ metadata: metadata });
observer.complete();
})

View File

@@ -89,7 +89,7 @@ describe('DropdownWidgetComponent', () => {
});
spyOn(formService, 'getRestFieldValues').and.returnValue(
Observable.create(observer => {
new Observable(observer => {
observer.next(null);
observer.complete();
})
@@ -101,7 +101,7 @@ describe('DropdownWidgetComponent', () => {
it('should preserve empty option when loading fields', () => {
let restFieldValue: FormFieldOption = <FormFieldOption> { id: '1', name: 'Option1' };
spyOn(formService, 'getRestFieldValues').and.callFake(() => {
return Observable.create(observer => {
return new Observable(observer => {
observer.next([restFieldValue]);
observer.complete();
});

View File

@@ -98,7 +98,7 @@ describe('DropdownEditorComponent', () => {
];
spyOn(formService, 'getRestFieldValuesColumn').and.returnValue(
Observable.create(observer => {
new Observable(observer => {
observer.next(restResults);
observer.complete();
})
@@ -121,7 +121,7 @@ describe('DropdownEditorComponent', () => {
column.optionType = 'rest';
spyOn(formService, 'getRestFieldValuesColumn').and.returnValue(
Observable.create(observer => {
new Observable(observer => {
observer.next(null);
observer.complete();
})

View File

@@ -40,7 +40,7 @@ describe('FunctionalGroupWidgetComponent', () => {
widget.field.value = group;
spyOn(formService, 'getWorkflowGroups').and.returnValue(
Observable.create(observer => {
new Observable(observer => {
observer.next(null);
observer.complete();
})
@@ -128,7 +128,7 @@ describe('FunctionalGroupWidgetComponent', () => {
new GroupModel()
];
spyOn(formService, 'getWorkflowGroups').and.returnValue(
Observable.create(observer => {
new Observable(observer => {
observer.next(groups);
observer.complete();
})
@@ -148,7 +148,7 @@ describe('FunctionalGroupWidgetComponent', () => {
new GroupModel()
];
spyOn(formService, 'getWorkflowGroups').and.returnValue(
Observable.create(observer => {
new Observable(observer => {
observer.next(groups);
observer.complete();
})
@@ -165,7 +165,7 @@ describe('FunctionalGroupWidgetComponent', () => {
it('should hide popup when fetching empty group list', () => {
spyOn(formService, 'getWorkflowGroups').and.returnValue(
Observable.create(observer => {
new Observable(observer => {
observer.next(null);
observer.complete();
})

View File

@@ -88,7 +88,7 @@ describe('PeopleWidgetComponent', () => {
});
spyOn(formService, 'getWorkflowUsers').and.returnValue(
Observable.create(observer => {
new Observable(observer => {
observer.next(null);
observer.complete();
})
@@ -111,7 +111,7 @@ describe('PeopleWidgetComponent', () => {
widget.field.form.readOnly = true;
spyOn(formService, 'getWorkflowUsers').and.returnValue(
Observable.create(observer => {
new Observable(observer => {
observer.next(null);
observer.complete();
})
@@ -166,7 +166,7 @@ describe('PeopleWidgetComponent', () => {
{ id: 1002, firstName: 'Test02', lastName: 'Test02', email: 'test2' }];
beforeEach(async(() => {
spyOn(formService, 'getWorkflowUsers').and.returnValue(Observable.create(observer => {
spyOn(formService, 'getWorkflowUsers').and.returnValue(new Observable(observer => {
observer.next(fakeUserResult);
observer.complete();
}));

View File

@@ -59,7 +59,7 @@ describe('RadioButtonsWidgetComponent', () => {
restUrl: '<url>'
});
spyOn(formService, 'getRestFieldValues').and.returnValue(Observable.create(observer => {
spyOn(formService, 'getRestFieldValues').and.returnValue(new Observable(observer => {
observer.next(null);
observer.complete();
}));
@@ -82,7 +82,7 @@ describe('RadioButtonsWidgetComponent', () => {
let field = widget.field;
spyOn(field, 'updateForm').and.stub();
spyOn(formService, 'getRestFieldValues').and.returnValue(Observable.create(observer => {
spyOn(formService, 'getRestFieldValues').and.returnValue(new Observable(observer => {
observer.next(null);
observer.complete();
}));
@@ -102,7 +102,7 @@ describe('RadioButtonsWidgetComponent', () => {
id: fieldId,
restUrl: '<url>'
});
spyOn(formService, 'getRestFieldValues').and.returnValue(Observable.create(observer => {
spyOn(formService, 'getRestFieldValues').and.returnValue(new Observable(observer => {
observer.next(null);
observer.complete();
}));

View File

@@ -67,7 +67,7 @@ describe('TypeaheadWidgetComponent', () => {
restUrl: 'whateverURL'
});
spyOn(formService, 'getRestFieldValues').and.returnValue(Observable.create(observer => {
spyOn(formService, 'getRestFieldValues').and.returnValue(new Observable(observer => {
observer.next(null);
observer.complete();
}));
@@ -137,7 +137,7 @@ describe('TypeaheadWidgetComponent', () => {
});
it('should setup initial value', () => {
spyOn(formService, 'getRestFieldValues').and.returnValue(Observable.create(observer => {
spyOn(formService, 'getRestFieldValues').and.returnValue(new Observable(observer => {
observer.next([
{ id: '1', name: 'One' },
{ id: '2', name: 'Two' }
@@ -153,7 +153,7 @@ describe('TypeaheadWidgetComponent', () => {
});
it('should not setup initial value due to missing option', () => {
spyOn(formService, 'getRestFieldValues').and.returnValue(Observable.create(observer => {
spyOn(formService, 'getRestFieldValues').and.returnValue(new Observable(observer => {
observer.next([
{ id: '1', name: 'One' },
{ id: '2', name: 'Two' }
@@ -175,7 +175,7 @@ describe('TypeaheadWidgetComponent', () => {
{ id: '2', name: 'Two' }
];
spyOn(formService, 'getRestFieldValues').and.returnValue(Observable.create(observer => {
spyOn(formService, 'getRestFieldValues').and.returnValue(new Observable(observer => {
observer.next(options);
observer.complete();
}));
@@ -185,7 +185,7 @@ describe('TypeaheadWidgetComponent', () => {
});
it('should update form upon options setup', () => {
spyOn(formService, 'getRestFieldValues').and.returnValue(Observable.create(observer => {
spyOn(formService, 'getRestFieldValues').and.returnValue(new Observable(observer => {
observer.next([]);
observer.complete();
}));

View File

@@ -229,14 +229,14 @@ describe('EcmModelService', () => {
it('Should create an ECM type with properties', (done) => {
spyOn(service, 'createEcmType').and.callFake(() => {
return Observable.create(observer => {
return new Observable(observer => {
observer.next();
observer.complete();
});
});
spyOn(service, 'addPropertyToAType').and.callFake(() => {
return Observable.create(observer => {
return new Observable(observer => {
observer.next();
observer.complete();
});
@@ -251,14 +251,14 @@ describe('EcmModelService', () => {
it('Should return the already existing type', (done) => {
spyOn(service, 'searchEcmType').and.callFake(() => {
return Observable.create(observer => {
return new Observable(observer => {
observer.next({test: 'I-EXIST'});
observer.complete();
});
});
spyOn(service, 'createEcmTypeWithProperties').and.callFake(() => {
return Observable.create(observer => {
return new Observable(observer => {
observer.next();
observer.complete();
});
@@ -273,14 +273,14 @@ describe('EcmModelService', () => {
it('Should create an ECM type with properties if the ecm Type is not defined already', (done) => {
spyOn(service, 'searchEcmType').and.callFake(() => {
return Observable.create(observer => {
return new Observable(observer => {
observer.next();
observer.complete();
});
});
spyOn(service, 'createEcmTypeWithProperties').and.callFake(() => {
return Observable.create(observer => {
return new Observable(observer => {
observer.next();
observer.complete();
});
@@ -295,14 +295,14 @@ describe('EcmModelService', () => {
it('Should create an ECM model for the activiti if not defined already', (done) => {
spyOn(service, 'searchActivitiEcmModel').and.callFake(() => {
return Observable.create(observer => {
return new Observable(observer => {
observer.next();
observer.complete();
});
});
spyOn(service, 'createActivitiEcmModel').and.callFake(() => {
return Observable.create(observer => {
return new Observable(observer => {
observer.next();
observer.complete();
});
@@ -317,14 +317,14 @@ describe('EcmModelService', () => {
it('If a model for the activiti is already define has to save the new type', (done) => {
spyOn(service, 'searchActivitiEcmModel').and.callFake(() => {
return Observable.create(observer => {
return new Observable(observer => {
observer.next({test: 'I-EXIST'});
observer.complete();
});
});
spyOn(service, 'saveFomType').and.callFake(() => {
return Observable.create(observer => {
return new Observable(observer => {
observer.next();
observer.complete();
});

View File

@@ -34,7 +34,7 @@ export class EcmModelService {
}
public createEcmTypeForActivitiForm(formName: string, form: FormModel): Observable<any> {
return Observable.create(observer => {
return new Observable(observer => {
this.searchActivitiEcmModel().subscribe(
model => {
if (!model) {
@@ -62,7 +62,7 @@ export class EcmModelService {
}
createActivitiEcmModel(formName: string, form: FormModel): Observable<any> {
return Observable.create(observer => {
return new Observable(observer => {
this.createEcmModel(EcmModelService.MODEL_NAME, EcmModelService.MODEL_NAMESPACE).subscribe(
model => {
this.logService.info('model created', model);
@@ -83,7 +83,7 @@ export class EcmModelService {
}
saveFomType(formName: string, form: FormModel): Observable<any> {
return Observable.create(observer => {
return new Observable(observer => {
this.searchEcmType(formName, EcmModelService.MODEL_NAME).subscribe(
ecmType => {
this.logService.info('custom types', ecmType);
@@ -103,7 +103,7 @@ export class EcmModelService {
}
public createEcmTypeWithProperties(formName: string, form: FormModel): Observable<any> {
return Observable.create(observer => {
return new Observable(observer => {
this.createEcmType(formName, EcmModelService.MODEL_NAME, EcmModelService.TYPE_MODEL).subscribe(
typeCreated => {
this.logService.info('type Created', typeCreated);

View File

@@ -116,7 +116,7 @@ export class FormService {
* @returns The new form
*/
createFormFromANode(formName: string): Observable<any> {
return Observable.create(observer => {
return new Observable(observer => {
this.createForm(formName).subscribe(
form => {
this.ecmModelService.searchEcmType(formName, EcmModelService.MODEL_NAME).subscribe(

View File

@@ -16,6 +16,7 @@
*/
/* tslint:disable:no-input-rename */
/* tslint:disable:rxjs-no-subject-value */
import {
ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter,

View File

@@ -284,7 +284,7 @@ export class AuthenticationService {
}
addTokenToHeader(headersArg?: HttpHeaders): Observable<HttpHeaders> {
return Observable.create(async (observer: Observer<any>) => {
return new Observable((observer: Observer<any>) => {
let headers = headersArg;
if (!headers) {
headers = new HttpHeaders();

View File

@@ -34,7 +34,7 @@ export class RenditionsService {
/** @deprecated */
isRenditionAvailable(nodeId: string, encoding: string): Observable<boolean> {
return Observable.create((observer) => {
return new Observable((observer) => {
this.getRendition(nodeId, encoding).subscribe(
(res) => {
let isAvailable = true;
@@ -54,7 +54,7 @@ export class RenditionsService {
/** @deprecated */
isConversionPossible(nodeId: string, encoding: string): Observable<boolean> {
return Observable.create((observer) => {
return new Observable((observer) => {
this.getRendition(nodeId, encoding).subscribe(
() => {
observer.next(true);

View File

@@ -121,7 +121,7 @@ export class TranslateLoaderService implements TranslateLoader {
})
];
return Observable.create(observer => {
return new Observable(observer => {
if (batch.length > 0) {
forkJoin(batch).subscribe(

View File

@@ -103,7 +103,7 @@ export class AnalyticsService {
} else if (type === 'task' && reportId && processDefinitionId) {
return this.getTasksByProcessDefinitionId(reportId, processDefinitionId);
} else {
return Observable.create(observer => {
return new Observable(observer => {
observer.next(null);
observer.complete();
});
@@ -117,7 +117,7 @@ export class AnalyticsService {
paramOptions.push(new ParameterValueModel({ id: 'Active', name: 'Active' }));
paramOptions.push(new ParameterValueModel({ id: 'Complete', name: 'Complete' }));
return Observable.create(observer => {
return new Observable(observer => {
observer.next(paramOptions);
observer.complete();
});
@@ -132,7 +132,7 @@ export class AnalyticsService {
paramOptions.push(new ParameterValueModel({ id: 'byMonth', name: 'By month' }));
paramOptions.push(new ParameterValueModel({ id: 'byYear', name: 'By year' }));
return Observable.create(observer => {
return new Observable(observer => {
observer.next(paramOptions);
observer.complete();
});
@@ -145,7 +145,7 @@ export class AnalyticsService {
paramOptions.push(new ParameterValueModel({ id: 'totalTime', name: 'Total time spent in a process step' }));
paramOptions.push(new ParameterValueModel({ id: 'avgTime', name: 'Average time spent in a process step' }));
return Observable.create(observer => {
return new Observable(observer => {
observer.next(paramOptions);
observer.complete();
});

View File

@@ -15,7 +15,7 @@
* limitations under the License.
*/
import { Subject } from 'rxjs/Subject';
import { Subject } from 'rxjs';
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
export interface AttachFileWidgetDialogComponentData {

View File

@@ -94,7 +94,7 @@ export class ProcessFilterService {
let allFilter = this.getAllFilterInstance(appId);
let allObservable = this.addProcessFilter(allFilter);
return Observable.create(observer => {
return new Observable(observer => {
forkJoin(
runningObservable,
completedObservable,

View File

@@ -268,7 +268,7 @@ describe('StartTaskComponent', () => {
let attachFormToATask = spyOn(service, 'attachFormToATask').and.returnValue(of());
spyOn(service, 'createNewTask').and.callFake(
function() {
return Observable.create(observer => {
return new Observable(observer => {
observer.next({ id: 'task-id'});
observer.complete();
});

View File

@@ -46,7 +46,7 @@ export class TaskFilterService {
let completedTasksFilter = this.getCompletedTasksFilterInstance(appId);
let completeObservable = this.addFilter(completedTasksFilter);
return Observable.create(observer => {
return new Observable(observer => {
forkJoin(
involvedObservable,
myTaskObservable,

View File

@@ -3,6 +3,9 @@
"../node_modules/codelyzer",
"../tools/tslint-rules/"
],
"extends": [
"rxjs-tslint-rules"
],
"rules": {
"adf-license-banner": [
true,
@@ -169,6 +172,50 @@
"adf-class-name": true,
"adf-prefix-name": true,
"no-input-rename": true,
"no-output-rename": true
"no-output-rename": true,
"rxjs-ban-operators": {
"severity": "error"
},
"rxjs-no-unsafe-takeuntil": {
"severity": "error"
},
"rxjs-no-create": {
"severity": "error"
},
"rxjs-no-ignored-subscribe": {
"severity": "error"
},
"rxjs-no-subject-unsubscribe": {
"severity": "error"
},
"rxjs-no-subject-value": {
"severity": "error"
},
"rxjs-no-unsafe-catch": {
"options": [
{
"observable": "action(s|\\$)?"
}
],
"severity": "error"
},
"rxjs-no-unsafe-switchmap": {
"options": [
{
"disallow": [
"add",
"create",
"delete",
"post",
"put",
"remove",
"set",
"update"
],
"observable": "action(s|\\$)?"
}
],
"severity": "error"
}
}
}

6261
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -94,7 +94,6 @@
"raphael": "2.2.7",
"reflect-metadata": "0.1.10",
"rxjs": "^6.2.2",
"rxjs-compat": "^6.1.0",
"systemjs": "0.19.27",
"web-animations-js": "2.3.1",
"zone.js": "~0.8.26"
@@ -159,6 +158,7 @@
"remark-frontmatter": "^1.2.0",
"rimraf": "^2.6.2",
"run-sequence": "1.2.2",
"rxjs-tslint-rules": "^4.10.0",
"sass-loader": "6.0.5",
"scss-bundle": "2.3.2",
"systemjs-builder": "0.15.34",

View File

@@ -3,6 +3,9 @@
"./node_modules/codelyzer",
"./tools/tslint-rules/"
],
"extends": [
"rxjs-tslint-rules"
],
"rules": {
"adf-license-banner": [
true,
@@ -170,6 +173,50 @@
"adf-class-name": true,
"adf-prefix-name": true,
"no-input-rename": true,
"no-output-rename": true
"no-output-rename": true,
"rxjs-ban-operators": {
"severity": "error"
},
"rxjs-no-unsafe-takeuntil": {
"severity": "error"
},
"rxjs-no-create": {
"severity": "error"
},
"rxjs-no-ignored-subscribe": {
"severity": "error"
},
"rxjs-no-subject-unsubscribe": {
"severity": "error"
},
"rxjs-no-subject-value": {
"severity": "error"
},
"rxjs-no-unsafe-catch": {
"options": [
{
"observable": "action(s|\\$)?"
}
],
"severity": "error"
},
"rxjs-no-unsafe-switchmap": {
"options": [
{
"disallow": [
"add",
"create",
"delete",
"post",
"put",
"remove",
"set",
"update"
],
"observable": "action(s|\\$)?"
}
],
"severity": "error"
}
}
}