From 5149044884bc3f8e3d135fb4eb014eb652a829a4 Mon Sep 17 00:00:00 2001 From: Dief Bell Date: Tue, 5 Nov 2019 21:47:21 +0000 Subject: [PATCH] Added types for socket.io-file package (#40119) * Added types for socket.io-file package * Added TypeScript Version comment * Fixed formatting * Fixed formatting errors * Fixed formatting errors --- types/socket.io-file/index.d.ts | 38 +++++++++++ types/socket.io-file/socket.io-file-tests.ts | 66 ++++++++++++++++++++ types/socket.io-file/tsconfig.json | 23 +++++++ types/socket.io-file/tslint.json | 1 + 4 files changed, 128 insertions(+) create mode 100644 types/socket.io-file/index.d.ts create mode 100644 types/socket.io-file/socket.io-file-tests.ts create mode 100644 types/socket.io-file/tsconfig.json create mode 100644 types/socket.io-file/tslint.json diff --git a/types/socket.io-file/index.d.ts b/types/socket.io-file/index.d.ts new file mode 100644 index 0000000000..2162b1f4f7 --- /dev/null +++ b/types/socket.io-file/index.d.ts @@ -0,0 +1,38 @@ +// Type definitions for socket.io-file 2.0 +// Project: https://github.com/rico345100/socket.io-file +// Definitions by: Dief Bell +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +// TypeScript Version: 2.3 + +import { Socket } from 'socket.io'; + +export = SocketIOFile; + +declare class SocketIOFile { + constructor(socket: Socket, options: Options); + on(event: string, cb: (fileInfo: FileInfo) => void): void; +} + +interface Options { + uploadDir: string | { [dirId: string]: string }; + maxFileSize?: number; + accepts?: string[]; + chunkSize?: number; + transmissionDelay?: number; + overwrite?: boolean; + rename?: (fileName: string, fileInfo: FileInfo) => string | string; + resume?: boolean; +} + +interface FileInfo { + name: string; + size: number; + path: string; + wrote: number; + uploadDir: string; + data: any[]; + mime: string; + estimated: number; + uploadId: string; + originalFileName: string; +} diff --git a/types/socket.io-file/socket.io-file-tests.ts b/types/socket.io-file/socket.io-file-tests.ts new file mode 100644 index 0000000000..bc76015dd3 --- /dev/null +++ b/types/socket.io-file/socket.io-file-tests.ts @@ -0,0 +1,66 @@ +"use strict"; +import express = require('express'); +const app = express(); +import http = require('http'); +const httpServer = new http.Server(app); +import io = require('socket.io'); +const socket = io(httpServer); +import SocketIOFile = require('socket.io-file'); + +app.get('/', (req, res, next) => { + res.sendFile(__dirname + '/client/index.html'); + return; +}); + +app.get('/app.js', (req, res, next) => { + res.sendFile(__dirname + '/client/app.js'); + return; +}); + +app.get('/socket.io.js', (req, res, next) => { + res.sendFile(__dirname + '/node_modules/socket.io-client/dist/socket.io.js'); + return; +}); + +app.get('/socket.io-file-client.js', (req, res, next) => { + res.sendFile(__dirname + '/node_modules/socket.io-file-client/socket.io-file-client.js'); + return; +}); + +socket.on('connection', (socket: io.Socket) => { + console.log('Socket connected.'); + + const uploader = new SocketIOFile(socket, { + // uploadDir: { // multiple directories + // music: 'data/music', + // document: 'data/document' + // }, + uploadDir: 'data', // simple directory + accepts: ['audio/mpeg', 'audio/mp3'], // chrome and some of browsers checking mp3 as 'audio/mp3', not 'audio/mpeg' + maxFileSize: 4194304, // 4 MB. default is undefined(no limit) + chunkSize: 10240, // default is 10240(1KB) + transmissionDelay: 0, // delay of each transmission, higher value saves more cpu resources, lower upload speed. default is 0(no delay) + overwrite: true // overwrite file if exists, default is true. + }); + uploader.on('start', (fileInfo) => { + console.log('Start uploading'); + console.log(fileInfo); + }); + uploader.on('stream', (fileInfo) => { + console.log(`${fileInfo.wrote} / ${fileInfo.size} byte(s)`); + }); + uploader.on('complete', (fileInfo) => { + console.log('Upload Complete.'); + console.log(fileInfo); + }); + uploader.on('error', (err) => { + console.log('Error!', err); + }); + uploader.on('abort', (fileInfo) => { + console.log('Aborted: ', fileInfo); + }); +}); + +httpServer.listen(3000, () => { + console.log('Server listening on port 3000'); +}); diff --git a/types/socket.io-file/tsconfig.json b/types/socket.io-file/tsconfig.json new file mode 100644 index 0000000000..0833d5e438 --- /dev/null +++ b/types/socket.io-file/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", + "socket.io-file-tests.ts" + ] +} diff --git a/types/socket.io-file/tslint.json b/types/socket.io-file/tslint.json new file mode 100644 index 0000000000..3db14f85ea --- /dev/null +++ b/types/socket.io-file/tslint.json @@ -0,0 +1 @@ +{ "extends": "dtslint/dt.json" }