From 8123e22fae9a1f8556ad8c74d9b151b09ba8bc6f Mon Sep 17 00:00:00 2001 From: alrickemilien Date: Tue, 4 Feb 2020 12:02:07 +0100 Subject: [PATCH] Implement typings into sdk --- package.json | 1 + src/dialog/popup.js | 2 + src/player-api.js | 4 +- src/recorder/getusermedia.js | 4 +- types/soundcloud/index.d.ts | 94 ++++++++++++++++++++++ types/soundcloud/soundcloud-tests.ts | 116 +++++++++++++++++++++++++++ types/soundcloud/tsconfig.json | 23 ++++++ types/soundcloud/tslint.json | 1 + 8 files changed, 242 insertions(+), 3 deletions(-) create mode 100644 types/soundcloud/index.d.ts create mode 100644 types/soundcloud/soundcloud-tests.ts create mode 100644 types/soundcloud/tsconfig.json create mode 100644 types/soundcloud/tslint.json diff --git a/package.json b/package.json index c2a1caa..6bc583e 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "version": "3.3.2", "description": "", "main": "sdk.js", + "types": "index.d.ts", "repository": { "type": "git", "url": "https://github.com/soundcloud/soundcloud-javascript.git" diff --git a/src/dialog/popup.js b/src/dialog/popup.js index e6832dc..1cc7a07 100644 --- a/src/dialog/popup.js +++ b/src/dialog/popup.js @@ -10,6 +10,8 @@ module.exports = { const options = {}; let stringOptions; + if (!window) return; + options.location = 1; options.width = width; options.height = height; diff --git a/src/player-api.js b/src/player-api.js index cd78ce0..531dbc8 100644 --- a/src/player-api.js +++ b/src/player-api.js @@ -23,6 +23,7 @@ module.exports = function(scaudioPlayer) { let timerId = 0; let previousPosition = null; scaudioPlayer.onChange.subscribe(({ playing, seeking, dead }) => { + if (!window) return; if (dead) { window.clearTimeout(timerId); } else if (playing !== undefined || seeking !== undefined) { @@ -30,6 +31,7 @@ module.exports = function(scaudioPlayer) { } }); function doEmit() { + if (!window) return; window.clearTimeout(timerId); if (scaudioPlayer.isPlaying() && !scaudioPlayer.isEnded()) { timerId = window.setTimeout(doEmit, TIMEUPDATE_INTERVAL); @@ -86,4 +88,4 @@ module.exports = function(scaudioPlayer) { BackboneEvents.mixin(playerApi); handleEmittingTimeEvents(); return playerApi; -} \ No newline at end of file +} diff --git a/src/recorder/getusermedia.js b/src/recorder/getusermedia.js index c501869..7f6a819 100644 --- a/src/recorder/getusermedia.js +++ b/src/recorder/getusermedia.js @@ -1,6 +1,6 @@ -const getUserMedia = global.navigator.getUserMedia || +const getUserMedia = global.navigator ? (global.navigator.getUserMedia || global.navigator.webkitGetUserMedia || - global.navigator.mozGetUserMedia; + global.navigator.mozGetUserMedia) : false; module.exports = (options, success, error) => { getUserMedia.call(global.navigator, options, success, error); diff --git a/types/soundcloud/index.d.ts b/types/soundcloud/index.d.ts new file mode 100644 index 0000000..b63e8be --- /dev/null +++ b/types/soundcloud/index.d.ts @@ -0,0 +1,94 @@ +// Type definitions for soundcloud 3.3.2 +// Project: https://github.com/soundcloud/soundcloud-javascript +// Definitions by: alrickemilien + +/// + +export default SC; + +declare namespace SC { + interface RecorderOptions { + source: string; + context?: AudioContext; + } + + export class Recorder { + constructor(options: RecorderOptions); + delete(): void; + getBuffer(): Promise; + getWAV(): Promise; + play(): Promise; + saveAs(filename: string): Promise; + start(): Promise; + stop(): void; + } + + /** + * SCAudio.Player functions + */ + export interface SCPlayer { + play: (...args: any[]) => any; + pause: (...args: any[]) => any; + seek: (...args: any[]) => any; + getVolume: (...args: any[]) => any; + setVolume: (...args: any[]) => any; + currentTime: (...args: any[]) => any; + getDuration: (...args: any[]) => any; + isBuffering: () => boolean; + isPlaying: () => boolean; + isActuallyPlaying: () => boolean; + isEnded: () => boolean; + isDead: () => boolean; + kill: (...args: any[]) => any; + hasErrored: () => boolean; + getState: () => "playing" | "ended" | "paused" | "dead" | "loading"; + } + + interface DialogOptions { + client_id: string, + redirect_uri: string, + response_type: string, + scope: string, + display: string, + } + + interface SCOptions { + oauth_token?: string; + client_id?: string; + redirect_uri?: string; + baseURL?: string; + connectURL?: string; + } + + export function connect(options?: { + client_id?: string, + redirect_uri?: string + }): Promise; + export function connectCallback(): void; + export function get(path: string, params: FormData | any): Promise; + export function initialize(options: SCOptions): void; + export function isConnected(): boolean; + + export function oEmbed(url: string, options?: { + element?: string, + scope?: string, + url?: string + }): Promise; + + export function post(path: string, params: FormData | any): Promise; + export function put(path: string, params: FormData | any): Promise; + + // delete is a keyword in typescript leading to this trick + function _delete(path: string, params: FormData | any): Promise; + export { _delete as delete }; + + export function resolve(url: string): Promise; + export function stream(trackPath: string, secretToken: string): Promise; + export function upload(options: { + title: string, + asset_data?: string, + file?: string, + progress?: (...args: any[]) => any, + }): Promise; +} + diff --git a/types/soundcloud/soundcloud-tests.ts b/types/soundcloud/soundcloud-tests.ts new file mode 100644 index 0000000..a61058b --- /dev/null +++ b/types/soundcloud/soundcloud-tests.ts @@ -0,0 +1,116 @@ +import SC from "soundcloud"; + +/** + * SC.Recorder + */ + +const rc: SC.Recorder = new SC.Recorder({ + source: 'yayayaya', + context: new AudioContext(), +}); + +/** +* API +*/ + +const scOpt = { + oauth_token: 'yayayaya', + client_id: 'yayayaya', + redirect_uri: 'yayayaya', + baseURL: 'yayayaya', + connectURL: 'yayayaya', +}; + +SC.initialize(scOpt); + +console.log('SC.isConnected() => ', SC.isConnected()) + +SC.connect({ + client_id: 'dudul', + redirect_uri: 'http://google.com', +}) + .then(() => { + try { + return SC.get('http://souncloud.com', scOpt); + } catch (error) { + console.error(error); + return Promise.resolve(); + } + }) + .then(() => { + try { + return SC.post('http://souncloud.com', scOpt); + } catch (error) { + console.error(error); + return Promise.resolve(); + } + }) + .then(() => { + try { + return SC.put('http://souncloud.com', scOpt); + } catch (error) { + console.error(error); + return Promise.resolve(); + } + }) + .then(() => { + try { + return SC.delete('http://souncloud.com', scOpt); + } catch (error) { + console.error(error); + return Promise.resolve(); + } + }) + .then(() => { + try { + return SC.resolve('http://souncloud.com'); + } catch (error) { + console.error(error); + return Promise.resolve(); + } + }).then(() => { + try { + return SC.oEmbed('http://souncloud.com', { + element: 'element', + scope: 'read', + url: 'http://souncloud.com' + }); + } catch (error) { + console.error(error); + return Promise.resolve({}); + } + }).then(() => { + try { + return SC.oEmbed('http://souncloud.com', { + element: 'element', + scope: 'read', + url: 'http://souncloud.com' + }); + } catch (error) { + console.error(error); + return Promise.resolve({}); + } + }).then(() => { + try { + return SC.stream('abcdefg', 'token'); + } catch (error) { + console.error(error); + return Promise.resolve({}); + } + }).then(() => { + try { + return SC.upload({ + title: 'Upload title', + asset_data: 'data', + file: 'SomeFile.mp3', + progress: (p) => console.log('Progress: ' + p), + }); + } catch (error) { + console.error(error); + return Promise.resolve(); + } + }); + + + + diff --git a/types/soundcloud/tsconfig.json b/types/soundcloud/tsconfig.json new file mode 100644 index 0000000..335f37b --- /dev/null +++ b/types/soundcloud/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictFunctionTypes": true, + "strictNullChecks": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "soundcloud-tests.ts" + ] +} diff --git a/types/soundcloud/tslint.json b/types/soundcloud/tslint.json new file mode 100644 index 0000000..3db14f8 --- /dev/null +++ b/types/soundcloud/tslint.json @@ -0,0 +1 @@ +{ "extends": "dtslint/dt.json" }