From bed4d95b21a2fc5b315f925fe4543840b6227726 Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Fri, 5 Jan 2024 22:40:20 +0100 Subject: [PATCH 01/15] @uppy/audio: refactor to TypeScript --- .../@uppy/audio/src/{Audio.jsx => Audio.tsx} | 192 +++++++++++------- ...SourceSelect.jsx => AudioSourceSelect.tsx} | 0 .../{DiscardButton.jsx => DiscardButton.tsx} | 0 ...ssionsScreen.jsx => PermissionsScreen.tsx} | 0 .../{RecordButton.jsx => RecordButton.tsx} | 0 ...ecordingLength.jsx => RecordingLength.tsx} | 2 +- ...ecordingScreen.jsx => RecordingScreen.tsx} | 12 +- .../{SubmitButton.jsx => SubmitButton.tsx} | 0 .../audio-oscilloscope/{index.js => index.ts} | 0 ...tSeconds.test.js => formatSeconds.test.ts} | 2 +- .../{formatSeconds.js => formatSeconds.ts} | 0 packages/@uppy/audio/src/index.js | 1 - packages/@uppy/audio/src/index.ts | 1 + .../@uppy/audio/src/{locale.js => locale.ts} | 4 +- ....test.js => supportsMediaRecorder.test.ts} | 2 +- ...iaRecorder.js => supportsMediaRecorder.ts} | 0 packages/@uppy/audio/tsconfig.build.json | 35 ++++ packages/@uppy/audio/tsconfig.json | 30 +++ 18 files changed, 197 insertions(+), 84 deletions(-) rename packages/@uppy/audio/src/{Audio.jsx => Audio.tsx} (62%) rename packages/@uppy/audio/src/{AudioSourceSelect.jsx => AudioSourceSelect.tsx} (100%) rename packages/@uppy/audio/src/{DiscardButton.jsx => DiscardButton.tsx} (100%) rename packages/@uppy/audio/src/{PermissionsScreen.jsx => PermissionsScreen.tsx} (100%) rename packages/@uppy/audio/src/{RecordButton.jsx => RecordButton.tsx} (100%) rename packages/@uppy/audio/src/{RecordingLength.jsx => RecordingLength.tsx} (88%) rename packages/@uppy/audio/src/{RecordingScreen.jsx => RecordingScreen.tsx} (90%) rename packages/@uppy/audio/src/{SubmitButton.jsx => SubmitButton.tsx} (100%) rename packages/@uppy/audio/src/audio-oscilloscope/{index.js => index.ts} (100%) rename packages/@uppy/audio/src/{formatSeconds.test.js => formatSeconds.test.ts} (88%) rename packages/@uppy/audio/src/{formatSeconds.js => formatSeconds.ts} (100%) delete mode 100644 packages/@uppy/audio/src/index.js create mode 100644 packages/@uppy/audio/src/index.ts rename packages/@uppy/audio/src/{locale.js => locale.ts} (96%) rename packages/@uppy/audio/src/{supportsMediaRecorder.test.js => supportsMediaRecorder.test.ts} (92%) rename packages/@uppy/audio/src/{supportsMediaRecorder.js => supportsMediaRecorder.ts} (100%) create mode 100644 packages/@uppy/audio/tsconfig.build.json create mode 100644 packages/@uppy/audio/tsconfig.json diff --git a/packages/@uppy/audio/src/Audio.jsx b/packages/@uppy/audio/src/Audio.tsx similarity index 62% rename from packages/@uppy/audio/src/Audio.jsx rename to packages/@uppy/audio/src/Audio.tsx index f383508bd7..e7088c73fe 100644 --- a/packages/@uppy/audio/src/Audio.jsx +++ b/packages/@uppy/audio/src/Audio.tsx @@ -1,44 +1,65 @@ import { h } from 'preact' -import { UIPlugin } from '@uppy/core' +import { UIPlugin, type UIPluginOptions } from '@uppy/core' +import type { Body, Meta } from '@uppy/utils/lib/UppyFile' import getFileTypeExtension from '@uppy/utils/lib/getFileTypeExtension' -import supportsMediaRecorder from './supportsMediaRecorder.js' -import RecordingScreen from './RecordingScreen.jsx' -import PermissionsScreen from './PermissionsScreen.jsx' -import locale from './locale.js' - +import supportsMediaRecorder from './supportsMediaRecorder.ts' +import RecordingScreen from './RecordingScreen.tsx' +import PermissionsScreen from './PermissionsScreen.tsx' +import locale from './locale.ts' +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore We don't want TS to generate types for the package.json import packageJson from '../package.json' +interface AudioOptions extends UIPluginOptions {} + /** * Audio recording plugin */ -export default class Audio extends UIPlugin { +export default class Audio extends UIPlugin< + AudioOptions, + M, + B +> { static VERSION = packageJson.version - #stream = null + private recordingLengthTimer: ReturnType + + #stream?: MediaStream #audioActive = false - #recordingChunks = null + #recordingChunks?: Blob[] - #recorder = null + #recorder?: MediaRecorder - #capturedMediaFile = null + #capturedMediaFile?: File - #mediaDevices = null + #mediaDevices - #supportsUserMedia = null + #supportsUserMedia - constructor (uppy, opts) { + constructor(uppy: Uppy, opts: AudioOptions) { super(uppy, opts) this.#mediaDevices = navigator.mediaDevices this.#supportsUserMedia = this.#mediaDevices != null this.id = this.opts.id || 'Audio' this.type = 'acquirer' - this.icon = () => ( -