Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migrate all Companion plugins to TS #4979

Merged
merged 8 commits into from
Mar 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions packages/@uppy/box/.npmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
tsconfig.*
62 changes: 49 additions & 13 deletions packages/@uppy/box/src/Box.jsx → packages/@uppy/box/src/Box.tsx
Original file line number Diff line number Diff line change
@@ -1,30 +1,66 @@
import { UIPlugin } from '@uppy/core'
import { Provider, getAllowedHosts, tokenStorage } from '@uppy/companion-client'
import {
Provider,
getAllowedHosts,
tokenStorage,
type CompanionPluginOptions,
} from '@uppy/companion-client'
import { UIPlugin, Uppy } from '@uppy/core'
import { ProviderViews } from '@uppy/provider-views'
import { h } from 'preact'
import { h, type ComponentChild } from 'preact'

import locale from './locale.js'
import type { UppyFile, Body, Meta } from '@uppy/utils/lib/UppyFile'
import type { UnknownProviderPluginState } from '@uppy/core/lib/Uppy.ts'
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'

export default class Box extends UIPlugin {
export type BoxOptions = CompanionPluginOptions

export default class Box<M extends Meta, B extends Body> extends UIPlugin<
BoxOptions,
M,
B,
UnknownProviderPluginState
> {
static VERSION = packageJson.version

constructor (uppy, opts) {
icon: () => JSX.Element

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I thought ComponentChild was preferable over JSX.Element, or is there an exception in this case?

Suggested change
icon: () => JSX.Element
icon: () => ComponentChild

provider: Provider<M, B>

view: ProviderViews<M, B>

storage: typeof tokenStorage

files: UppyFile<M, B>[]

constructor(uppy: Uppy<M, B>, opts: BoxOptions) {
super(uppy, opts)
this.id = this.opts.id || 'Box'
this.type = 'acquirer'
this.storage = this.opts.storage || tokenStorage
this.files = []
this.icon = () => (
<svg className="uppy-DashboardTab-iconBox" aria-hidden="true" focusable="false" width="32" height="32" viewBox="0 0 32 32">
<svg
className="uppy-DashboardTab-iconBox"
aria-hidden="true"
focusable="false"
width="32"
height="32"
viewBox="0 0 32 32"
>
<g fill="currentcolor" fillRule="nonzero">
<path d="m16.4 13.5c-1.6 0-3 0.9-3.7 2.2-0.7-1.3-2.1-2.2-3.7-2.2-1 0-1.8 0.3-2.5 0.8v-3.6c-0.1-0.3-0.5-0.7-1-0.7s-0.8 0.4-0.8 0.8v7c0 2.3 1.9 4.2 4.2 4.2 1.6 0 3-0.9 3.7-2.2 0.7 1.3 2.1 2.2 3.7 2.2 2.3 0 4.2-1.9 4.2-4.2 0.1-2.4-1.8-4.3-4.1-4.3m-7.5 6.8c-1.4 0-2.5-1.1-2.5-2.5s1.1-2.5 2.5-2.5 2.5 1.1 2.5 2.5-1.1 2.5-2.5 2.5m7.5 0c-1.4 0-2.5-1.1-2.5-2.5s1.1-2.5 2.5-2.5 2.5 1.1 2.5 2.5-1.1 2.5-2.5 2.5" />
<path d="m27.2 20.6l-2.3-2.8 2.3-2.8c0.3-0.4 0.2-0.9-0.2-1.2s-1-0.2-1.3 0.2l-2 2.4-2-2.4c-0.3-0.4-0.9-0.4-1.3-0.2-0.4 0.3-0.5 0.8-0.2 1.2l2.3 2.8-2.3 2.8c-0.3 0.4-0.2 0.9 0.2 1.2s1 0.2 1.3-0.2l2-2.4 2 2.4c0.3 0.4 0.9 0.4 1.3 0.2 0.4-0.3 0.4-0.8 0.2-1.2" />
</g>
</svg>
)

this.opts.companionAllowedHosts = getAllowedHosts(this.opts.companionAllowedHosts, this.opts.companionUrl)
this.opts.companionAllowedHosts = getAllowedHosts(
this.opts.companionAllowedHosts,
this.opts.companionUrl,
)
this.provider = new Provider(uppy, {
companionUrl: this.opts.companionUrl,
companionHeaders: this.opts.companionHeaders,
Expand All @@ -44,7 +80,7 @@ export default class Box extends UIPlugin {
this.render = this.render.bind(this)
}

install () {
install(): void {
this.view = new ProviderViews(this, {
provider: this.provider,
loadAllFiles: true,
Expand All @@ -56,19 +92,19 @@ export default class Box extends UIPlugin {
}
}

uninstall () {
uninstall(): void {
this.view.tearDown()
this.unmount()
}

onFirstRender () {
return Promise.all([
async onFirstRender(): Promise<void> {
await Promise.all([
this.provider.fetchPreAuthToken(),
this.view.getFolder(),
])
}

render (state) {
render(state: unknown): ComponentChild {
return this.view.render(state)
}
}
1 change: 0 additions & 1 deletion packages/@uppy/box/src/index.js

This file was deleted.

1 change: 1 addition & 0 deletions packages/@uppy/box/src/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { default } from './Box.tsx'
File renamed without changes.
35 changes: 35 additions & 0 deletions packages/@uppy/box/tsconfig.build.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{
"extends": "../../../tsconfig.shared",
"compilerOptions": {
"noImplicitAny": false,
"outDir": "./lib",
"paths": {
"@uppy/companion-client": ["../companion-client/src/index.js"],
"@uppy/companion-client/lib/*": ["../companion-client/src/*"],
"@uppy/provider-views": ["../provider-views/src/index.js"],
"@uppy/provider-views/lib/*": ["../provider-views/src/*"],
"@uppy/utils/lib/*": ["../utils/src/*"],
"@uppy/core": ["../core/src/index.js"],
"@uppy/core/lib/*": ["../core/src/*"]
},
"resolveJsonModule": false,
"rootDir": "./src",
"skipLibCheck": true
},
"include": ["./src/**/*.*"],
"exclude": ["./src/**/*.test.ts"],
"references": [
{
"path": "../companion-client/tsconfig.build.json"
},
{
"path": "../provider-views/tsconfig.build.json"
},
{
"path": "../utils/tsconfig.build.json"
},
{
"path": "../core/tsconfig.build.json"
}
]
}
31 changes: 31 additions & 0 deletions packages/@uppy/box/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
{
"extends": "../../../tsconfig.shared",
"compilerOptions": {
"emitDeclarationOnly": false,
"noEmit": true,
"paths": {
"@uppy/companion-client": ["../companion-client/src/index.js"],
"@uppy/companion-client/lib/*": ["../companion-client/src/*"],
"@uppy/provider-views": ["../provider-views/src/index.js"],
"@uppy/provider-views/lib/*": ["../provider-views/src/*"],
"@uppy/utils/lib/*": ["../utils/src/*"],
"@uppy/core": ["../core/src/index.js"],
"@uppy/core/lib/*": ["../core/src/*"],
},
},
"include": ["./package.json", "./src/**/*.*"],
"references": [
{
"path": "../companion-client/tsconfig.build.json",
},
{
"path": "../provider-views/tsconfig.build.json",
},
{
"path": "../utils/tsconfig.build.json",
},
{
"path": "../core/tsconfig.build.json",
},
],
}
12 changes: 12 additions & 0 deletions packages/@uppy/companion-client/src/CompanionPluginOptions.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import type { UIPluginOptions } from '@uppy/core'
import type { tokenStorage } from '.'

export interface CompanionPluginOptions extends UIPluginOptions {
title?: string
storage?: typeof tokenStorage
companionUrl: string
companionHeaders?: Record<string, string>
companionKeysParams?: Record<string, string>
companionCookiesRule?: 'same-origin' | 'include'
companionAllowedHosts?: string | RegExp | (string | RegExp)[]
}
7 changes: 2 additions & 5 deletions packages/@uppy/companion-client/src/Provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,14 @@ import type {
} from '@uppy/utils/lib/CompanionClientProvider'
import type { UnknownProviderPlugin } from '@uppy/core/lib/Uppy.ts'
import RequestClient, { authErrorStatusCode } from './RequestClient.ts'
import * as tokenStorage from './tokenStorage.ts'
import type { CompanionPluginOptions } from '.'

// TODO: remove deprecated options in next major release
export interface Opts extends PluginOpts {
export interface Opts extends PluginOpts, CompanionPluginOptions {
/** @deprecated */
serverUrl?: string
/** @deprecated */
serverPattern?: string
companionUrl: string
companionAllowedHosts?: string | RegExp | Array<string | RegExp>
storage?: typeof tokenStorage
pluginId: string
name?: string
supportsRefreshToken?: boolean
Expand Down
2 changes: 1 addition & 1 deletion packages/@uppy/companion-client/src/getAllowedHosts.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
export default function getAllowedHosts(
hosts: string | RegExp | Array<string | RegExp>,
hosts: string | RegExp | Array<string | RegExp> | undefined,
url: string,
): string | RegExp | Array<string | RegExp> {
if (hosts) {
Expand Down
4 changes: 2 additions & 2 deletions packages/@uppy/companion-client/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
'use strict'

/**
* Manages communications with Companion
*/
Expand All @@ -12,5 +10,7 @@ export { default as getAllowedHosts } from './getAllowedHosts.ts'

export * as tokenStorage from './tokenStorage.ts'

export type { CompanionPluginOptions } from './CompanionPluginOptions.ts'

// TODO: remove in the next major
export { default as Socket } from './Socket.ts'
2 changes: 1 addition & 1 deletion packages/@uppy/core/src/Uppy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ export type UnknownProviderPluginState = {
authenticated: boolean | undefined
breadcrumbs: {
requestPath: string
name: string
name?: string
id?: string
}[]
didFirstRender: boolean
Expand Down
1 change: 1 addition & 0 deletions packages/@uppy/dropbox/.npmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
tsconfig.*
71 changes: 0 additions & 71 deletions packages/@uppy/dropbox/src/Dropbox.jsx

This file was deleted.

Loading
Loading