From b0e7d518751f660f11b245dbbc08dd19bc20976a Mon Sep 17 00:00:00 2001 From: higuri Date: Thu, 27 Sep 2018 22:47:48 +0900 Subject: [PATCH] wavesurfer.js: Initial definitions --- types/wavesurfer.js/index.d.ts | 172 +++++++++++++++++++++ types/wavesurfer.js/tsconfig.json | 24 +++ types/wavesurfer.js/tslint.json | 1 + types/wavesurfer.js/wavesurfer.js-tests.ts | 54 +++++++ 4 files changed, 251 insertions(+) create mode 100644 types/wavesurfer.js/index.d.ts create mode 100644 types/wavesurfer.js/tsconfig.json create mode 100644 types/wavesurfer.js/tslint.json create mode 100644 types/wavesurfer.js/wavesurfer.js-tests.ts diff --git a/types/wavesurfer.js/index.d.ts b/types/wavesurfer.js/index.d.ts new file mode 100644 index 0000000000..c468df6e05 --- /dev/null +++ b/types/wavesurfer.js/index.d.ts @@ -0,0 +1,172 @@ +// Type definitions for wavesurfer.js 2.0 +// Project: https://github.com/katspaugh/wavesurfer.js +// Definitions by: Yusuke Higuchi +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +// TypeScript Version: 2.2 + +export as namespace WaveSurfer; + +export = WaveSurfer; + +declare class Observer { + constructor(); + fireEvent(eventName: string, ...args: any[]): void; + on(eventName: string, callback: (...args: any[]) => void): WaveSurfer.ListenerDescriptor; + once(eventName: string, callback: (...args: any[]) => void): WaveSurfer.ListenerDescriptor; + un(eventName: string, callback: (...args: any[]) => void): void; + unAll(): void; +} + +declare class WaveSurfer extends Observer { + constructor(params: WaveSurfer.WaveSurferParams); + static util: WaveSurfer.WaveSurferUtil; + static create(params: WaveSurfer.WaveSurferParams): WaveSurfer; + // [x: string]: any + // pluginName -> WaveSurferPlugin + // propertyNameAddedByPlugin -> any + [x: string]: any; + util: WaveSurfer.WaveSurferUtil; + destroy(): void; + empty(): void; + getCurrentTime(): number; + getDuration(): number; + getPlaybackRate(): number; + getVolume(): number; + getMute(): boolean; + getFilters(): AudioNode[]; + getWaveColor(): string; + exportPCM(length: number, accuracy: number, noWindow?: boolean, start?: number): string; + exportImage(format: string, quality: number): string; + init(): void; + isPlaying(): boolean; + isReady(): boolean; + load(url: string | HTMLMediaElement, peaks?: ReadonlyArray | ReadonlyArray>, preload?: string, duration?: number): void; + loadBlob(url: Blob | File): void; + pause(): Promise | undefined; + play(start?: number, end?: number): Promise | undefined; + playPause(): Promise | undefined; + seekAndCenter(progress: number): void; + seekTo(progress: number): void; + setHeight(height: number): void; + setPlaybackRate(rate: number): void; + setVolume(newVolume: number): void; + setMute(mute: boolean): void; + setWaveColor(color: string): void; + setSinkId(deviceId: string): void; + skip(offset: number): void; + skipBackward(seconds?: number): void; + skipForward(seconds?: number): void; + stop(): void; + toggleInteraction(): void; + toggleMute(): void; + toggleScroll(): void; + zoom(pxPerSec?: number): void; +} + +declare namespace WaveSurfer { + class WaveRenderer extends Observer { + constructor(container: HTMLElement, params: WaveSurferParams); + height: number; + width: number; + wrapper: HTMLElement; + clearWave(): void; + createWrapper(): void; + destroy(): void; + drawBars(peaks: ReadonlyArray | ReadonlyArray>, channelIndex: number, start: number, end: number): void; + drawPeaks(peaks: ReadonlyArray | ReadonlyArray>, length: number, start: number, end: number): void; + drawWave(peaks: ReadonlyArray | ReadonlyArray>, channelIndex: number, start: number, end: number): void; + getScrollX(): number; + getWidth(): number; + handleEvent(e: Event, noPrevent: boolean): number; + progress(progress: number): void; + recenter(percent: number): void; + recenterOnPosition(position: number, immediate: boolean): void; + resetScroll(): void; + setHeight(height: number): boolean; + setWidth(width: number): boolean; + style(el: HTMLElement, styles: { [x: string]: string }): HTMLElement; + updateProgress(position: number): void; + updateSize(): void; + } + + class WaveSurferPlugin { + constructor(ws: WaveSurfer, params: object); + static create(params: object): PluginDefinition; + init(): void; + destroy(): void; + } + + interface WaveSurferUtil { + ajax(options: { xhr?: XHROptions }): Observer; + extend(dest: object, ...sources: object[]): object; + frame(fn: (...args: any[]) => void): (...args: any[]) => number; + getId(): string; + max(values: ReadonlyArray): number; + min(values: ReadonlyArray): number; + Observer: Observer; + preventClick(): void; + requestAnimationFrame(): (fn: (t: number) => void) => number; + style(el: HTMLElement, styles: { [x: string]: string }): HTMLElement; + } + + interface WaveSurferParams { + audioContext?: AudioContext; + audioRate?: number; + audioScriptProcessor?: ScriptProcessorNode; + autoCenter?: boolean; + backend?: string; + barHeight?: number; + barGap?: number; + closeAudioContext?: boolean; + container: string | HTMLElement; + cursorColor?: string; + cursorWidth?: number; + fillParent?: boolean; + forceDecode?: boolean; + height?: number; + hideScrollbar?: boolean; + interact?: boolean; + loopSelection?: boolean; + maxCanvasWidth?: number; + mediaControls?: boolean; + mediaType?: string; + minPxPerSec?: number; + normalize?: boolean; + partialRender?: boolean; + pixelRatio?: number; + plugins?: PluginDefinition[]; + progressColor?: string; + removeMediaElementOnDestroy?: boolean; + renderer?: { new(container: HTMLElement, params: WaveSurferParams): WaveRenderer }; + responsive?: boolean | number; + scrollParent?: boolean; + skipLength?: number; + splitChannels?: boolean; + waveColor?: string; + xhr?: XHROptions; + } + + interface PluginDefinition { + name: string; + staticProps?: object; + deferInit?: boolean; + params: object; + instance: { new(ws: WaveSurfer, params: object): WaveSurferPlugin }; + } + + interface ListenerDescriptor { + name: string; + callback(...args: any[]): void; + un(): void; + } + + interface XHROptions { + requestHeaders?: XHRRequestHeader[]; + withCredentials?: boolean; + } + + interface XHRRequestHeader { + key: string; + value: string; + } +} diff --git a/types/wavesurfer.js/tsconfig.json b/types/wavesurfer.js/tsconfig.json new file mode 100644 index 0000000000..6a1f9ac94b --- /dev/null +++ b/types/wavesurfer.js/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6", + "dom" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "wavesurfer.js-tests.ts" + ] +} diff --git a/types/wavesurfer.js/tslint.json b/types/wavesurfer.js/tslint.json new file mode 100644 index 0000000000..3db14f85ea --- /dev/null +++ b/types/wavesurfer.js/tslint.json @@ -0,0 +1 @@ +{ "extends": "dtslint/dt.json" } diff --git a/types/wavesurfer.js/wavesurfer.js-tests.ts b/types/wavesurfer.js/wavesurfer.js-tests.ts new file mode 100644 index 0000000000..49f0136d54 --- /dev/null +++ b/types/wavesurfer.js/wavesurfer.js-tests.ts @@ -0,0 +1,54 @@ +/// +import * as fs from "fs"; +import * as WaveSurfer from "wavesurfer.js"; + +// https://www.npmjs.com/package/wavesurfer.js#api-in-examples +// - create an instance +const wavesurfer = WaveSurfer.create({ + container: "#waveform", + waveColor: "violet", + progressColor: "purple" +}); +// -- subscribe to some events +wavesurfer.on("ready", () => { + wavesurfer.play(); +}); +// -- load an audio file +wavesurfer.load("audio/sample.wav"); + +// - create an instance with "new" +const wsNewed = new WaveSurfer({ + container: "#waveform", + xhr: { + withCredentials: true + } +}); +wsNewed.init(); +// - clear the waveform +wsNewed.empty(); + +// - create an instance with plugins +class SamplePlugin { + constructor(ws: WaveSurfer, params: object) { } + static create(params: object): WaveSurfer.PluginDefinition { + return { + name: "samplePlugin", + instance: SamplePlugin, + params + }; + } + init(): void { } + destroy(): void { } + foo(): void { console.log('foo'); } +} +const wsWithPlugins = WaveSurfer.create({ + container: "#waveform", + waveColor: "violet", + plugins: [ + SamplePlugin.create({ + container: "#waveform" + }) + ] +}); +// - call plugin's method +wsWithPlugins.samplePlugin.foo();