diff options
Diffstat (limited to 'client')
60 files changed, 176 insertions, 172 deletions
diff --git a/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts b/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts index 25b303f44..9a9298825 100644 --- a/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts +++ b/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts | |||
@@ -62,7 +62,7 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit { | |||
62 | } | 62 | } |
63 | 63 | ||
64 | ngOnInit () { | 64 | ngOnInit () { |
65 | const formGroupData = { | 65 | const formGroupData: any = { |
66 | instanceName: this.customConfigValidatorsService.INSTANCE_NAME, | 66 | instanceName: this.customConfigValidatorsService.INSTANCE_NAME, |
67 | instanceShortDescription: this.customConfigValidatorsService.INSTANCE_SHORT_DESCRIPTION, | 67 | instanceShortDescription: this.customConfigValidatorsService.INSTANCE_SHORT_DESCRIPTION, |
68 | instanceDescription: null, | 68 | instanceDescription: null, |
@@ -202,7 +202,7 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit { | |||
202 | } | 202 | } |
203 | 203 | ||
204 | private updateForm () { | 204 | private updateForm () { |
205 | const data = { | 205 | const data: any = { |
206 | instanceName: this.customConfig.instance.name, | 206 | instanceName: this.customConfig.instance.name, |
207 | instanceShortDescription: this.customConfig.instance.shortDescription, | 207 | instanceShortDescription: this.customConfig.instance.shortDescription, |
208 | instanceDescription: this.customConfig.instance.description, | 208 | instanceDescription: this.customConfig.instance.description, |
diff --git a/client/src/app/+admin/users/user-edit/user-edit.ts b/client/src/app/+admin/users/user-edit/user-edit.ts index 99ce5804b..a4d696e69 100644 --- a/client/src/app/+admin/users/user-edit/user-edit.ts +++ b/client/src/app/+admin/users/user-edit/user-edit.ts | |||
@@ -7,7 +7,7 @@ export abstract class UserEdit extends FormReactive { | |||
7 | 7 | ||
8 | videoQuotaOptions: { value: string, label: string }[] = [] | 8 | videoQuotaOptions: { value: string, label: string }[] = [] |
9 | videoQuotaDailyOptions: { value: string, label: string }[] = [] | 9 | videoQuotaDailyOptions: { value: string, label: string }[] = [] |
10 | roles = Object.keys(USER_ROLE_LABELS).map(key => ({ value: key.toString(), label: USER_ROLE_LABELS[key] })) | 10 | roles = Object.keys(USER_ROLE_LABELS).map((key: any) => ({ value: key.toString(), label: USER_ROLE_LABELS[key] })) |
11 | 11 | ||
12 | protected abstract serverService: ServerService | 12 | protected abstract serverService: ServerService |
13 | protected abstract configService: ConfigService | 13 | protected abstract configService: ConfigService |
diff --git a/client/src/app/+admin/users/user-list/user-list.component.ts b/client/src/app/+admin/users/user-list/user-list.component.ts index ab2250722..0d7f88d2b 100644 --- a/client/src/app/+admin/users/user-list/user-list.component.ts +++ b/client/src/app/+admin/users/user-list/user-list.component.ts | |||
@@ -45,12 +45,12 @@ export class UserListComponent extends RestTable implements OnInit { | |||
45 | { | 45 | { |
46 | label: this.i18n('Ban'), | 46 | label: this.i18n('Ban'), |
47 | handler: users => this.openBanUserModal(users), | 47 | handler: users => this.openBanUserModal(users), |
48 | isDisplayed: users => users.every(u => u.blocked === false) | 48 | isDisplayed: users => users.every((u: any) => u.blocked === false) |
49 | }, | 49 | }, |
50 | { | 50 | { |
51 | label: this.i18n('Unban'), | 51 | label: this.i18n('Unban'), |
52 | handler: users => this.unbanUsers(users), | 52 | handler: users => this.unbanUsers(users), |
53 | isDisplayed: users => users.every(u => u.blocked === true) | 53 | isDisplayed: users => users.every((u: any) => u.blocked === true) |
54 | } | 54 | } |
55 | ] | 55 | ] |
56 | } | 56 | } |
diff --git a/client/src/app/+my-account/my-account-video-channels/my-account-video-channel-update.component.ts b/client/src/app/+my-account/my-account-video-channels/my-account-video-channel-update.component.ts index 56697030b..f2b8a4e26 100644 --- a/client/src/app/+my-account/my-account-video-channels/my-account-video-channel-update.component.ts +++ b/client/src/app/+my-account/my-account-video-channels/my-account-video-channel-update.component.ts | |||
@@ -17,7 +17,7 @@ import { VideoChannelValidatorsService } from '@app/shared/forms/form-validators | |||
17 | styleUrls: [ './my-account-video-channel-edit.component.scss' ] | 17 | styleUrls: [ './my-account-video-channel-edit.component.scss' ] |
18 | }) | 18 | }) |
19 | export class MyAccountVideoChannelUpdateComponent extends MyAccountVideoChannelEdit implements OnInit, OnDestroy { | 19 | export class MyAccountVideoChannelUpdateComponent extends MyAccountVideoChannelEdit implements OnInit, OnDestroy { |
20 | @ViewChild('avatarfileInput') avatarfileInput | 20 | @ViewChild('avatarfileInput') avatarfileInput: any |
21 | 21 | ||
22 | error: string | 22 | error: string |
23 | 23 | ||
diff --git a/client/src/app/+my-account/my-account-videos/my-account-videos.component.ts b/client/src/app/+my-account/my-account-videos/my-account-videos.component.ts index 7560f0128..52307f09e 100644 --- a/client/src/app/+my-account/my-account-videos/my-account-videos.component.ts +++ b/client/src/app/+my-account/my-account-videos/my-account-videos.component.ts | |||
@@ -66,7 +66,7 @@ export class MyAccountVideosComponent extends AbstractVideoList implements OnIni | |||
66 | } | 66 | } |
67 | 67 | ||
68 | isInSelectionMode () { | 68 | isInSelectionMode () { |
69 | return Object.keys(this.checkedVideos).some(k => this.checkedVideos[ k ] === true) | 69 | return Object.keys(this.checkedVideos).some((k: any) => this.checkedVideos[ k ] === true) |
70 | } | 70 | } |
71 | 71 | ||
72 | getVideosObservable (page: number) { | 72 | getVideosObservable (page: number) { |
@@ -81,7 +81,7 @@ export class MyAccountVideosComponent extends AbstractVideoList implements OnIni | |||
81 | 81 | ||
82 | async deleteSelectedVideos () { | 82 | async deleteSelectedVideos () { |
83 | const toDeleteVideosIds = Object.keys(this.checkedVideos) | 83 | const toDeleteVideosIds = Object.keys(this.checkedVideos) |
84 | .filter(k => this.checkedVideos[ k ] === true) | 84 | .filter((k: any) => this.checkedVideos[ k ] === true) |
85 | .map(k => parseInt(k, 10)) | 85 | .map(k => parseInt(k, 10)) |
86 | 86 | ||
87 | const res = await this.confirmService.confirm( | 87 | const res = await this.confirmService.confirm( |
@@ -168,9 +168,10 @@ export class MyAccountVideosComponent extends AbstractVideoList implements OnIni | |||
168 | } | 168 | } |
169 | 169 | ||
170 | private spliceVideosById (id: number) { | 170 | private spliceVideosById (id: number) { |
171 | for (const key of Object.keys(this.loadedPages)) { | 171 | let key: any |
172 | for (key of Object.keys(this.loadedPages)) { | ||
172 | const videos = this.loadedPages[ key ] | 173 | const videos = this.loadedPages[ key ] |
173 | const index = videos.findIndex(v => v.id === id) | 174 | const index = videos.findIndex((v: any) => v.id === id) |
174 | 175 | ||
175 | if (index !== -1) { | 176 | if (index !== -1) { |
176 | videos.splice(index, 1) | 177 | videos.splice(index, 1) |
diff --git a/client/src/app/+my-account/my-account-videos/video-change-ownership/video-change-ownership.component.ts b/client/src/app/+my-account/my-account-videos/video-change-ownership/video-change-ownership.component.ts index 7437b939a..eb3f9404f 100644 --- a/client/src/app/+my-account/my-account-videos/video-change-ownership/video-change-ownership.component.ts +++ b/client/src/app/+my-account/my-account-videos/video-change-ownership/video-change-ownership.component.ts | |||
@@ -49,7 +49,8 @@ export class VideoChangeOwnershipComponent extends FormReactive implements OnIni | |||
49 | .catch((_) => _) // Called when closing (cancel) the modal without validating, do nothing | 49 | .catch((_) => _) // Called when closing (cancel) the modal without validating, do nothing |
50 | } | 50 | } |
51 | 51 | ||
52 | search (event) { | 52 | // TODO: typing |
53 | search (event: any) { | ||
53 | const query = event.query | 54 | const query = event.query |
54 | this.userService.autocomplete(query) | 55 | this.userService.autocomplete(query) |
55 | .subscribe( | 56 | .subscribe( |
diff --git a/client/src/app/+my-account/shared/actor-avatar-info.component.ts b/client/src/app/+my-account/shared/actor-avatar-info.component.ts index 7b80b1ed4..b4505a7f2 100644 --- a/client/src/app/+my-account/shared/actor-avatar-info.component.ts +++ b/client/src/app/+my-account/shared/actor-avatar-info.component.ts | |||
@@ -10,7 +10,7 @@ import { Account } from '@app/shared/account/account.model' | |||
10 | styleUrls: [ './actor-avatar-info.component.scss' ] | 10 | styleUrls: [ './actor-avatar-info.component.scss' ] |
11 | }) | 11 | }) |
12 | export class ActorAvatarInfoComponent { | 12 | export class ActorAvatarInfoComponent { |
13 | @ViewChild('avatarfileInput') avatarfileInput | 13 | @ViewChild('avatarfileInput') avatarfileInput: any |
14 | 14 | ||
15 | @Input() actor: VideoChannel | Account | 15 | @Input() actor: VideoChannel | Account |
16 | 16 | ||
diff --git a/client/src/app/app.module.ts b/client/src/app/app.module.ts index 34e890b40..371199442 100644 --- a/client/src/app/app.module.ts +++ b/client/src/app/app.module.ts | |||
@@ -69,7 +69,7 @@ export function metaFactory (serverService: ServerService): MetaLoader { | |||
69 | providers: [ | 69 | providers: [ |
70 | { | 70 | { |
71 | provide: TRANSLATIONS, | 71 | provide: TRANSLATIONS, |
72 | useFactory: (locale) => { | 72 | useFactory: (locale: string) => { |
73 | // On dev mode, test localization | 73 | // On dev mode, test localization |
74 | if (isOnDevLocale()) { | 74 | if (isOnDevLocale()) { |
75 | locale = buildFileLocale(getDevLocale()) | 75 | locale = buildFileLocale(getDevLocale()) |
diff --git a/client/src/app/core/auth/auth.service.ts b/client/src/app/core/auth/auth.service.ts index 9c36b946e..5315c8b1d 100644 --- a/client/src/app/core/auth/auth.service.ts +++ b/client/src/app/core/auth/auth.service.ts | |||
@@ -221,7 +221,7 @@ export class AuthService { | |||
221 | } | 221 | } |
222 | 222 | ||
223 | refreshUserInformation () { | 223 | refreshUserInformation () { |
224 | const obj = { | 224 | const obj: any = { |
225 | access_token: this.user.getAccessToken(), | 225 | access_token: this.user.getAccessToken(), |
226 | refresh_token: null, | 226 | refresh_token: null, |
227 | token_type: this.user.getTokenType(), | 227 | token_type: this.user.getTokenType(), |
diff --git a/client/src/app/core/server/server.service.ts b/client/src/app/core/server/server.service.ts index 2f1ef1fc2..1663a052c 100644 --- a/client/src/app/core/server/server.service.ts +++ b/client/src/app/core/server/server.service.ts | |||
@@ -155,7 +155,7 @@ export class ServerService { | |||
155 | .pipe( | 155 | .pipe( |
156 | switchMap(translations => { | 156 | switchMap(translations => { |
157 | return this.http.get(ServerService.BASE_VIDEO_URL + attributeName) | 157 | return this.http.get(ServerService.BASE_VIDEO_URL + attributeName) |
158 | .pipe(map(data => ({ data, translations }))) | 158 | .pipe(map((data: any) => ({ data, translations }))) |
159 | }) | 159 | }) |
160 | ) | 160 | ) |
161 | .subscribe(({ data, translations }) => { | 161 | .subscribe(({ data, translations }) => { |
diff --git a/client/src/app/core/theme/theme.service.ts b/client/src/app/core/theme/theme.service.ts index a6eef0898..50c19ecac 100644 --- a/client/src/app/core/theme/theme.service.ts +++ b/client/src/app/core/theme/theme.service.ts | |||
@@ -5,7 +5,7 @@ import { peertubeLocalStorage } from '@app/shared/misc/peertube-local-storage' | |||
5 | export class ThemeService { | 5 | export class ThemeService { |
6 | private theme = document.querySelector('body') | 6 | private theme = document.querySelector('body') |
7 | private darkTheme = false | 7 | private darkTheme = false |
8 | private previousTheme = {} | 8 | private previousTheme: { [ id: string ]: string } = {} |
9 | 9 | ||
10 | constructor () { | 10 | constructor () { |
11 | // initialise the alternative theme with dark theme colors | 11 | // initialise the alternative theme with dark theme colors |
@@ -33,7 +33,7 @@ export class ThemeService { | |||
33 | } | 33 | } |
34 | } | 34 | } |
35 | 35 | ||
36 | private switchProperty (property, newValue?) { | 36 | private switchProperty (property: string, newValue?: string) { |
37 | const propertyOldvalue = window.getComputedStyle(this.theme).getPropertyValue('--' + property) | 37 | const propertyOldvalue = window.getComputedStyle(this.theme).getPropertyValue('--' + property) |
38 | this.theme.style.setProperty('--' + property, (newValue) ? newValue : this.previousTheme[property]) | 38 | this.theme.style.setProperty('--' + property, (newValue) ? newValue : this.previousTheme[property]) |
39 | this.previousTheme[property] = propertyOldvalue | 39 | this.previousTheme[property] = propertyOldvalue |
diff --git a/client/src/app/menu/menu.component.ts b/client/src/app/menu/menu.component.ts index 95926f5f0..348700c09 100644 --- a/client/src/app/menu/menu.component.ts +++ b/client/src/app/menu/menu.component.ts | |||
@@ -18,7 +18,7 @@ export class MenuComponent implements OnInit { | |||
18 | userHasAdminAccess = false | 18 | userHasAdminAccess = false |
19 | helpVisible = false | 19 | helpVisible = false |
20 | 20 | ||
21 | private routesPerRight = { | 21 | private routesPerRight: any = { |
22 | [UserRight.MANAGE_USERS]: '/admin/users', | 22 | [UserRight.MANAGE_USERS]: '/admin/users', |
23 | [UserRight.MANAGE_SERVER_FOLLOW]: '/admin/friends', | 23 | [UserRight.MANAGE_SERVER_FOLLOW]: '/admin/friends', |
24 | [UserRight.MANAGE_VIDEO_ABUSES]: '/admin/moderation/video-abuses', | 24 | [UserRight.MANAGE_VIDEO_ABUSES]: '/admin/moderation/video-abuses', |
diff --git a/client/src/app/search/advanced-search.model.ts b/client/src/app/search/advanced-search.model.ts index 033fa9bba..1d6c89282 100644 --- a/client/src/app/search/advanced-search.model.ts +++ b/client/src/app/search/advanced-search.model.ts | |||
@@ -53,7 +53,7 @@ export class AdvancedSearch { | |||
53 | } | 53 | } |
54 | 54 | ||
55 | containsValues () { | 55 | containsValues () { |
56 | const obj = this.toUrlObject() | 56 | const obj: any = this.toUrlObject() |
57 | for (const k of Object.keys(obj)) { | 57 | for (const k of Object.keys(obj)) { |
58 | if (k === 'sort') continue // Exception | 58 | if (k === 'sort') continue // Exception |
59 | 59 | ||
@@ -113,7 +113,7 @@ export class AdvancedSearch { | |||
113 | size () { | 113 | size () { |
114 | let acc = 0 | 114 | let acc = 0 |
115 | 115 | ||
116 | const obj = this.toUrlObject() | 116 | const obj: any = this.toUrlObject() |
117 | for (const k of Object.keys(obj)) { | 117 | for (const k of Object.keys(obj)) { |
118 | if (k === 'sort') continue // Exception | 118 | if (k === 'sort') continue // Exception |
119 | 119 | ||
diff --git a/client/src/app/shared/buttons/action-dropdown.component.ts b/client/src/app/shared/buttons/action-dropdown.component.ts index 022ab5ee8..9877f639d 100644 --- a/client/src/app/shared/buttons/action-dropdown.component.ts +++ b/client/src/app/shared/buttons/action-dropdown.component.ts | |||
@@ -2,9 +2,9 @@ import { Component, Input } from '@angular/core' | |||
2 | 2 | ||
3 | export type DropdownAction<T> = { | 3 | export type DropdownAction<T> = { |
4 | label?: string | 4 | label?: string |
5 | handler?: (T) => any | 5 | handler?: (T: any) => any |
6 | linkBuilder?: (T) => (string | number)[] | 6 | linkBuilder?: (T: any) => (string | number)[] |
7 | isDisplayed?: (T) => boolean | 7 | isDisplayed?: (T: any) => boolean |
8 | } | 8 | } |
9 | 9 | ||
10 | @Component({ | 10 | @Component({ |
diff --git a/client/src/app/shared/buttons/button.component.ts b/client/src/app/shared/buttons/button.component.ts index 967cb1409..cccf98bc3 100644 --- a/client/src/app/shared/buttons/button.component.ts +++ b/client/src/app/shared/buttons/button.component.ts | |||
@@ -8,9 +8,9 @@ import { Component, Input } from '@angular/core' | |||
8 | 8 | ||
9 | export class ButtonComponent { | 9 | export class ButtonComponent { |
10 | @Input() label = '' | 10 | @Input() label = '' |
11 | @Input() className = undefined | 11 | @Input() className: any = undefined |
12 | @Input() icon = undefined | 12 | @Input() icon: any = undefined |
13 | @Input() title = undefined | 13 | @Input() title: any = undefined |
14 | 14 | ||
15 | getTitle () { | 15 | getTitle () { |
16 | return this.title || this.label | 16 | return this.title || this.label |
diff --git a/client/src/app/shared/buttons/edit-button.component.ts b/client/src/app/shared/buttons/edit-button.component.ts index 7abaacc26..ea552663a 100644 --- a/client/src/app/shared/buttons/edit-button.component.ts +++ b/client/src/app/shared/buttons/edit-button.component.ts | |||
@@ -8,5 +8,5 @@ import { Component, Input } from '@angular/core' | |||
8 | 8 | ||
9 | export class EditButtonComponent { | 9 | export class EditButtonComponent { |
10 | @Input() label: string | 10 | @Input() label: string |
11 | @Input() routerLink = [] | 11 | @Input() routerLink: any = [] |
12 | } | 12 | } |
diff --git a/client/src/app/shared/misc/help.component.ts b/client/src/app/shared/misc/help.component.ts index ba0452e77..ccce1ccfa 100644 --- a/client/src/app/shared/misc/help.component.ts +++ b/client/src/app/shared/misc/help.component.ts | |||
@@ -60,7 +60,7 @@ export class HelpComponent implements OnInit, OnChanges { | |||
60 | } | 60 | } |
61 | 61 | ||
62 | private createMarkdownList (rules: string[]) { | 62 | private createMarkdownList (rules: string[]) { |
63 | const rulesToText = { | 63 | const rulesToText: any = { |
64 | 'emphasis': this.i18n('Emphasis'), | 64 | 'emphasis': this.i18n('Emphasis'), |
65 | 'link': this.i18n('Links'), | 65 | 'link': this.i18n('Links'), |
66 | 'newline': this.i18n('New lines'), | 66 | 'newline': this.i18n('New lines'), |
diff --git a/client/src/app/shared/misc/peertube-local-storage.ts b/client/src/app/shared/misc/peertube-local-storage.ts index 260f994b6..fb5c45acf 100644 --- a/client/src/app/shared/misc/peertube-local-storage.ts +++ b/client/src/app/shared/misc/peertube-local-storage.ts | |||
@@ -6,7 +6,7 @@ class MemoryStorage { | |||
6 | [key: string]: any | 6 | [key: string]: any |
7 | [index: number]: string | 7 | [index: number]: string |
8 | 8 | ||
9 | getItem (key) { | 9 | getItem (key: any) { |
10 | const stringKey = String(key) | 10 | const stringKey = String(key) |
11 | if (valuesMap.has(key)) { | 11 | if (valuesMap.has(key)) { |
12 | return String(valuesMap.get(stringKey)) | 12 | return String(valuesMap.get(stringKey)) |
@@ -15,11 +15,11 @@ class MemoryStorage { | |||
15 | return null | 15 | return null |
16 | } | 16 | } |
17 | 17 | ||
18 | setItem (key, val) { | 18 | setItem (key: any, val: any) { |
19 | valuesMap.set(String(key), String(val)) | 19 | valuesMap.set(String(key), String(val)) |
20 | } | 20 | } |
21 | 21 | ||
22 | removeItem (key) { | 22 | removeItem (key: any) { |
23 | valuesMap.delete(key) | 23 | valuesMap.delete(key) |
24 | } | 24 | } |
25 | 25 | ||
diff --git a/client/src/app/shared/misc/utils.ts b/client/src/app/shared/misc/utils.ts index c8b7ebc67..78be2e5dd 100644 --- a/client/src/app/shared/misc/utils.ts +++ b/client/src/app/shared/misc/utils.ts | |||
@@ -102,7 +102,7 @@ function objectToFormData (obj: any, form?: FormData, namespace?: string) { | |||
102 | return fd | 102 | return fd |
103 | } | 103 | } |
104 | 104 | ||
105 | function lineFeedToHtml (obj: object, keyToNormalize: string) { | 105 | function lineFeedToHtml (obj: any, keyToNormalize: string) { |
106 | return immutableAssign(obj, { | 106 | return immutableAssign(obj, { |
107 | [keyToNormalize]: obj[keyToNormalize].replace(/\r?\n|\r/g, '<br />') | 107 | [keyToNormalize]: obj[keyToNormalize].replace(/\r?\n|\r/g, '<br />') |
108 | }) | 108 | }) |
diff --git a/client/src/app/shared/overview/videos-overview.model.ts b/client/src/app/shared/overview/videos-overview.model.ts index cf02bdb3d..c8eafc8e8 100644 --- a/client/src/app/shared/overview/videos-overview.model.ts +++ b/client/src/app/shared/overview/videos-overview.model.ts | |||
@@ -16,4 +16,5 @@ export class VideosOverview implements VideosOverviewServer { | |||
16 | tag: string | 16 | tag: string |
17 | videos: Video[] | 17 | videos: Video[] |
18 | }[] | 18 | }[] |
19 | [key: string]: any | ||
19 | } | 20 | } |
diff --git a/client/src/app/shared/rest/rest-extractor.service.ts b/client/src/app/shared/rest/rest-extractor.service.ts index 6492aa66d..934f6c618 100644 --- a/client/src/app/shared/rest/rest-extractor.service.ts +++ b/client/src/app/shared/rest/rest-extractor.service.ts | |||
@@ -33,7 +33,7 @@ export class RestExtractor { | |||
33 | return this.applyToResultListData(result, this.convertDateToHuman, [ fieldsToConvert ]) | 33 | return this.applyToResultListData(result, this.convertDateToHuman, [ fieldsToConvert ]) |
34 | } | 34 | } |
35 | 35 | ||
36 | convertDateToHuman (target: object, fieldsToConvert: string[]) { | 36 | convertDateToHuman (target: any, fieldsToConvert: string[]) { |
37 | fieldsToConvert.forEach(field => target[field] = dateToHuman(target[field])) | 37 | fieldsToConvert.forEach(field => target[field] = dateToHuman(target[field])) |
38 | 38 | ||
39 | return target | 39 | return target |
@@ -83,7 +83,7 @@ export class RestExtractor { | |||
83 | errorMessage = err | 83 | errorMessage = err |
84 | } | 84 | } |
85 | 85 | ||
86 | const errorObj = { | 86 | const errorObj: any = { |
87 | message: errorMessage, | 87 | message: errorMessage, |
88 | status: undefined, | 88 | status: undefined, |
89 | body: undefined | 89 | body: undefined |
diff --git a/client/src/app/shared/rest/rest.service.ts b/client/src/app/shared/rest/rest.service.ts index 4560c2024..41824a18f 100644 --- a/client/src/app/shared/rest/rest.service.ts +++ b/client/src/app/shared/rest/rest.service.ts | |||
@@ -32,7 +32,7 @@ export class RestService { | |||
32 | return newParams | 32 | return newParams |
33 | } | 33 | } |
34 | 34 | ||
35 | addObjectParams (params: HttpParams, object: object) { | 35 | addObjectParams (params: HttpParams, object: any) { |
36 | for (const name of Object.keys(object)) { | 36 | for (const name of Object.keys(object)) { |
37 | const value = object[name] | 37 | const value = object[name] |
38 | if (!value) continue | 38 | if (!value) continue |
diff --git a/client/src/app/shared/users/user.model.ts b/client/src/app/shared/users/user.model.ts index 7c840ffa7..e6b612054 100644 --- a/client/src/app/shared/users/user.model.ts +++ b/client/src/app/shared/users/user.model.ts | |||
@@ -43,6 +43,7 @@ export class User implements UserServerModel { | |||
43 | 43 | ||
44 | blocked: boolean | 44 | blocked: boolean |
45 | blockedReason?: string | 45 | blockedReason?: string |
46 | [key: string]: any | ||
46 | 47 | ||
47 | constructor (hash: UserConstructorHash) { | 48 | constructor (hash: UserConstructorHash) { |
48 | this.id = hash.id | 49 | this.id = hash.id |
diff --git a/client/src/app/shared/video/abstract-video-list.ts b/client/src/app/shared/video/abstract-video-list.ts index 1f43f974c..87814d4ba 100644 --- a/client/src/app/shared/video/abstract-video-list.ts +++ b/client/src/app/shared/video/abstract-video-list.ts | |||
@@ -27,7 +27,7 @@ export abstract class AbstractVideoList implements OnInit, OnDestroy { | |||
27 | sort: VideoSortField = '-publishedAt' | 27 | sort: VideoSortField = '-publishedAt' |
28 | categoryOneOf?: number | 28 | categoryOneOf?: number |
29 | defaultSort: VideoSortField = '-publishedAt' | 29 | defaultSort: VideoSortField = '-publishedAt' |
30 | syndicationItems = [] | 30 | syndicationItems: any = [] |
31 | 31 | ||
32 | loadOnInit = true | 32 | loadOnInit = true |
33 | marginContent = true | 33 | marginContent = true |
@@ -59,7 +59,7 @@ export abstract class AbstractVideoList implements OnInit, OnDestroy { | |||
59 | private resizeSubscription: Subscription | 59 | private resizeSubscription: Subscription |
60 | 60 | ||
61 | abstract getVideosObservable (page: number): Observable<{ videos: Video[], totalVideos: number}> | 61 | abstract getVideosObservable (page: number): Observable<{ videos: Video[], totalVideos: number}> |
62 | abstract generateSyndicationList () | 62 | abstract generateSyndicationList (): any |
63 | 63 | ||
64 | get user () { | 64 | get user () { |
65 | return this.authService.getUser() | 65 | return this.authService.getUser() |
@@ -209,7 +209,7 @@ export abstract class AbstractVideoList implements OnInit, OnDestroy { | |||
209 | } | 209 | } |
210 | 210 | ||
211 | protected setNewRouteParams () { | 211 | protected setNewRouteParams () { |
212 | const paramsObject = this.buildRouteParams() | 212 | const paramsObject: any = this.buildRouteParams() |
213 | 213 | ||
214 | const queryParams = Object.keys(paramsObject).map(p => p + '=' + paramsObject[p]).join('&') | 214 | const queryParams = Object.keys(paramsObject).map(p => p + '=' + paramsObject[p]).join('&') |
215 | this.location.replaceState(this.currentRoute, queryParams) | 215 | this.location.replaceState(this.currentRoute, queryParams) |
diff --git a/client/src/app/shared/video/video-edit.model.ts b/client/src/app/shared/video/video-edit.model.ts index 0046be964..a62277e04 100644 --- a/client/src/app/shared/video/video-edit.model.ts +++ b/client/src/app/shared/video/video-edit.model.ts | |||
@@ -25,6 +25,7 @@ export class VideoEdit implements VideoUpdate { | |||
25 | uuid?: string | 25 | uuid?: string |
26 | id?: number | 26 | id?: number |
27 | scheduleUpdate?: VideoScheduleUpdate | 27 | scheduleUpdate?: VideoScheduleUpdate |
28 | [key: string]: any | ||
28 | 29 | ||
29 | constructor (video?: Video & { tags: string[], commentsEnabled: boolean, support: string, thumbnailUrl: string, previewUrl: string }) { | 30 | constructor (video?: Video & { tags: string[], commentsEnabled: boolean, support: string, thumbnailUrl: string, previewUrl: string }) { |
30 | if (video) { | 31 | if (video) { |
@@ -49,7 +50,7 @@ export class VideoEdit implements VideoUpdate { | |||
49 | } | 50 | } |
50 | } | 51 | } |
51 | 52 | ||
52 | patch (values: Object) { | 53 | patch (values: any) { |
53 | Object.keys(values).forEach((key) => { | 54 | Object.keys(values).forEach((key) => { |
54 | this[ key ] = values[ key ] | 55 | this[ key ] = values[ key ] |
55 | }) | 56 | }) |
diff --git a/client/src/app/shared/video/video-feed.component.ts b/client/src/app/shared/video/video-feed.component.ts index 6922153c0..be6c80c3f 100644 --- a/client/src/app/shared/video/video-feed.component.ts +++ b/client/src/app/shared/video/video-feed.component.ts | |||
@@ -6,5 +6,5 @@ import { Component, Input } from '@angular/core' | |||
6 | templateUrl: './video-feed.component.html' | 6 | templateUrl: './video-feed.component.html' |
7 | }) | 7 | }) |
8 | export class VideoFeedComponent { | 8 | export class VideoFeedComponent { |
9 | @Input() syndicationItems | 9 | @Input() syndicationItems: any |
10 | } | 10 | } |
diff --git a/client/src/app/shared/video/video.service.ts b/client/src/app/shared/video/video.service.ts index 724a0bde9..6283cf84d 100644 --- a/client/src/app/shared/video/video.service.ts +++ b/client/src/app/shared/video/video.service.ts | |||
@@ -276,7 +276,7 @@ export class VideoService implements VideosProvider { | |||
276 | return this.authHttp | 276 | return this.authHttp |
277 | .get(environment.apiUrl + descriptionPath) | 277 | .get(environment.apiUrl + descriptionPath) |
278 | .pipe( | 278 | .pipe( |
279 | map(res => res[ 'description' ]), | 279 | map((res: any) => res[ 'description' ]), |
280 | catchError(err => this.restExtractor.handleError(err)) | 280 | catchError(err => this.restExtractor.handleError(err)) |
281 | ) | 281 | ) |
282 | } | 282 | } |
diff --git a/client/src/app/videos/+video-edit/shared/video-caption-add-modal.component.ts b/client/src/app/videos/+video-edit/shared/video-caption-add-modal.component.ts index 07c33030a..a2c9237ad 100644 --- a/client/src/app/videos/+video-edit/shared/video-caption-add-modal.component.ts +++ b/client/src/app/videos/+video-edit/shared/video-caption-add-modal.component.ts | |||
@@ -19,7 +19,7 @@ export class VideoCaptionAddModalComponent extends FormReactive implements OnIni | |||
19 | 19 | ||
20 | @ViewChild('modal') modal: ElementRef | 20 | @ViewChild('modal') modal: ElementRef |
21 | 21 | ||
22 | videoCaptionLanguages = [] | 22 | videoCaptionLanguages: any = [] |
23 | 23 | ||
24 | private openedModal: NgbModalRef | 24 | private openedModal: NgbModalRef |
25 | private closingModal = false | 25 | private closingModal = false |
@@ -73,7 +73,7 @@ export class VideoCaptionAddModalComponent extends FormReactive implements OnIni | |||
73 | this.hide() | 73 | this.hide() |
74 | 74 | ||
75 | const languageId = this.form.value[ 'language' ] | 75 | const languageId = this.form.value[ 'language' ] |
76 | const languageObject = this.videoCaptionLanguages.find(l => l.id === languageId) | 76 | const languageObject = this.videoCaptionLanguages.find((l: any) => l.id === languageId) |
77 | 77 | ||
78 | this.captionAdded.emit({ | 78 | this.captionAdded.emit({ |
79 | language: languageObject, | 79 | language: languageObject, |
diff --git a/client/src/app/videos/+video-edit/shared/video-edit.component.ts b/client/src/app/videos/+video-edit/shared/video-edit.component.ts index eb9396d70..a56733e57 100644 --- a/client/src/app/videos/+video-edit/shared/video-edit.component.ts +++ b/client/src/app/videos/+video-edit/shared/video-edit.component.ts | |||
@@ -48,7 +48,7 @@ export class VideoEditComponent implements OnInit, OnDestroy { | |||
48 | calendarTimezone: string | 48 | calendarTimezone: string |
49 | calendarDateFormat: string | 49 | calendarDateFormat: string |
50 | 50 | ||
51 | private schedulerInterval | 51 | private schedulerInterval: any |
52 | private firstPatchDone = false | 52 | private firstPatchDone = false |
53 | private initialVideoCaptions: string[] = [] | 53 | private initialVideoCaptions: string[] = [] |
54 | 54 | ||
@@ -77,13 +77,13 @@ export class VideoEditComponent implements OnInit, OnDestroy { | |||
77 | } | 77 | } |
78 | 78 | ||
79 | updateForm () { | 79 | updateForm () { |
80 | const defaultValues = { | 80 | const defaultValues: any = { |
81 | nsfw: 'false', | 81 | nsfw: 'false', |
82 | commentsEnabled: 'true', | 82 | commentsEnabled: 'true', |
83 | waitTranscoding: 'true', | 83 | waitTranscoding: 'true', |
84 | tags: [] | 84 | tags: [] |
85 | } | 85 | } |
86 | const obj = { | 86 | const obj: any = { |
87 | name: this.videoValidatorsService.VIDEO_NAME, | 87 | name: this.videoValidatorsService.VIDEO_NAME, |
88 | privacy: this.videoValidatorsService.VIDEO_PRIVACY, | 88 | privacy: this.videoValidatorsService.VIDEO_PRIVACY, |
89 | channelId: this.videoValidatorsService.VIDEO_CHANNEL, | 89 | channelId: this.videoValidatorsService.VIDEO_CHANNEL, |
diff --git a/client/src/app/videos/+video-edit/video-add-components/video-import-torrent.component.ts b/client/src/app/videos/+video-edit/video-add-components/video-import-torrent.component.ts index 0f7184ff8..9a50e2ab2 100644 --- a/client/src/app/videos/+video-edit/video-add-components/video-import-torrent.component.ts +++ b/client/src/app/videos/+video-edit/video-add-components/video-import-torrent.component.ts | |||
@@ -23,7 +23,7 @@ import { VideoImportService } from '@app/shared/video-import' | |||
23 | }) | 23 | }) |
24 | export class VideoImportTorrentComponent extends VideoSend implements OnInit, CanComponentDeactivate { | 24 | export class VideoImportTorrentComponent extends VideoSend implements OnInit, CanComponentDeactivate { |
25 | @Output() firstStepDone = new EventEmitter<string>() | 25 | @Output() firstStepDone = new EventEmitter<string>() |
26 | @ViewChild('torrentfileInput') torrentfileInput | 26 | @ViewChild('torrentfileInput') torrentfileInput: any |
27 | 27 | ||
28 | videoFileName: string | 28 | videoFileName: string |
29 | magnetUri = '' | 29 | magnetUri = '' |
diff --git a/client/src/app/videos/+video-edit/video-add-components/video-send.ts b/client/src/app/videos/+video-edit/video-add-components/video-send.ts index 6d1bac3f2..cf9d47cbe 100644 --- a/client/src/app/videos/+video-edit/video-add-components/video-send.ts +++ b/client/src/app/videos/+video-edit/video-add-components/video-send.ts | |||
@@ -30,7 +30,7 @@ export abstract class VideoSend extends FormReactive implements OnInit, CanCompo | |||
30 | protected videoService: VideoService | 30 | protected videoService: VideoService |
31 | protected videoCaptionService: VideoCaptionService | 31 | protected videoCaptionService: VideoCaptionService |
32 | 32 | ||
33 | abstract canDeactivate () | 33 | abstract canDeactivate (): any |
34 | 34 | ||
35 | ngOnInit () { | 35 | ngOnInit () { |
36 | this.buildForm({}) | 36 | this.buildForm({}) |
diff --git a/client/src/app/videos/+video-edit/video-add-components/video-upload.component.ts b/client/src/app/videos/+video-edit/video-add-components/video-upload.component.ts index 941dc5441..fa6ee0c23 100644 --- a/client/src/app/videos/+video-edit/video-add-components/video-upload.component.ts +++ b/client/src/app/videos/+video-edit/video-add-components/video-upload.component.ts | |||
@@ -25,7 +25,7 @@ import { VideoCaptionService } from '@app/shared/video-caption' | |||
25 | }) | 25 | }) |
26 | export class VideoUploadComponent extends VideoSend implements OnInit, OnDestroy, CanComponentDeactivate { | 26 | export class VideoUploadComponent extends VideoSend implements OnInit, OnDestroy, CanComponentDeactivate { |
27 | @Output() firstStepDone = new EventEmitter<string>() | 27 | @Output() firstStepDone = new EventEmitter<string>() |
28 | @ViewChild('videofileInput') videofileInput | 28 | @ViewChild('videofileInput') videofileInput: any |
29 | 29 | ||
30 | // So that it can be accessed in the template | 30 | // So that it can be accessed in the template |
31 | readonly SPECIAL_SCHEDULED_PRIVACY = VideoEdit.SPECIAL_SCHEDULED_PRIVACY | 31 | readonly SPECIAL_SCHEDULED_PRIVACY = VideoEdit.SPECIAL_SCHEDULED_PRIVACY |
diff --git a/client/src/app/videos/+video-watch/comment/linkifier.service.ts b/client/src/app/videos/+video-watch/comment/linkifier.service.ts index 3f4072efd..9ad419a69 100644 --- a/client/src/app/videos/+video-watch/comment/linkifier.service.ts +++ b/client/src/app/videos/+video-watch/comment/linkifier.service.ts | |||
@@ -1,7 +1,7 @@ | |||
1 | import { Injectable } from '@angular/core' | 1 | import { Injectable } from '@angular/core' |
2 | import { getAbsoluteAPIUrl } from '@app/shared/misc/utils' | 2 | import { getAbsoluteAPIUrl } from '@app/shared/misc/utils' |
3 | import * as linkify from 'linkifyjs' | 3 | const linkify = require('linkifyjs') |
4 | import * as linkifyHtml from 'linkifyjs/html' | 4 | const linkifyHtml = require('linkifyjs/html') |
5 | 5 | ||
6 | @Injectable() | 6 | @Injectable() |
7 | export class LinkifierService { | 7 | export class LinkifierService { |
@@ -40,7 +40,7 @@ export class LinkifierService { | |||
40 | const TT_UNDERSCORE = TT.UNDERSCORE | 40 | const TT_UNDERSCORE = TT.UNDERSCORE |
41 | const TT_DOT = TT.DOT | 41 | const TT_DOT = TT.DOT |
42 | 42 | ||
43 | function MENTION (value) { | 43 | function MENTION (value: any) { |
44 | this.v = value | 44 | this.v = value |
45 | } | 45 | } |
46 | 46 | ||
diff --git a/client/src/app/videos/+video-watch/comment/video-comment-add.component.ts b/client/src/app/videos/+video-watch/comment/video-comment-add.component.ts index fb7de0e04..ba3c0398e 100644 --- a/client/src/app/videos/+video-watch/comment/video-comment-add.component.ts +++ b/client/src/app/videos/+video-watch/comment/video-comment-add.component.ts | |||
@@ -76,7 +76,7 @@ export class VideoCommentAddComponent extends FormReactive implements OnInit { | |||
76 | this.formValidated() | 76 | this.formValidated() |
77 | } | 77 | } |
78 | 78 | ||
79 | openVisitorModal (event) { | 79 | openVisitorModal (event: any) { |
80 | if (this.user === null) { // we only open it for visitors | 80 | if (this.user === null) { // we only open it for visitors |
81 | // fixing ng-bootstrap ModalService and the "Expression Changed After It Has Been Checked" Error | 81 | // fixing ng-bootstrap ModalService and the "Expression Changed After It Has Been Checked" Error |
82 | event.srcElement.blur() | 82 | event.srcElement.blur() |
diff --git a/client/src/app/videos/+video-watch/comment/video-comment.component.ts b/client/src/app/videos/+video-watch/comment/video-comment.component.ts index e90008de9..982470786 100644 --- a/client/src/app/videos/+video-watch/comment/video-comment.component.ts +++ b/client/src/app/videos/+video-watch/comment/video-comment.component.ts | |||
@@ -26,7 +26,7 @@ export class VideoCommentComponent implements OnInit, OnChanges { | |||
26 | @Output() resetReply = new EventEmitter() | 26 | @Output() resetReply = new EventEmitter() |
27 | 27 | ||
28 | sanitizedCommentHTML = '' | 28 | sanitizedCommentHTML = '' |
29 | newParentComments = [] | 29 | newParentComments: any = [] |
30 | 30 | ||
31 | constructor ( | 31 | constructor ( |
32 | private linkifierService: LinkifierService, | 32 | private linkifierService: LinkifierService, |
diff --git a/client/src/app/videos/+video-watch/comment/video-comment.model.ts b/client/src/app/videos/+video-watch/comment/video-comment.model.ts index fe591811e..824fb24c3 100644 --- a/client/src/app/videos/+video-watch/comment/video-comment.model.ts +++ b/client/src/app/videos/+video-watch/comment/video-comment.model.ts | |||
@@ -14,7 +14,7 @@ export class VideoComment implements VideoCommentServerModel { | |||
14 | account: AccountInterface | 14 | account: AccountInterface |
15 | totalReplies: number | 15 | totalReplies: number |
16 | by: string | 16 | by: string |
17 | accountAvatarUrl | 17 | accountAvatarUrl: string |
18 | 18 | ||
19 | constructor (hash: VideoCommentServerModel) { | 19 | constructor (hash: VideoCommentServerModel) { |
20 | this.id = hash.id | 20 | this.id = hash.id |
diff --git a/client/src/app/videos/+video-watch/comment/video-comment.service.ts b/client/src/app/videos/+video-watch/comment/video-comment.service.ts index 9bcb4b7de..7d9c2d0ad 100644 --- a/client/src/app/videos/+video-watch/comment/video-comment.service.ts +++ b/client/src/app/videos/+video-watch/comment/video-comment.service.ts | |||
@@ -32,7 +32,7 @@ export class VideoCommentService { | |||
32 | 32 | ||
33 | return this.authHttp.post(url, normalizedComment) | 33 | return this.authHttp.post(url, normalizedComment) |
34 | .pipe( | 34 | .pipe( |
35 | map(data => this.extractVideoComment(data['comment'])), | 35 | map((data: any) => this.extractVideoComment(data['comment'])), |
36 | catchError(err => this.restExtractor.handleError(err)) | 36 | catchError(err => this.restExtractor.handleError(err)) |
37 | ) | 37 | ) |
38 | } | 38 | } |
@@ -43,7 +43,7 @@ export class VideoCommentService { | |||
43 | 43 | ||
44 | return this.authHttp.post(url, normalizedComment) | 44 | return this.authHttp.post(url, normalizedComment) |
45 | .pipe( | 45 | .pipe( |
46 | map(data => this.extractVideoComment(data[ 'comment' ])), | 46 | map((data: any) => this.extractVideoComment(data[ 'comment' ])), |
47 | catchError(err => this.restExtractor.handleError(err)) | 47 | catchError(err => this.restExtractor.handleError(err)) |
48 | ) | 48 | ) |
49 | } | 49 | } |
diff --git a/client/src/app/videos/+video-watch/comment/video-comments.component.ts b/client/src/app/videos/+video-watch/comment/video-comments.component.ts index c864d82b7..4c1bdf2dd 100644 --- a/client/src/app/videos/+video-watch/comment/video-comments.component.ts +++ b/client/src/app/videos/+video-watch/comment/video-comments.component.ts | |||
@@ -35,7 +35,7 @@ export class VideoCommentsComponent implements OnInit, OnChanges, OnDestroy { | |||
35 | threadComments: { [ id: number ]: VideoCommentThreadTree } = {} | 35 | threadComments: { [ id: number ]: VideoCommentThreadTree } = {} |
36 | threadLoading: { [ id: number ]: boolean } = {} | 36 | threadLoading: { [ id: number ]: boolean } = {} |
37 | 37 | ||
38 | syndicationItems = [] | 38 | syndicationItems: any = [] |
39 | 39 | ||
40 | private sub: Subscription | 40 | private sub: Subscription |
41 | 41 | ||
diff --git a/client/src/app/videos/+video-watch/video-watch.component.ts b/client/src/app/videos/+video-watch/video-watch.component.ts index c5deddf05..ed5e723c9 100644 --- a/client/src/app/videos/+video-watch/video-watch.component.ts +++ b/client/src/app/videos/+video-watch/video-watch.component.ts | |||
@@ -7,7 +7,7 @@ import { VideoSupportComponent } from '@app/videos/+video-watch/modal/video-supp | |||
7 | import { MetaService } from '@ngx-meta/core' | 7 | import { MetaService } from '@ngx-meta/core' |
8 | import { NotificationsService } from 'angular2-notifications' | 8 | import { NotificationsService } from 'angular2-notifications' |
9 | import { forkJoin, Subscription } from 'rxjs' | 9 | import { forkJoin, Subscription } from 'rxjs' |
10 | import * as videojs from 'video.js' | 10 | const videojs = require('video.js') |
11 | import 'videojs-hotkeys' | 11 | import 'videojs-hotkeys' |
12 | import { Hotkey, HotkeysService } from 'angular2-hotkeys' | 12 | import { Hotkey, HotkeysService } from 'angular2-hotkeys' |
13 | import * as WebTorrent from 'webtorrent' | 13 | import * as WebTorrent from 'webtorrent' |
@@ -45,7 +45,7 @@ export class VideoWatchComponent implements OnInit, OnDestroy { | |||
45 | @ViewChild('videoBlacklistModal') videoBlacklistModal: VideoBlacklistComponent | 45 | @ViewChild('videoBlacklistModal') videoBlacklistModal: VideoBlacklistComponent |
46 | @ViewChild('subscribeButton') subscribeButton: SubscribeButtonComponent | 46 | @ViewChild('subscribeButton') subscribeButton: SubscribeButtonComponent |
47 | 47 | ||
48 | player: videojs.Player | 48 | player: any |
49 | playerElement: HTMLVideoElement | 49 | playerElement: HTMLVideoElement |
50 | userRating: UserVideoRateType = null | 50 | userRating: UserVideoRateType = null |
51 | video: VideoDetails = null | 51 | video: VideoDetails = null |
@@ -435,7 +435,7 @@ export class VideoWatchComponent implements OnInit, OnDestroy { | |||
435 | this.zone.runOutsideAngular(async () => { | 435 | this.zone.runOutsideAngular(async () => { |
436 | videojs(this.playerElement, videojsOptions, function () { | 436 | videojs(this.playerElement, videojsOptions, function () { |
437 | self.player = this | 437 | self.player = this |
438 | this.on('customError', (event, data) => self.handleError(data.err)) | 438 | this.on('customError', (data: any) => self.handleError(data.err)) |
439 | 439 | ||
440 | addContextMenu(self.player, self.video.embedUrl) | 440 | addContextMenu(self.player, self.video.embedUrl) |
441 | }) | 441 | }) |
@@ -448,7 +448,7 @@ export class VideoWatchComponent implements OnInit, OnDestroy { | |||
448 | this.checkUserRating() | 448 | this.checkUserRating() |
449 | } | 449 | } |
450 | 450 | ||
451 | private setRating (nextRating) { | 451 | private setRating (nextRating: string) { |
452 | let method | 452 | let method |
453 | switch (nextRating) { | 453 | switch (nextRating) { |
454 | case 'like': | 454 | case 'like': |
@@ -466,11 +466,11 @@ export class VideoWatchComponent implements OnInit, OnDestroy { | |||
466 | .subscribe( | 466 | .subscribe( |
467 | () => { | 467 | () => { |
468 | // Update the video like attribute | 468 | // Update the video like attribute |
469 | this.updateVideoRating(this.userRating, nextRating) | 469 | this.updateVideoRating(this.userRating, nextRating as VideoRateType) |
470 | this.userRating = nextRating | 470 | this.userRating = nextRating as UserVideoRateType |
471 | }, | 471 | }, |
472 | 472 | ||
473 | err => this.notificationsService.error(this.i18n('Error'), err.message) | 473 | (err: any) => this.notificationsService.error(this.i18n('Error'), err.message) |
474 | ) | 474 | ) |
475 | } | 475 | } |
476 | 476 | ||
diff --git a/client/src/assets/player/peertube-chunk-store.ts b/client/src/assets/player/peertube-chunk-store.ts index 767e46821..ac3f9e654 100644 --- a/client/src/assets/player/peertube-chunk-store.ts +++ b/client/src/assets/player/peertube-chunk-store.ts | |||
@@ -40,15 +40,15 @@ export class PeertubeChunkStore extends EventEmitter { | |||
40 | // If the store is full | 40 | // If the store is full |
41 | private memoryChunks: { [ id: number ]: Buffer | true } = {} | 41 | private memoryChunks: { [ id: number ]: Buffer | true } = {} |
42 | private databaseName: string | 42 | private databaseName: string |
43 | private putBulkTimeout | 43 | private putBulkTimeout: any |
44 | private cleanerInterval | 44 | private cleanerInterval: any |
45 | private db: ChunkDatabase | 45 | private db: ChunkDatabase |
46 | private expirationDB: ExpirationDatabase | 46 | private expirationDB: ExpirationDatabase |
47 | private readonly length: number | 47 | private readonly length: number |
48 | private readonly lastChunkLength: number | 48 | private readonly lastChunkLength: number |
49 | private readonly lastChunkIndex: number | 49 | private readonly lastChunkIndex: number |
50 | 50 | ||
51 | constructor (chunkLength: number, opts) { | 51 | constructor (chunkLength: number, opts: any) { |
52 | super() | 52 | super() |
53 | 53 | ||
54 | this.databaseName = 'webtorrent-chunks-' | 54 | this.databaseName = 'webtorrent-chunks-' |
@@ -113,13 +113,13 @@ export class PeertubeChunkStore extends EventEmitter { | |||
113 | }, PeertubeChunkStore.BUFFERING_PUT_MS) | 113 | }, PeertubeChunkStore.BUFFERING_PUT_MS) |
114 | } | 114 | } |
115 | 115 | ||
116 | get (index: number, opts, cb) { | 116 | get (index: number, opts: any, cb: any): any { |
117 | if (typeof opts === 'function') return this.get(index, null, opts) | 117 | if (typeof opts === 'function') return this.get(index, null, opts) |
118 | 118 | ||
119 | // IndexDB could be slow, use our memory index first | 119 | // IndexDB could be slow, use our memory index first |
120 | const memoryChunk = this.memoryChunks[index] | 120 | const memoryChunk = this.memoryChunks[index] |
121 | if (memoryChunk === undefined) { | 121 | if (memoryChunk === undefined) { |
122 | const err = new Error('Chunk not found') | 122 | const err = new Error('Chunk not found') as any |
123 | err['notFound'] = true | 123 | err['notFound'] = true |
124 | 124 | ||
125 | return process.nextTick(() => cb(err)) | 125 | return process.nextTick(() => cb(err)) |
@@ -146,11 +146,11 @@ export class PeertubeChunkStore extends EventEmitter { | |||
146 | }) | 146 | }) |
147 | } | 147 | } |
148 | 148 | ||
149 | close (db) { | 149 | close (db: any) { |
150 | return this.destroy(db) | 150 | return this.destroy(db) |
151 | } | 151 | } |
152 | 152 | ||
153 | async destroy (cb) { | 153 | async destroy (cb: any) { |
154 | try { | 154 | try { |
155 | if (this.pendingPut) { | 155 | if (this.pendingPut) { |
156 | clearTimeout(this.putBulkTimeout) | 156 | clearTimeout(this.putBulkTimeout) |
@@ -225,7 +225,7 @@ export class PeertubeChunkStore extends EventEmitter { | |||
225 | } | 225 | } |
226 | } | 226 | } |
227 | 227 | ||
228 | private nextTick (cb, err, val?) { | 228 | private nextTick (cb: any, err: Error, val?: any) { |
229 | process.nextTick(() => cb(err, val), undefined) | 229 | process.nextTick(() => cb(err, val), undefined) |
230 | } | 230 | } |
231 | } | 231 | } |
diff --git a/client/src/assets/player/peertube-link-button.ts b/client/src/assets/player/peertube-link-button.ts index 715207bc0..b03952b47 100644 --- a/client/src/assets/player/peertube-link-button.ts +++ b/client/src/assets/player/peertube-link-button.ts | |||
@@ -1,11 +1,10 @@ | |||
1 | import * as videojs from 'video.js' | ||
2 | import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' | 1 | import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' |
3 | import { buildVideoLink } from './utils' | 2 | import { buildVideoLink } from './utils' |
4 | 3 | ||
5 | const Button: VideoJSComponentInterface = videojsUntyped.getComponent('Button') | 4 | const Button: VideoJSComponentInterface = videojsUntyped.getComponent('Button') |
6 | class PeerTubeLinkButton extends Button { | 5 | class PeerTubeLinkButton extends Button { |
7 | 6 | ||
8 | constructor (player: videojs.Player, options) { | 7 | constructor (player: any, options: any) { |
9 | super(player, options) | 8 | super(player, options) |
10 | } | 9 | } |
11 | 10 | ||
diff --git a/client/src/assets/player/peertube-load-progress-bar.ts b/client/src/assets/player/peertube-load-progress-bar.ts index aedc641e4..ee8a6cd81 100644 --- a/client/src/assets/player/peertube-load-progress-bar.ts +++ b/client/src/assets/player/peertube-load-progress-bar.ts | |||
@@ -4,7 +4,7 @@ const Component: VideoJSComponentInterface = videojsUntyped.getComponent('Compon | |||
4 | 4 | ||
5 | class PeerTubeLoadProgressBar extends Component { | 5 | class PeerTubeLoadProgressBar extends Component { |
6 | 6 | ||
7 | constructor (player, options) { | 7 | constructor (player: any, options: any) { |
8 | super(player, options) | 8 | super(player, options) |
9 | this.partEls_ = [] | 9 | this.partEls_ = [] |
10 | this.on(player, 'progress', this.update) | 10 | this.on(player, 'progress', this.update) |
diff --git a/client/src/assets/player/peertube-player.ts b/client/src/assets/player/peertube-player.ts index 792662b6c..ef9e7fcc0 100644 --- a/client/src/assets/player/peertube-player.ts +++ b/client/src/assets/player/peertube-player.ts | |||
@@ -75,12 +75,12 @@ function getVideojsOptions (options: { | |||
75 | enableVolumeScroll: false, | 75 | enableVolumeScroll: false, |
76 | enableModifiersForNumbers: false, | 76 | enableModifiersForNumbers: false, |
77 | 77 | ||
78 | fullscreenKey: function (event) { | 78 | fullscreenKey: function (event: any) { |
79 | // fullscreen with the f key or Ctrl+Enter | 79 | // fullscreen with the f key or Ctrl+Enter |
80 | return event.key === 'f' || (event.ctrlKey && event.key === 'Enter') | 80 | return event.key === 'f' || (event.ctrlKey && event.key === 'Enter') |
81 | }, | 81 | }, |
82 | 82 | ||
83 | seekStep: function (event) { | 83 | seekStep: function (event: any) { |
84 | // mimic VLC seek behavior, and default to 5 (original value is 5). | 84 | // mimic VLC seek behavior, and default to 5 (original value is 5). |
85 | if (event.ctrlKey && event.altKey) { | 85 | if (event.ctrlKey && event.altKey) { |
86 | return 5 * 60 | 86 | return 5 * 60 |
@@ -95,26 +95,26 @@ function getVideojsOptions (options: { | |||
95 | 95 | ||
96 | customKeys: { | 96 | customKeys: { |
97 | increasePlaybackRateKey: { | 97 | increasePlaybackRateKey: { |
98 | key: function (event) { | 98 | key: function (event: any) { |
99 | return event.key === '>' | 99 | return event.key === '>' |
100 | }, | 100 | }, |
101 | handler: function (player) { | 101 | handler: function (player: any) { |
102 | player.playbackRate((player.playbackRate() + 0.1).toFixed(2)) | 102 | player.playbackRate((player.playbackRate() + 0.1).toFixed(2)) |
103 | } | 103 | } |
104 | }, | 104 | }, |
105 | decreasePlaybackRateKey: { | 105 | decreasePlaybackRateKey: { |
106 | key: function (event) { | 106 | key: function (event: any) { |
107 | return event.key === '<' | 107 | return event.key === '<' |
108 | }, | 108 | }, |
109 | handler: function (player) { | 109 | handler: function (player: any) { |
110 | player.playbackRate((player.playbackRate() - 0.1).toFixed(2)) | 110 | player.playbackRate((player.playbackRate() - 0.1).toFixed(2)) |
111 | } | 111 | } |
112 | }, | 112 | }, |
113 | frameByFrame: { | 113 | frameByFrame: { |
114 | key: function (event) { | 114 | key: function (event: any) { |
115 | return event.key === '.' | 115 | return event.key === '.' |
116 | }, | 116 | }, |
117 | handler: function (player, options, event) { | 117 | handler: function (player: any) { |
118 | player.pause() | 118 | player.pause() |
119 | // Calculate movement distance (assuming 30 fps) | 119 | // Calculate movement distance (assuming 30 fps) |
120 | const dist = 1 / 30 | 120 | const dist = 1 / 30 |
diff --git a/client/src/assets/player/peertube-videojs-plugin.ts b/client/src/assets/player/peertube-videojs-plugin.ts index 5cebab6d9..03def186e 100644 --- a/client/src/assets/player/peertube-videojs-plugin.ts +++ b/client/src/assets/player/peertube-videojs-plugin.ts | |||
@@ -1,11 +1,11 @@ | |||
1 | import * as videojs from 'video.js' | 1 | const videojs = require('video.js') |
2 | import * as WebTorrent from 'webtorrent' | 2 | import * as WebTorrent from 'webtorrent' |
3 | import { VideoFile } from '../../../../shared/models/videos/video.model' | 3 | import { VideoFile } from '../../../../shared/models/videos/video.model' |
4 | import { renderVideo } from './video-renderer' | 4 | import { renderVideo } from './video-renderer' |
5 | import './settings-menu-button' | 5 | import './settings-menu-button' |
6 | import { PeertubePluginOptions, UserWatching, VideoJSCaption, VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' | 6 | import { PeertubePluginOptions, UserWatching, VideoJSCaption, VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' |
7 | import { isMobile, timeToInt, videoFileMaxByResolution, videoFileMinByResolution } from './utils' | 7 | import { isMobile, timeToInt, videoFileMaxByResolution, videoFileMinByResolution } from './utils' |
8 | import * as CacheChunkStore from 'cache-chunk-store' | 8 | const CacheChunkStore = require('cache-chunk-store') |
9 | import { PeertubeChunkStore } from './peertube-chunk-store' | 9 | import { PeertubeChunkStore } from './peertube-chunk-store' |
10 | import { | 10 | import { |
11 | getAverageBandwidthInStore, | 11 | getAverageBandwidthInStore, |
@@ -61,11 +61,11 @@ class PeerTubePlugin extends Plugin { | |||
61 | 61 | ||
62 | private player: any | 62 | private player: any |
63 | private currentVideoFile: VideoFile | 63 | private currentVideoFile: VideoFile |
64 | private torrent: WebTorrent.Torrent | 64 | private torrent: any |
65 | private videoCaptions: VideoJSCaption[] | 65 | private videoCaptions: VideoJSCaption[] |
66 | 66 | ||
67 | private renderer | 67 | private renderer: any |
68 | private fakeRenderer | 68 | private fakeRenderer: any |
69 | private destoyingFakeRenderer = false | 69 | private destoyingFakeRenderer = false |
70 | 70 | ||
71 | private autoResolution = true | 71 | private autoResolution = true |
@@ -73,17 +73,17 @@ class PeerTubePlugin extends Plugin { | |||
73 | private isAutoResolutionObservation = false | 73 | private isAutoResolutionObservation = false |
74 | private playerRefusedP2P = false | 74 | private playerRefusedP2P = false |
75 | 75 | ||
76 | private videoViewInterval | 76 | private videoViewInterval: any |
77 | private torrentInfoInterval | 77 | private torrentInfoInterval: any |
78 | private autoQualityInterval | 78 | private autoQualityInterval: any |
79 | private userWatchingVideoInterval | 79 | private userWatchingVideoInterval: any |
80 | private addTorrentDelay | 80 | private addTorrentDelay: any |
81 | private qualityObservationTimer | 81 | private qualityObservationTimer: any |
82 | private runAutoQualitySchedulerTimer | 82 | private runAutoQualitySchedulerTimer: any |
83 | 83 | ||
84 | private downloadSpeeds: number[] = [] | 84 | private downloadSpeeds: number[] = [] |
85 | 85 | ||
86 | constructor (player: videojs.Player, options: PeertubePluginOptions) { | 86 | constructor (player: any, options: PeertubePluginOptions) { |
87 | super(player, options) | 87 | super(player, options) |
88 | 88 | ||
89 | // Disable auto play on iOS | 89 | // Disable auto play on iOS |
@@ -273,7 +273,7 @@ class PeerTubePlugin extends Plugin { | |||
273 | 273 | ||
274 | const oldTorrent = this.torrent | 274 | const oldTorrent = this.torrent |
275 | const torrentOptions = { | 275 | const torrentOptions = { |
276 | store: (chunkLength, storeOpts) => new CacheChunkStore(new PeertubeChunkStore(chunkLength, storeOpts), { | 276 | store: (chunkLength: any, storeOpts: any) => new CacheChunkStore(new PeertubeChunkStore(chunkLength, storeOpts), { |
277 | max: 100 | 277 | max: 100 |
278 | }) | 278 | }) |
279 | } | 279 | } |
@@ -304,7 +304,7 @@ class PeerTubePlugin extends Plugin { | |||
304 | 304 | ||
305 | if (err) return this.fallbackToHttp(options, done) | 305 | if (err) return this.fallbackToHttp(options, done) |
306 | 306 | ||
307 | return this.tryToPlay(err => { | 307 | return this.tryToPlay((err: Error) => { |
308 | if (err) return done(err) | 308 | if (err) return done(err) |
309 | 309 | ||
310 | if (options.seek) this.seek(options.seek) | 310 | if (options.seek) this.seek(options.seek) |
@@ -316,7 +316,7 @@ class PeerTubePlugin extends Plugin { | |||
316 | }, options.delay || 0) | 316 | }, options.delay || 0) |
317 | }) | 317 | }) |
318 | 318 | ||
319 | this.torrent.on('error', err => console.error(err)) | 319 | this.torrent.on('error', (err: any) => console.error(err)) |
320 | 320 | ||
321 | this.torrent.on('warning', (err: any) => { | 321 | this.torrent.on('warning', (err: any) => { |
322 | // We don't support HTTP tracker but we don't care -> we use the web socket tracker | 322 | // We don't support HTTP tracker but we don't care -> we use the web socket tracker |
@@ -350,7 +350,7 @@ class PeerTubePlugin extends Plugin { | |||
350 | const playPromise = this.player.play() | 350 | const playPromise = this.player.play() |
351 | if (playPromise !== undefined) { | 351 | if (playPromise !== undefined) { |
352 | return playPromise.then(done) | 352 | return playPromise.then(done) |
353 | .catch(err => { | 353 | .catch((err: Error) => { |
354 | if (err.message.indexOf('The play() request was interrupted by a call to pause()') !== -1) { | 354 | if (err.message.indexOf('The play() request was interrupted by a call to pause()') !== -1) { |
355 | return | 355 | return |
356 | } | 356 | } |
@@ -627,7 +627,7 @@ class PeerTubePlugin extends Plugin { | |||
627 | this.player.options_.inactivityTimeout = saveInactivityTimeout | 627 | this.player.options_.inactivityTimeout = saveInactivityTimeout |
628 | } | 628 | } |
629 | 629 | ||
630 | const settingsDialog = this.player.children_.find(c => c.name_ === 'SettingsDialog') | 630 | const settingsDialog = this.player.children_.find((c: any) => c.name_ === 'SettingsDialog') |
631 | 631 | ||
632 | this.player.controlBar.on('mouseenter', () => disableInactivity()) | 632 | this.player.controlBar.on('mouseenter', () => disableInactivity()) |
633 | settingsDialog.on('mouseenter', () => disableInactivity()) | 633 | settingsDialog.on('mouseenter', () => disableInactivity()) |
@@ -641,7 +641,7 @@ class PeerTubePlugin extends Plugin { | |||
641 | return this.videoFiles[Math.floor(this.videoFiles.length / 2)] | 641 | return this.videoFiles[Math.floor(this.videoFiles.length / 2)] |
642 | } | 642 | } |
643 | 643 | ||
644 | private stopTorrent (torrent: WebTorrent.Torrent) { | 644 | private stopTorrent (torrent: any) { |
645 | torrent.pause() | 645 | torrent.pause() |
646 | // Pause does not remove actual peers (in particular the webseed peer) | 646 | // Pause does not remove actual peers (in particular the webseed peer) |
647 | torrent.removePeer(torrent[ 'ws' ]) | 647 | torrent.removePeer(torrent[ 'ws' ]) |
@@ -703,7 +703,7 @@ class PeerTubePlugin extends Plugin { | |||
703 | const percent = time / this.player_.duration() | 703 | const percent = time / this.player_.duration() |
704 | return percent >= 1 ? 1 : percent | 704 | return percent >= 1 ? 1 : percent |
705 | } | 705 | } |
706 | SeekBar.prototype.handleMouseMove = function handleMouseMove (event) { | 706 | SeekBar.prototype.handleMouseMove = function handleMouseMove (event: any) { |
707 | let newTime = this.calculateDistance(event) * this.player_.duration() | 707 | let newTime = this.calculateDistance(event) * this.player_.duration() |
708 | if (newTime === this.player_.duration()) { | 708 | if (newTime === this.player_.duration()) { |
709 | newTime = newTime - 0.1 | 709 | newTime = newTime - 0.1 |
diff --git a/client/src/assets/player/peertube-videojs-typings.ts b/client/src/assets/player/peertube-videojs-typings.ts index b117007af..98a33077d 100644 --- a/client/src/assets/player/peertube-videojs-typings.ts +++ b/client/src/assets/player/peertube-videojs-typings.ts | |||
@@ -1,4 +1,4 @@ | |||
1 | import * as videojs from 'video.js' | 1 | const videojs = require('video.js') |
2 | import { VideoFile } from '../../../../shared/models/videos/video.model' | 2 | import { VideoFile } from '../../../../shared/models/videos/video.model' |
3 | import { PeerTubePlugin } from './peertube-videojs-plugin' | 3 | import { PeerTubePlugin } from './peertube-videojs-plugin' |
4 | 4 | ||
@@ -11,9 +11,9 @@ declare namespace videojs { | |||
11 | interface VideoJSComponentInterface { | 11 | interface VideoJSComponentInterface { |
12 | _player: videojs.Player | 12 | _player: videojs.Player |
13 | 13 | ||
14 | new (player: videojs.Player, options?: any) | 14 | new (player: videojs.Player, options?: any): any |
15 | 15 | ||
16 | registerComponent (name: string, obj: any) | 16 | registerComponent (name: string, obj: any): any |
17 | } | 17 | } |
18 | 18 | ||
19 | type VideoJSCaption = { | 19 | type VideoJSCaption = { |
diff --git a/client/src/assets/player/resolution-menu-button.ts b/client/src/assets/player/resolution-menu-button.ts index d53a24151..91818efc9 100644 --- a/client/src/assets/player/resolution-menu-button.ts +++ b/client/src/assets/player/resolution-menu-button.ts | |||
@@ -1,4 +1,3 @@ | |||
1 | import * as videojs from 'video.js' | ||
2 | import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' | 1 | import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' |
3 | import { ResolutionMenuItem } from './resolution-menu-item' | 2 | import { ResolutionMenuItem } from './resolution-menu-item' |
4 | 3 | ||
@@ -7,7 +6,7 @@ const MenuButton: VideoJSComponentInterface = videojsUntyped.getComponent('MenuB | |||
7 | class ResolutionMenuButton extends MenuButton { | 6 | class ResolutionMenuButton extends MenuButton { |
8 | label: HTMLElement | 7 | label: HTMLElement |
9 | 8 | ||
10 | constructor (player: videojs.Player, options) { | 9 | constructor (player: any, options: any) { |
11 | super(player, options) | 10 | super(player, options) |
12 | this.player = player | 11 | this.player = player |
13 | 12 | ||
diff --git a/client/src/assets/player/resolution-menu-item.ts b/client/src/assets/player/resolution-menu-item.ts index 0ab0f53b5..afe490abb 100644 --- a/client/src/assets/player/resolution-menu-item.ts +++ b/client/src/assets/player/resolution-menu-item.ts | |||
@@ -1,10 +1,9 @@ | |||
1 | import * as videojs from 'video.js' | ||
2 | import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' | 1 | import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' |
3 | 2 | ||
4 | const MenuItem: VideoJSComponentInterface = videojsUntyped.getComponent('MenuItem') | 3 | const MenuItem: VideoJSComponentInterface = videojsUntyped.getComponent('MenuItem') |
5 | class ResolutionMenuItem extends MenuItem { | 4 | class ResolutionMenuItem extends MenuItem { |
6 | 5 | ||
7 | constructor (player: videojs.Player, options) { | 6 | constructor (player: any, options: any) { |
8 | const currentResolutionId = player.peertube().getCurrentResolutionId() | 7 | const currentResolutionId = player.peertube().getCurrentResolutionId() |
9 | options.selectable = true | 8 | options.selectable = true |
10 | options.selected = options.id === currentResolutionId | 9 | options.selected = options.id === currentResolutionId |
@@ -18,7 +17,7 @@ class ResolutionMenuItem extends MenuItem { | |||
18 | player.peertube().on('autoResolutionUpdate', () => this.updateSelection()) | 17 | player.peertube().on('autoResolutionUpdate', () => this.updateSelection()) |
19 | } | 18 | } |
20 | 19 | ||
21 | handleClick (event) { | 20 | handleClick (event: any) { |
22 | if (this.id === -1 && this.player_.peertube().isAutoResolutionForbidden()) return | 21 | if (this.id === -1 && this.player_.peertube().isAutoResolutionForbidden()) return |
23 | 22 | ||
24 | super.handleClick(event) | 23 | super.handleClick(event) |
diff --git a/client/src/assets/player/settings-menu-button.ts b/client/src/assets/player/settings-menu-button.ts index b51c52506..f0ccb5862 100644 --- a/client/src/assets/player/settings-menu-button.ts +++ b/client/src/assets/player/settings-menu-button.ts | |||
@@ -1,7 +1,7 @@ | |||
1 | // Author: Yanko Shterev | 1 | // Author: Yanko Shterev |
2 | // Thanks https://github.com/yshterev/videojs-settings-menu | 2 | // Thanks https://github.com/yshterev/videojs-settings-menu |
3 | 3 | ||
4 | import * as videojs from 'video.js' | 4 | const videojs = require('video.js') |
5 | import { SettingsMenuItem } from './settings-menu-item' | 5 | import { SettingsMenuItem } from './settings-menu-item' |
6 | import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' | 6 | import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' |
7 | import { toTitleCase } from './utils' | 7 | import { toTitleCase } from './utils' |
@@ -11,7 +11,7 @@ const Menu: VideoJSComponentInterface = videojsUntyped.getComponent('Menu') | |||
11 | const Component: VideoJSComponentInterface = videojsUntyped.getComponent('Component') | 11 | const Component: VideoJSComponentInterface = videojsUntyped.getComponent('Component') |
12 | 12 | ||
13 | class SettingsButton extends Button { | 13 | class SettingsButton extends Button { |
14 | constructor (player: videojs.Player, options) { | 14 | constructor (player: any, options: any) { |
15 | super(player, options) | 15 | super(player, options) |
16 | 16 | ||
17 | this.playerComponent = player | 17 | this.playerComponent = player |
@@ -48,7 +48,7 @@ class SettingsButton extends Button { | |||
48 | } | 48 | } |
49 | } | 49 | } |
50 | 50 | ||
51 | onDisposeSettingsItem (event, name: string) { | 51 | onDisposeSettingsItem (name: string) { |
52 | if (name === undefined) { | 52 | if (name === undefined) { |
53 | let children = this.menu.children() | 53 | let children = this.menu.children() |
54 | 54 | ||
@@ -74,7 +74,7 @@ class SettingsButton extends Button { | |||
74 | } | 74 | } |
75 | } | 75 | } |
76 | 76 | ||
77 | onAddSettingsItem (event, data) { | 77 | onAddSettingsItem (data: any) { |
78 | const [ entry, options ] = data | 78 | const [ entry, options ] = data |
79 | 79 | ||
80 | this.addMenuItem(entry, options) | 80 | this.addMenuItem(entry, options) |
@@ -120,7 +120,7 @@ class SettingsButton extends Button { | |||
120 | this.resetChildren() | 120 | this.resetChildren() |
121 | } | 121 | } |
122 | 122 | ||
123 | getComponentSize (element) { | 123 | getComponentSize (element: any) { |
124 | let width: number = null | 124 | let width: number = null |
125 | let height: number = null | 125 | let height: number = null |
126 | 126 | ||
@@ -178,7 +178,7 @@ class SettingsButton extends Button { | |||
178 | this.panelChild.addChild(this.menu) | 178 | this.panelChild.addChild(this.menu) |
179 | } | 179 | } |
180 | 180 | ||
181 | addMenuItem (entry, options) { | 181 | addMenuItem (entry: any, options: any) { |
182 | const openSubMenu = function () { | 182 | const openSubMenu = function () { |
183 | if (videojsUntyped.dom.hasClass(this.el_, 'open')) { | 183 | if (videojsUntyped.dom.hasClass(this.el_, 'open')) { |
184 | videojsUntyped.dom.removeClass(this.el_, 'open') | 184 | videojsUntyped.dom.removeClass(this.el_, 'open') |
@@ -218,7 +218,7 @@ class SettingsButton extends Button { | |||
218 | } | 218 | } |
219 | 219 | ||
220 | class SettingsPanel extends Component { | 220 | class SettingsPanel extends Component { |
221 | constructor (player: videojs.Player, options) { | 221 | constructor (player: any, options: any) { |
222 | super(player, options) | 222 | super(player, options) |
223 | } | 223 | } |
224 | 224 | ||
@@ -232,7 +232,7 @@ class SettingsPanel extends Component { | |||
232 | } | 232 | } |
233 | 233 | ||
234 | class SettingsPanelChild extends Component { | 234 | class SettingsPanelChild extends Component { |
235 | constructor (player: videojs.Player, options) { | 235 | constructor (player: any, options: any) { |
236 | super(player, options) | 236 | super(player, options) |
237 | } | 237 | } |
238 | 238 | ||
@@ -246,7 +246,7 @@ class SettingsPanelChild extends Component { | |||
246 | } | 246 | } |
247 | 247 | ||
248 | class SettingsDialog extends Component { | 248 | class SettingsDialog extends Component { |
249 | constructor (player: videojs.Player, options) { | 249 | constructor (player: any, options: any) { |
250 | super(player, options) | 250 | super(player, options) |
251 | this.hide() | 251 | this.hide() |
252 | } | 252 | } |
diff --git a/client/src/assets/player/settings-menu-item.ts b/client/src/assets/player/settings-menu-item.ts index 665ce6fc2..2d752b62e 100644 --- a/client/src/assets/player/settings-menu-item.ts +++ b/client/src/assets/player/settings-menu-item.ts | |||
@@ -1,7 +1,6 @@ | |||
1 | // Author: Yanko Shterev | 1 | // Author: Yanko Shterev |
2 | // Thanks https://github.com/yshterev/videojs-settings-menu | 2 | // Thanks https://github.com/yshterev/videojs-settings-menu |
3 | 3 | ||
4 | import * as videojs from 'video.js' | ||
5 | import { toTitleCase } from './utils' | 4 | import { toTitleCase } from './utils' |
6 | import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' | 5 | import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' |
7 | 6 | ||
@@ -10,7 +9,7 @@ const component: VideoJSComponentInterface = videojsUntyped.getComponent('Compon | |||
10 | 9 | ||
11 | class SettingsMenuItem extends MenuItem { | 10 | class SettingsMenuItem extends MenuItem { |
12 | 11 | ||
13 | constructor (player: videojs.Player, options, entry: string, menuButton: VideoJSComponentInterface) { | 12 | constructor (player: any, options: any, entry: string, menuButton: VideoJSComponentInterface) { |
14 | super(player, options) | 13 | super(player, options) |
15 | 14 | ||
16 | this.settingsButton = menuButton | 15 | this.settingsButton = menuButton |
@@ -55,7 +54,7 @@ class SettingsMenuItem extends MenuItem { | |||
55 | this.transitionEndHandler = this.onTransitionEnd.bind(this) | 54 | this.transitionEndHandler = this.onTransitionEnd.bind(this) |
56 | } | 55 | } |
57 | 56 | ||
58 | onSubmenuClick (event) { | 57 | onSubmenuClick (event: any) { |
59 | let target = null | 58 | let target = null |
60 | 59 | ||
61 | if (event.type === 'tap') { | 60 | if (event.type === 'tap') { |
@@ -150,7 +149,7 @@ class SettingsMenuItem extends MenuItem { | |||
150 | * | 149 | * |
151 | * @method PrefixedEvent | 150 | * @method PrefixedEvent |
152 | */ | 151 | */ |
153 | PrefixedEvent (element, type, callback, action = 'addEvent') { | 152 | PrefixedEvent (element: any, type: any, callback: any, action = 'addEvent') { |
154 | let prefix = ['webkit', 'moz', 'MS', 'o', ''] | 153 | let prefix = ['webkit', 'moz', 'MS', 'o', ''] |
155 | 154 | ||
156 | for (let p = 0; p < prefix.length; p++) { | 155 | for (let p = 0; p < prefix.length; p++) { |
@@ -166,7 +165,7 @@ class SettingsMenuItem extends MenuItem { | |||
166 | } | 165 | } |
167 | } | 166 | } |
168 | 167 | ||
169 | onTransitionEnd (event) { | 168 | onTransitionEnd (event: any) { |
170 | if (event.propertyName !== 'margin-right') { | 169 | if (event.propertyName !== 'margin-right') { |
171 | return | 170 | return |
172 | } | 171 | } |
@@ -229,7 +228,7 @@ class SettingsMenuItem extends MenuItem { | |||
229 | ) | 228 | ) |
230 | } | 229 | } |
231 | 230 | ||
232 | update (event?: Event) { | 231 | update (event?: any) { |
233 | let target = null | 232 | let target = null |
234 | let subMenu = this.subMenu.name() | 233 | let subMenu = this.subMenu.name() |
235 | 234 | ||
diff --git a/client/src/assets/player/theater-button.ts b/client/src/assets/player/theater-button.ts index 5cf0b6425..b761f6030 100644 --- a/client/src/assets/player/theater-button.ts +++ b/client/src/assets/player/theater-button.ts | |||
@@ -6,7 +6,7 @@ class TheaterButton extends Button { | |||
6 | 6 | ||
7 | private static readonly THEATER_MODE_CLASS = 'vjs-theater-enabled' | 7 | private static readonly THEATER_MODE_CLASS = 'vjs-theater-enabled' |
8 | 8 | ||
9 | constructor (player, options) { | 9 | constructor (player: any, options: any) { |
10 | super(player, options) | 10 | super(player, options) |
11 | 11 | ||
12 | const enabled = getStoredTheater() | 12 | const enabled = getStoredTheater() |
diff --git a/client/src/assets/player/utils.ts b/client/src/assets/player/utils.ts index cf4f60f55..46081c0d2 100644 --- a/client/src/assets/player/utils.ts +++ b/client/src/assets/player/utils.ts | |||
@@ -12,7 +12,7 @@ const dictionaryBytes: Array<{max: number, type: string}> = [ | |||
12 | { max: 1073741824, type: 'MB' }, | 12 | { max: 1073741824, type: 'MB' }, |
13 | { max: 1.0995116e12, type: 'GB' } | 13 | { max: 1.0995116e12, type: 'GB' } |
14 | ] | 14 | ] |
15 | function bytes (value) { | 15 | function bytes (value: any) { |
16 | const format = dictionaryBytes.find(d => value < d.max) || dictionaryBytes[dictionaryBytes.length - 1] | 16 | const format = dictionaryBytes.find(d => value < d.max) || dictionaryBytes[dictionaryBytes.length - 1] |
17 | const calc = Math.floor(value / (format.max / 1024)).toString() | 17 | const calc = Math.floor(value / (format.max / 1024)).toString() |
18 | 18 | ||
diff --git a/client/src/assets/player/video-renderer.ts b/client/src/assets/player/video-renderer.ts index 2cb05a448..a3415937b 100644 --- a/client/src/assets/player/video-renderer.ts +++ b/client/src/assets/player/video-renderer.ts | |||
@@ -1,9 +1,9 @@ | |||
1 | // Thanks: https://github.com/feross/render-media | 1 | // Thanks: https://github.com/feross/render-media |
2 | // TODO: use render-media once https://github.com/feross/render-media/issues/32 is fixed | 2 | // TODO: use render-media once https://github.com/feross/render-media/issues/32 is fixed |
3 | 3 | ||
4 | import * as MediaElementWrapper from 'mediasource' | 4 | const MediaElementWrapper = require('mediasource') |
5 | import { extname } from 'path' | 5 | import { extname } from 'path' |
6 | import * as videostream from 'videostream' | 6 | const videostream = require('videostream') |
7 | 7 | ||
8 | const VIDEOSTREAM_EXTS = [ | 8 | const VIDEOSTREAM_EXTS = [ |
9 | '.m4a', | 9 | '.m4a', |
@@ -17,7 +17,7 @@ type RenderMediaOptions = { | |||
17 | } | 17 | } |
18 | 18 | ||
19 | function renderVideo ( | 19 | function renderVideo ( |
20 | file, | 20 | file: any, |
21 | elem: HTMLVideoElement, | 21 | elem: HTMLVideoElement, |
22 | opts: RenderMediaOptions, | 22 | opts: RenderMediaOptions, |
23 | callback: (err: Error, renderer: any) => void | 23 | callback: (err: Error, renderer: any) => void |
@@ -27,11 +27,11 @@ function renderVideo ( | |||
27 | return renderMedia(file, elem, opts, callback) | 27 | return renderMedia(file, elem, opts, callback) |
28 | } | 28 | } |
29 | 29 | ||
30 | function renderMedia (file, elem: HTMLVideoElement, opts: RenderMediaOptions, callback: (err: Error, renderer?: any) => void) { | 30 | function renderMedia (file: any, elem: HTMLVideoElement, opts: RenderMediaOptions, callback: (err: Error, renderer?: any) => void) { |
31 | const extension = extname(file.name).toLowerCase() | 31 | const extension = extname(file.name).toLowerCase() |
32 | let preparedElem = undefined | 32 | let preparedElem: any = undefined |
33 | let currentTime = 0 | 33 | let currentTime = 0 |
34 | let renderer | 34 | let renderer: any |
35 | 35 | ||
36 | try { | 36 | try { |
37 | if (VIDEOSTREAM_EXTS.indexOf(extension) >= 0) { | 37 | if (VIDEOSTREAM_EXTS.indexOf(extension) >= 0) { |
@@ -45,7 +45,7 @@ function renderMedia (file, elem: HTMLVideoElement, opts: RenderMediaOptions, ca | |||
45 | 45 | ||
46 | function useVideostream () { | 46 | function useVideostream () { |
47 | prepareElem() | 47 | prepareElem() |
48 | preparedElem.addEventListener('error', function onError (err) { | 48 | preparedElem.addEventListener('error', function onError (err: Error) { |
49 | preparedElem.removeEventListener('error', onError) | 49 | preparedElem.removeEventListener('error', onError) |
50 | 50 | ||
51 | return callback(err) | 51 | return callback(err) |
@@ -58,7 +58,7 @@ function renderMedia (file, elem: HTMLVideoElement, opts: RenderMediaOptions, ca | |||
58 | const codecs = getCodec(file.name, useVP9) | 58 | const codecs = getCodec(file.name, useVP9) |
59 | 59 | ||
60 | prepareElem() | 60 | prepareElem() |
61 | preparedElem.addEventListener('error', function onError (err) { | 61 | preparedElem.addEventListener('error', function onError (err: Error) { |
62 | preparedElem.removeEventListener('error', onError) | 62 | preparedElem.removeEventListener('error', onError) |
63 | 63 | ||
64 | // Try with vp9 before returning an error | 64 | // Try with vp9 before returning an error |
@@ -102,7 +102,7 @@ function renderMedia (file, elem: HTMLVideoElement, opts: RenderMediaOptions, ca | |||
102 | } | 102 | } |
103 | } | 103 | } |
104 | 104 | ||
105 | function validateFile (file) { | 105 | function validateFile (file: any) { |
106 | if (file == null) { | 106 | if (file == null) { |
107 | throw new Error('file cannot be null or undefined') | 107 | throw new Error('file cannot be null or undefined') |
108 | } | 108 | } |
diff --git a/client/src/assets/player/webtorrent-info-button.ts b/client/src/assets/player/webtorrent-info-button.ts index deef253ce..5b9d0a401 100644 --- a/client/src/assets/player/webtorrent-info-button.ts +++ b/client/src/assets/player/webtorrent-info-button.ts | |||
@@ -65,7 +65,7 @@ class WebtorrentInfoButton extends Button { | |||
65 | subDivHttp.appendChild(subDivHttpText) | 65 | subDivHttp.appendChild(subDivHttpText) |
66 | div.appendChild(subDivHttp) | 66 | div.appendChild(subDivHttp) |
67 | 67 | ||
68 | this.player_.peertube().on('torrentInfo', (event, data) => { | 68 | this.player_.peertube().on('torrentInfo', (data: any) => { |
69 | // We are in HTTP fallback | 69 | // We are in HTTP fallback |
70 | if (!data) { | 70 | if (!data) { |
71 | subDivHttp.className = 'vjs-peertube-displayed' | 71 | subDivHttp.className = 'vjs-peertube-displayed' |
diff --git a/client/src/main.ts b/client/src/main.ts index f456e89c5..dee962180 100644 --- a/client/src/main.ts +++ b/client/src/main.ts | |||
@@ -8,7 +8,7 @@ import { hmrBootstrap } from './hmr' | |||
8 | import { getDevLocale, isOnDevLocale } from '@app/shared/i18n/i18n-utils' | 8 | import { getDevLocale, isOnDevLocale } from '@app/shared/i18n/i18n-utils' |
9 | import { buildFileLocale } from '../../shared' | 9 | import { buildFileLocale } from '../../shared' |
10 | 10 | ||
11 | let providers = [] | 11 | let providers: any[] = [] |
12 | if (environment.production) { | 12 | if (environment.production) { |
13 | enableProdMode() | 13 | enableProdMode() |
14 | } | 14 | } |
diff --git a/client/src/polyfills.ts b/client/src/polyfills.ts index eec30760d..dfe45b591 100644 --- a/client/src/polyfills.ts +++ b/client/src/polyfills.ts | |||
@@ -18,24 +18,26 @@ | |||
18 | * BROWSER POLYFILLS | 18 | * BROWSER POLYFILLS |
19 | */ | 19 | */ |
20 | 20 | ||
21 | /** IE9, IE10 and IE11 requires all of the following polyfills. **/ | 21 | /** |
22 | * IE9, IE10 and IE11 requires all of the following polyfills. | ||
23 | */ | ||
22 | 24 | ||
23 | // For Google Bot | 25 | // For Google Bot |
24 | import 'core-js/es6/symbol'; | 26 | import 'core-js/es6/symbol' |
25 | import 'core-js/es6/object'; | 27 | import 'core-js/es6/object' |
26 | import 'core-js/es6/function'; | 28 | import 'core-js/es6/function' |
27 | import 'core-js/es6/parse-int'; | 29 | import 'core-js/es6/parse-int' |
28 | import 'core-js/es6/parse-float'; | 30 | import 'core-js/es6/parse-float' |
29 | import 'core-js/es6/number'; | 31 | import 'core-js/es6/number' |
30 | import 'core-js/es6/math'; | 32 | import 'core-js/es6/math' |
31 | import 'core-js/es6/string'; | 33 | import 'core-js/es6/string' |
32 | import 'core-js/es6/date'; | 34 | import 'core-js/es6/date' |
33 | import 'core-js/es6/array'; | 35 | import 'core-js/es6/array' |
34 | import 'core-js/es6/regexp'; | 36 | import 'core-js/es6/regexp' |
35 | import 'core-js/es6/map'; | 37 | import 'core-js/es6/map' |
36 | import 'core-js/es6/weak-map'; | 38 | import 'core-js/es6/weak-map' |
37 | import 'core-js/es6/set'; | 39 | import 'core-js/es6/set' |
38 | import 'core-js/es7/object'; | 40 | import 'core-js/es7/object' |
39 | 41 | ||
40 | /** IE10 and IE11 requires the following for NgClass support on SVG elements */ | 42 | /** IE10 and IE11 requires the following for NgClass support on SVG elements */ |
41 | // import 'classlist.js'; // Run `npm install --save classlist.js`. | 43 | // import 'classlist.js'; // Run `npm install --save classlist.js`. |
@@ -43,17 +45,18 @@ import 'core-js/es7/object'; | |||
43 | /** IE10 and IE11 requires the following for the Reflect API. */ | 45 | /** IE10 and IE11 requires the following for the Reflect API. */ |
44 | 46 | ||
45 | // For Google Bot | 47 | // For Google Bot |
46 | import 'core-js/es6/reflect'; | 48 | import 'core-js/es6/reflect' |
47 | 49 | ||
48 | /** Evergreen browsers require these. **/ | 50 | /** |
51 | * Evergreen browsers require these. | ||
52 | */ | ||
49 | // Used for reflect-metadata in JIT. If you use AOT (and only Angular decorators), you can remove. | 53 | // Used for reflect-metadata in JIT. If you use AOT (and only Angular decorators), you can remove. |
50 | import 'core-js/es7/reflect' | 54 | import 'core-js/es7/reflect' |
51 | 55 | ||
52 | |||
53 | /** | 56 | /** |
54 | * Required to support Web Animations `@angular/platform-browser/animations`. | 57 | * Required to support Web Animations `@angular/platform-browser/animations`. |
55 | * Needed for: All but Chrome, Firefox and Opera. http://caniuse.com/#feat=web-animation | 58 | * Needed for: All but Chrome, Firefox and Opera. http://caniuse.com/#feat=web-animation |
56 | **/ | 59 | */ |
57 | // import 'web-animations-js'; // Run `npm install --save web-animations-js`. | 60 | // import 'web-animations-js'; // Run `npm install --save web-animations-js`. |
58 | 61 | ||
59 | /** | 62 | /** |
@@ -70,19 +73,17 @@ import 'core-js/es7/reflect' | |||
70 | */ | 73 | */ |
71 | // (window as any).__Zone_enable_cross_context_check = true; | 74 | // (window as any).__Zone_enable_cross_context_check = true; |
72 | 75 | ||
73 | |||
74 | /*************************************************************************************************** | 76 | /*************************************************************************************************** |
75 | * Zone JS is required by default for Angular itself. | 77 | * Zone JS is required by default for Angular itself. |
76 | */ | 78 | */ |
77 | import 'zone.js/dist/zone' // Included with Angular CLI. | 79 | import 'zone.js/dist/zone' // Included with Angular CLI. |
78 | 80 | ||
79 | |||
80 | /*************************************************************************************************** | 81 | /*************************************************************************************************** |
81 | * APPLICATION IMPORTS | 82 | * APPLICATION IMPORTS |
82 | */ | 83 | */ |
83 | 84 | ||
84 | // global/process polyfills | 85 | // global/process polyfills |
85 | 86 | ||
86 | ;(window as any).global = window; | 87 | ;(window as any).global = window |
87 | ;(window as any).process = require('process/'); | 88 | ;(window as any).process = require('process/') |
88 | ;(window as any).Buffer = require('buffer/').Buffer; | 89 | ;(window as any).Buffer = require('buffer/').Buffer |
diff --git a/client/src/shims/noop.ts b/client/src/shims/noop.ts index 899b69bf3..086a60e32 100644 --- a/client/src/shims/noop.ts +++ b/client/src/shims/noop.ts | |||
@@ -1,3 +1,3 @@ | |||
1 | // Does nothing. Used to shim out node.js modules | 1 | // Does nothing. Used to shim out node.js modules |
2 | // which are no-ops in the browser. | 2 | // which are no-ops in the browser. |
3 | export const NOOP = 0 \ No newline at end of file | 3 | export const NOOP = 0 |
diff --git a/client/src/standalone/videos/embed.ts b/client/src/standalone/videos/embed.ts index ea3436c7c..e5a2d208a 100644 --- a/client/src/standalone/videos/embed.ts +++ b/client/src/standalone/videos/embed.ts | |||
@@ -17,7 +17,7 @@ import 'core-js/es6/set' | |||
17 | // For google bot that uses Chrome 41 and does not understand fetch | 17 | // For google bot that uses Chrome 41 and does not understand fetch |
18 | import 'whatwg-fetch' | 18 | import 'whatwg-fetch' |
19 | 19 | ||
20 | import * as vjs from 'video.js' | 20 | const vjs = require('video.js') |
21 | import * as Channel from 'jschannel' | 21 | import * as Channel from 'jschannel' |
22 | 22 | ||
23 | import { peertubeTranslate, ResultList, VideoDetails } from '../../../../shared' | 23 | import { peertubeTranslate, ResultList, VideoDetails } from '../../../../shared' |
@@ -304,7 +304,7 @@ class PeerTubeEmbed { | |||
304 | 304 | ||
305 | this.playerOptions = videojsOptions | 305 | this.playerOptions = videojsOptions |
306 | this.player = vjs(this.videoContainerId, videojsOptions, () => { | 306 | this.player = vjs(this.videoContainerId, videojsOptions, () => { |
307 | this.player.on('customError', (event, data) => this.handleError(data.err)) | 307 | this.player.on('customError', (data: any) => this.handleError(data.err)) |
308 | 308 | ||
309 | window[ 'videojsPlayer' ] = this.player | 309 | window[ 'videojsPlayer' ] = this.player |
310 | 310 | ||
diff --git a/client/src/standalone/videos/test-embed.ts b/client/src/standalone/videos/test-embed.ts index dba331e90..b750c2ee6 100644 --- a/client/src/standalone/videos/test-embed.ts +++ b/client/src/standalone/videos/test-embed.ts | |||
@@ -66,11 +66,11 @@ window.addEventListener('load', async () => { | |||
66 | updateRates() | 66 | updateRates() |
67 | }) | 67 | }) |
68 | 68 | ||
69 | let updateResolutions = resolutions => { | 69 | let updateResolutions = ((resolutions: any) => { |
70 | let resolutionListEl = document.querySelector('#resolution-list') | 70 | let resolutionListEl = document.querySelector('#resolution-list') |
71 | resolutionListEl.innerHTML = '' | 71 | resolutionListEl.innerHTML = '' |
72 | 72 | ||
73 | resolutions.forEach(resolution => { | 73 | resolutions.forEach((resolution: any) => { |
74 | if (resolution.active) { | 74 | if (resolution.active) { |
75 | let itemEl = document.createElement('strong') | 75 | let itemEl = document.createElement('strong') |
76 | itemEl.innerText = `${resolution.label} (active)` | 76 | itemEl.innerText = `${resolution.label} (active)` |
@@ -87,7 +87,7 @@ window.addEventListener('load', async () => { | |||
87 | resolutionListEl.appendChild(itemEl) | 87 | resolutionListEl.appendChild(itemEl) |
88 | } | 88 | } |
89 | }) | 89 | }) |
90 | } | 90 | }) |
91 | 91 | ||
92 | player.getResolutions().then( | 92 | player.getResolutions().then( |
93 | resolutions => updateResolutions(resolutions)) | 93 | resolutions => updateResolutions(resolutions)) |
diff --git a/client/src/typings.d.ts b/client/src/typings.d.ts index ef5c7bd62..9615434ac 100644 --- a/client/src/typings.d.ts +++ b/client/src/typings.d.ts | |||
@@ -2,4 +2,5 @@ | |||
2 | declare var module: NodeModule; | 2 | declare var module: NodeModule; |
3 | interface NodeModule { | 3 | interface NodeModule { |
4 | id: string; | 4 | id: string; |
5 | [key: string]: any | ||
5 | } | 6 | } |
diff --git a/client/tsconfig.json b/client/tsconfig.json index 431ea7d91..ef80445db 100644 --- a/client/tsconfig.json +++ b/client/tsconfig.json | |||
@@ -7,7 +7,8 @@ | |||
7 | "moduleResolution": "node", | 7 | "moduleResolution": "node", |
8 | "emitDecoratorMetadata": true, | 8 | "emitDecoratorMetadata": true, |
9 | "experimentalDecorators": true, | 9 | "experimentalDecorators": true, |
10 | "noImplicitAny": false, | 10 | "noImplicitAny": true, |
11 | "suppressImplicitAnyIndexErrors":true, | ||
11 | "alwaysStrict": true, | 12 | "alwaysStrict": true, |
12 | "target": "es5", | 13 | "target": "es5", |
13 | "typeRoots": [ | 14 | "typeRoots": [ |