From ae9ab2f040b17733afdb7d21fe5ddd1c8c4c2ab7 Mon Sep 17 00:00:00 2001 From: Merlijn Vos Date: Mon, 18 Nov 2024 13:35:59 +0100 Subject: [PATCH 1/3] Add Next.js docs (#5502) --- docs/framework-integrations/nextjs.mdx | 434 +++++++++++++++++++++++++ 1 file changed, 434 insertions(+) create mode 100644 docs/framework-integrations/nextjs.mdx diff --git a/docs/framework-integrations/nextjs.mdx b/docs/framework-integrations/nextjs.mdx new file mode 100644 index 0000000000..1aa9040fec --- /dev/null +++ b/docs/framework-integrations/nextjs.mdx @@ -0,0 +1,434 @@ +--- +slug: /nextjs +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +# Next.js + +Integration guide for [Next.js][] featuring the [dashboard](/docs/dashboard), +the [tus](/docs/tus) uploader, [transloadit](/docs/transloadit), multipart +uploads to a Next.js route, the Uppy UI components, and the +[React hooks](/docs/react). + +:::tip + +Uppy also has hooks and more React examples in the [React docs](/docs/react). + +::: + +## Install + + + + +```shell +npm install @uppy/core @uppy/dashboard @uppy/react +``` + + + + + +```shell +yarn add @uppy/core @uppy/dashboard @uppy/react +``` + + + + +## Tus + +[Tus][tus] is an open protocol for resumable uploads built on HTTP. This means +accidentally closing your tab or losing connection let’s you continue, for +instance, your 10GB upload instead of starting all over. + +Tus supports any language, any platform, and any network. It requires a client +and server integration to work. We will be using [tus Node.js][]. + +Checkout the [`@uppy/tus` docs](/docs/tus) for more information. + +```tsx +'use client'; + +import Uppy from '@uppy/core'; +// For now, if you do not want to install UI components you +// are not using import from lib directly. +import Dashboard from '@uppy/react/lib/Dashboard'; +import Tus from '@uppy/tus'; +import { useState } from 'react'; + +import '@uppy/core/dist/style.min.css'; +import '@uppy/dashboard/dist/style.min.css'; + +function createUppy() { + return new Uppy().use(Tus, { endpoint: '/api/upload' }); +} + +export default function UppyDashboard() { + // Important: use an initializer function to prevent the state from recreating. + const [uppy] = useState(createUppy); + + return ; +} +``` + +[`@tus/server`][] does not not support the Next.js app router yet, which is +based on the fetch `Request` API instead of `http.IncomingMessage` and +`http.ServerResponse`. + +Even if you are fully comitting to the app router, there is no downside to still +having the pages router next to it for some Node.js style API routes. + +Attach the tus server handler to a Next.js route handler in an +[optional catch-all route file](https://nextjs.org/docs/pages/building-your-application/routing/dynamic-routes#optional-catch-all-routes). + +`/pages/api/upload/[[...file]].ts` + +```ts +import type { NextApiRequest, NextApiResponse } from 'next'; +import { Server, Upload } from '@tus/server'; +import { FileStore } from '@tus/file-store'; + +/** + * !Important. This will tell Next.js NOT Parse the body as tus requires + * @see https://nextjs.org/docs/api-routes/request-helpers + */ +export const config = { + api: { + bodyParser: false, + }, +}; + +const tusServer = new Server({ + // `path` needs to match the route declared by the next file router + path: '/api/upload', + datastore: new FileStore({ directory: './files' }), +}); + +export default function handler(req: NextApiRequest, res: NextApiResponse) { + return tusServer.handle(req, res); +} +``` + +## Transloadit + +:::note + +Before continuing you should have a [Transloadit](https://transloadit.com) +account and a +[Template](https://transloadit.com/docs/getting-started/my-first-app/) setup. + +::: + +Transloadit’s strength is versatility. By doing video, audio, images, documents, +and more, you only need one vendor for [all your file processing +needs][transloadit-services]. The [`@uppy/transloadit`](/docs/transloadit) +plugin directly uploads to Transloadit so you only have to worry about creating +a [template][transloadit-concepts]. It uses +[Tus](#i-want-reliable-resumable-uploads) under the hood so you don’t have to +sacrifice reliable, resumable uploads for convenience. + +When you go to production always make sure to set the `signature`. **Not using +[Signature Authentication](https://transloadit.com/docs/topics/signature-authentication/) +can be a security risk**. Signature Authentication is a security measure that +can prevent outsiders from tampering with your Assembly Instructions. + +Generating a signature should be done on the server to avoid leaking secrets. + + + + +`/app/api/transloadit/route.ts` + +```ts +import { NextResponse, NextRequest } from 'next/server'; +import crypto from 'crypto'; + +function utcDateString(ms: number): string { + return new Date(ms) + .toISOString() + .replace(/-/g, '/') + .replace(/T/, ' ') + .replace(/\.\d+Z$/, '+00:00'); +} + +export async function POST(request: NextRequest) { + // expire 1 hour from now (this must be milliseconds) + const expires = utcDateString(Date.now() + 1 * 60 * 60 * 1000); + const authKey = process.env.TRANSLOADIT_KEY; + const authSecret = process.env.TRANSLOADIT_SECRET; + const templateId = process.env.TRANSLOADIT_TEMPLATE_ID; + + // Typically, here you would also deny generating a signature for improper use + if (!authKey || !authSecret || !templateId) { + return NextResponse.json( + { error: 'Missing Transloadit credentials' }, + { status: 500 }, + ); + } + + const body = await request.json(); + const params = JSON.stringify({ + auth: { + key: authKey, + expires, + }, + template_id: templateId, + fields: { + // This becomes available in your Template as `${fields.customValue}` + // and could be used to have a storage directory per user for example + customValue: body.customValue, + }, + // your other params like notify_url, etc. + }); + + const signatureBytes = crypto + .createHmac('sha384', authSecret) + .update(Buffer.from(params, 'utf-8')); + // The final signature needs the hash name in front, so + // the hashing algorithm can be updated in a backwards-compatible + // way when old algorithms become insecure. + const signature = `sha384:${signatureBytes.digest('hex')}`; + + return NextResponse.json({ expires, signature, params }); +} +``` + + + + + +`/pages/api/transloadit/params.ts` + +```ts +import type { NextApiRequest, NextApiResponse } from 'next'; +import crypto from 'node:crypto'; + +function utcDateString(ms: number): string { + return new Date(ms) + .toISOString() + .replace(/-/g, '/') + .replace(/T/, ' ') + .replace(/\.\d+Z$/, '+00:00'); +} + +export default function handler(req: NextApiRequest, res: NextApiResponse) { + // Typically, here you would also deny generating a signature for improper use + if (req.method !== 'POST') { + return res.status(405).json({ error: 'Method Not Allowed' }); + } + + // expire 1 hour from now (this must be milliseconds) + const expires = utcDateString(Date.now() + 1 * 60 * 60 * 1000); + const authKey = process.env.TRANSLOADIT_KEY; + const authSecret = process.env.TRANSLOADIT_SECRET; + const templateId = process.env.TRANSLOADIT_TEMPLATE_ID; + + if (!authKey || !authSecret || !templateId) { + return res.status(500).json({ error: 'Missing Transloadit credentials' }); + } + + const params = JSON.stringify({ + auth: { + key: authKey, + expires, + }, + template_id: templateId, + fields: { + // This becomes available in your Template as `${fields.customValue}` + // and could be used to have a storage directory per user for example + customValue: req.body.customValue, + }, + // your other params like notify_url, etc. + }); + + const signatureBytes = crypto + .createHmac('sha384', authSecret) + .update(Buffer.from(params, 'utf-8')); + // The final signature needs the hash name in front, so + // the hashing algorithm can be updated in a backwards-compatible + // way when old algorithms become insecure. + const signature = `sha384:${signatureBytes.digest('hex')}`; + + res.status(200).json({ expires, signature, params }); +} +``` + + + + +On the client we want to fetch the signature and params from the server. You may +want to send values from React state along to your endpoint, for instance to add +[`fields`](https://transloadit.com/docs/topics/assembly-variables/) which you +can use in your template as global variables. + +```js +// ... +function createUppy() { + const uppy = new Uppy(); + uppy.use(Transloadit, { + async assemblyOptions() { + // You can send meta data along for use in your template. + // https://transloadit.com/docs/topics/assembly-instructions/#form-fields-in-instructions + const { meta } = uppy.getState(); + const body = JSON.stringify({ customValue: meta.customValue }); + const res = await fetch('/transloadit-params', { method: 'POST', body }); + return response.json(); + }, + }); + return uppy; +} + +function Component({ customValue }) { + // IMPORTANT: passing an initializer function to prevent the state from recreating. + const [uppy] = useState(createUppy); + + useEffect(() => { + if (customValue) { + uppy.setOptions({ meta: { customValue } }); + } + }, [uppy, customValue]); +} +``` + +## HTTP uploads to your backend + +If you want to handle uploads yourself, in Next.js or another server in any +language, you can use [`@uppy/xhr-upload`](/docs/xhr-upload). + +:::warning + +The server-side examples are simplified for demonstration purposes and assume a +regular file upload while `@uppy/xhr-upload` can also send `FormData` through +the `formData` or `bundle` options. + +::: + + + + +```ts +import { NextRequest, NextResponse } from 'next/server'; +import { writeFile } from 'node:fs/promises'; +import path from 'node:path'; + +export const config = { + api: { + bodyParser: false, + }, +}; + +export async function POST(request: NextRequest) { + const formData = await request.formData(); + const file = formData.get('file') as File | null; + + if (!file) { + return NextResponse.json({ error: 'No file uploaded' }, { status: 400 }); + } + + const buffer = Buffer.from(await file.arrayBuffer()); + const filename = file.name.replace(/\s/g, '-'); + const filepath = path.join(process.cwd(), 'public', 'uploads', filename); + + try { + await writeFile(filepath, buffer); + return NextResponse.json({ + message: 'File uploaded successfully', + filename, + }); + } catch (error) { + console.error('Error saving file:', error); + return NextResponse.json({ error: 'Error saving file' }, { status: 500 }); + } +} +``` + + + + + +```ts +import type { NextApiRequest, NextApiResponse } from 'next'; +import { createWriteStream } from 'fs'; +import { pipeline } from 'stream/promises'; +import path from 'path'; + +export const config = { + api: { + bodyParser: false, + }, +}; + +export default async function handler( + req: NextApiRequest, + res: NextApiResponse, +) { + if (req.method !== 'POST') { + return res.status(405).json({ error: 'Method Not Allowed' }); + } + + try { + const filename = `file-${Date.now()}.txt`; + const filepath = path.join(process.cwd(), 'public', 'uploads', filename); + const writeStream = createWriteStream(filepath); + + await pipeline(req, writeStream); + + res.status(200).json({ message: 'File uploaded successfully', filename }); + } catch (error) { + console.error('Error saving file:', error); + res.status(500).json({ error: 'Error saving file' }); + } +} +``` + + + + +```tsx +'use client'; + +import Uppy from '@uppy/core'; +// For now, if you do not want to install UI components you +// are not using import from lib directly. +import Dashboard from '@uppy/react/lib/Dashboard'; +import Xhr from '@uppy/xhr-upload'; +import { useState } from 'react'; + +import '@uppy/core/dist/style.min.css'; +import '@uppy/dashboard/dist/style.min.css'; + +function createUppy() { + return new Uppy().use(Xhr, { endpoint: '/api/upload' }); +} + +export default function UppyDashboard() { + // Important: use an initializer function to prevent the state from recreating. + const [uppy] = useState(createUppy); + + return ; +} +``` + +## Next steps + +- Add client-side file [restrictions](/docs/uppy/#restrictions). +- Upload files together with other form fields with [`@uppy/form`](/docs/form). +- Use your [language of choice](/docs/locales) instead of English. +- Add an [image editor](docs/image-editor) for cropping and resizing images. +- Download files from remote sources, such as [Google Drive](docs/google-drive) + and [Dropbox](docs/dropbox), with [Companion](/docs/companion). +- Add [Golden Retriever](/docs/golden-retriever) to save selected files in your + browser cache, so that if the browser crashes, or the user accidentally closes + the tab, Uppy can restore everything and continue uploading as if nothing + happened. + +[transloadit-concepts]: https://transloadit.com/docs/getting-started/concepts/ +[transloadit-services]: https://transloadit.com/services/ +[Next.js]: https://nextjs.org/ +[tus]: https://tus.io/ +[tus Node.js]: https://github.com/tus/tus-node-server +[`@tus/server`]: + https://github.com/tus/tus-node-server/tree/main/packages/server From 044a2958cc1a7dab8c1886eada9b89b199a80c0e Mon Sep 17 00:00:00 2001 From: Mikael Finstad Date: Mon, 18 Nov 2024 20:40:29 +0800 Subject: [PATCH 2/3] fix missing lint (#5519) that caused a bundle error https://github.com/transloadit/uppy/actions/runs/11855591962/job/33040156550?pr=5443 --- .eslintrc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.eslintrc.js b/.eslintrc.js index 77e5fbe8fd..98c06b7d1f 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -443,7 +443,7 @@ module.exports = { rules: { 'no-extra-semi': 'off', 'no-restricted-syntax': ['error', { - selector: 'ImportDeclaration[importKind="type"][source.value=/^@uppy\\x2F[a-z-0-9]+\\x2F/]:not([source.value=/^@uppy\\x2Futils\\x2F/]):not([source.value=/\\.js$/])', + selector: 'ImportDeclaration[source.value=/^@uppy\\x2F[a-z-0-9]+\\x2F/]:not([source.value=/^@uppy\\x2Futils\\x2F/]):not([source.value=/\\.(js|css)$/])', message: 'Use ".js" file extension for import type declarations from a different package', }, { selector: 'ImportDeclaration[importKind="type"][source.value=/^\\.\\.?\\x2F.+\\.js$/]', From 8f97fd61fada0dee6fe32b07516568f8c3d39060 Mon Sep 17 00:00:00 2001 From: Mikael Finstad Date: Mon, 18 Nov 2024 20:41:59 +0800 Subject: [PATCH 3/3] cleanup tsconfig (#5520) - move skipLibCheck to tsconfig.shared - remove noImplicitAny was added in https://github.com/transloadit/uppy/pull/4844 but without an explanation --- packages/@uppy/audio/tsconfig.build.json | 4 +--- packages/@uppy/aws-s3/tsconfig.build.json | 4 +--- packages/@uppy/box/tsconfig.build.json | 4 +--- packages/@uppy/companion-client/tsconfig.build.json | 4 +--- packages/@uppy/compressor/tsconfig.build.json | 4 +--- packages/@uppy/core/tsconfig.build.json | 4 +--- packages/@uppy/dashboard/tsconfig.build.json | 4 +--- packages/@uppy/drag-drop/tsconfig.build.json | 4 +--- packages/@uppy/drop-target/tsconfig.build.json | 4 +--- packages/@uppy/dropbox/tsconfig.build.json | 4 +--- packages/@uppy/facebook/tsconfig.build.json | 4 +--- packages/@uppy/file-input/tsconfig.build.json | 4 +--- packages/@uppy/form/tsconfig.build.json | 4 +--- packages/@uppy/golden-retriever/tsconfig.build.json | 4 +--- packages/@uppy/google-drive/tsconfig.build.json | 4 +--- packages/@uppy/google-photos/tsconfig.build.json | 4 +--- packages/@uppy/image-editor/tsconfig.build.json | 4 +--- packages/@uppy/informer/tsconfig.build.json | 4 +--- packages/@uppy/instagram/tsconfig.build.json | 4 +--- packages/@uppy/locales/tsconfig.build.json | 3 +-- packages/@uppy/onedrive/tsconfig.build.json | 4 +--- packages/@uppy/progress-bar/tsconfig.build.json | 4 +--- packages/@uppy/provider-views/tsconfig.build.json | 4 +--- packages/@uppy/react/tsconfig.build.json | 4 +--- packages/@uppy/remote-sources/tsconfig.build.json | 4 +--- packages/@uppy/screen-capture/tsconfig.build.json | 4 +--- packages/@uppy/status-bar/tsconfig.build.json | 2 -- packages/@uppy/store-default/tsconfig.build.json | 4 +--- packages/@uppy/thumbnail-generator/tsconfig.build.json | 4 +--- packages/@uppy/transloadit/tsconfig.build.json | 4 +--- packages/@uppy/tus/tsconfig.build.json | 4 +--- packages/@uppy/unsplash/tsconfig.build.json | 4 +--- packages/@uppy/url/tsconfig.build.json | 4 +--- packages/@uppy/utils/tsconfig.build.json | 3 +-- packages/@uppy/vue/tsconfig.build.json | 4 +--- packages/@uppy/webcam/tsconfig.build.json | 4 +--- packages/@uppy/xhr-upload/tsconfig.build.json | 4 +--- packages/@uppy/zoom/tsconfig.build.json | 4 +--- packages/uppy/tsconfig.build.json | 4 +--- private/js2ts/index.mjs | 2 -- tsconfig.shared.json | 3 ++- 41 files changed, 40 insertions(+), 117 deletions(-) diff --git a/packages/@uppy/audio/tsconfig.build.json b/packages/@uppy/audio/tsconfig.build.json index 1b0ca41093..8d9ed22fa5 100644 --- a/packages/@uppy/audio/tsconfig.build.json +++ b/packages/@uppy/audio/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "paths": { "@uppy/utils/lib/*": ["../utils/src/*"], @@ -9,8 +8,7 @@ "@uppy/core/lib/*": ["../core/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/aws-s3/tsconfig.build.json b/packages/@uppy/aws-s3/tsconfig.build.json index 40df14c108..b61a0f40cb 100644 --- a/packages/@uppy/aws-s3/tsconfig.build.json +++ b/packages/@uppy/aws-s3/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "paths": { "@uppy/companion-client": ["../companion-client/src/index.js"], @@ -11,8 +10,7 @@ "@uppy/core/lib/*": ["../core/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/box/tsconfig.build.json b/packages/@uppy/box/tsconfig.build.json index 99aaf378de..0b2f94bc10 100644 --- a/packages/@uppy/box/tsconfig.build.json +++ b/packages/@uppy/box/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "paths": { "@uppy/companion-client": ["../companion-client/src/index.js"], @@ -13,8 +12,7 @@ "@uppy/core/lib/*": ["../core/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/companion-client/tsconfig.build.json b/packages/@uppy/companion-client/tsconfig.build.json index 1b0ca41093..8d9ed22fa5 100644 --- a/packages/@uppy/companion-client/tsconfig.build.json +++ b/packages/@uppy/companion-client/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "paths": { "@uppy/utils/lib/*": ["../utils/src/*"], @@ -9,8 +8,7 @@ "@uppy/core/lib/*": ["../core/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/compressor/tsconfig.build.json b/packages/@uppy/compressor/tsconfig.build.json index 1b0ca41093..8d9ed22fa5 100644 --- a/packages/@uppy/compressor/tsconfig.build.json +++ b/packages/@uppy/compressor/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "paths": { "@uppy/utils/lib/*": ["../utils/src/*"], @@ -9,8 +8,7 @@ "@uppy/core/lib/*": ["../core/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/core/tsconfig.build.json b/packages/@uppy/core/tsconfig.build.json index db8238509c..349b88d0f1 100644 --- a/packages/@uppy/core/tsconfig.build.json +++ b/packages/@uppy/core/tsconfig.build.json @@ -4,13 +4,11 @@ "outDir": "./lib", "rootDir": "./src", "resolveJsonModule": false, - "noImplicitAny": false, "paths": { "@uppy/store-default": ["../store-default/src/index.js"], "@uppy/store-default/lib/*": ["../store-default/src/*"], "@uppy/utils/lib/*": ["../utils/src/*"] - }, - "skipLibCheck": true + } }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/dashboard/tsconfig.build.json b/packages/@uppy/dashboard/tsconfig.build.json index e1c431130b..5fde2c8b54 100644 --- a/packages/@uppy/dashboard/tsconfig.build.json +++ b/packages/@uppy/dashboard/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "paths": { "@uppy/informer": ["../informer/src/index.js"], @@ -23,8 +22,7 @@ "@uppy/webcam/lib/*": ["../webcam/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/drag-drop/tsconfig.build.json b/packages/@uppy/drag-drop/tsconfig.build.json index 1b0ca41093..8d9ed22fa5 100644 --- a/packages/@uppy/drag-drop/tsconfig.build.json +++ b/packages/@uppy/drag-drop/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "paths": { "@uppy/utils/lib/*": ["../utils/src/*"], @@ -9,8 +8,7 @@ "@uppy/core/lib/*": ["../core/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/drop-target/tsconfig.build.json b/packages/@uppy/drop-target/tsconfig.build.json index 1b0ca41093..8d9ed22fa5 100644 --- a/packages/@uppy/drop-target/tsconfig.build.json +++ b/packages/@uppy/drop-target/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "paths": { "@uppy/utils/lib/*": ["../utils/src/*"], @@ -9,8 +8,7 @@ "@uppy/core/lib/*": ["../core/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/dropbox/tsconfig.build.json b/packages/@uppy/dropbox/tsconfig.build.json index 99aaf378de..0b2f94bc10 100644 --- a/packages/@uppy/dropbox/tsconfig.build.json +++ b/packages/@uppy/dropbox/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "paths": { "@uppy/companion-client": ["../companion-client/src/index.js"], @@ -13,8 +12,7 @@ "@uppy/core/lib/*": ["../core/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/facebook/tsconfig.build.json b/packages/@uppy/facebook/tsconfig.build.json index 99aaf378de..0b2f94bc10 100644 --- a/packages/@uppy/facebook/tsconfig.build.json +++ b/packages/@uppy/facebook/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "paths": { "@uppy/companion-client": ["../companion-client/src/index.js"], @@ -13,8 +12,7 @@ "@uppy/core/lib/*": ["../core/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/file-input/tsconfig.build.json b/packages/@uppy/file-input/tsconfig.build.json index 1b0ca41093..8d9ed22fa5 100644 --- a/packages/@uppy/file-input/tsconfig.build.json +++ b/packages/@uppy/file-input/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "paths": { "@uppy/utils/lib/*": ["../utils/src/*"], @@ -9,8 +8,7 @@ "@uppy/core/lib/*": ["../core/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/form/tsconfig.build.json b/packages/@uppy/form/tsconfig.build.json index 1b0ca41093..8d9ed22fa5 100644 --- a/packages/@uppy/form/tsconfig.build.json +++ b/packages/@uppy/form/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "paths": { "@uppy/utils/lib/*": ["../utils/src/*"], @@ -9,8 +8,7 @@ "@uppy/core/lib/*": ["../core/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/golden-retriever/tsconfig.build.json b/packages/@uppy/golden-retriever/tsconfig.build.json index 1b0ca41093..8d9ed22fa5 100644 --- a/packages/@uppy/golden-retriever/tsconfig.build.json +++ b/packages/@uppy/golden-retriever/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "paths": { "@uppy/utils/lib/*": ["../utils/src/*"], @@ -9,8 +8,7 @@ "@uppy/core/lib/*": ["../core/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/google-drive/tsconfig.build.json b/packages/@uppy/google-drive/tsconfig.build.json index 99aaf378de..0b2f94bc10 100644 --- a/packages/@uppy/google-drive/tsconfig.build.json +++ b/packages/@uppy/google-drive/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "paths": { "@uppy/companion-client": ["../companion-client/src/index.js"], @@ -13,8 +12,7 @@ "@uppy/core/lib/*": ["../core/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/google-photos/tsconfig.build.json b/packages/@uppy/google-photos/tsconfig.build.json index 99aaf378de..0b2f94bc10 100644 --- a/packages/@uppy/google-photos/tsconfig.build.json +++ b/packages/@uppy/google-photos/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "paths": { "@uppy/companion-client": ["../companion-client/src/index.js"], @@ -13,8 +12,7 @@ "@uppy/core/lib/*": ["../core/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/image-editor/tsconfig.build.json b/packages/@uppy/image-editor/tsconfig.build.json index 1b0ca41093..8d9ed22fa5 100644 --- a/packages/@uppy/image-editor/tsconfig.build.json +++ b/packages/@uppy/image-editor/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "paths": { "@uppy/utils/lib/*": ["../utils/src/*"], @@ -9,8 +8,7 @@ "@uppy/core/lib/*": ["../core/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/informer/tsconfig.build.json b/packages/@uppy/informer/tsconfig.build.json index 1b0ca41093..8d9ed22fa5 100644 --- a/packages/@uppy/informer/tsconfig.build.json +++ b/packages/@uppy/informer/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "paths": { "@uppy/utils/lib/*": ["../utils/src/*"], @@ -9,8 +8,7 @@ "@uppy/core/lib/*": ["../core/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/instagram/tsconfig.build.json b/packages/@uppy/instagram/tsconfig.build.json index 99aaf378de..0b2f94bc10 100644 --- a/packages/@uppy/instagram/tsconfig.build.json +++ b/packages/@uppy/instagram/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "paths": { "@uppy/companion-client": ["../companion-client/src/index.js"], @@ -13,8 +12,7 @@ "@uppy/core/lib/*": ["../core/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/locales/tsconfig.build.json b/packages/@uppy/locales/tsconfig.build.json index b76d049caf..5d9441fd2f 100644 --- a/packages/@uppy/locales/tsconfig.build.json +++ b/packages/@uppy/locales/tsconfig.build.json @@ -5,8 +5,7 @@ "rootDir": "./src", "paths": { "@uppy/utils/lib/*": ["../utils/src/*"] - }, - "skipLibCheck": true + } }, "include": ["./src/**/*.*"], "references": [ diff --git a/packages/@uppy/onedrive/tsconfig.build.json b/packages/@uppy/onedrive/tsconfig.build.json index 99aaf378de..0b2f94bc10 100644 --- a/packages/@uppy/onedrive/tsconfig.build.json +++ b/packages/@uppy/onedrive/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "paths": { "@uppy/companion-client": ["../companion-client/src/index.js"], @@ -13,8 +12,7 @@ "@uppy/core/lib/*": ["../core/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/progress-bar/tsconfig.build.json b/packages/@uppy/progress-bar/tsconfig.build.json index 1b0ca41093..8d9ed22fa5 100644 --- a/packages/@uppy/progress-bar/tsconfig.build.json +++ b/packages/@uppy/progress-bar/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "paths": { "@uppy/utils/lib/*": ["../utils/src/*"], @@ -9,8 +8,7 @@ "@uppy/core/lib/*": ["../core/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/provider-views/tsconfig.build.json b/packages/@uppy/provider-views/tsconfig.build.json index 1b0ca41093..8d9ed22fa5 100644 --- a/packages/@uppy/provider-views/tsconfig.build.json +++ b/packages/@uppy/provider-views/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "paths": { "@uppy/utils/lib/*": ["../utils/src/*"], @@ -9,8 +8,7 @@ "@uppy/core/lib/*": ["../core/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/react/tsconfig.build.json b/packages/@uppy/react/tsconfig.build.json index 584a85bc3e..8a2ff2f64e 100644 --- a/packages/@uppy/react/tsconfig.build.json +++ b/packages/@uppy/react/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "jsxImportSource": "react", "jsx": "react-jsx", @@ -21,8 +20,7 @@ "@uppy/status-bar/lib/*": ["../status-bar/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.tsx"], diff --git a/packages/@uppy/remote-sources/tsconfig.build.json b/packages/@uppy/remote-sources/tsconfig.build.json index 5399803aac..fc59cd4bf2 100644 --- a/packages/@uppy/remote-sources/tsconfig.build.json +++ b/packages/@uppy/remote-sources/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "paths": { "@uppy/box": ["../box/src/index.js"], @@ -30,8 +29,7 @@ "@uppy/core/lib/*": ["../core/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/screen-capture/tsconfig.build.json b/packages/@uppy/screen-capture/tsconfig.build.json index 1b0ca41093..8d9ed22fa5 100644 --- a/packages/@uppy/screen-capture/tsconfig.build.json +++ b/packages/@uppy/screen-capture/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "paths": { "@uppy/utils/lib/*": ["../utils/src/*"], @@ -9,8 +8,7 @@ "@uppy/core/lib/*": ["../core/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/status-bar/tsconfig.build.json b/packages/@uppy/status-bar/tsconfig.build.json index 2ecfe83757..9ba78a0df7 100644 --- a/packages/@uppy/status-bar/tsconfig.build.json +++ b/packages/@uppy/status-bar/tsconfig.build.json @@ -4,8 +4,6 @@ "outDir": "./lib", "rootDir": "./src", "resolveJsonModule": false, - "noImplicitAny": false, - "skipLibCheck": true, "paths": { "@uppy/core": ["../core/src/index.js"], "@uppy/core/lib/*": ["../core/src/*"], diff --git a/packages/@uppy/store-default/tsconfig.build.json b/packages/@uppy/store-default/tsconfig.build.json index cfb3e6f0d9..850a4797d1 100644 --- a/packages/@uppy/store-default/tsconfig.build.json +++ b/packages/@uppy/store-default/tsconfig.build.json @@ -3,9 +3,7 @@ "compilerOptions": { "outDir": "./lib", "rootDir": "./src", - "resolveJsonModule": false, - "noImplicitAny": false, - "skipLibCheck": true + "resolveJsonModule": false }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/thumbnail-generator/tsconfig.build.json b/packages/@uppy/thumbnail-generator/tsconfig.build.json index 1b0ca41093..8d9ed22fa5 100644 --- a/packages/@uppy/thumbnail-generator/tsconfig.build.json +++ b/packages/@uppy/thumbnail-generator/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "paths": { "@uppy/utils/lib/*": ["../utils/src/*"], @@ -9,8 +8,7 @@ "@uppy/core/lib/*": ["../core/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/transloadit/tsconfig.build.json b/packages/@uppy/transloadit/tsconfig.build.json index 25527c98c1..22ec6d6556 100644 --- a/packages/@uppy/transloadit/tsconfig.build.json +++ b/packages/@uppy/transloadit/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "paths": { "@uppy/companion-client": ["../companion-client/src/index.js"], @@ -15,8 +14,7 @@ "@uppy/core/lib/*": ["../core/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/tus/tsconfig.build.json b/packages/@uppy/tus/tsconfig.build.json index 40df14c108..b61a0f40cb 100644 --- a/packages/@uppy/tus/tsconfig.build.json +++ b/packages/@uppy/tus/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "paths": { "@uppy/companion-client": ["../companion-client/src/index.js"], @@ -11,8 +10,7 @@ "@uppy/core/lib/*": ["../core/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/unsplash/tsconfig.build.json b/packages/@uppy/unsplash/tsconfig.build.json index 99aaf378de..0b2f94bc10 100644 --- a/packages/@uppy/unsplash/tsconfig.build.json +++ b/packages/@uppy/unsplash/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "paths": { "@uppy/companion-client": ["../companion-client/src/index.js"], @@ -13,8 +12,7 @@ "@uppy/core/lib/*": ["../core/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/url/tsconfig.build.json b/packages/@uppy/url/tsconfig.build.json index 40df14c108..b61a0f40cb 100644 --- a/packages/@uppy/url/tsconfig.build.json +++ b/packages/@uppy/url/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "paths": { "@uppy/companion-client": ["../companion-client/src/index.js"], @@ -11,8 +10,7 @@ "@uppy/core/lib/*": ["../core/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/utils/tsconfig.build.json b/packages/@uppy/utils/tsconfig.build.json index 7618560455..15f228d2b6 100644 --- a/packages/@uppy/utils/tsconfig.build.json +++ b/packages/@uppy/utils/tsconfig.build.json @@ -3,8 +3,7 @@ "compilerOptions": { "outDir": "./lib", "rootDir": "./src", - "allowJs": true, - "skipLibCheck": true + "allowJs": true }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/vue/tsconfig.build.json b/packages/@uppy/vue/tsconfig.build.json index 3e710732aa..ed1857a09e 100644 --- a/packages/@uppy/vue/tsconfig.build.json +++ b/packages/@uppy/vue/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "paths": { "@uppy/core": ["../core/src/index.js"], @@ -18,8 +17,7 @@ "@uppy/status-bar/lib/*": ["../status-bar/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/webcam/tsconfig.build.json b/packages/@uppy/webcam/tsconfig.build.json index 1b0ca41093..8d9ed22fa5 100644 --- a/packages/@uppy/webcam/tsconfig.build.json +++ b/packages/@uppy/webcam/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "paths": { "@uppy/utils/lib/*": ["../utils/src/*"], @@ -9,8 +8,7 @@ "@uppy/core/lib/*": ["../core/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/xhr-upload/tsconfig.build.json b/packages/@uppy/xhr-upload/tsconfig.build.json index 40df14c108..b61a0f40cb 100644 --- a/packages/@uppy/xhr-upload/tsconfig.build.json +++ b/packages/@uppy/xhr-upload/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "paths": { "@uppy/companion-client": ["../companion-client/src/index.js"], @@ -11,8 +10,7 @@ "@uppy/core/lib/*": ["../core/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/@uppy/zoom/tsconfig.build.json b/packages/@uppy/zoom/tsconfig.build.json index 99aaf378de..0b2f94bc10 100644 --- a/packages/@uppy/zoom/tsconfig.build.json +++ b/packages/@uppy/zoom/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "paths": { "@uppy/companion-client": ["../companion-client/src/index.js"], @@ -13,8 +12,7 @@ "@uppy/core/lib/*": ["../core/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/packages/uppy/tsconfig.build.json b/packages/uppy/tsconfig.build.json index f1959778aa..e45d08c6a5 100644 --- a/packages/uppy/tsconfig.build.json +++ b/packages/uppy/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../tsconfig.shared", "compilerOptions": { - "noImplicitAny": false, "outDir": "./lib", "paths": { "@uppy/audio": ["../audio/src/index.js"], @@ -74,8 +73,7 @@ "@uppy/zoom/lib/*": ["../zoom/src/*"] }, "resolveJsonModule": false, - "rootDir": "./src", - "skipLibCheck": true + "rootDir": "./src" }, "include": ["./src/**/*.*"], "exclude": ["./src/**/*.test.ts"], diff --git a/private/js2ts/index.mjs b/private/js2ts/index.mjs index 8919c5d356..27cddfea18 100755 --- a/private/js2ts/index.mjs +++ b/private/js2ts/index.mjs @@ -140,12 +140,10 @@ await writeFile( { extends: '../../../tsconfig.shared', compilerOptions: { - noImplicitAny: false, outDir: './lib', paths, resolveJsonModule: false, rootDir: './src', - skipLibCheck: true, }, include: ['./src/**/*.*'], exclude: ['./src/**/*.test.ts'], diff --git a/tsconfig.shared.json b/tsconfig.shared.json index c5727f92b0..de7d0d62f2 100644 --- a/tsconfig.shared.json +++ b/tsconfig.shared.json @@ -18,6 +18,7 @@ "noImplicitThis": true, "strict": true, "verbatimModuleSyntax": true, - "forceConsistentCasingInFileNames": true + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true } }