]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
NoImplicitAny flag true (#1157)
authorBO41 <lukasw41@gmail.com>
Thu, 18 Oct 2018 07:08:59 +0000 (09:08 +0200)
committerRigel Kent <par@rigelk.eu>
Thu, 18 Oct 2018 07:08:59 +0000 (09:08 +0200)
this enables the `noImplicitAny` flag in the Typescript compiler

> When the noImplicitAny flag is true and the TypeScript compiler cannot infer the type, it still generates the JavaScript files, but it also reports an error. Many seasoned developers prefer this stricter setting because type checking catches more unintentional errors at compile time.

closes: #1131
replaces #1137

64 files changed:
client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts
client/src/app/+admin/users/user-edit/user-edit.ts
client/src/app/+admin/users/user-list/user-list.component.ts
client/src/app/+my-account/my-account-video-channels/my-account-video-channel-update.component.ts
client/src/app/+my-account/my-account-videos/my-account-videos.component.ts
client/src/app/+my-account/my-account-videos/video-change-ownership/video-change-ownership.component.ts
client/src/app/+my-account/shared/actor-avatar-info.component.ts
client/src/app/app.module.ts
client/src/app/core/auth/auth.service.ts
client/src/app/core/server/server.service.ts
client/src/app/core/theme/theme.service.ts
client/src/app/menu/menu.component.ts
client/src/app/search/advanced-search.model.ts
client/src/app/shared/buttons/action-dropdown.component.ts
client/src/app/shared/buttons/button.component.ts
client/src/app/shared/buttons/edit-button.component.ts
client/src/app/shared/misc/help.component.ts
client/src/app/shared/misc/peertube-local-storage.ts
client/src/app/shared/misc/utils.ts
client/src/app/shared/overview/videos-overview.model.ts
client/src/app/shared/rest/rest-extractor.service.ts
client/src/app/shared/rest/rest.service.ts
client/src/app/shared/users/user.model.ts
client/src/app/shared/video/abstract-video-list.ts
client/src/app/shared/video/video-edit.model.ts
client/src/app/shared/video/video-feed.component.ts
client/src/app/shared/video/video.service.ts
client/src/app/videos/+video-edit/shared/video-caption-add-modal.component.ts
client/src/app/videos/+video-edit/shared/video-edit.component.ts
client/src/app/videos/+video-edit/video-add-components/video-import-torrent.component.ts
client/src/app/videos/+video-edit/video-add-components/video-send.ts
client/src/app/videos/+video-edit/video-add-components/video-upload.component.ts
client/src/app/videos/+video-watch/comment/linkifier.service.ts
client/src/app/videos/+video-watch/comment/video-comment-add.component.ts
client/src/app/videos/+video-watch/comment/video-comment.component.ts
client/src/app/videos/+video-watch/comment/video-comment.model.ts
client/src/app/videos/+video-watch/comment/video-comment.service.ts
client/src/app/videos/+video-watch/comment/video-comments.component.ts
client/src/app/videos/+video-watch/video-watch.component.ts
client/src/assets/player/peertube-chunk-store.ts
client/src/assets/player/peertube-link-button.ts
client/src/assets/player/peertube-load-progress-bar.ts
client/src/assets/player/peertube-player.ts
client/src/assets/player/peertube-videojs-plugin.ts
client/src/assets/player/peertube-videojs-typings.ts
client/src/assets/player/resolution-menu-button.ts
client/src/assets/player/resolution-menu-item.ts
client/src/assets/player/settings-menu-button.ts
client/src/assets/player/settings-menu-item.ts
client/src/assets/player/theater-button.ts
client/src/assets/player/utils.ts
client/src/assets/player/video-renderer.ts
client/src/assets/player/webtorrent-info-button.ts
client/src/main.ts
client/src/polyfills.ts
client/src/shims/noop.ts
client/src/standalone/videos/embed.ts
client/src/standalone/videos/test-embed.ts
client/src/typings.d.ts
client/tsconfig.json
shared/models/i18n/i18n.ts
shared/models/overviews/videos-overview.ts
shared/models/server/custom-config.model.ts
shared/models/users/user.model.ts

index 25b303f44f18929a75eb6ed46e5b96c093a53806..9a9298825f1a8d21cf6ef2c38e39b19dc057bdde 100644 (file)
@@ -62,7 +62,7 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit {
   }
 
   ngOnInit () {
-    const formGroupData = {
+    const formGroupData: any = {
       instanceName: this.customConfigValidatorsService.INSTANCE_NAME,
       instanceShortDescription: this.customConfigValidatorsService.INSTANCE_SHORT_DESCRIPTION,
       instanceDescription: null,
@@ -202,7 +202,7 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit {
   }
 
   private updateForm () {
-    const data = {
+    const data: any = {
       instanceName: this.customConfig.instance.name,
       instanceShortDescription: this.customConfig.instance.shortDescription,
       instanceDescription: this.customConfig.instance.description,
index 99ce5804b75ac3eb98947475404898387476c2d2..a4d696e6997054deb7e398850527b0b998a7cf41 100644 (file)
@@ -7,7 +7,7 @@ export abstract class UserEdit extends FormReactive {
 
   videoQuotaOptions: { value: string, label: string }[] = []
   videoQuotaDailyOptions: { value: string, label: string }[] = []
-  roles = Object.keys(USER_ROLE_LABELS).map(key => ({ value: key.toString(), label: USER_ROLE_LABELS[key] }))
+  roles = Object.keys(USER_ROLE_LABELS).map((key: any) => ({ value: key.toString(), label: USER_ROLE_LABELS[key] }))
 
   protected abstract serverService: ServerService
   protected abstract configService: ConfigService
index ab225072235711008699f1809e30d49de3f2d4fb..0d7f88d2baa0d12593d9769ccb48aa126ba7f684 100644 (file)
@@ -45,12 +45,12 @@ export class UserListComponent extends RestTable implements OnInit {
       {
         label: this.i18n('Ban'),
         handler: users => this.openBanUserModal(users),
-        isDisplayed: users => users.every(u => u.blocked === false)
+        isDisplayed: users => users.every((u: any) => u.blocked === false)
       },
       {
         label: this.i18n('Unban'),
         handler: users => this.unbanUsers(users),
-        isDisplayed: users => users.every(u => u.blocked === true)
+        isDisplayed: users => users.every((u: any) => u.blocked === true)
       }
     ]
   }
index 56697030be31cfd6e79b112c377e20a7e648c7e0..f2b8a4e26fc526a15c7bd5ca08e1077e888fb136 100644 (file)
@@ -17,7 +17,7 @@ import { VideoChannelValidatorsService } from '@app/shared/forms/form-validators
   styleUrls: [ './my-account-video-channel-edit.component.scss' ]
 })
 export class MyAccountVideoChannelUpdateComponent extends MyAccountVideoChannelEdit implements OnInit, OnDestroy {
-  @ViewChild('avatarfileInput') avatarfileInput
+  @ViewChild('avatarfileInput') avatarfileInput: any
 
   error: string
 
index 7560f0128991a9fb0ca9c290f6cb381ccae8fa6a..52307f09e763ab7cbe7d071e6b0fce9d7cf995b4 100644 (file)
@@ -66,7 +66,7 @@ export class MyAccountVideosComponent extends AbstractVideoList implements OnIni
   }
 
   isInSelectionMode () {
-    return Object.keys(this.checkedVideos).some(k => this.checkedVideos[ k ] === true)
+    return Object.keys(this.checkedVideos).some((k: any) => this.checkedVideos[ k ] === true)
   }
 
   getVideosObservable (page: number) {
@@ -81,7 +81,7 @@ export class MyAccountVideosComponent extends AbstractVideoList implements OnIni
 
   async deleteSelectedVideos () {
     const toDeleteVideosIds = Object.keys(this.checkedVideos)
-                                    .filter(k => this.checkedVideos[ k ] === true)
+                                    .filter((k: any) => this.checkedVideos[ k ] === true)
                                     .map(k => parseInt(k, 10))
 
     const res = await this.confirmService.confirm(
@@ -168,9 +168,10 @@ export class MyAccountVideosComponent extends AbstractVideoList implements OnIni
   }
 
   private spliceVideosById (id: number) {
-    for (const key of Object.keys(this.loadedPages)) {
+    let key: any
+    for (key of Object.keys(this.loadedPages)) {
       const videos = this.loadedPages[ key ]
-      const index = videos.findIndex(v => v.id === id)
+      const index = videos.findIndex((v: any) => v.id === id)
 
       if (index !== -1) {
         videos.splice(index, 1)
index 7437b939ad12e90b67641414d688b5e356fc804c..eb3f9404f83d7f83dd4e81ec6bdd97f809f40955 100644 (file)
@@ -49,7 +49,8 @@ export class VideoChangeOwnershipComponent extends FormReactive implements OnIni
       .catch((_) => _) // Called when closing (cancel) the modal without validating, do nothing
   }
 
-  search (event) {
+  // TODO: typing
+  search (event: any) {
     const query = event.query
     this.userService.autocomplete(query)
       .subscribe(
index 7b80b1ed439368a14467fe9f927da99d6e4c0956..b4505a7f285506d7f143485ccdd24d927d5d3ee8 100644 (file)
@@ -10,7 +10,7 @@ import { Account } from '@app/shared/account/account.model'
   styleUrls: [ './actor-avatar-info.component.scss' ]
 })
 export class ActorAvatarInfoComponent {
-  @ViewChild('avatarfileInput') avatarfileInput
+  @ViewChild('avatarfileInput') avatarfileInput: any
 
   @Input() actor: VideoChannel | Account
 
index 34e890b40d8b4adfd91c0538298c2e9d850bf8dd..37119944227d427107d979862c023594f84fac76 100644 (file)
@@ -69,7 +69,7 @@ export function metaFactory (serverService: ServerService): MetaLoader {
   providers: [
     {
       provide: TRANSLATIONS,
-      useFactory: (locale) => {
+      useFactory: (locale: string) => {
         // On dev mode, test localization
         if (isOnDevLocale()) {
           locale = buildFileLocale(getDevLocale())
index 9c36b946e3d6bc406894b2565054357082e7d231..5315c8b1d8e6f7ec39d5e83ac24fe468117b4e49 100644 (file)
@@ -221,7 +221,7 @@ export class AuthService {
   }
 
   refreshUserInformation () {
-    const obj = {
+    const obj: any = {
       access_token: this.user.getAccessToken(),
       refresh_token: null,
       token_type: this.user.getTokenType(),
index 2f1ef1fc23e1f69d4ae7131b1c479209f03f8ed7..1663a052c274bad72e2d370bb225cef53079758f 100644 (file)
@@ -155,7 +155,7 @@ export class ServerService {
         .pipe(
           switchMap(translations => {
             return this.http.get(ServerService.BASE_VIDEO_URL + attributeName)
-                       .pipe(map(data => ({ data, translations })))
+                       .pipe(map((data: any) => ({ data, translations })))
           })
         )
         .subscribe(({ data, translations }) => {
index a6eef089843017bb889e5ef4b55f579597df0d78..50c19ecac38f3404f5645400231cd0c9c8a7f7ca 100644 (file)
@@ -5,7 +5,7 @@ import { peertubeLocalStorage } from '@app/shared/misc/peertube-local-storage'
 export class ThemeService {
   private theme = document.querySelector('body')
   private darkTheme = false
-  private previousTheme = {}
+  private previousTheme: { [ id: string ]: string } = {}
 
   constructor () {
     // initialise the alternative theme with dark theme colors
@@ -33,7 +33,7 @@ export class ThemeService {
     }
   }
 
-  private switchProperty (property, newValue?) {
+  private switchProperty (property: string, newValue?: string) {
     const propertyOldvalue = window.getComputedStyle(this.theme).getPropertyValue('--' + property)
     this.theme.style.setProperty('--' + property, (newValue) ? newValue : this.previousTheme[property])
     this.previousTheme[property] = propertyOldvalue
index 95926f5f0dc6fe413c07a3105e9ebddfa65410bf..348700c09fa609c967b3b072bc1b4c573493dc59 100644 (file)
@@ -18,7 +18,7 @@ export class MenuComponent implements OnInit {
   userHasAdminAccess = false
   helpVisible = false
 
-  private routesPerRight = {
+  private routesPerRight: any = {
     [UserRight.MANAGE_USERS]: '/admin/users',
     [UserRight.MANAGE_SERVER_FOLLOW]: '/admin/friends',
     [UserRight.MANAGE_VIDEO_ABUSES]: '/admin/moderation/video-abuses',
index 033fa9bba86530ba58f7c75154e6dc2ef60ad562..1d6c89282ed212195d599059f2aa002edc0c362f 100644 (file)
@@ -53,7 +53,7 @@ export class AdvancedSearch {
   }
 
   containsValues () {
-    const obj = this.toUrlObject()
+    const obj: any = this.toUrlObject()
     for (const k of Object.keys(obj)) {
       if (k === 'sort') continue // Exception
 
@@ -113,7 +113,7 @@ export class AdvancedSearch {
   size () {
     let acc = 0
 
-    const obj = this.toUrlObject()
+    const obj: any = this.toUrlObject()
     for (const k of Object.keys(obj)) {
       if (k === 'sort') continue // Exception
 
index 022ab5ee810c3156030c4752ff2d24e47561dd52..9877f639dd4062c4625da2e775f2790ea23f2c88 100644 (file)
@@ -2,9 +2,9 @@ import { Component, Input } from '@angular/core'
 
 export type DropdownAction<T> = {
   label?: string
-  handler?: (T) => any
-  linkBuilder?: (T) => (string | number)[]
-  isDisplayed?: (T) => boolean
+  handler?: (T: any) => any
+  linkBuilder?: (T: any) => (string | number)[]
+  isDisplayed?: (T: any) => boolean
 }
 
 @Component({
index 967cb140973c818a0bb278ab6fd3ddb97c83011c..cccf98bc3af23e0bd3c872e2c8d60c16233400a4 100644 (file)
@@ -8,9 +8,9 @@ import { Component, Input } from '@angular/core'
 
 export class ButtonComponent {
   @Input() label = ''
-  @Input() className = undefined
-  @Input() icon = undefined
-  @Input() title = undefined
+  @Input() className: any = undefined
+  @Input() icon: any = undefined
+  @Input() title: any = undefined
 
   getTitle () {
     return this.title || this.label
index 7abaacc26b9e0751c009ca83fbe292ce0f747870..ea552663ac35815a63b894e11484ea034b8287bc 100644 (file)
@@ -8,5 +8,5 @@ import { Component, Input } from '@angular/core'
 
 export class EditButtonComponent {
   @Input() label: string
-  @Input() routerLink = []
+  @Input() routerLink: any = []
 }
index ba0452e778393dd2ffdb5047a42660c5f8403c2d..ccce1ccfa5e02cfa32decd698ec8a14609d4f972 100644 (file)
@@ -60,7 +60,7 @@ export class HelpComponent implements OnInit, OnChanges {
   }
 
   private createMarkdownList (rules: string[]) {
-    const rulesToText = {
+    const rulesToText: any = {
       'emphasis': this.i18n('Emphasis'),
       'link': this.i18n('Links'),
       'newline': this.i18n('New lines'),
index 260f994b644e382d4f7bb311d98bc107900a014b..fb5c45acf8137d5ea06d74d96ec542611780839c 100644 (file)
@@ -6,7 +6,7 @@ class MemoryStorage {
   [key: string]: any
   [index: number]: string
 
-  getItem (key) {
+  getItem (key: any) {
     const stringKey = String(key)
     if (valuesMap.has(key)) {
       return String(valuesMap.get(stringKey))
@@ -15,11 +15,11 @@ class MemoryStorage {
     return null
   }
 
-  setItem (key, val) {
+  setItem (key: any, val: any) {
     valuesMap.set(String(key), String(val))
   }
 
-  removeItem (key) {
+  removeItem (key: any) {
     valuesMap.delete(key)
   }
 
index c8b7ebc67bf18eec6151f69b9636ce6f483842cb..78be2e5dda6bd0435a757bd08b61b0bd13ee1df4 100644 (file)
@@ -102,7 +102,7 @@ function objectToFormData (obj: any, form?: FormData, namespace?: string) {
   return fd
 }
 
-function lineFeedToHtml (obj: object, keyToNormalize: string) {
+function lineFeedToHtml (obj: any, keyToNormalize: string) {
   return immutableAssign(obj, {
     [keyToNormalize]: obj[keyToNormalize].replace(/\r?\n|\r/g, '<br />')
   })
index cf02bdb3de7f72e3a1557a6f30791ca66c11331f..c8eafc8e81ca919e198e326b8e818e36c58c8375 100644 (file)
@@ -16,4 +16,5 @@ export class VideosOverview implements VideosOverviewServer {
     tag: string
     videos: Video[]
   }[]
+  [key: string]: any
 }
index 6492aa66de554a6af5f621c5c520d27639664ba4..934f6c618ad648a1f631d08ec879bf17ae259736 100644 (file)
@@ -33,7 +33,7 @@ export class RestExtractor {
     return this.applyToResultListData(result, this.convertDateToHuman, [ fieldsToConvert ])
   }
 
-  convertDateToHuman (target: object, fieldsToConvert: string[]) {
+  convertDateToHuman (target: any, fieldsToConvert: string[]) {
     fieldsToConvert.forEach(field => target[field] = dateToHuman(target[field]))
 
     return target
@@ -83,7 +83,7 @@ export class RestExtractor {
       errorMessage = err
     }
 
-    const errorObj = {
+    const errorObj: any = {
       message: errorMessage,
       status: undefined,
       body: undefined
index 4560c2024983a728ffee0d681eb4fa759e1fef80..41824a18f867b3a96dd0f72702074497fb16dd49 100644 (file)
@@ -32,7 +32,7 @@ export class RestService {
     return newParams
   }
 
-  addObjectParams (params: HttpParams, object: object) {
+  addObjectParams (params: HttpParams, object: any) {
     for (const name of Object.keys(object)) {
       const value = object[name]
       if (!value) continue
index 7c840ffa7054c9109bff031e148a91a18ec988e1..e6b612054159ce5dab93aad95ce9467a3af4c179 100644 (file)
@@ -43,6 +43,7 @@ export class User implements UserServerModel {
 
   blocked: boolean
   blockedReason?: string
+  [key: string]: any
 
   constructor (hash: UserConstructorHash) {
     this.id = hash.id
index 1f43f974c372f7446557755fed44343847097f70..87814d4ba197d5a3832d3ee103a9a3713c3210ed 100644 (file)
@@ -27,7 +27,7 @@ export abstract class AbstractVideoList implements OnInit, OnDestroy {
   sort: VideoSortField = '-publishedAt'
   categoryOneOf?: number
   defaultSort: VideoSortField = '-publishedAt'
-  syndicationItems = []
+  syndicationItems: any = []
 
   loadOnInit = true
   marginContent = true
@@ -59,7 +59,7 @@ export abstract class AbstractVideoList implements OnInit, OnDestroy {
   private resizeSubscription: Subscription
 
   abstract getVideosObservable (page: number): Observable<{ videos: Video[], totalVideos: number}>
-  abstract generateSyndicationList ()
+  abstract generateSyndicationList (): any
 
   get user () {
     return this.authService.getUser()
@@ -209,7 +209,7 @@ export abstract class AbstractVideoList implements OnInit, OnDestroy {
   }
 
   protected setNewRouteParams () {
-    const paramsObject = this.buildRouteParams()
+    const paramsObject: any = this.buildRouteParams()
 
     const queryParams = Object.keys(paramsObject).map(p => p + '=' + paramsObject[p]).join('&')
     this.location.replaceState(this.currentRoute, queryParams)
index 0046be96455c08abf1478e1a899643f7750534ed..a62277e0459419779d59deef9d4e66ce67b3ee97 100644 (file)
@@ -25,6 +25,7 @@ export class VideoEdit implements VideoUpdate {
   uuid?: string
   id?: number
   scheduleUpdate?: VideoScheduleUpdate
+  [key: string]: any
 
   constructor (video?: Video & { tags: string[], commentsEnabled: boolean, support: string, thumbnailUrl: string, previewUrl: string }) {
     if (video) {
@@ -49,7 +50,7 @@ export class VideoEdit implements VideoUpdate {
     }
   }
 
-  patch (values: Object) {
+  patch (values: any) {
     Object.keys(values).forEach((key) => {
       this[ key ] = values[ key ]
     })
index 6922153c0df6e898159ad9c56b7b0fa62cfc94b1..be6c80c3fa6f8bdee4a00da9809138c438caab94 100644 (file)
@@ -6,5 +6,5 @@ import { Component, Input } from '@angular/core'
   templateUrl: './video-feed.component.html'
 })
 export class VideoFeedComponent {
-  @Input() syndicationItems
+  @Input() syndicationItems: any
 }
index 724a0bde94505cb10140b27921d13ac9d4ebad9f..6283cf84d83238cbff2abba8b2258c0353b4ce78 100644 (file)
@@ -276,7 +276,7 @@ export class VideoService implements VideosProvider {
     return this.authHttp
                .get(environment.apiUrl + descriptionPath)
                .pipe(
-                 map(res => res[ 'description' ]),
+                 map((res: any) => res[ 'description' ]),
                  catchError(err => this.restExtractor.handleError(err))
                )
   }
index 07c33030aa7087fa904a88601a2b8b5f54ea4a6d..a2c9237ad2b6533ac3c3f00d5eaf46508cc35556 100644 (file)
@@ -19,7 +19,7 @@ export class VideoCaptionAddModalComponent extends FormReactive implements OnIni
 
   @ViewChild('modal') modal: ElementRef
 
-  videoCaptionLanguages = []
+  videoCaptionLanguages: any = []
 
   private openedModal: NgbModalRef
   private closingModal = false
@@ -73,7 +73,7 @@ export class VideoCaptionAddModalComponent extends FormReactive implements OnIni
     this.hide()
 
     const languageId = this.form.value[ 'language' ]
-    const languageObject = this.videoCaptionLanguages.find(l => l.id === languageId)
+    const languageObject = this.videoCaptionLanguages.find((l: any) => l.id === languageId)
 
     this.captionAdded.emit({
       language: languageObject,
index eb9396d70b0b2f10a6d96093a971f89a046c5cb3..a56733e5752bf48631868e16e0a1de2ab3265301 100644 (file)
@@ -48,7 +48,7 @@ export class VideoEditComponent implements OnInit, OnDestroy {
   calendarTimezone: string
   calendarDateFormat: string
 
-  private schedulerInterval
+  private schedulerInterval: any
   private firstPatchDone = false
   private initialVideoCaptions: string[] = []
 
@@ -77,13 +77,13 @@ export class VideoEditComponent implements OnInit, OnDestroy {
   }
 
   updateForm () {
-    const defaultValues = {
+    const defaultValues: any = {
       nsfw: 'false',
       commentsEnabled: 'true',
       waitTranscoding: 'true',
       tags: []
     }
-    const obj = {
+    const obj: any = {
       name: this.videoValidatorsService.VIDEO_NAME,
       privacy: this.videoValidatorsService.VIDEO_PRIVACY,
       channelId: this.videoValidatorsService.VIDEO_CHANNEL,
index 0f7184ff8e82616750fbf6d18dd6eabd5efd2e10..9a50e2ab2b6828a5476ea4d255f3cad5d3f24ce0 100644 (file)
@@ -23,7 +23,7 @@ import { VideoImportService } from '@app/shared/video-import'
 })
 export class VideoImportTorrentComponent extends VideoSend implements OnInit, CanComponentDeactivate {
   @Output() firstStepDone = new EventEmitter<string>()
-  @ViewChild('torrentfileInput') torrentfileInput
+  @ViewChild('torrentfileInput') torrentfileInput: any
 
   videoFileName: string
   magnetUri = ''
index 6d1bac3f23e2c0539f3abde1912c7f866f4f5555..cf9d47cbe0d9349e85ce20407ac74ce80ab91652 100644 (file)
@@ -30,7 +30,7 @@ export abstract class VideoSend extends FormReactive implements OnInit, CanCompo
   protected videoService: VideoService
   protected videoCaptionService: VideoCaptionService
 
-  abstract canDeactivate ()
+  abstract canDeactivate (): any
 
   ngOnInit () {
     this.buildForm({})
index 941dc5441edac3f2dc56f3e6773ddb6a809eb314..fa6ee0c23e0c396bd46abfaa824c4d60e8b4a6f7 100644 (file)
@@ -25,7 +25,7 @@ import { VideoCaptionService } from '@app/shared/video-caption'
 })
 export class VideoUploadComponent extends VideoSend implements OnInit, OnDestroy, CanComponentDeactivate {
   @Output() firstStepDone = new EventEmitter<string>()
-  @ViewChild('videofileInput') videofileInput
+  @ViewChild('videofileInput') videofileInput: any
 
   // So that it can be accessed in the template
   readonly SPECIAL_SCHEDULED_PRIVACY = VideoEdit.SPECIAL_SCHEDULED_PRIVACY
index 3f4072efd2cd192b7a5c95852721c1c3b082061d..9ad419a69bc55d23d073cdf738aaf8baf3db13b1 100644 (file)
@@ -1,7 +1,7 @@
 import { Injectable } from '@angular/core'
 import { getAbsoluteAPIUrl } from '@app/shared/misc/utils'
-import * as linkify from 'linkifyjs'
-import * as linkifyHtml from 'linkifyjs/html'
+const linkify = require('linkifyjs')
+const linkifyHtml = require('linkifyjs/html')
 
 @Injectable()
 export class LinkifierService {
@@ -40,7 +40,7 @@ export class LinkifierService {
     const TT_UNDERSCORE = TT.UNDERSCORE
     const TT_DOT = TT.DOT
 
-    function MENTION (value) {
+    function MENTION (value: any) {
       this.v = value
     }
 
index fb7de0e048f9af6a43bbd0d39633a95f7a3dfadf..ba3c0398ec3710c4eb37276991356738bdfd67ec 100644 (file)
@@ -76,7 +76,7 @@ export class VideoCommentAddComponent extends FormReactive implements OnInit {
     this.formValidated()
   }
 
-  openVisitorModal (event) {
+  openVisitorModal (event: any) {
     if (this.user === null) { // we only open it for visitors
       // fixing ng-bootstrap ModalService and the "Expression Changed After It Has Been Checked" Error
       event.srcElement.blur()
index e90008de9b603fb8cbf2a5972ae23b72eebc20b8..9824707860695c4a5fbda6425c82bbdcec683d55 100644 (file)
@@ -26,7 +26,7 @@ export class VideoCommentComponent implements OnInit, OnChanges {
   @Output() resetReply = new EventEmitter()
 
   sanitizedCommentHTML = ''
-  newParentComments = []
+  newParentComments: any = []
 
   constructor (
     private linkifierService: LinkifierService,
index fe591811eeae127578aeac9665c229b89430dd99..824fb24c30e7890be31f47dc3b1ec89689de36b4 100644 (file)
@@ -14,7 +14,7 @@ export class VideoComment implements VideoCommentServerModel {
   account: AccountInterface
   totalReplies: number
   by: string
-  accountAvatarUrl
+  accountAvatarUrl: string
 
   constructor (hash: VideoCommentServerModel) {
     this.id = hash.id
index 9bcb4b7de9bc42f77c3e6006759a8ebbcad2fd90..7d9c2d0ad87724978cc21ed6c86d8d1de697d5d0 100644 (file)
@@ -32,7 +32,7 @@ export class VideoCommentService {
 
     return this.authHttp.post(url, normalizedComment)
                .pipe(
-                  map(data => this.extractVideoComment(data['comment'])),
+                  map((data: any) => this.extractVideoComment(data['comment'])),
                   catchError(err => this.restExtractor.handleError(err))
                )
   }
@@ -43,7 +43,7 @@ export class VideoCommentService {
 
     return this.authHttp.post(url, normalizedComment)
                .pipe(
-                 map(data => this.extractVideoComment(data[ 'comment' ])),
+                 map((data: any) => this.extractVideoComment(data[ 'comment' ])),
                  catchError(err => this.restExtractor.handleError(err))
                )
   }
index c864d82b7072b9e8a5cf82f4f9a44bceeacde6ee..4c1bdf2dd85023a8943a87c60848b5de4d47fcee 100644 (file)
@@ -35,7 +35,7 @@ export class VideoCommentsComponent implements OnInit, OnChanges, OnDestroy {
   threadComments: { [ id: number ]: VideoCommentThreadTree } = {}
   threadLoading: { [ id: number ]: boolean } = {}
 
-  syndicationItems = []
+  syndicationItems: any = []
 
   private sub: Subscription
 
index c5deddf050272affacdef1bdb69789994bc6e010..ed5e723c93fa7b4665244137535df5cab4c3bad6 100644 (file)
@@ -7,7 +7,7 @@ import { VideoSupportComponent } from '@app/videos/+video-watch/modal/video-supp
 import { MetaService } from '@ngx-meta/core'
 import { NotificationsService } from 'angular2-notifications'
 import { forkJoin, Subscription } from 'rxjs'
-import * as videojs from 'video.js'
+const videojs = require('video.js')
 import 'videojs-hotkeys'
 import { Hotkey, HotkeysService } from 'angular2-hotkeys'
 import * as WebTorrent from 'webtorrent'
@@ -45,7 +45,7 @@ export class VideoWatchComponent implements OnInit, OnDestroy {
   @ViewChild('videoBlacklistModal') videoBlacklistModal: VideoBlacklistComponent
   @ViewChild('subscribeButton') subscribeButton: SubscribeButtonComponent
 
-  player: videojs.Player
+  player: any
   playerElement: HTMLVideoElement
   userRating: UserVideoRateType = null
   video: VideoDetails = null
@@ -435,7 +435,7 @@ export class VideoWatchComponent implements OnInit, OnDestroy {
     this.zone.runOutsideAngular(async () => {
       videojs(this.playerElement, videojsOptions, function () {
         self.player = this
-        this.on('customError', (event, data) => self.handleError(data.err))
+        this.on('customError', (data: any) => self.handleError(data.err))
 
         addContextMenu(self.player, self.video.embedUrl)
       })
@@ -448,7 +448,7 @@ export class VideoWatchComponent implements OnInit, OnDestroy {
     this.checkUserRating()
   }
 
-  private setRating (nextRating) {
+  private setRating (nextRating: string) {
     let method
     switch (nextRating) {
       case 'like':
@@ -466,11 +466,11 @@ export class VideoWatchComponent implements OnInit, OnDestroy {
           .subscribe(
             () => {
               // Update the video like attribute
-              this.updateVideoRating(this.userRating, nextRating)
-              this.userRating = nextRating
+              this.updateVideoRating(this.userRating, nextRating as VideoRateType)
+              this.userRating = nextRating as UserVideoRateType
             },
 
-            err => this.notificationsService.error(this.i18n('Error'), err.message)
+            (err: any) => this.notificationsService.error(this.i18n('Error'), err.message)
           )
   }
 
index 767e468219b1bf9221200af8984a62cce6c31168..ac3f9e6548da5989c865f80a162d7310c10925d7 100644 (file)
@@ -40,15 +40,15 @@ export class PeertubeChunkStore extends EventEmitter {
   // If the store is full
   private memoryChunks: { [ id: number ]: Buffer | true } = {}
   private databaseName: string
-  private putBulkTimeout
-  private cleanerInterval
+  private putBulkTimeout: any
+  private cleanerInterval: any
   private db: ChunkDatabase
   private expirationDB: ExpirationDatabase
   private readonly length: number
   private readonly lastChunkLength: number
   private readonly lastChunkIndex: number
 
-  constructor (chunkLength: number, opts) {
+  constructor (chunkLength: number, opts: any) {
     super()
 
     this.databaseName = 'webtorrent-chunks-'
@@ -113,13 +113,13 @@ export class PeertubeChunkStore extends EventEmitter {
     }, PeertubeChunkStore.BUFFERING_PUT_MS)
   }
 
-  get (index: number, opts, cb) {
+  get (index: number, opts: any, cb: any): any {
     if (typeof opts === 'function') return this.get(index, null, opts)
 
     // IndexDB could be slow, use our memory index first
     const memoryChunk = this.memoryChunks[index]
     if (memoryChunk === undefined) {
-      const err = new Error('Chunk not found')
+      const err = new Error('Chunk not found') as any
       err['notFound'] = true
 
       return process.nextTick(() => cb(err))
@@ -146,11 +146,11 @@ export class PeertubeChunkStore extends EventEmitter {
     })
   }
 
-  close (db) {
+  close (db: any) {
     return this.destroy(db)
   }
 
-  async destroy (cb) {
+  async destroy (cb: any) {
     try {
       if (this.pendingPut) {
         clearTimeout(this.putBulkTimeout)
@@ -225,7 +225,7 @@ export class PeertubeChunkStore extends EventEmitter {
     }
   }
 
-  private nextTick (cb, err, val?) {
+  private nextTick (cb: any, err: Error, val?: any) {
     process.nextTick(() => cb(err, val), undefined)
   }
 }
index 715207bc07ba419d7b9fe3cb6dafe9084dd8aef6..b03952b476ba64402d577065e30fdce5dbdd2c6c 100644 (file)
@@ -1,11 +1,10 @@
-import * as videojs from 'video.js'
 import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings'
 import { buildVideoLink } from './utils'
 
 const Button: VideoJSComponentInterface = videojsUntyped.getComponent('Button')
 class PeerTubeLinkButton extends Button {
 
-  constructor (player: videojs.Player, options) {
+  constructor (player: any, options: any) {
     super(player, options)
   }
 
index aedc641e4af28625e3e2bcc7cc4ad2b415f8515c..ee8a6cd81c8697ca626ff73ae3aa7d2d6ec09db9 100644 (file)
@@ -4,7 +4,7 @@ const Component: VideoJSComponentInterface = videojsUntyped.getComponent('Compon
 
 class PeerTubeLoadProgressBar extends Component {
 
-  constructor (player, options) {
+  constructor (player: any, options: any) {
     super(player, options)
     this.partEls_ = []
     this.on(player, 'progress', this.update)
index 792662b6c1f9c3cc7459ba4ca17558bd7266f95c..ef9e7fcc06895998e22afbe10671ebb7c7edd8a2 100644 (file)
@@ -75,12 +75,12 @@ function getVideojsOptions (options: {
         enableVolumeScroll: false,
         enableModifiersForNumbers: false,
 
-        fullscreenKey: function (event) {
+        fullscreenKey: function (event: any) {
           // fullscreen with the f key or Ctrl+Enter
           return event.key === 'f' || (event.ctrlKey && event.key === 'Enter')
         },
 
-        seekStep: function (event) {
+        seekStep: function (event: any) {
           // mimic VLC seek behavior, and default to 5 (original value is 5).
           if (event.ctrlKey && event.altKey) {
             return 5 * 60
@@ -95,26 +95,26 @@ function getVideojsOptions (options: {
 
         customKeys: {
           increasePlaybackRateKey: {
-            key: function (event) {
+            key: function (event: any) {
               return event.key === '>'
             },
-            handler: function (player) {
+            handler: function (player: any) {
               player.playbackRate((player.playbackRate() + 0.1).toFixed(2))
             }
           },
           decreasePlaybackRateKey: {
-            key: function (event) {
+            key: function (event: any) {
               return event.key === '<'
             },
-            handler: function (player) {
+            handler: function (player: any) {
               player.playbackRate((player.playbackRate() - 0.1).toFixed(2))
             }
           },
           frameByFrame: {
-            key: function (event) {
+            key: function (event: any) {
               return event.key === '.'
             },
-            handler: function (player, options, event) {
+            handler: function (player: any) {
               player.pause()
               // Calculate movement distance (assuming 30 fps)
               const dist = 1 / 30
index 5cebab6d9a65f03f98c01827565bdfb1a5f62c0d..03def186e57b4e3fd5d48346c229a31ae354042c 100644 (file)
@@ -1,11 +1,11 @@
-import * as videojs from 'video.js'
+const videojs = require('video.js')
 import * as WebTorrent from 'webtorrent'
 import { VideoFile } from '../../../../shared/models/videos/video.model'
 import { renderVideo } from './video-renderer'
 import './settings-menu-button'
 import { PeertubePluginOptions, UserWatching, VideoJSCaption, VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings'
 import { isMobile, timeToInt, videoFileMaxByResolution, videoFileMinByResolution } from './utils'
-import * as CacheChunkStore from 'cache-chunk-store'
+const CacheChunkStore = require('cache-chunk-store')
 import { PeertubeChunkStore } from './peertube-chunk-store'
 import {
   getAverageBandwidthInStore,
@@ -61,11 +61,11 @@ class PeerTubePlugin extends Plugin {
 
   private player: any
   private currentVideoFile: VideoFile
-  private torrent: WebTorrent.Torrent
+  private torrent: any
   private videoCaptions: VideoJSCaption[]
 
-  private renderer
-  private fakeRenderer
+  private renderer: any
+  private fakeRenderer: any
   private destoyingFakeRenderer = false
 
   private autoResolution = true
@@ -73,17 +73,17 @@ class PeerTubePlugin extends Plugin {
   private isAutoResolutionObservation = false
   private playerRefusedP2P = false
 
-  private videoViewInterval
-  private torrentInfoInterval
-  private autoQualityInterval
-  private userWatchingVideoInterval
-  private addTorrentDelay
-  private qualityObservationTimer
-  private runAutoQualitySchedulerTimer
+  private videoViewInterval: any
+  private torrentInfoInterval: any
+  private autoQualityInterval: any
+  private userWatchingVideoInterval: any
+  private addTorrentDelay: any
+  private qualityObservationTimer: any
+  private runAutoQualitySchedulerTimer: any
 
   private downloadSpeeds: number[] = []
 
-  constructor (player: videojs.Player, options: PeertubePluginOptions) {
+  constructor (player: any, options: PeertubePluginOptions) {
     super(player, options)
 
     // Disable auto play on iOS
@@ -273,7 +273,7 @@ class PeerTubePlugin extends Plugin {
 
     const oldTorrent = this.torrent
     const torrentOptions = {
-      store: (chunkLength, storeOpts) => new CacheChunkStore(new PeertubeChunkStore(chunkLength, storeOpts), {
+      store: (chunkLength: any, storeOpts: any) => new CacheChunkStore(new PeertubeChunkStore(chunkLength, storeOpts), {
         max: 100
       })
     }
@@ -304,7 +304,7 @@ class PeerTubePlugin extends Plugin {
 
           if (err) return this.fallbackToHttp(options, done)
 
-          return this.tryToPlay(err => {
+          return this.tryToPlay((err: Error) => {
             if (err) return done(err)
 
             if (options.seek) this.seek(options.seek)
@@ -316,7 +316,7 @@ class PeerTubePlugin extends Plugin {
       }, options.delay || 0)
     })
 
-    this.torrent.on('error', err => console.error(err))
+    this.torrent.on('error', (err: any) => console.error(err))
 
     this.torrent.on('warning', (err: any) => {
       // 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 {
     const playPromise = this.player.play()
     if (playPromise !== undefined) {
       return playPromise.then(done)
-                        .catch(err => {
+                        .catch((err: Error) => {
                           if (err.message.indexOf('The play() request was interrupted by a call to pause()') !== -1) {
                             return
                           }
@@ -627,7 +627,7 @@ class PeerTubePlugin extends Plugin {
       this.player.options_.inactivityTimeout = saveInactivityTimeout
     }
 
-    const settingsDialog = this.player.children_.find(c => c.name_ === 'SettingsDialog')
+    const settingsDialog = this.player.children_.find((c: any) => c.name_ === 'SettingsDialog')
 
     this.player.controlBar.on('mouseenter', () => disableInactivity())
     settingsDialog.on('mouseenter', () => disableInactivity())
@@ -641,7 +641,7 @@ class PeerTubePlugin extends Plugin {
     return this.videoFiles[Math.floor(this.videoFiles.length / 2)]
   }
 
-  private stopTorrent (torrent: WebTorrent.Torrent) {
+  private stopTorrent (torrent: any) {
     torrent.pause()
     // Pause does not remove actual peers (in particular the webseed peer)
     torrent.removePeer(torrent[ 'ws' ])
@@ -703,7 +703,7 @@ class PeerTubePlugin extends Plugin {
       const percent = time / this.player_.duration()
       return percent >= 1 ? 1 : percent
     }
-    SeekBar.prototype.handleMouseMove = function handleMouseMove (event) {
+    SeekBar.prototype.handleMouseMove = function handleMouseMove (event: any) {
       let newTime = this.calculateDistance(event) * this.player_.duration()
       if (newTime === this.player_.duration()) {
         newTime = newTime - 0.1
index b117007aff7386aca34100e59b4ef2a2ee1b5db1..98a33077d2a9e83446314985529dbe94fb0f3e13 100644 (file)
@@ -1,4 +1,4 @@
-import * as videojs from 'video.js'
+const videojs = require('video.js')
 import { VideoFile } from '../../../../shared/models/videos/video.model'
 import { PeerTubePlugin } from './peertube-videojs-plugin'
 
@@ -11,9 +11,9 @@ declare namespace videojs {
 interface VideoJSComponentInterface {
   _player: videojs.Player
 
-  new (player: videojs.Player, options?: any)
+  new (player: videojs.Player, options?: any): any
 
-  registerComponent (name: string, obj: any)
+  registerComponent (name: string, obj: any): any
 }
 
 type VideoJSCaption = {
index d53a2415196c39af443a21ca78e6bd698d12e415..91818efc9472be563188a629a29d652ddff14d98 100644 (file)
@@ -1,4 +1,3 @@
-import * as videojs from 'video.js'
 import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings'
 import { ResolutionMenuItem } from './resolution-menu-item'
 
@@ -7,7 +6,7 @@ const MenuButton: VideoJSComponentInterface = videojsUntyped.getComponent('MenuB
 class ResolutionMenuButton extends MenuButton {
   label: HTMLElement
 
-  constructor (player: videojs.Player, options) {
+  constructor (player: any, options: any) {
     super(player, options)
     this.player = player
 
index 0ab0f53b54b13109d45aa98de3f47fe3ae48a258..afe490abbfe6ede93fedc33843229d219ed5c8a1 100644 (file)
@@ -1,10 +1,9 @@
-import * as videojs from 'video.js'
 import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings'
 
 const MenuItem: VideoJSComponentInterface = videojsUntyped.getComponent('MenuItem')
 class ResolutionMenuItem extends MenuItem {
 
-  constructor (player: videojs.Player, options) {
+  constructor (player: any, options: any) {
     const currentResolutionId = player.peertube().getCurrentResolutionId()
     options.selectable = true
     options.selected = options.id === currentResolutionId
@@ -18,7 +17,7 @@ class ResolutionMenuItem extends MenuItem {
     player.peertube().on('autoResolutionUpdate', () => this.updateSelection())
   }
 
-  handleClick (event) {
+  handleClick (event: any) {
     if (this.id === -1 && this.player_.peertube().isAutoResolutionForbidden()) return
 
     super.handleClick(event)
index b51c52506b44ed131281049dc94caa1aaed917bb..f0ccb5862b74936f7e6f7ff49df9f53432a0a8ea 100644 (file)
@@ -1,7 +1,7 @@
 // Author: Yanko Shterev
 // Thanks https://github.com/yshterev/videojs-settings-menu
 
-import * as videojs from 'video.js'
+const videojs = require('video.js')
 import { SettingsMenuItem } from './settings-menu-item'
 import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings'
 import { toTitleCase } from './utils'
@@ -11,7 +11,7 @@ const Menu: VideoJSComponentInterface = videojsUntyped.getComponent('Menu')
 const Component: VideoJSComponentInterface = videojsUntyped.getComponent('Component')
 
 class SettingsButton extends Button {
-  constructor (player: videojs.Player, options) {
+  constructor (player: any, options: any) {
     super(player, options)
 
     this.playerComponent = player
@@ -48,7 +48,7 @@ class SettingsButton extends Button {
     }
   }
 
-  onDisposeSettingsItem (event, name: string) {
+  onDisposeSettingsItem (name: string) {
     if (name === undefined) {
       let children = this.menu.children()
 
@@ -74,7 +74,7 @@ class SettingsButton extends Button {
     }
   }
 
-  onAddSettingsItem (event, data) {
+  onAddSettingsItem (data: any) {
     const [ entry, options ] = data
 
     this.addMenuItem(entry, options)
@@ -120,7 +120,7 @@ class SettingsButton extends Button {
     this.resetChildren()
   }
 
-  getComponentSize (element) {
+  getComponentSize (element: any) {
     let width: number = null
     let height: number = null
 
@@ -178,7 +178,7 @@ class SettingsButton extends Button {
     this.panelChild.addChild(this.menu)
   }
 
-  addMenuItem (entry, options) {
+  addMenuItem (entry: any, options: any) {
     const openSubMenu = function () {
       if (videojsUntyped.dom.hasClass(this.el_, 'open')) {
         videojsUntyped.dom.removeClass(this.el_, 'open')
@@ -218,7 +218,7 @@ class SettingsButton extends Button {
 }
 
 class SettingsPanel extends Component {
-  constructor (player: videojs.Player, options) {
+  constructor (player: any, options: any) {
     super(player, options)
   }
 
@@ -232,7 +232,7 @@ class SettingsPanel extends Component {
 }
 
 class SettingsPanelChild extends Component {
-  constructor (player: videojs.Player, options) {
+  constructor (player: any, options: any) {
     super(player, options)
   }
 
@@ -246,7 +246,7 @@ class SettingsPanelChild extends Component {
 }
 
 class SettingsDialog extends Component {
-  constructor (player: videojs.Player, options) {
+  constructor (player: any, options: any) {
     super(player, options)
     this.hide()
   }
index 665ce6fc2069146bc27683ab9965b1cba81304da..2d752b62ed671a286ce01cbfdb058cf61cbbb2bc 100644 (file)
@@ -1,7 +1,6 @@
 // Author: Yanko Shterev
 // Thanks https://github.com/yshterev/videojs-settings-menu
 
-import * as videojs from 'video.js'
 import { toTitleCase } from './utils'
 import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings'
 
@@ -10,7 +9,7 @@ const component: VideoJSComponentInterface = videojsUntyped.getComponent('Compon
 
 class SettingsMenuItem extends MenuItem {
 
-  constructor (player: videojs.Player, options, entry: string, menuButton: VideoJSComponentInterface) {
+  constructor (player: any, options: any, entry: string, menuButton: VideoJSComponentInterface) {
     super(player, options)
 
     this.settingsButton = menuButton
@@ -55,7 +54,7 @@ class SettingsMenuItem extends MenuItem {
     this.transitionEndHandler = this.onTransitionEnd.bind(this)
   }
 
-  onSubmenuClick (event) {
+  onSubmenuClick (event: any) {
     let target = null
 
     if (event.type === 'tap') {
@@ -150,7 +149,7 @@ class SettingsMenuItem extends MenuItem {
    *
    * @method PrefixedEvent
    */
-  PrefixedEvent (element, type, callback, action = 'addEvent') {
+  PrefixedEvent (element: any, type: any, callback: any, action = 'addEvent') {
     let prefix = ['webkit', 'moz', 'MS', 'o', '']
 
     for (let p = 0; p < prefix.length; p++) {
@@ -166,7 +165,7 @@ class SettingsMenuItem extends MenuItem {
     }
   }
 
-  onTransitionEnd (event) {
+  onTransitionEnd (event: any) {
     if (event.propertyName !== 'margin-right') {
       return
     }
@@ -229,7 +228,7 @@ class SettingsMenuItem extends MenuItem {
     )
   }
 
-  update (event?: Event) {
+  update (event?: any) {
     let target = null
     let subMenu = this.subMenu.name()
 
index 5cf0b64255063ee0e101bf7529b2ad47a91ce6f7..b761f6030dd9de3c1aa620732b515911c7d28f05 100644 (file)
@@ -6,7 +6,7 @@ class TheaterButton extends Button {
 
   private static readonly THEATER_MODE_CLASS = 'vjs-theater-enabled'
 
-  constructor (player, options) {
+  constructor (player: any, options: any) {
     super(player, options)
 
     const enabled = getStoredTheater()
index cf4f60f5587d326f16331c98062b7b71a1afdf83..46081c0d2ede0167c08721b55343320d41880693 100644 (file)
@@ -12,7 +12,7 @@ const dictionaryBytes: Array<{max: number, type: string}> = [
   { max: 1073741824, type: 'MB' },
   { max: 1.0995116e12, type: 'GB' }
 ]
-function bytes (value) {
+function bytes (value: any) {
   const format = dictionaryBytes.find(d => value < d.max) || dictionaryBytes[dictionaryBytes.length - 1]
   const calc = Math.floor(value / (format.max / 1024)).toString()
 
index 2cb05a4482b821966b439cf27e341b381c3070b3..a3415937b96e9f7e602ea176ab77a833a82cc21a 100644 (file)
@@ -1,9 +1,9 @@
 // Thanks: https://github.com/feross/render-media
 // TODO: use render-media once https://github.com/feross/render-media/issues/32 is fixed
 
-import * as MediaElementWrapper from 'mediasource'
+const MediaElementWrapper = require('mediasource')
 import { extname } from 'path'
-import * as videostream from 'videostream'
+const videostream = require('videostream')
 
 const VIDEOSTREAM_EXTS = [
   '.m4a',
@@ -17,7 +17,7 @@ type RenderMediaOptions = {
 }
 
 function renderVideo (
-  file,
+  file: any,
   elem: HTMLVideoElement,
   opts: RenderMediaOptions,
   callback: (err: Error, renderer: any) => void
@@ -27,11 +27,11 @@ function renderVideo (
   return renderMedia(file, elem, opts, callback)
 }
 
-function renderMedia (file, elem: HTMLVideoElement, opts: RenderMediaOptions, callback: (err: Error, renderer?: any) => void) {
+function renderMedia (file: any, elem: HTMLVideoElement, opts: RenderMediaOptions, callback: (err: Error, renderer?: any) => void) {
   const extension = extname(file.name).toLowerCase()
-  let preparedElem = undefined
+  let preparedElem: any = undefined
   let currentTime = 0
-  let renderer
+  let renderer: any
 
   try {
     if (VIDEOSTREAM_EXTS.indexOf(extension) >= 0) {
@@ -45,7 +45,7 @@ function renderMedia (file, elem: HTMLVideoElement, opts: RenderMediaOptions, ca
 
   function useVideostream () {
     prepareElem()
-    preparedElem.addEventListener('error', function onError (err) {
+    preparedElem.addEventListener('error', function onError (err: Error) {
       preparedElem.removeEventListener('error', onError)
 
       return callback(err)
@@ -58,7 +58,7 @@ function renderMedia (file, elem: HTMLVideoElement, opts: RenderMediaOptions, ca
     const codecs = getCodec(file.name, useVP9)
 
     prepareElem()
-    preparedElem.addEventListener('error', function onError (err) {
+    preparedElem.addEventListener('error', function onError (err: Error) {
       preparedElem.removeEventListener('error', onError)
 
       // Try with vp9 before returning an error
@@ -102,7 +102,7 @@ function renderMedia (file, elem: HTMLVideoElement, opts: RenderMediaOptions, ca
   }
 }
 
-function validateFile (file) {
+function validateFile (file: any) {
   if (file == null) {
     throw new Error('file cannot be null or undefined')
   }
index deef253ceab4207387cafb988d958caece9ae583..5b9d0a40135a24b9d9ea5d848c17df082ac94bd1 100644 (file)
@@ -65,7 +65,7 @@ class WebtorrentInfoButton extends Button {
     subDivHttp.appendChild(subDivHttpText)
     div.appendChild(subDivHttp)
 
-    this.player_.peertube().on('torrentInfo', (event, data) => {
+    this.player_.peertube().on('torrentInfo', (data: any) => {
       // We are in HTTP fallback
       if (!data) {
         subDivHttp.className = 'vjs-peertube-displayed'
index f456e89c5d799e6097ae1a78a5b11468bb24a6ed..dee962180896dbf66229d4a7ddab430ca6666345 100644 (file)
@@ -8,7 +8,7 @@ import { hmrBootstrap } from './hmr'
 import { getDevLocale, isOnDevLocale } from '@app/shared/i18n/i18n-utils'
 import { buildFileLocale } from '../../shared'
 
-let providers = []
+let providers: any[] = []
 if (environment.production) {
   enableProdMode()
 }
index eec30760df211f2c3eee5c31301f5770cc98ef22..dfe45b59119d21c8a37e8b46db696937668965b3 100644 (file)
  * BROWSER POLYFILLS
  */
 
-/** IE9, IE10 and IE11 requires all of the following polyfills. **/
+/**
+ * IE9, IE10 and IE11 requires all of the following polyfills.
+ */
 
 // For Google Bot
-import 'core-js/es6/symbol';
-import 'core-js/es6/object';
-import 'core-js/es6/function';
-import 'core-js/es6/parse-int';
-import 'core-js/es6/parse-float';
-import 'core-js/es6/number';
-import 'core-js/es6/math';
-import 'core-js/es6/string';
-import 'core-js/es6/date';
-import 'core-js/es6/array';
-import 'core-js/es6/regexp';
-import 'core-js/es6/map';
-import 'core-js/es6/weak-map';
-import 'core-js/es6/set';
-import 'core-js/es7/object';
+import 'core-js/es6/symbol'
+import 'core-js/es6/object'
+import 'core-js/es6/function'
+import 'core-js/es6/parse-int'
+import 'core-js/es6/parse-float'
+import 'core-js/es6/number'
+import 'core-js/es6/math'
+import 'core-js/es6/string'
+import 'core-js/es6/date'
+import 'core-js/es6/array'
+import 'core-js/es6/regexp'
+import 'core-js/es6/map'
+import 'core-js/es6/weak-map'
+import 'core-js/es6/set'
+import 'core-js/es7/object'
 
 /** IE10 and IE11 requires the following for NgClass support on SVG elements */
 // import 'classlist.js';  // Run `npm install --save classlist.js`.
@@ -43,17 +45,18 @@ import 'core-js/es7/object';
 /** IE10 and IE11 requires the following for the Reflect API. */
 
 // For Google Bot
-import 'core-js/es6/reflect';
+import 'core-js/es6/reflect'
 
-/** Evergreen browsers require these. **/
+/**
+ * Evergreen browsers require these.
+ */
 // Used for reflect-metadata in JIT. If you use AOT (and only Angular decorators), you can remove.
 import 'core-js/es7/reflect'
 
-
 /**
  * Required to support Web Animations `@angular/platform-browser/animations`.
  * Needed for: All but Chrome, Firefox and Opera. http://caniuse.com/#feat=web-animation
- **/
+ */
 // import 'web-animations-js';  // Run `npm install --save web-animations-js`.
 
 /**
@@ -70,19 +73,17 @@ import 'core-js/es7/reflect'
 */
 // (window as any).__Zone_enable_cross_context_check = true;
 
-
 /***************************************************************************************************
  * Zone JS is required by default for Angular itself.
  */
 import 'zone.js/dist/zone'  // Included with Angular CLI.
 
-
 /***************************************************************************************************
  * APPLICATION IMPORTS
  */
 
 // global/process polyfills
 
-;(window as any).global = window;
-;(window as any).process = require('process/');
-;(window as any).Buffer = require('buffer/').Buffer;
+;(window as any).global = window
+;(window as any).process = require('process/')
+;(window as any).Buffer = require('buffer/').Buffer
index 899b69bf3a86c1e12f694a92cd400effd6ba2a4d..086a60e32b0075e945f7fb04c4c6bd49d1382eda 100644 (file)
@@ -1,3 +1,3 @@
 // Does nothing. Used to shim out node.js modules
 // which are no-ops in the browser.
-export const NOOP = 0
\ No newline at end of file
+export const NOOP = 0
index ea3436c7c847b026b63b7a2e9bf8e5d8e0120a5b..e5a2d208a369336b67a664135ee9a61818fc6810 100644 (file)
@@ -17,7 +17,7 @@ import 'core-js/es6/set'
 // For google bot that uses Chrome 41 and does not understand fetch
 import 'whatwg-fetch'
 
-import * as vjs from 'video.js'
+const vjs = require('video.js')
 import * as Channel from 'jschannel'
 
 import { peertubeTranslate, ResultList, VideoDetails } from '../../../../shared'
@@ -304,7 +304,7 @@ class PeerTubeEmbed {
 
     this.playerOptions = videojsOptions
     this.player = vjs(this.videoContainerId, videojsOptions, () => {
-      this.player.on('customError', (event, data) => this.handleError(data.err))
+      this.player.on('customError', (data: any) => this.handleError(data.err))
 
       window[ 'videojsPlayer' ] = this.player
 
index dba331e90bce4de676f320064fe41449ce1f9d48..b750c2ee6a734151f98d667a69b290b624d7c252 100644 (file)
@@ -66,11 +66,11 @@ window.addEventListener('load', async () => {
     updateRates()
   })
 
-  let updateResolutions = resolutions => {
+  let updateResolutions = ((resolutions: any) => {
     let resolutionListEl = document.querySelector('#resolution-list')
     resolutionListEl.innerHTML = ''
 
-    resolutions.forEach(resolution => {
+    resolutions.forEach((resolution: any) => {
       if (resolution.active) {
         let itemEl = document.createElement('strong')
         itemEl.innerText = `${resolution.label} (active)`
@@ -87,7 +87,7 @@ window.addEventListener('load', async () => {
         resolutionListEl.appendChild(itemEl)
       }
     })
-  }
+  })
 
   player.getResolutions().then(
     resolutions => updateResolutions(resolutions))
index ef5c7bd620579296a1290b1a0b04c96d72e57bc6..9615434ac686445331e67f8942a880f4a5dbfb2e 100644 (file)
@@ -2,4 +2,5 @@
 declare var module: NodeModule;
 interface NodeModule {
   id: string;
+  [key: string]: any
 }
index 431ea7d91ba05946b0039b90a0db41ced37908db..ef80445db05dec5ccf550b14a6bc0a28446c6307 100644 (file)
@@ -7,7 +7,8 @@
     "moduleResolution": "node",
     "emitDecoratorMetadata": true,
     "experimentalDecorators": true,
-    "noImplicitAny": false,
+    "noImplicitAny": true,
+    "suppressImplicitAnyIndexErrors":true,
     "alwaysStrict": true,
     "target": "es5",
     "typeRoots": [
index 5c3249452e1a20b7ba0ca8ff163c33a4d456f191..9278c043b660407974b5138b3963968eb15880ae 100644 (file)
@@ -1,6 +1,6 @@
 export const LOCALE_FILES = [ 'player', 'server' ]
 
-export const I18N_LOCALES = {
+export const I18N_LOCALES: any = {
   'en-US': 'English',
   'fr-FR': 'Français',
   'eu-ES': 'Euskara',
@@ -17,7 +17,7 @@ export const I18N_LOCALES = {
   'zh-Hans-CN': '简体中文(中国)'
 }
 
-const I18N_LOCALE_ALIAS = {
+const I18N_LOCALE_ALIAS: any = {
   'en': 'en-US',
   'fr': 'fr-FR',
   'eu': 'eu-ES',
index ee009d94c7fac8d395ed15299ae18b50add1e4a2..8c87857634c6ed6588e3eaa76783a1ed0060ffd1 100644 (file)
@@ -15,4 +15,5 @@ export interface VideosOverview {
     tag: string
     videos: Video[]
   }[]
+  [key: string]: any
 }
index 3afd36fcdba282dc35e6af1fde29b563e22b0504..c5156d9f3a5d224c081ef9fe3d7a4d47bd9fa723 100644 (file)
@@ -55,6 +55,7 @@ export interface CustomConfig {
       '480p': boolean
       '720p': boolean
       '1080p': boolean
+      [key: string]: boolean
     }
   }
 
index 8147dc48e8c6eedec90f89cf09eb845dc7482ab5..06a66020631dbed26dc1ade9169bce16d758d7b1 100644 (file)
@@ -20,4 +20,5 @@ export interface User {
   blockedReason?: string
 
   videoQuotaUsed?: number
+  [key: string]: any
 }