From 5fd6038cd58f2dc99f06c58da6a6152acc1579e3 Mon Sep 17 00:00:00 2001 From: Murderlon Date: Tue, 11 Feb 2025 15:28:16 +0100 Subject: [PATCH 01/18] Bump required Node.js version from 16 to 20 --- package-lock.json | 23 +++++++++++------------ packages/azure-store/package.json | 2 +- packages/file-store/package.json | 2 +- packages/gcs-store/package.json | 2 +- packages/s3-store/package.json | 2 +- packages/server/package.json | 2 +- 6 files changed, 16 insertions(+), 17 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4c5a489c..8ccb1f55 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,7 +7,6 @@ "": { "workspaces": [ "packages/*", - "demo", "test" ], "devDependencies": { @@ -6109,7 +6108,7 @@ "should": "^13.2.3" }, "engines": { - "node": ">=16" + "node": ">=20" } }, "packages/eslint-config-custom": { @@ -6145,7 +6144,7 @@ "should": "^13.2.3" }, "engines": { - "node": ">=16" + "node": ">=20" }, "optionalDependencies": { "@redis/client": "^1.6.0" @@ -6153,7 +6152,7 @@ }, "packages/gcs-store": { "name": "@tus/gcs-store", - "version": "1.4.1", + "version": "1.4.2", "license": "MIT", "dependencies": { "@tus/utils": "^0.5.0", @@ -6169,7 +6168,7 @@ "should": "^13.2.3" }, "engines": { - "node": ">=16" + "node": ">=20" }, "peerDependencies": { "@google-cloud/storage": "*" @@ -6177,7 +6176,7 @@ }, "packages/s3-store": { "name": "@tus/s3-store", - "version": "1.7.0", + "version": "1.9.0", "license": "MIT", "dependencies": { "@aws-sdk/client-s3": "^3.717.0", @@ -6195,12 +6194,12 @@ "should": "^13.2.3" }, "engines": { - "node": ">=16" + "node": ">=20" } }, "packages/server": { "name": "@tus/server", - "version": "1.10.1", + "version": "1.10.2", "license": "MIT", "dependencies": { "@tus/utils": "^0.5.1", @@ -6222,7 +6221,7 @@ "ts-node": "^10.9.2" }, "engines": { - "node": ">=16" + "node": ">=20" }, "optionalDependencies": { "@redis/client": "^1.6.0", @@ -6249,9 +6248,9 @@ "test": { "dependencies": { "@tus/file-store": "^1.5.1", - "@tus/gcs-store": "^1.4.1", - "@tus/s3-store": "^1.7.0", - "@tus/server": "^1.10.1" + "@tus/gcs-store": "^1.4.2", + "@tus/s3-store": "^1.9.0", + "@tus/server": "^1.10.2" }, "devDependencies": { "@types/mocha": "^10.0.6", diff --git a/packages/azure-store/package.json b/packages/azure-store/package.json index b43211e1..f0caafcd 100644 --- a/packages/azure-store/package.json +++ b/packages/azure-store/package.json @@ -31,6 +31,6 @@ "should": "^13.2.3" }, "engines": { - "node": ">=16" + "node": ">=20" } } diff --git a/packages/file-store/package.json b/packages/file-store/package.json index c5448bb9..3689d554 100644 --- a/packages/file-store/package.json +++ b/packages/file-store/package.json @@ -28,6 +28,6 @@ "@redis/client": "^1.6.0" }, "engines": { - "node": ">=16" + "node": ">=20" } } diff --git a/packages/gcs-store/package.json b/packages/gcs-store/package.json index 3c268873..ae3aa429 100644 --- a/packages/gcs-store/package.json +++ b/packages/gcs-store/package.json @@ -35,6 +35,6 @@ "@google-cloud/storage": "*" }, "engines": { - "node": ">=16" + "node": ">=20" } } diff --git a/packages/s3-store/package.json b/packages/s3-store/package.json index e913379a..9c2a9728 100644 --- a/packages/s3-store/package.json +++ b/packages/s3-store/package.json @@ -34,6 +34,6 @@ "should": "^13.2.3" }, "engines": { - "node": ">=16" + "node": ">=20" } } diff --git a/packages/server/package.json b/packages/server/package.json index 2a5a14a0..773792d2 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -42,6 +42,6 @@ "ioredis": "^5.4.1" }, "engines": { - "node": ">=16" + "node": ">=20" } } From 4523e10899929e70076cdecab8e0277036218dd5 Mon Sep 17 00:00:00 2001 From: Murderlon Date: Wed, 12 Feb 2025 10:50:13 +0100 Subject: [PATCH 02/18] Update readme's, CI, and tsconfig --- .github/workflows/ci.yml | 4 +- README.md | 21 ++- packages/azure-store/README.md | 31 ++--- packages/file-store/README.md | 35 +++-- packages/gcs-store/README.md | 21 ++- packages/s3-store/README.md | 40 +++--- packages/server/README.md | 237 ++++++++++++++++----------------- packages/utils/package.json | 2 +- tsconfig.base.json | 2 +- 9 files changed, 187 insertions(+), 206 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d4d5178f..2791a180 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,7 +16,7 @@ concurrency: ${{ github.workflow }}--${{ github.ref }} jobs: main: - name: Node.js LTS + name: Node.js 20 runs-on: ubuntu-latest steps: @@ -33,7 +33,7 @@ jobs: - name: Install Node.js uses: actions/setup-node@v3 with: - node-version: lts/* + node-version: 20 - name: Install dependencies run: npm ci --no-fund --no-audit diff --git a/README.md b/README.md index d181d493..715dad30 100644 --- a/README.md +++ b/README.md @@ -52,17 +52,17 @@ A standalone server which stores files on disk. > Try it yourself in [StackBlitz](https://stackblitz.com/edit/stackblitz-starters-zg6mgnuf?file=index.js) ```js -const {Server} = require('@tus/server') -const {FileStore} = require('@tus/file-store') +const { Server } = require("@tus/server"); +const { FileStore } = require("@tus/file-store"); -const host = '127.0.0.1' -const port = 1080 +const host = "127.0.0.1"; +const port = 1080; const server = new Server({ - path: '/files', - datastore: new FileStore({directory: './files'}), -}) + path: "/files", + datastore: new FileStore({ directory: "./files" }), +}); -server.listen({host, port}) +server.listen({ host, port }); ``` A tus server integrated into your existing Node.js server. `@tus/server` has no @@ -124,7 +124,7 @@ All packages are fully typed with TypeScript. ## Compatibility -All packages require Node.js 16.0+. +All packages require Node.js 20+. ## Contribute @@ -144,8 +144,7 @@ See [`@tus/azure-store`]: https://github.com/tus/tus-node-server/tree/main/packages/azure-store [extensions]: https://tus.io/protocols/resumable-upload.html#protocol-extensions [creation]: https://tus.io/protocols/resumable-upload.html#creation -[creation with upload]: - https://tus.io/protocols/resumable-upload.html#creation-with-upload +[creation with upload]: https://tus.io/protocols/resumable-upload.html#creation-with-upload [expiration]: https://tus.io/protocols/resumable-upload.html#expiration [checksum]: https://tus.io/protocols/resumable-upload.html#checksum [termination]: https://tus.io/protocols/resumable-upload.html#termination diff --git a/packages/azure-store/README.md b/packages/azure-store/README.md index 853b88de..076fd34a 100644 --- a/packages/azure-store/README.md +++ b/packages/azure-store/README.md @@ -16,7 +16,7 @@ Azure Store based on the Append Blob Client [Azure Blob AppendBlobClient](https: ## Install -In Node.js (16.0+), install with npm: +In Node.js (20+), install with npm: ```bash npm install @tus/azure-store @@ -25,17 +25,17 @@ npm install @tus/azure-store ## Use ```js -const {Server} = require('@tus/server') -const {AzureStore} = require('@tus/azure-store') +const { Server } = require("@tus/server"); +const { AzureStore } = require("@tus/azure-store"); const server = new Server({ - path: '/files', + path: "/files", datastore: new AzureStore({ - account: process.env.AZURE_ACCOUNT_ID, - accountKey: process.env.AZURE_ACCOUNT_KEY, - containerName: process.env.AZURE_CONTAINER_NAME, + account: process.env.AZURE_ACCOUNT_ID, + accountKey: process.env.AZURE_ACCOUNT_KEY, + containerName: process.env.AZURE_CONTAINER_NAME, }), -}) +}); // ... ``` @@ -84,7 +84,7 @@ This package is fully typed with TypeScript. ## Compatibility -This package requires Node.js 16.0+. +This package requires Node.js 20+. ## Contribute @@ -98,17 +98,12 @@ See [extensions]: https://tus.io/protocols/resumable-upload.html#protocol-extensions [creation]: https://tus.io/protocols/resumable-upload.html#creation -[creation with upload]: - https://tus.io/protocols/resumable-upload.html#creation-with-upload +[creation with upload]: https://tus.io/protocols/resumable-upload.html#creation-with-upload [expiration]: https://tus.io/protocols/resumable-upload.html#expiration [checksum]: https://tus.io/protocols/resumable-upload.html#checksum [termination]: https://tus.io/protocols/resumable-upload.html#termination [concatenation]: https://tus.io/protocols/resumable-upload.html#concatenation -[`cleanUpExpiredUploads`]: - https://github.com/tus/tus-node-server/tree/main/packages/server#cleanupexpireduploads +[`cleanUpExpiredUploads`]: https://github.com/tus/tus-node-server/tree/main/packages/server#cleanupexpireduploads [kvstores]: https://github.com/tus/tus-node-server/tree/main/packages/server#kvstores -[`KvStore`]: - https://github.com/tus/tus-node-server/blob/main/packages/utils/src/kvstores/Types.ts - -[`MemoryKvStore`]: - https://github.com/tus/tus-node-server/blob/main/packages/utils/src/kvstores/MemoryKvStore.ts +[`KvStore`]: https://github.com/tus/tus-node-server/blob/main/packages/utils/src/kvstores/Types.ts +[`MemoryKvStore`]: https://github.com/tus/tus-node-server/blob/main/packages/utils/src/kvstores/MemoryKvStore.ts diff --git a/packages/file-store/README.md b/packages/file-store/README.md index 21a3a596..a1485449 100644 --- a/packages/file-store/README.md +++ b/packages/file-store/README.md @@ -20,7 +20,7 @@ ## Install -In Node.js (16.0+), install with npm: +In Node.js (20+), install with npm: ```bash npm install @tus/file-store @@ -29,13 +29,13 @@ npm install @tus/file-store ## Use ```js -const {Server} = require('@tus/server') -const {FileStore} = require('@tus/file-store') +const { Server } = require("@tus/server"); +const { FileStore } = require("@tus/file-store"); const server = new Server({ - path: '/files', - datastore: new FileStore({directory: './some/path'}), -}) + path: "/files", + datastore: new FileStore({ directory: "./some/path" }), +}); // ... ``` @@ -87,25 +87,25 @@ For demonstration purposes we will create a memory config store, but that's not idea. It's written in TypeScript. ```ts -import type {Upload} from '@tus/server' +import type { Upload } from "@tus/server"; export class MemoryConfigstore { - data: Map = new Map() + data: Map = new Map(); get(key: string): Upload | undefined { - return this.data.get(key) + return this.data.get(key); } set(key: string, value: Upload) { - this.data.set(key, value) + this.data.set(key, value); } delete(key: string) { - return this.data.delete(key) + return this.data.delete(key); } get list(): Record { - return Object.fromEntries(this.data.entries()) + return Object.fromEntries(this.data.entries()); } } ``` @@ -124,7 +124,7 @@ This package is fully typed with TypeScript. ## Compatibility -This package requires Node.js 16.0+. +This package requires Node.js 20+. ## Contribute @@ -138,14 +138,11 @@ See [extensions]: https://tus.io/protocols/resumable-upload.html#protocol-extensions [creation]: https://tus.io/protocols/resumable-upload.html#creation -[creation with upload]: - https://tus.io/protocols/resumable-upload.html#creation-with-upload +[creation with upload]: https://tus.io/protocols/resumable-upload.html#creation-with-upload [expiration]: https://tus.io/protocols/resumable-upload.html#expiration [checksum]: https://tus.io/protocols/resumable-upload.html#checksum [termination]: https://tus.io/protocols/resumable-upload.html#termination [concatenation]: https://tus.io/protocols/resumable-upload.html#concatenation -[`cleanUpExpiredUploads`]: - https://github.com/tus/tus-node-server/tree/main/packages/server#cleanupexpireduploads +[`cleanUpExpiredUploads`]: https://github.com/tus/tus-node-server/tree/main/packages/server#cleanupexpireduploads [kvstores]: https://github.com/tus/tus-node-server/tree/main/packages/server#kvstores -[`KvStore`]: - https://github.com/tus/tus-node-server/blob/main/packages/utils/src/kvstores/Types.ts +[`KvStore`]: https://github.com/tus/tus-node-server/blob/main/packages/utils/src/kvstores/Types.ts diff --git a/packages/gcs-store/README.md b/packages/gcs-store/README.md index 55ace76f..5af750b9 100644 --- a/packages/gcs-store/README.md +++ b/packages/gcs-store/README.md @@ -17,7 +17,7 @@ ## Install -In Node.js (16.0+), install with npm: +In Node.js (20+), install with npm: ```bash npm install @tus/gcs-store @@ -26,19 +26,19 @@ npm install @tus/gcs-store ## Use ```js -const {Server} = require('@tus/server') -const {GCSStore} = require('@tus/gcs-store') +const { Server } = require("@tus/server"); +const { GCSStore } = require("@tus/gcs-store"); -const {Storage} = require('@google-cloud/storage') +const { Storage } = require("@google-cloud/storage"); -const storage = new Storage({keyFilename: 'key.json'}) +const storage = new Storage({ keyFilename: "key.json" }); const server = new Server({ - path: '/files', + path: "/files", datastore: new GCSStore({ - bucket: storage.bucket('tus-node-server-ci'), + bucket: storage.bucket("tus-node-server-ci"), }), -}) +}); // ... ``` @@ -74,7 +74,7 @@ This package is fully typed with TypeScript. ## Compatibility -This package requires Node.js 16.0+. +This package requires Node.js 20+. ## Contribute @@ -88,8 +88,7 @@ See [extensions]: https://tus.io/protocols/resumable-upload.html#protocol-extensions [creation]: https://tus.io/protocols/resumable-upload.html#creation -[creation with upload]: - https://tus.io/protocols/resumable-upload.html#creation-with-upload +[creation with upload]: https://tus.io/protocols/resumable-upload.html#creation-with-upload [expiration]: https://tus.io/protocols/resumable-upload.html#expiration [checksum]: https://tus.io/protocols/resumable-upload.html#checksum [termination]: https://tus.io/protocols/resumable-upload.html#termination diff --git a/packages/s3-store/README.md b/packages/s3-store/README.md index d2f30883..db465c4b 100644 --- a/packages/s3-store/README.md +++ b/packages/s3-store/README.md @@ -22,7 +22,7 @@ ## Install -In Node.js (16.0+), install with npm: +In Node.js (20+), install with npm: ```bash npm install @tus/s3-store @@ -31,8 +31,8 @@ npm install @tus/s3-store ## Use ```js -const {Server} = require('@tus/server') -const {S3Store} = require('@tus/s3-store') +const { Server } = require("@tus/server"); +const { S3Store } = require("@tus/s3-store"); const s3Store = new S3Store({ partSize: 8 * 1024 * 1024, // Each uploaded part will have ~8MiB, @@ -44,8 +44,8 @@ const s3Store = new S3Store({ secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, }, }, -}) -const server = new Server({path: '/files', datastore: s3Store}) +}); +const server = new Server({ path: "/files", datastore: s3Store }); // ... ``` @@ -199,9 +199,9 @@ docs for the supported values of [credentials](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Credentials.html#constructor-property) ```js -const aws = require('aws-sdk') -const {Server} = require('@tus/server') -const {S3Store} = require('@tus/s3-store') +const aws = require("aws-sdk"); +const { Server } = require("@tus/server"); +const { S3Store } = require("@tus/s3-store"); const s3Store = new S3Store({ partSize: 8 * 1024 * 1024, @@ -209,12 +209,12 @@ const s3Store = new S3Store({ bucket: process.env.AWS_BUCKET, region: process.env.AWS_REGION, credentials: new aws.ECSCredentials({ - httpOptions: {timeout: 5000}, + httpOptions: { timeout: 5000 }, maxRetries: 10, }), }, -}) -const server = new Server({path: '/files', datastore: s3Store}) +}); +const server = new Server({ path: "/files", datastore: s3Store }); // ... ``` @@ -231,7 +231,7 @@ const s3Store = new S3Store({ partSize: 8 * 1024 * 1024, minPartSize: 8 * 1024 * 1024, // ... -}) +}); ``` ### Example: use with Scaleway Object Storage @@ -242,7 +242,7 @@ const s3Store = new S3Store({ const s3Store = new S3Store({ maxMultipartParts: 1000, // ... -}) +}); ``` ## Types @@ -251,7 +251,7 @@ This package is fully typed with TypeScript. ## Compatibility -This package requires Node.js 16.0+. +This package requires Node.js 20+. ## Contribute @@ -265,16 +265,12 @@ See [extensions]: https://tus.io/protocols/resumable-upload.html#protocol-extensions [creation]: https://tus.io/protocols/resumable-upload.html#creation -[creation with upload]: - https://tus.io/protocols/resumable-upload.html#creation-with-upload +[creation with upload]: https://tus.io/protocols/resumable-upload.html#creation-with-upload [expiration]: https://tus.io/protocols/resumable-upload.html#expiration [checksum]: https://tus.io/protocols/resumable-upload.html#checksum [termination]: https://tus.io/protocols/resumable-upload.html#termination [concatenation]: https://tus.io/protocols/resumable-upload.html#concatenation -[cleanExpiredUploads]: - https://github.com/tus/tus-node-server/tree/main/packages/server#servercleanupexpireduploads -[lifecyle]: - https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html +[cleanExpiredUploads]: https://github.com/tus/tus-node-server/tree/main/packages/server#servercleanupexpireduploads +[lifecyle]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html [kvstores]: https://github.com/tus/tus-node-server/tree/main/packages/server#kvstores -[`KvStore`]: - https://github.com/tus/tus-node-server/blob/main/packages/utils/src/kvstores/Types.ts +[`KvStore`]: https://github.com/tus/tus-node-server/blob/main/packages/utils/src/kvstores/Types.ts diff --git a/packages/server/README.md b/packages/server/README.md index a49d202a..334e2b29 100644 --- a/packages/server/README.md +++ b/packages/server/README.md @@ -26,7 +26,7 @@ ## Install -In Node.js (16.0+), install with npm: +In Node.js (20+), install with npm: ```bash npm install @tus/server @@ -37,16 +37,16 @@ npm install @tus/server A standalone server which stores files on disk. ```js -const {Server} = require('@tus/server') -const {FileStore} = require('@tus/file-store') -const host = '127.0.0.1' -const port = 1080 +const { Server } = require("@tus/server"); +const { FileStore } = require("@tus/file-store"); +const host = "127.0.0.1"; +const port = 1080; const server = new Server({ - path: '/files', - datastore: new FileStore({directory: './files'}), -}) -server.listen({host, port}) + path: "/files", + datastore: new FileStore({ directory: "./files" }), +}); +server.listen({ host, port }); ``` ## API @@ -311,54 +311,54 @@ can also be used as a cache in other stores, such as `@tus/s3-store`. #### `MemoryKvStore` ```ts -import {MemoryKvStore} from '@tus/server' -import S3Store, {type MetadataValue} from '@tus/s3-store' +import { MemoryKvStore } from "@tus/server"; +import S3Store, { type MetadataValue } from "@tus/s3-store"; new S3Store({ // ... cache: new MemoryKvStore(), -}) +}); ``` #### `FileKvStore` ```ts -import {FileKvStore} from '@tus/server' -import S3Store, {type MetadataValue} from '@tus/s3-store' +import { FileKvStore } from "@tus/server"; +import S3Store, { type MetadataValue } from "@tus/s3-store"; -const path = './uploads' +const path = "./uploads"; new S3Store({ // ... cache: new FileKvStore(path), -}) +}); ``` #### `RedisKvStore` ```ts -import {RedisKvStore} from '@tus/server' -import S3Store, {type MetadataValue} from '@tus/s3-store' -import {createClient} from '@redis/client' +import { RedisKvStore } from "@tus/server"; +import S3Store, { type MetadataValue } from "@tus/s3-store"; +import { createClient } from "@redis/client"; -const client = await createClient().connect() -const prefix = 'foo' // prefix for the key (foo${id}) +const client = await createClient().connect(); +const prefix = "foo"; // prefix for the key (foo${id}) new S3Store({ // ... cache: new RedisKvStore(client, prefix), -}) +}); ``` #### `IoRedisKvStore` ```ts -import { IoRedisKvStore } from '@tus/server'; -import S3Store, { type MetadataValue } from '@tus/s3-store'; -import Redis from 'ioredis'; +import { IoRedisKvStore } from "@tus/server"; +import S3Store, { type MetadataValue } from "@tus/s3-store"; +import Redis from "ioredis"; const client = new Redis(); -const prefix = 'foo'; // prefix for the key (foo${id}) +const prefix = "foo"; // prefix for the key (foo${id}) new S3Store({ // ... @@ -371,66 +371,66 @@ new S3Store({ ### Example: integrate tus into Express ```js -const {Server} = require('@tus/server') -const {FileStore} = require('@tus/file-store') -const express = require('express') - -const host = '127.0.0.1' -const port = 1080 -const app = express() -const uploadApp = express() +const { Server } = require("@tus/server"); +const { FileStore } = require("@tus/file-store"); +const express = require("express"); + +const host = "127.0.0.1"; +const port = 1080; +const app = express(); +const uploadApp = express(); const server = new Server({ - path: '/uploads', - datastore: new FileStore({directory: '/files'}), -}) + path: "/uploads", + datastore: new FileStore({ directory: "/files" }), +}); -uploadApp.all('*', server.handle.bind(server)) -app.use('/uploads', uploadApp) -app.listen(port, host) +uploadApp.all("*", server.handle.bind(server)); +app.use("/uploads", uploadApp); +app.listen(port, host); ``` ### Example: integrate tus into Koa ```js -const http = require('node:http') -const url = require('node:url') -const Koa = require('koa') -const {Server} = require('@tus/server') -const {FileStore} = require('@tus/file-store') - -const app = new Koa() -const appCallback = app.callback() -const port = 1080 +const http = require("node:http"); +const url = require("node:url"); +const Koa = require("koa"); +const { Server } = require("@tus/server"); +const { FileStore } = require("@tus/file-store"); + +const app = new Koa(); +const appCallback = app.callback(); +const port = 1080; const tusServer = new Server({ - path: '/files', - datastore: new FileStore({directory: '/files'}), -}) + path: "/files", + datastore: new FileStore({ directory: "/files" }), +}); const server = http.createServer((req, res) => { - const urlPath = url.parse(req.url).pathname + const urlPath = url.parse(req.url).pathname; // handle any requests with the `/files/*` pattern if (/^\/files\/.+/.test(urlPath.toLowerCase())) { - return tusServer.handle(req, res) + return tusServer.handle(req, res); } - appCallback(req, res) -}) + appCallback(req, res); +}); -server.listen(port) +server.listen(port); ``` ### Example: integrate tus into Fastify ```js -const fastify = require('fastify')({logger: true}) -const {Server} = require('@tus/server') -const {FileStore} = require('@tus/file-store') +const fastify = require("fastify")({ logger: true }); +const { Server } = require("@tus/server"); +const { FileStore } = require("@tus/file-store"); const tusServer = new Server({ - path: '/files', - datastore: new FileStore({directory: './files'}), -}) + path: "/files", + datastore: new FileStore({ directory: "./files" }), +}); /** * add new content-type to fastify forewards request @@ -438,9 +438,9 @@ const tusServer = new Server({ * @see https://www.fastify.io/docs/latest/Reference/ContentTypeParser/ */ fastify.addContentTypeParser( - 'application/offset+octet-stream', + "application/offset+octet-stream", (request, payload, done) => done(null) -) +); /** * let tus handle preparation and filehandling requests @@ -448,18 +448,18 @@ fastify.addContentTypeParser( * @see https://www.fastify.io/docs/latest/Reference/Request/ * @see https://www.fastify.io/docs/latest/Reference/Reply/#raw */ -fastify.all('/files', (req, res) => { - tusServer.handle(req.raw, res.raw) -}) -fastify.all('/files/*', (req, res) => { - tusServer.handle(req.raw, res.raw) -}) +fastify.all("/files", (req, res) => { + tusServer.handle(req.raw, res.raw); +}); +fastify.all("/files/*", (req, res) => { + tusServer.handle(req.raw, res.raw); +}); fastify.listen(3000, (err) => { if (err) { - fastify.log.error(err) - process.exit(1) + fastify.log.error(err); + process.exit(1); } -}) +}); ``` ### Example: integrate tus into Next.js @@ -470,9 +470,9 @@ Attach the tus server handler to a Next.js route handler in an `/pages/api/upload/[[...file]].ts` ```ts -import type {NextApiRequest, NextApiResponse} from 'next' -import {Server, Upload} from '@tus/server' -import {FileStore} from '@tus/file-store' +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 @@ -482,40 +482,40 @@ export const config = { api: { bodyParser: false, }, -} +}; const tusServer = new Server({ // `path` needs to match the route declared by the next file router // ie /api/upload - path: '/api/upload', - datastore: new FileStore({directory: './files'}), -}) + path: "/api/upload", + datastore: new FileStore({ directory: "./files" }), +}); export default function handler(req: NextApiRequest, res: NextApiResponse) { - return tusServer.handle(req, res) + return tusServer.handle(req, res); } ``` ### Example: validate metadata when an upload is created ```js -const {Server} = require('@tus/server') +const { Server } = require("@tus/server"); // ... const server = new Server({ // .. async onUploadCreate(req, res, upload) { - const {ok, expected, received} = validateMetadata(upload) // your logic + const { ok, expected, received } = validateMetadata(upload); // your logic if (!ok) { - const body = `Expected "${expected}" in "Upload-Metadata" but received "${received}"` - throw {status_code: 500, body} // if undefined, falls back to 500 with "Internal server error". + const body = `Expected "${expected}" in "Upload-Metadata" but received "${received}"`; + throw { status_code: 500, body }; // if undefined, falls back to 500 with "Internal server error". } // You can optionally return metadata to override the upload metadata, // such as `{ storagePath: "/upload/123abc..." }` - const extraMeta = getExtraMetadata(req) // your logic - return {res, metadata: {...upload.metadata, ...extraMeta}} + const extraMeta = getExtraMetadata(req); // your logic + return { res, metadata: { ...upload.metadata, ...extraMeta } }; }, -}) +}); ``` ### Example: access control @@ -524,30 +524,30 @@ Access control is opinionated and can be done in different ways. This example is psuedo-code for what it could look like with JSON Web Tokens. ```js -const {Server} = require('@tus/server') +const { Server } = require("@tus/server"); // ... const server = new Server({ // .. async onIncomingRequest(req, res) { - const token = req.headers.authorization + const token = req.headers.authorization; if (!token) { - throw {status_code: 401, body: 'Unauthorized'} + throw { status_code: 401, body: "Unauthorized" }; } try { - const decodedToken = await jwt.verify(token, 'your_secret_key') - req.user = decodedToken + const decodedToken = await jwt.verify(token, "your_secret_key"); + req.user = decodedToken; } catch (error) { - throw {status_code: 401, body: 'Invalid token'} + throw { status_code: 401, body: "Invalid token" }; } - if (req.user.role !== 'admin') { - throw {status_code: 403, body: 'Access denied'} + if (req.user.role !== "admin") { + throw { status_code: 403, body: "Access denied" }; } }, -}) +}); ``` ### Example: store files in custom nested directories @@ -560,26 +560,26 @@ Adding a slash means you create a new directory, for which you need to implement functions as we need encode the id with base64 into the URL. ```js -const path = '/files' +const path = "/files"; const server = new Server({ path, - datastore: new FileStore({directory: './test/output'}), + datastore: new FileStore({ directory: "./test/output" }), namingFunction(req) { - const id = crypto.randomBytes(16).toString('hex') - const folder = getFolderForUser(req) // your custom logic - return `users/${folder}/${id}` + const id = crypto.randomBytes(16).toString("hex"); + const folder = getFolderForUser(req); // your custom logic + return `users/${folder}/${id}`; }, - generateUrl(req, {proto, host, path, id}) { - id = Buffer.from(id, 'utf-8').toString('base64url') - return `${proto}://${host}${path}/${id}` + generateUrl(req, { proto, host, path, id }) { + id = Buffer.from(id, "utf-8").toString("base64url"); + return `${proto}://${host}${path}/${id}`; }, getFileIdFromRequest(req, lastPath) { // lastPath is everything after the last `/` // If your custom URL is different, this might be undefined // and you need to extract the ID yourself - return Buffer.from(lastPath, 'base64url').toString('utf-8') + return Buffer.from(lastPath, "base64url").toString("utf-8"); }, -}) +}); ``` ### Example: use with Nginx @@ -592,13 +592,13 @@ Firstly, you must set `respectForwardedHeaders` indicating that a reverse proxy and that it should respect the `X-Forwarded-*`/`Forwarded` headers: ```js -const {Server} = require('@tus/server') +const { Server } = require("@tus/server"); // ... const server = new Server({ // .. respectForwardedHeaders: true, -}) +}); ``` Secondly, some of the reverse proxy's settings should be adjusted. The exact steps depend @@ -631,7 +631,7 @@ This package is fully typed with TypeScript. ## Compatibility -This package requires Node.js 16.0+. +This package requires Node.js 20+. ## Contribute @@ -646,15 +646,10 @@ See [`@tus/file-store`]: https://github.com/tus/tus-node-server/tree/main/packages/file-store [`@tus/s3-store`]: https://github.com/tus/tus-node-server/tree/main/packages/s3-store [`@tus/gcs-store`]: https://github.com/tus/tus-node-server/tree/main/packages/gcs-store -[`constants`]: - https://github.com/tus/tus-node-server/blob/main/packages/utils/src/constants.ts +[`constants`]: https://github.com/tus/tus-node-server/blob/main/packages/utils/src/constants.ts [`types`]: https://github.com/tus/tus-node-server/blob/main/packages/server/src/types.ts -[`models`]: - https://github.com/tus/tus-node-server/blob/main/packages/utils/src/models/index.ts -[`kvstores`]: - https://github.com/tus/tus-node-server/blob/main/packages/utils/src/kvstores/index.ts +[`models`]: https://github.com/tus/tus-node-server/blob/main/packages/utils/src/models/index.ts +[`kvstores`]: https://github.com/tus/tus-node-server/blob/main/packages/utils/src/kvstores/index.ts [expiration]: https://tus.io/protocols/resumable-upload.html#expiration -[`Locker`]: - https://github.com/tus/tus-node-server/blob/main/packages/utils/src/models/Locker.ts -[`MemoryLocker`]: - https://github.com/tus/tus-node-server/blob/main/packages/server/src/lockers/MemoryLocker.ts +[`Locker`]: https://github.com/tus/tus-node-server/blob/main/packages/utils/src/models/Locker.ts +[`MemoryLocker`]: https://github.com/tus/tus-node-server/blob/main/packages/server/src/lockers/MemoryLocker.ts diff --git a/packages/utils/package.json b/packages/utils/package.json index 7d097f87..0e28bfad 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -28,6 +28,6 @@ "ts-node": "^10.9.2" }, "engines": { - "node": ">=16" + "node": ">=20" } } diff --git a/tsconfig.base.json b/tsconfig.base.json index fa960cdc..3c233fd3 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -3,7 +3,7 @@ "compilerOptions": { "composite": true, "lib": ["es2020"], - "module": "node16", + "module": "NodeNext", "target": "es2020", "strict": true, "declaration": true, From c61bb66b402ec10fb9c4a3820f217414a9c61281 Mon Sep 17 00:00:00 2001 From: Murderlon Date: Wed, 12 Feb 2025 10:57:09 +0100 Subject: [PATCH 03/18] Undo formatting --- README.md | 19 +-- packages/azure-store/README.md | 27 ++-- packages/file-store/README.md | 31 +++-- packages/gcs-store/README.md | 17 +-- packages/s3-store/README.md | 36 ++--- packages/server/README.md | 233 +++++++++++++++++---------------- 6 files changed, 191 insertions(+), 172 deletions(-) diff --git a/README.md b/README.md index 715dad30..d1a37d4d 100644 --- a/README.md +++ b/README.md @@ -52,17 +52,17 @@ A standalone server which stores files on disk. > Try it yourself in [StackBlitz](https://stackblitz.com/edit/stackblitz-starters-zg6mgnuf?file=index.js) ```js -const { Server } = require("@tus/server"); -const { FileStore } = require("@tus/file-store"); +const {Server} = require('@tus/server') +const {FileStore} = require('@tus/file-store') -const host = "127.0.0.1"; -const port = 1080; +const host = '127.0.0.1' +const port = 1080 const server = new Server({ - path: "/files", - datastore: new FileStore({ directory: "./files" }), -}); + path: '/files', + datastore: new FileStore({directory: './files'}), +}) -server.listen({ host, port }); +server.listen({host, port}) ``` A tus server integrated into your existing Node.js server. `@tus/server` has no @@ -144,7 +144,8 @@ See [`@tus/azure-store`]: https://github.com/tus/tus-node-server/tree/main/packages/azure-store [extensions]: https://tus.io/protocols/resumable-upload.html#protocol-extensions [creation]: https://tus.io/protocols/resumable-upload.html#creation -[creation with upload]: https://tus.io/protocols/resumable-upload.html#creation-with-upload +[creation with upload]: + https://tus.io/protocols/resumable-upload.html#creation-with-upload [expiration]: https://tus.io/protocols/resumable-upload.html#expiration [checksum]: https://tus.io/protocols/resumable-upload.html#checksum [termination]: https://tus.io/protocols/resumable-upload.html#termination diff --git a/packages/azure-store/README.md b/packages/azure-store/README.md index 076fd34a..dcc3f457 100644 --- a/packages/azure-store/README.md +++ b/packages/azure-store/README.md @@ -25,17 +25,17 @@ npm install @tus/azure-store ## Use ```js -const { Server } = require("@tus/server"); -const { AzureStore } = require("@tus/azure-store"); +const {Server} = require('@tus/server') +const {AzureStore} = require('@tus/azure-store') const server = new Server({ - path: "/files", + path: '/files', datastore: new AzureStore({ - account: process.env.AZURE_ACCOUNT_ID, - accountKey: process.env.AZURE_ACCOUNT_KEY, - containerName: process.env.AZURE_CONTAINER_NAME, + account: process.env.AZURE_ACCOUNT_ID, + accountKey: process.env.AZURE_ACCOUNT_KEY, + containerName: process.env.AZURE_CONTAINER_NAME, }), -}); +}) // ... ``` @@ -98,12 +98,17 @@ See [extensions]: https://tus.io/protocols/resumable-upload.html#protocol-extensions [creation]: https://tus.io/protocols/resumable-upload.html#creation -[creation with upload]: https://tus.io/protocols/resumable-upload.html#creation-with-upload +[creation with upload]: + https://tus.io/protocols/resumable-upload.html#creation-with-upload [expiration]: https://tus.io/protocols/resumable-upload.html#expiration [checksum]: https://tus.io/protocols/resumable-upload.html#checksum [termination]: https://tus.io/protocols/resumable-upload.html#termination [concatenation]: https://tus.io/protocols/resumable-upload.html#concatenation -[`cleanUpExpiredUploads`]: https://github.com/tus/tus-node-server/tree/main/packages/server#cleanupexpireduploads +[`cleanUpExpiredUploads`]: + https://github.com/tus/tus-node-server/tree/main/packages/server#cleanupexpireduploads [kvstores]: https://github.com/tus/tus-node-server/tree/main/packages/server#kvstores -[`KvStore`]: https://github.com/tus/tus-node-server/blob/main/packages/utils/src/kvstores/Types.ts -[`MemoryKvStore`]: https://github.com/tus/tus-node-server/blob/main/packages/utils/src/kvstores/MemoryKvStore.ts +[`KvStore`]: + https://github.com/tus/tus-node-server/blob/main/packages/utils/src/kvstores/Types.ts + +[`MemoryKvStore`]: + https://github.com/tus/tus-node-server/blob/main/packages/utils/src/kvstores/MemoryKvStore.ts diff --git a/packages/file-store/README.md b/packages/file-store/README.md index a1485449..f0f4eb42 100644 --- a/packages/file-store/README.md +++ b/packages/file-store/README.md @@ -29,13 +29,13 @@ npm install @tus/file-store ## Use ```js -const { Server } = require("@tus/server"); -const { FileStore } = require("@tus/file-store"); +const {Server} = require('@tus/server') +const {FileStore} = require('@tus/file-store') const server = new Server({ - path: "/files", - datastore: new FileStore({ directory: "./some/path" }), -}); + path: '/files', + datastore: new FileStore({directory: './some/path'}), +}) // ... ``` @@ -87,25 +87,25 @@ For demonstration purposes we will create a memory config store, but that's not idea. It's written in TypeScript. ```ts -import type { Upload } from "@tus/server"; +import type {Upload} from '@tus/server' export class MemoryConfigstore { - data: Map = new Map(); + data: Map = new Map() get(key: string): Upload | undefined { - return this.data.get(key); + return this.data.get(key) } set(key: string, value: Upload) { - this.data.set(key, value); + this.data.set(key, value) } delete(key: string) { - return this.data.delete(key); + return this.data.delete(key) } get list(): Record { - return Object.fromEntries(this.data.entries()); + return Object.fromEntries(this.data.entries()) } } ``` @@ -138,11 +138,14 @@ See [extensions]: https://tus.io/protocols/resumable-upload.html#protocol-extensions [creation]: https://tus.io/protocols/resumable-upload.html#creation -[creation with upload]: https://tus.io/protocols/resumable-upload.html#creation-with-upload +[creation with upload]: + https://tus.io/protocols/resumable-upload.html#creation-with-upload [expiration]: https://tus.io/protocols/resumable-upload.html#expiration [checksum]: https://tus.io/protocols/resumable-upload.html#checksum [termination]: https://tus.io/protocols/resumable-upload.html#termination [concatenation]: https://tus.io/protocols/resumable-upload.html#concatenation -[`cleanUpExpiredUploads`]: https://github.com/tus/tus-node-server/tree/main/packages/server#cleanupexpireduploads +[`cleanUpExpiredUploads`]: + https://github.com/tus/tus-node-server/tree/main/packages/server#cleanupexpireduploads [kvstores]: https://github.com/tus/tus-node-server/tree/main/packages/server#kvstores -[`KvStore`]: https://github.com/tus/tus-node-server/blob/main/packages/utils/src/kvstores/Types.ts +[`KvStore`]: + https://github.com/tus/tus-node-server/blob/main/packages/utils/src/kvstores/Types.ts diff --git a/packages/gcs-store/README.md b/packages/gcs-store/README.md index 5af750b9..f1138028 100644 --- a/packages/gcs-store/README.md +++ b/packages/gcs-store/README.md @@ -26,19 +26,19 @@ npm install @tus/gcs-store ## Use ```js -const { Server } = require("@tus/server"); -const { GCSStore } = require("@tus/gcs-store"); +const {Server} = require('@tus/server') +const {GCSStore} = require('@tus/gcs-store') -const { Storage } = require("@google-cloud/storage"); +const {Storage} = require('@google-cloud/storage') -const storage = new Storage({ keyFilename: "key.json" }); +const storage = new Storage({keyFilename: 'key.json'}) const server = new Server({ - path: "/files", + path: '/files', datastore: new GCSStore({ - bucket: storage.bucket("tus-node-server-ci"), + bucket: storage.bucket('tus-node-server-ci'), }), -}); +}) // ... ``` @@ -88,7 +88,8 @@ See [extensions]: https://tus.io/protocols/resumable-upload.html#protocol-extensions [creation]: https://tus.io/protocols/resumable-upload.html#creation -[creation with upload]: https://tus.io/protocols/resumable-upload.html#creation-with-upload +[creation with upload]: + https://tus.io/protocols/resumable-upload.html#creation-with-upload [expiration]: https://tus.io/protocols/resumable-upload.html#expiration [checksum]: https://tus.io/protocols/resumable-upload.html#checksum [termination]: https://tus.io/protocols/resumable-upload.html#termination diff --git a/packages/s3-store/README.md b/packages/s3-store/README.md index db465c4b..62f6fa69 100644 --- a/packages/s3-store/README.md +++ b/packages/s3-store/README.md @@ -31,8 +31,8 @@ npm install @tus/s3-store ## Use ```js -const { Server } = require("@tus/server"); -const { S3Store } = require("@tus/s3-store"); +const {Server} = require('@tus/server') +const {S3Store} = require('@tus/s3-store') const s3Store = new S3Store({ partSize: 8 * 1024 * 1024, // Each uploaded part will have ~8MiB, @@ -44,8 +44,8 @@ const s3Store = new S3Store({ secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, }, }, -}); -const server = new Server({ path: "/files", datastore: s3Store }); +}) +const server = new Server({path: '/files', datastore: s3Store}) // ... ``` @@ -199,9 +199,9 @@ docs for the supported values of [credentials](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Credentials.html#constructor-property) ```js -const aws = require("aws-sdk"); -const { Server } = require("@tus/server"); -const { S3Store } = require("@tus/s3-store"); +const aws = require('aws-sdk') +const {Server} = require('@tus/server') +const {S3Store} = require('@tus/s3-store') const s3Store = new S3Store({ partSize: 8 * 1024 * 1024, @@ -209,12 +209,12 @@ const s3Store = new S3Store({ bucket: process.env.AWS_BUCKET, region: process.env.AWS_REGION, credentials: new aws.ECSCredentials({ - httpOptions: { timeout: 5000 }, + httpOptions: {timeout: 5000}, maxRetries: 10, }), }, -}); -const server = new Server({ path: "/files", datastore: s3Store }); +}) +const server = new Server({path: '/files', datastore: s3Store}) // ... ``` @@ -231,7 +231,7 @@ const s3Store = new S3Store({ partSize: 8 * 1024 * 1024, minPartSize: 8 * 1024 * 1024, // ... -}); +}) ``` ### Example: use with Scaleway Object Storage @@ -242,7 +242,7 @@ const s3Store = new S3Store({ const s3Store = new S3Store({ maxMultipartParts: 1000, // ... -}); +}) ``` ## Types @@ -265,12 +265,16 @@ See [extensions]: https://tus.io/protocols/resumable-upload.html#protocol-extensions [creation]: https://tus.io/protocols/resumable-upload.html#creation -[creation with upload]: https://tus.io/protocols/resumable-upload.html#creation-with-upload +[creation with upload]: + https://tus.io/protocols/resumable-upload.html#creation-with-upload [expiration]: https://tus.io/protocols/resumable-upload.html#expiration [checksum]: https://tus.io/protocols/resumable-upload.html#checksum [termination]: https://tus.io/protocols/resumable-upload.html#termination [concatenation]: https://tus.io/protocols/resumable-upload.html#concatenation -[cleanExpiredUploads]: https://github.com/tus/tus-node-server/tree/main/packages/server#servercleanupexpireduploads -[lifecyle]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html +[cleanExpiredUploads]: + https://github.com/tus/tus-node-server/tree/main/packages/server#servercleanupexpireduploads +[lifecyle]: + https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html [kvstores]: https://github.com/tus/tus-node-server/tree/main/packages/server#kvstores -[`KvStore`]: https://github.com/tus/tus-node-server/blob/main/packages/utils/src/kvstores/Types.ts +[`KvStore`]: + https://github.com/tus/tus-node-server/blob/main/packages/utils/src/kvstores/Types.ts diff --git a/packages/server/README.md b/packages/server/README.md index 334e2b29..aceae5e8 100644 --- a/packages/server/README.md +++ b/packages/server/README.md @@ -37,16 +37,16 @@ npm install @tus/server A standalone server which stores files on disk. ```js -const { Server } = require("@tus/server"); -const { FileStore } = require("@tus/file-store"); -const host = "127.0.0.1"; -const port = 1080; +const {Server} = require('@tus/server') +const {FileStore} = require('@tus/file-store') +const host = '127.0.0.1' +const port = 1080 const server = new Server({ - path: "/files", - datastore: new FileStore({ directory: "./files" }), -}); -server.listen({ host, port }); + path: '/files', + datastore: new FileStore({directory: './files'}), +}) +server.listen({host, port}) ``` ## API @@ -311,54 +311,54 @@ can also be used as a cache in other stores, such as `@tus/s3-store`. #### `MemoryKvStore` ```ts -import { MemoryKvStore } from "@tus/server"; -import S3Store, { type MetadataValue } from "@tus/s3-store"; +import {MemoryKvStore} from '@tus/server' +import S3Store, {type MetadataValue} from '@tus/s3-store' new S3Store({ // ... cache: new MemoryKvStore(), -}); +}) ``` #### `FileKvStore` ```ts -import { FileKvStore } from "@tus/server"; -import S3Store, { type MetadataValue } from "@tus/s3-store"; +import {FileKvStore} from '@tus/server' +import S3Store, {type MetadataValue} from '@tus/s3-store' -const path = "./uploads"; +const path = './uploads' new S3Store({ // ... cache: new FileKvStore(path), -}); +}) ``` #### `RedisKvStore` ```ts -import { RedisKvStore } from "@tus/server"; -import S3Store, { type MetadataValue } from "@tus/s3-store"; -import { createClient } from "@redis/client"; +import {RedisKvStore} from '@tus/server' +import S3Store, {type MetadataValue} from '@tus/s3-store' +import {createClient} from '@redis/client' -const client = await createClient().connect(); -const prefix = "foo"; // prefix for the key (foo${id}) +const client = await createClient().connect() +const prefix = 'foo' // prefix for the key (foo${id}) new S3Store({ // ... cache: new RedisKvStore(client, prefix), -}); +}) ``` #### `IoRedisKvStore` ```ts -import { IoRedisKvStore } from "@tus/server"; -import S3Store, { type MetadataValue } from "@tus/s3-store"; -import Redis from "ioredis"; +import { IoRedisKvStore } from '@tus/server'; +import S3Store, { type MetadataValue } from '@tus/s3-store'; +import Redis from 'ioredis'; const client = new Redis(); -const prefix = "foo"; // prefix for the key (foo${id}) +const prefix = 'foo'; // prefix for the key (foo${id}) new S3Store({ // ... @@ -371,66 +371,66 @@ new S3Store({ ### Example: integrate tus into Express ```js -const { Server } = require("@tus/server"); -const { FileStore } = require("@tus/file-store"); -const express = require("express"); - -const host = "127.0.0.1"; -const port = 1080; -const app = express(); -const uploadApp = express(); +const {Server} = require('@tus/server') +const {FileStore} = require('@tus/file-store') +const express = require('express') + +const host = '127.0.0.1' +const port = 1080 +const app = express() +const uploadApp = express() const server = new Server({ - path: "/uploads", - datastore: new FileStore({ directory: "/files" }), -}); + path: '/uploads', + datastore: new FileStore({directory: '/files'}), +}) -uploadApp.all("*", server.handle.bind(server)); -app.use("/uploads", uploadApp); -app.listen(port, host); +uploadApp.all('*', server.handle.bind(server)) +app.use('/uploads', uploadApp) +app.listen(port, host) ``` ### Example: integrate tus into Koa ```js -const http = require("node:http"); -const url = require("node:url"); -const Koa = require("koa"); -const { Server } = require("@tus/server"); -const { FileStore } = require("@tus/file-store"); - -const app = new Koa(); -const appCallback = app.callback(); -const port = 1080; +const http = require('node:http') +const url = require('node:url') +const Koa = require('koa') +const {Server} = require('@tus/server') +const {FileStore} = require('@tus/file-store') + +const app = new Koa() +const appCallback = app.callback() +const port = 1080 const tusServer = new Server({ - path: "/files", - datastore: new FileStore({ directory: "/files" }), -}); + path: '/files', + datastore: new FileStore({directory: '/files'}), +}) const server = http.createServer((req, res) => { - const urlPath = url.parse(req.url).pathname; + const urlPath = url.parse(req.url).pathname // handle any requests with the `/files/*` pattern if (/^\/files\/.+/.test(urlPath.toLowerCase())) { - return tusServer.handle(req, res); + return tusServer.handle(req, res) } - appCallback(req, res); -}); + appCallback(req, res) +}) -server.listen(port); +server.listen(port) ``` ### Example: integrate tus into Fastify ```js -const fastify = require("fastify")({ logger: true }); -const { Server } = require("@tus/server"); -const { FileStore } = require("@tus/file-store"); +const fastify = require('fastify')({logger: true}) +const {Server} = require('@tus/server') +const {FileStore} = require('@tus/file-store') const tusServer = new Server({ - path: "/files", - datastore: new FileStore({ directory: "./files" }), -}); + path: '/files', + datastore: new FileStore({directory: './files'}), +}) /** * add new content-type to fastify forewards request @@ -438,9 +438,9 @@ const tusServer = new Server({ * @see https://www.fastify.io/docs/latest/Reference/ContentTypeParser/ */ fastify.addContentTypeParser( - "application/offset+octet-stream", + 'application/offset+octet-stream', (request, payload, done) => done(null) -); +) /** * let tus handle preparation and filehandling requests @@ -448,18 +448,18 @@ fastify.addContentTypeParser( * @see https://www.fastify.io/docs/latest/Reference/Request/ * @see https://www.fastify.io/docs/latest/Reference/Reply/#raw */ -fastify.all("/files", (req, res) => { - tusServer.handle(req.raw, res.raw); -}); -fastify.all("/files/*", (req, res) => { - tusServer.handle(req.raw, res.raw); -}); +fastify.all('/files', (req, res) => { + tusServer.handle(req.raw, res.raw) +}) +fastify.all('/files/*', (req, res) => { + tusServer.handle(req.raw, res.raw) +}) fastify.listen(3000, (err) => { if (err) { - fastify.log.error(err); - process.exit(1); + fastify.log.error(err) + process.exit(1) } -}); +}) ``` ### Example: integrate tus into Next.js @@ -470,9 +470,9 @@ Attach the tus server handler to a Next.js route handler in an `/pages/api/upload/[[...file]].ts` ```ts -import type { NextApiRequest, NextApiResponse } from "next"; -import { Server, Upload } from "@tus/server"; -import { FileStore } from "@tus/file-store"; +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 @@ -482,40 +482,40 @@ export const config = { api: { bodyParser: false, }, -}; +} const tusServer = new Server({ // `path` needs to match the route declared by the next file router // ie /api/upload - path: "/api/upload", - datastore: new FileStore({ directory: "./files" }), -}); + path: '/api/upload', + datastore: new FileStore({directory: './files'}), +}) export default function handler(req: NextApiRequest, res: NextApiResponse) { - return tusServer.handle(req, res); + return tusServer.handle(req, res) } ``` ### Example: validate metadata when an upload is created ```js -const { Server } = require("@tus/server"); +const {Server} = require('@tus/server') // ... const server = new Server({ // .. async onUploadCreate(req, res, upload) { - const { ok, expected, received } = validateMetadata(upload); // your logic + const {ok, expected, received} = validateMetadata(upload) // your logic if (!ok) { - const body = `Expected "${expected}" in "Upload-Metadata" but received "${received}"`; - throw { status_code: 500, body }; // if undefined, falls back to 500 with "Internal server error". + const body = `Expected "${expected}" in "Upload-Metadata" but received "${received}"` + throw {status_code: 500, body} // if undefined, falls back to 500 with "Internal server error". } // You can optionally return metadata to override the upload metadata, // such as `{ storagePath: "/upload/123abc..." }` - const extraMeta = getExtraMetadata(req); // your logic - return { res, metadata: { ...upload.metadata, ...extraMeta } }; + const extraMeta = getExtraMetadata(req) // your logic + return {res, metadata: {...upload.metadata, ...extraMeta}} }, -}); +}) ``` ### Example: access control @@ -524,30 +524,30 @@ Access control is opinionated and can be done in different ways. This example is psuedo-code for what it could look like with JSON Web Tokens. ```js -const { Server } = require("@tus/server"); +const {Server} = require('@tus/server') // ... const server = new Server({ // .. async onIncomingRequest(req, res) { - const token = req.headers.authorization; + const token = req.headers.authorization if (!token) { - throw { status_code: 401, body: "Unauthorized" }; + throw {status_code: 401, body: 'Unauthorized'} } try { - const decodedToken = await jwt.verify(token, "your_secret_key"); - req.user = decodedToken; + const decodedToken = await jwt.verify(token, 'your_secret_key') + req.user = decodedToken } catch (error) { - throw { status_code: 401, body: "Invalid token" }; + throw {status_code: 401, body: 'Invalid token'} } - if (req.user.role !== "admin") { - throw { status_code: 403, body: "Access denied" }; + if (req.user.role !== 'admin') { + throw {status_code: 403, body: 'Access denied'} } }, -}); +}) ``` ### Example: store files in custom nested directories @@ -560,26 +560,26 @@ Adding a slash means you create a new directory, for which you need to implement functions as we need encode the id with base64 into the URL. ```js -const path = "/files"; +const path = '/files' const server = new Server({ path, - datastore: new FileStore({ directory: "./test/output" }), + datastore: new FileStore({directory: './test/output'}), namingFunction(req) { - const id = crypto.randomBytes(16).toString("hex"); - const folder = getFolderForUser(req); // your custom logic - return `users/${folder}/${id}`; + const id = crypto.randomBytes(16).toString('hex') + const folder = getFolderForUser(req) // your custom logic + return `users/${folder}/${id}` }, - generateUrl(req, { proto, host, path, id }) { - id = Buffer.from(id, "utf-8").toString("base64url"); - return `${proto}://${host}${path}/${id}`; + generateUrl(req, {proto, host, path, id}) { + id = Buffer.from(id, 'utf-8').toString('base64url') + return `${proto}://${host}${path}/${id}` }, getFileIdFromRequest(req, lastPath) { // lastPath is everything after the last `/` // If your custom URL is different, this might be undefined // and you need to extract the ID yourself - return Buffer.from(lastPath, "base64url").toString("utf-8"); + return Buffer.from(lastPath, 'base64url').toString('utf-8') }, -}); +}) ``` ### Example: use with Nginx @@ -592,13 +592,13 @@ Firstly, you must set `respectForwardedHeaders` indicating that a reverse proxy and that it should respect the `X-Forwarded-*`/`Forwarded` headers: ```js -const { Server } = require("@tus/server"); +const {Server} = require('@tus/server') // ... const server = new Server({ // .. respectForwardedHeaders: true, -}); +}) ``` Secondly, some of the reverse proxy's settings should be adjusted. The exact steps depend @@ -646,10 +646,15 @@ See [`@tus/file-store`]: https://github.com/tus/tus-node-server/tree/main/packages/file-store [`@tus/s3-store`]: https://github.com/tus/tus-node-server/tree/main/packages/s3-store [`@tus/gcs-store`]: https://github.com/tus/tus-node-server/tree/main/packages/gcs-store -[`constants`]: https://github.com/tus/tus-node-server/blob/main/packages/utils/src/constants.ts +[`constants`]: + https://github.com/tus/tus-node-server/blob/main/packages/utils/src/constants.ts [`types`]: https://github.com/tus/tus-node-server/blob/main/packages/server/src/types.ts -[`models`]: https://github.com/tus/tus-node-server/blob/main/packages/utils/src/models/index.ts -[`kvstores`]: https://github.com/tus/tus-node-server/blob/main/packages/utils/src/kvstores/index.ts +[`models`]: + https://github.com/tus/tus-node-server/blob/main/packages/utils/src/models/index.ts +[`kvstores`]: + https://github.com/tus/tus-node-server/blob/main/packages/utils/src/kvstores/index.ts [expiration]: https://tus.io/protocols/resumable-upload.html#expiration -[`Locker`]: https://github.com/tus/tus-node-server/blob/main/packages/utils/src/models/Locker.ts -[`MemoryLocker`]: https://github.com/tus/tus-node-server/blob/main/packages/server/src/lockers/MemoryLocker.ts +[`Locker`]: + https://github.com/tus/tus-node-server/blob/main/packages/utils/src/models/Locker.ts +[`MemoryLocker`]: + https://github.com/tus/tus-node-server/blob/main/packages/server/src/lockers/MemoryLocker.ts From 5e1f348afd2bb39e721bec9659b9a00ce66711a3 Mon Sep 17 00:00:00 2001 From: Murderlon Date: Wed, 12 Feb 2025 11:02:39 +0100 Subject: [PATCH 04/18] Set azure-store version to 1.0.0 so it will be bumped to 2.0.0 too --- package-lock.json | 18 ++---------------- packages/azure-store/package.json | 2 +- 2 files changed, 3 insertions(+), 17 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8ccb1f55..b1efa175 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,20 +16,6 @@ "typescript": "^5.6.2" } }, - "demo": { - "extraneous": true, - "dependencies": { - "@tus/azure-store": "^0.1.2", - "@tus/file-store": "^1.5.1", - "@tus/gcs-store": "^1.4.1", - "@tus/s3-store": "^1.7.0", - "@tus/server": "^1.10.1", - "tus-js-client": "^2.3.2" - }, - "devDependencies": { - "cross-env": "^7.0.3" - } - }, "node_modules/@aws-crypto/crc32": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", @@ -6093,7 +6079,7 @@ }, "packages/azure-store": { "name": "@tus/azure-store", - "version": "0.1.2", + "version": "1.0.0", "license": "MIT", "dependencies": { "@azure/storage-blob": "^12.24.0", @@ -6242,7 +6228,7 @@ "ts-node": "^10.9.2" }, "engines": { - "node": ">=16" + "node": ">=20" } }, "test": { diff --git a/packages/azure-store/package.json b/packages/azure-store/package.json index f0caafcd..1ef19978 100644 --- a/packages/azure-store/package.json +++ b/packages/azure-store/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@tus/azure-store", - "version": "0.1.2", + "version": "1.0.0", "description": "Azure blob storage for @tus/server", "main": "dist/index.js", "homepage": "https://github.com/tus/tus-node-server#readme", From 063ccf68accda0ca35690a03c713789d9afce83d Mon Sep 17 00:00:00 2001 From: Murderlon Date: Wed, 12 Feb 2025 11:02:47 +0100 Subject: [PATCH 05/18] Add changeset --- .changeset/perfect-rats-type.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .changeset/perfect-rats-type.md diff --git a/.changeset/perfect-rats-type.md b/.changeset/perfect-rats-type.md new file mode 100644 index 00000000..6d9759f9 --- /dev/null +++ b/.changeset/perfect-rats-type.md @@ -0,0 +1,10 @@ +--- +"@tus/azure-store": major +"@tus/file-store": major +"@tus/gcs-store": major +"@tus/s3-store": major +"@tus/server": major +"@tus/utils": minor +--- + +Change required Node.js version from 16 to 20 From 061de23b222262407780e80c11d8edf5afd462c9 Mon Sep 17 00:00:00 2001 From: Murderlon Date: Thu, 13 Mar 2025 16:39:48 +0100 Subject: [PATCH 06/18] Require >=20.19.0 --- .changeset/perfect-rats-type.md | 2 +- .github/workflows/ci.yml | 2 +- README.md | 2 +- packages/azure-store/README.md | 4 ++-- packages/azure-store/package.json | 2 +- packages/file-store/README.md | 4 ++-- packages/file-store/package.json | 2 +- packages/gcs-store/README.md | 4 ++-- packages/gcs-store/package.json | 2 +- packages/s3-store/README.md | 4 ++-- packages/s3-store/package.json | 2 +- packages/server/README.md | 4 ++-- packages/server/package.json | 2 +- packages/utils/package.json | 2 +- 14 files changed, 19 insertions(+), 19 deletions(-) diff --git a/.changeset/perfect-rats-type.md b/.changeset/perfect-rats-type.md index 6d9759f9..3cd23fd4 100644 --- a/.changeset/perfect-rats-type.md +++ b/.changeset/perfect-rats-type.md @@ -7,4 +7,4 @@ "@tus/utils": minor --- -Change required Node.js version from 16 to 20 +Change required Node.js version from 16 to 20.19.0 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2791a180..68c5c66d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -33,7 +33,7 @@ jobs: - name: Install Node.js uses: actions/setup-node@v3 with: - node-version: 20 + node-version: 20.19 - name: Install dependencies run: npm ci --no-fund --no-audit diff --git a/README.md b/README.md index d1a37d4d..9d628d5c 100644 --- a/README.md +++ b/README.md @@ -124,7 +124,7 @@ All packages are fully typed with TypeScript. ## Compatibility -All packages require Node.js 20+. +All packages require Node.js >=20.19.0. ## Contribute diff --git a/packages/azure-store/README.md b/packages/azure-store/README.md index dcc3f457..cfc3502e 100644 --- a/packages/azure-store/README.md +++ b/packages/azure-store/README.md @@ -16,7 +16,7 @@ Azure Store based on the Append Blob Client [Azure Blob AppendBlobClient](https: ## Install -In Node.js (20+), install with npm: +In Node.js >=20.19.0, install with npm: ```bash npm install @tus/azure-store @@ -84,7 +84,7 @@ This package is fully typed with TypeScript. ## Compatibility -This package requires Node.js 20+. +This package requires Node.js >=20.19.0. ## Contribute diff --git a/packages/azure-store/package.json b/packages/azure-store/package.json index 62155dcb..554a5674 100644 --- a/packages/azure-store/package.json +++ b/packages/azure-store/package.json @@ -31,6 +31,6 @@ "should": "^13.2.3" }, "engines": { - "node": ">=20" + "node": ">=20.19.0" } } diff --git a/packages/file-store/README.md b/packages/file-store/README.md index f0f4eb42..a6bd8fa6 100644 --- a/packages/file-store/README.md +++ b/packages/file-store/README.md @@ -20,7 +20,7 @@ ## Install -In Node.js (20+), install with npm: +In Node.js >=20.19.0, install with npm: ```bash npm install @tus/file-store @@ -124,7 +124,7 @@ This package is fully typed with TypeScript. ## Compatibility -This package requires Node.js 20+. +This package requires Node.js >=20.19.0. ## Contribute diff --git a/packages/file-store/package.json b/packages/file-store/package.json index 26e27ed4..ef948036 100644 --- a/packages/file-store/package.json +++ b/packages/file-store/package.json @@ -28,6 +28,6 @@ "@redis/client": "^1.6.0" }, "engines": { - "node": ">=20" + "node": ">=20.19.0" } } diff --git a/packages/gcs-store/README.md b/packages/gcs-store/README.md index f1138028..a31799f2 100644 --- a/packages/gcs-store/README.md +++ b/packages/gcs-store/README.md @@ -17,7 +17,7 @@ ## Install -In Node.js (20+), install with npm: +In Node.js >=20.19.0, install with npm: ```bash npm install @tus/gcs-store @@ -74,7 +74,7 @@ This package is fully typed with TypeScript. ## Compatibility -This package requires Node.js 20+. +This package requires Node.js >=20.19.0. ## Contribute diff --git a/packages/gcs-store/package.json b/packages/gcs-store/package.json index 97b0a566..3e2f124a 100644 --- a/packages/gcs-store/package.json +++ b/packages/gcs-store/package.json @@ -35,6 +35,6 @@ "@google-cloud/storage": "*" }, "engines": { - "node": ">=20" + "node": ">=20.19.0" } } diff --git a/packages/s3-store/README.md b/packages/s3-store/README.md index 62f6fa69..2005e9b4 100644 --- a/packages/s3-store/README.md +++ b/packages/s3-store/README.md @@ -22,7 +22,7 @@ ## Install -In Node.js (20+), install with npm: +In Node.js >=20.19.0, install with npm: ```bash npm install @tus/s3-store @@ -251,7 +251,7 @@ This package is fully typed with TypeScript. ## Compatibility -This package requires Node.js 20+. +This package requires Node.js >=20.19.0. ## Contribute diff --git a/packages/s3-store/package.json b/packages/s3-store/package.json index 4bbbe805..4b791047 100644 --- a/packages/s3-store/package.json +++ b/packages/s3-store/package.json @@ -35,6 +35,6 @@ "should": "^13.2.3" }, "engines": { - "node": ">=20" + "node": ">=20.19.0" } } diff --git a/packages/server/README.md b/packages/server/README.md index aceae5e8..2c87df48 100644 --- a/packages/server/README.md +++ b/packages/server/README.md @@ -26,7 +26,7 @@ ## Install -In Node.js (20+), install with npm: +In Node.js >=20.19.0, install with npm: ```bash npm install @tus/server @@ -631,7 +631,7 @@ This package is fully typed with TypeScript. ## Compatibility -This package requires Node.js 20+. +This package requires Node.js >=20.19.0. ## Contribute diff --git a/packages/server/package.json b/packages/server/package.json index 2b23aea1..5c03ecc5 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -42,6 +42,6 @@ "ioredis": "^5.4.1" }, "engines": { - "node": ">=20" + "node": ">=20.19.0" } } diff --git a/packages/utils/package.json b/packages/utils/package.json index 7bfc62ba..6e914ff7 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -28,6 +28,6 @@ "ts-node": "^10.9.2" }, "engines": { - "node": ">=20" + "node": ">=20.19.0" } } From ea19c7fe1f034360014aff14623f0d8097d56de2 Mon Sep 17 00:00:00 2001 From: Murderlon Date: Thu, 13 Mar 2025 17:27:48 +0100 Subject: [PATCH 07/18] Output ESM for all packages --- biome.json | 4 ++-- package.json | 8 ++++++-- packages/azure-store/package.json | 1 + packages/azure-store/test/index.ts | 2 +- packages/file-store/package.json | 1 + packages/file-store/src/index.ts | 4 ++-- packages/file-store/test/index.ts | 2 +- packages/gcs-store/package.json | 1 + packages/gcs-store/test/index.ts | 2 +- packages/s3-store/package.json | 1 + packages/s3-store/test/index.ts | 2 +- packages/server/package.json | 1 + packages/server/src/handlers/BaseHandler.ts | 2 +- packages/server/src/handlers/DeleteHandler.ts | 2 +- packages/server/src/handlers/GetHandler.ts | 4 ++-- packages/server/src/handlers/HeadHandler.ts | 2 +- packages/server/src/handlers/OptionsHandler.ts | 2 +- packages/server/src/handlers/PatchHandler.ts | 2 +- packages/server/src/handlers/PostHandler.ts | 6 +++--- packages/server/src/index.ts | 6 +++--- packages/server/src/lockers/index.ts | 2 +- packages/server/src/server.ts | 18 +++++++++--------- packages/server/test/BaseHandler.test.ts | 4 ++-- packages/server/test/DeleteHandler.test.ts | 4 ++-- packages/server/test/GetHandler.test.ts | 4 ++-- packages/server/test/HeadHandler.test.ts | 4 ++-- packages/server/test/HeaderValidator.test.ts | 2 +- packages/server/test/Locker.test.ts | 2 +- packages/server/test/OptionsHandler.test.ts | 4 ++-- packages/server/test/PatchHandler.test.ts | 6 +++--- packages/server/test/PostHandler.test.ts | 6 +++--- packages/server/test/Server.test.ts | 2 +- packages/utils/package.json | 1 + packages/utils/src/index.ts | 6 +++--- packages/utils/src/kvstores/FileKvStore.ts | 4 ++-- packages/utils/src/kvstores/IoRedisKvStore.ts | 4 ++-- packages/utils/src/kvstores/MemoryKvStore.ts | 4 ++-- packages/utils/src/kvstores/RedisKvStore.ts | 4 ++-- packages/utils/src/kvstores/Types.ts | 2 +- packages/utils/src/kvstores/index.ts | 10 +++++----- packages/utils/src/models/DataStore.ts | 2 +- packages/utils/src/models/Metadata.ts | 2 +- packages/utils/src/models/StreamLimiter.ts | 2 +- packages/utils/src/models/index.ts | 16 ++++++++-------- packages/utils/test/Metadata.test.ts | 2 +- packages/utils/test/StreamSplitter.test.ts | 2 +- packages/utils/test/Uid.test.ts | 2 +- packages/utils/test/Upload.test.ts | 4 ++-- test/package.json | 1 + 49 files changed, 96 insertions(+), 85 deletions(-) diff --git a/biome.json b/biome.json index d78b0720..61cbbdfc 100644 --- a/biome.json +++ b/biome.json @@ -1,10 +1,10 @@ { - "$schema": "https://biomejs.dev/schemas/1.8.3/schema.json", + "$schema": "https://biomejs.dev/schemas/1.9.0/schema.json", "organizeImports": { "enabled": true }, "files": { - "ignore": ["./**/dist/**/*"] + "ignore": ["./**/dist/**/*", "./**/node_modules/**/*"] }, "linter": { "enabled": true, diff --git a/package.json b/package.json index 56186483..d14bbba0 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,10 @@ { "$schema": "https://json.schemastore.org/package.json", "private": true, - "workspaces": ["packages/*", "test"], + "workspaces": [ + "packages/*", + "test" + ], "scripts": { "build": "tsc --build", "lint": "biome lint --write .", @@ -18,5 +21,6 @@ "@changesets/changelog-github": "^0.5.0", "@changesets/cli": "^2.27.10", "typescript": "^5.8.2" - } + }, + "packageManager": "yarn@1.22.19+sha1.4ba7fc5c6e704fce2066ecbfb0b0d8976fe62447" } diff --git a/packages/azure-store/package.json b/packages/azure-store/package.json index 554a5674..a3b89926 100644 --- a/packages/azure-store/package.json +++ b/packages/azure-store/package.json @@ -4,6 +4,7 @@ "version": "1.0.0", "description": "Azure blob storage for @tus/server", "main": "dist/index.js", + "type": "module", "homepage": "https://github.com/tus/tus-node-server#readme", "bugs": "https://github.com/tus/tus-node-server/issues", "repository": "tus/tus-node-server", diff --git a/packages/azure-store/test/index.ts b/packages/azure-store/test/index.ts index 1a9b567c..c192f669 100644 --- a/packages/azure-store/test/index.ts +++ b/packages/azure-store/test/index.ts @@ -1,6 +1,6 @@ import 'should' import path from 'node:path' -import {AzureStore} from '../src' +import {AzureStore} from '../src/index.js' import * as shared from 'test/stores.test' const fixturesPath = path.resolve('../', '../', 'test', 'fixtures') diff --git a/packages/file-store/package.json b/packages/file-store/package.json index ef948036..4b91e5b8 100644 --- a/packages/file-store/package.json +++ b/packages/file-store/package.json @@ -4,6 +4,7 @@ "version": "1.5.1", "description": "Local file storage for @tus/server", "main": "dist/index.js", + "type": "module", "homepage": "https://github.com/tus/tus-node-server#readme", "bugs": "https://github.com/tus/tus-node-server/issues", "repository": "tus/tus-node-server", diff --git a/packages/file-store/src/index.ts b/packages/file-store/src/index.ts index e54af0f8..43231c5f 100644 --- a/packages/file-store/src/index.ts +++ b/packages/file-store/src/index.ts @@ -7,10 +7,10 @@ import type http from 'node:http' import debug from 'debug' -import {type Configstore, FileConfigstore} from './configstores' +import {type Configstore, FileConfigstore} from './configstores/index.js' import {DataStore, Upload, ERRORS} from '@tus/utils' -export * from './configstores' +export * from './configstores/index.js' type Options = { directory: string diff --git a/packages/file-store/test/index.ts b/packages/file-store/test/index.ts index 21d7ed3e..7085e638 100644 --- a/packages/file-store/test/index.ts +++ b/packages/file-store/test/index.ts @@ -7,7 +7,7 @@ import path from 'node:path' import sinon from 'sinon' -import {FileStore, FileConfigstore} from '../src' +import {FileStore, FileConfigstore} from '../src/index.js' import {Upload} from '@tus/utils' import * as shared from 'test/stores.test' diff --git a/packages/gcs-store/package.json b/packages/gcs-store/package.json index 3e2f124a..27072797 100644 --- a/packages/gcs-store/package.json +++ b/packages/gcs-store/package.json @@ -4,6 +4,7 @@ "version": "1.4.2", "description": "Google Cloud Storage for @tus/server", "main": "dist/index.js", + "type": "module", "homepage": "https://github.com/tus/tus-node-server#readme", "bugs": "https://github.com/tus/tus-node-server/issues", "repository": "tus/tus-node-server", diff --git a/packages/gcs-store/test/index.ts b/packages/gcs-store/test/index.ts index c08f968b..9c80144f 100644 --- a/packages/gcs-store/test/index.ts +++ b/packages/gcs-store/test/index.ts @@ -1,6 +1,6 @@ import path from 'node:path' -import {GCSStore} from '../src' +import {GCSStore} from '../src/index.js' import * as shared from 'test/stores.test' diff --git a/packages/s3-store/package.json b/packages/s3-store/package.json index 4b791047..34d20343 100644 --- a/packages/s3-store/package.json +++ b/packages/s3-store/package.json @@ -4,6 +4,7 @@ "version": "1.9.1", "description": "AWS S3 store for @tus/server", "main": "dist/index.js", + "type": "module", "homepage": "https://github.com/tus/tus-node-server#readme", "bugs": "https://github.com/tus/tus-node-server/issues", "repository": "tus/tus-node-server", diff --git a/packages/s3-store/test/index.ts b/packages/s3-store/test/index.ts index e9042100..dec660a5 100644 --- a/packages/s3-store/test/index.ts +++ b/packages/s3-store/test/index.ts @@ -4,7 +4,7 @@ import {Readable} from 'node:stream' import sinon from 'sinon' -import {S3Store} from '../src' +import {S3Store} from '../src/index.js' import * as shared from 'test/stores.test' import {Upload} from '@tus/utils' diff --git a/packages/server/package.json b/packages/server/package.json index 5c03ecc5..c848fe99 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -4,6 +4,7 @@ "version": "1.10.2", "description": "Tus resumable upload protocol in Node.js", "main": "dist/index.js", + "type": "module", "homepage": "https://github.com/tus/tus-node-server#readme", "bugs": "https://github.com/tus/tus-node-server/issues", "repository": "tus/tus-node-server", diff --git a/packages/server/src/handlers/BaseHandler.ts b/packages/server/src/handlers/BaseHandler.ts index c7df950f..a3915831 100644 --- a/packages/server/src/handlers/BaseHandler.ts +++ b/packages/server/src/handlers/BaseHandler.ts @@ -3,7 +3,7 @@ import stream from 'node:stream/promises' import {PassThrough, Readable} from 'node:stream' import type http from 'node:http' -import type {ServerOptions} from '../types' +import type {ServerOptions} from '../types.js' import type {DataStore, CancellationContext} from '@tus/utils' import {ERRORS, type Upload, StreamLimiter, EVENTS} from '@tus/utils' import throttle from 'lodash.throttle' diff --git a/packages/server/src/handlers/DeleteHandler.ts b/packages/server/src/handlers/DeleteHandler.ts index 9ae69352..c7e71706 100644 --- a/packages/server/src/handlers/DeleteHandler.ts +++ b/packages/server/src/handlers/DeleteHandler.ts @@ -1,4 +1,4 @@ -import {BaseHandler} from './BaseHandler' +import {BaseHandler} from './BaseHandler.js' import {ERRORS, EVENTS, type CancellationContext} from '@tus/utils' import type http from 'node:http' diff --git a/packages/server/src/handlers/GetHandler.ts b/packages/server/src/handlers/GetHandler.ts index 326da26a..8f37ce3a 100644 --- a/packages/server/src/handlers/GetHandler.ts +++ b/packages/server/src/handlers/GetHandler.ts @@ -1,10 +1,10 @@ import stream from 'node:stream' -import {BaseHandler} from './BaseHandler' +import {BaseHandler} from './BaseHandler.js' import {ERRORS, type Upload} from '@tus/utils' import type http from 'node:http' -import type {RouteHandler} from '../types' +import type {RouteHandler} from '../types.js' export class GetHandler extends BaseHandler { paths: Map = new Map() diff --git a/packages/server/src/handlers/HeadHandler.ts b/packages/server/src/handlers/HeadHandler.ts index 664d4ee7..cc921e21 100644 --- a/packages/server/src/handlers/HeadHandler.ts +++ b/packages/server/src/handlers/HeadHandler.ts @@ -1,4 +1,4 @@ -import {BaseHandler} from './BaseHandler' +import {BaseHandler} from './BaseHandler.js' import {ERRORS, Metadata, type Upload, type CancellationContext} from '@tus/utils' diff --git a/packages/server/src/handlers/OptionsHandler.ts b/packages/server/src/handlers/OptionsHandler.ts index 15b7d358..cb570e44 100644 --- a/packages/server/src/handlers/OptionsHandler.ts +++ b/packages/server/src/handlers/OptionsHandler.ts @@ -1,4 +1,4 @@ -import {BaseHandler} from './BaseHandler' +import {BaseHandler} from './BaseHandler.js' import {ALLOWED_METHODS, MAX_AGE, HEADERS} from '@tus/utils' import type http from 'node:http' diff --git a/packages/server/src/handlers/PatchHandler.ts b/packages/server/src/handlers/PatchHandler.ts index 554b507c..7c86a2f7 100644 --- a/packages/server/src/handlers/PatchHandler.ts +++ b/packages/server/src/handlers/PatchHandler.ts @@ -1,6 +1,6 @@ import debug from 'debug' -import {BaseHandler} from './BaseHandler' +import {BaseHandler} from './BaseHandler.js' import type http from 'node:http' import {ERRORS, EVENTS, type CancellationContext, type Upload} from '@tus/utils' diff --git a/packages/server/src/handlers/PostHandler.ts b/packages/server/src/handlers/PostHandler.ts index 1140c52b..236abfd8 100644 --- a/packages/server/src/handlers/PostHandler.ts +++ b/packages/server/src/handlers/PostHandler.ts @@ -1,6 +1,6 @@ import debug from 'debug' -import {BaseHandler} from './BaseHandler' +import {BaseHandler} from './BaseHandler.js' import { Upload, Uid, @@ -10,10 +10,10 @@ import { type DataStore, type CancellationContext, } from '@tus/utils' -import {validateHeader} from '../validators/HeaderValidator' +import {validateHeader} from '../validators/HeaderValidator.js' import type http from 'node:http' -import type {ServerOptions, WithRequired} from '../types' +import type {ServerOptions, WithRequired} from '../types.js' const log = debug('tus-node-server:handlers:post') diff --git a/packages/server/src/index.ts b/packages/server/src/index.ts index c353f788..18df9648 100644 --- a/packages/server/src/index.ts +++ b/packages/server/src/index.ts @@ -1,4 +1,4 @@ -export {Server} from './server' -export * from './types' -export * from './lockers' +export {Server} from './server.js' +export * from './types.js' +export * from './lockers/index.js' export * from '@tus/utils' diff --git a/packages/server/src/lockers/index.ts b/packages/server/src/lockers/index.ts index b6de79c2..745fe233 100644 --- a/packages/server/src/lockers/index.ts +++ b/packages/server/src/lockers/index.ts @@ -1 +1 @@ -export * from './MemoryLocker' +export * from './MemoryLocker.js' diff --git a/packages/server/src/server.ts b/packages/server/src/server.ts index cc56be5b..947b12e5 100644 --- a/packages/server/src/server.ts +++ b/packages/server/src/server.ts @@ -3,20 +3,20 @@ import {EventEmitter} from 'node:events' import debug from 'debug' -import {GetHandler} from './handlers/GetHandler' -import {HeadHandler} from './handlers/HeadHandler' -import {OptionsHandler} from './handlers/OptionsHandler' -import {PatchHandler} from './handlers/PatchHandler' -import {PostHandler} from './handlers/PostHandler' -import {DeleteHandler} from './handlers/DeleteHandler' -import {validateHeader} from './validators/HeaderValidator' +import {GetHandler} from './handlers/GetHandler.js' +import {HeadHandler} from './handlers/HeadHandler.js' +import {OptionsHandler} from './handlers/OptionsHandler.js' +import {PatchHandler} from './handlers/PatchHandler.js' +import {PostHandler} from './handlers/PostHandler.js' +import {DeleteHandler} from './handlers/DeleteHandler.js' +import {validateHeader} from './validators/HeaderValidator.js' import {EVENTS, ERRORS, EXPOSED_HEADERS, REQUEST_METHODS, TUS_RESUMABLE} from '@tus/utils' import type stream from 'node:stream' -import type {ServerOptions, RouteHandler, WithOptional} from './types' +import type {ServerOptions, RouteHandler, WithOptional} from './types.js' import type {DataStore, Upload, CancellationContext} from '@tus/utils' -import {MemoryLocker} from './lockers' +import {MemoryLocker} from './lockers/index.js' type Handlers = { GET: InstanceType diff --git a/packages/server/test/BaseHandler.test.ts b/packages/server/test/BaseHandler.test.ts index fccd612b..ab50e883 100644 --- a/packages/server/test/BaseHandler.test.ts +++ b/packages/server/test/BaseHandler.test.ts @@ -3,9 +3,9 @@ import type http from 'node:http' import httpMocks from 'node-mocks-http' -import {BaseHandler} from '../src/handlers/BaseHandler' +import {BaseHandler} from '../src/handlers/BaseHandler.js' import {DataStore} from '@tus/utils' -import {MemoryLocker} from '../src' +import {MemoryLocker} from '../src/index.js' describe('BaseHandler', () => { const store = new DataStore() diff --git a/packages/server/test/DeleteHandler.test.ts b/packages/server/test/DeleteHandler.test.ts index a54262ad..fe6b310e 100644 --- a/packages/server/test/DeleteHandler.test.ts +++ b/packages/server/test/DeleteHandler.test.ts @@ -7,8 +7,8 @@ import sinon from 'sinon' import httpMocks from 'node-mocks-http' import {ERRORS, EVENTS, DataStore, type CancellationContext} from '@tus/utils' -import {DeleteHandler} from '../src/handlers/DeleteHandler' -import {MemoryLocker} from '../src' +import {DeleteHandler} from '../src/handlers/DeleteHandler.js' +import {MemoryLocker} from '../src/index.js' describe('DeleteHandler', () => { const path = '/test/output' diff --git a/packages/server/test/GetHandler.test.ts b/packages/server/test/GetHandler.test.ts index 88282e16..4edbc24d 100644 --- a/packages/server/test/GetHandler.test.ts +++ b/packages/server/test/GetHandler.test.ts @@ -8,10 +8,10 @@ import type http from 'node:http' import sinon from 'sinon' import httpMocks from 'node-mocks-http' -import {GetHandler} from '../src/handlers/GetHandler' +import {GetHandler} from '../src/handlers/GetHandler.js' import {DataStore, Upload} from '@tus/utils' import {FileStore} from '@tus/file-store' -import {MemoryLocker} from '../src' +import {MemoryLocker} from '../src/index.js' describe('GetHandler', () => { const path = '/test/output' diff --git a/packages/server/test/HeadHandler.test.ts b/packages/server/test/HeadHandler.test.ts index 3bb179fd..6dd65c8a 100644 --- a/packages/server/test/HeadHandler.test.ts +++ b/packages/server/test/HeadHandler.test.ts @@ -5,8 +5,8 @@ import sinon from 'sinon' import httpMocks from 'node-mocks-http' import {ERRORS, DataStore, Upload, type CancellationContext} from '@tus/utils' -import {HeadHandler} from '../src/handlers/HeadHandler' -import {MemoryLocker} from '../src' +import {HeadHandler} from '../src/handlers/HeadHandler.js' +import {MemoryLocker} from '../src/index.js' describe('HeadHandler', () => { const path = '/test/output' diff --git a/packages/server/test/HeaderValidator.test.ts b/packages/server/test/HeaderValidator.test.ts index 4c8d6355..7af45f1b 100644 --- a/packages/server/test/HeaderValidator.test.ts +++ b/packages/server/test/HeaderValidator.test.ts @@ -1,6 +1,6 @@ import {strict as assert} from 'node:assert' -import {validateHeader} from '../src/validators/HeaderValidator' +import {validateHeader} from '../src/validators/HeaderValidator.js' import {TUS_RESUMABLE} from '@tus/utils' describe('HeaderValidator', () => { diff --git a/packages/server/test/Locker.test.ts b/packages/server/test/Locker.test.ts index bef07f0a..4391e484 100644 --- a/packages/server/test/Locker.test.ts +++ b/packages/server/test/Locker.test.ts @@ -1,6 +1,6 @@ import assert from 'node:assert' import sinon from 'sinon' -import {ERRORS, MemoryLocker} from '../src' +import {ERRORS, MemoryLocker} from '../src/index.js' describe('MemoryLocker', () => { it('will acquire a lock by notifying another to release it', async () => { diff --git a/packages/server/test/OptionsHandler.test.ts b/packages/server/test/OptionsHandler.test.ts index 7fdae268..fb4c6042 100644 --- a/packages/server/test/OptionsHandler.test.ts +++ b/packages/server/test/OptionsHandler.test.ts @@ -5,9 +5,9 @@ import type http from 'node:http' import httpMocks from 'node-mocks-http' -import {OptionsHandler} from '../src/handlers/OptionsHandler' +import {OptionsHandler} from '../src/handlers/OptionsHandler.js' import {DataStore, ALLOWED_METHODS, ALLOWED_HEADERS, MAX_AGE} from '@tus/utils' -import {MemoryLocker, type ServerOptions} from '../src' +import {MemoryLocker, type ServerOptions} from '../src/index.js' describe('OptionsHandler', () => { const options: ServerOptions = { diff --git a/packages/server/test/PatchHandler.test.ts b/packages/server/test/PatchHandler.test.ts index a17fe804..bc305f91 100644 --- a/packages/server/test/PatchHandler.test.ts +++ b/packages/server/test/PatchHandler.test.ts @@ -6,11 +6,11 @@ import type http from 'node:http' import sinon from 'sinon' import httpMocks from 'node-mocks-http' -import {PatchHandler} from '../src/handlers/PatchHandler' +import {PatchHandler} from '../src/handlers/PatchHandler.js' import {EVENTS, Upload, DataStore, type CancellationContext} from '@tus/utils' import {EventEmitter} from 'node:events' -import {addPipableStreamBody} from './utils' -import {MemoryLocker} from '../src' +import {addPipableStreamBody} from './utils.js' +import {MemoryLocker} from '../src/index.js' import streamP from 'node:stream/promises' import stream, {PassThrough} from 'node:stream' diff --git a/packages/server/test/PostHandler.test.ts b/packages/server/test/PostHandler.test.ts index be6bca1d..1ff8f46c 100644 --- a/packages/server/test/PostHandler.test.ts +++ b/packages/server/test/PostHandler.test.ts @@ -8,9 +8,9 @@ import httpMocks from 'node-mocks-http' import sinon from 'sinon' import {EVENTS, Upload, DataStore, type CancellationContext} from '@tus/utils' -import {PostHandler} from '../src/handlers/PostHandler' -import {addPipableStreamBody} from './utils' -import {MemoryLocker} from '../src' +import {PostHandler} from '../src/handlers/PostHandler.js' +import {addPipableStreamBody} from './utils.js' +import {MemoryLocker} from '../src/index.js' const SERVER_OPTIONS = { path: '/test', diff --git a/packages/server/test/Server.test.ts b/packages/server/test/Server.test.ts index c29da467..080e7d9e 100644 --- a/packages/server/test/Server.test.ts +++ b/packages/server/test/Server.test.ts @@ -10,7 +10,7 @@ import path from 'node:path' import request from 'supertest' import Throttle from 'throttle' -import {Server} from '../src' +import {Server} from '../src/index.js' import {FileStore} from '@tus/file-store' import {TUS_RESUMABLE, EVENTS, DataStore, Metadata} from '@tus/utils' import httpMocks from 'node-mocks-http' diff --git a/packages/utils/package.json b/packages/utils/package.json index 6e914ff7..eab9f2f1 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -4,6 +4,7 @@ "version": "0.5.1", "description": "Internal utils for tus Node.js server and stores", "main": "dist/index.js", + "type": "module", "homepage": "https://github.com/tus/tus-node-server#readme", "bugs": "https://github.com/tus/tus-node-server/issues", "repository": "tus/tus-node-server", diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index 78b880f9..e55b6277 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -1,3 +1,3 @@ -export * from './models' -export * from './constants' -export * from './kvstores' +export * from './models/index.js' +export * from './constants.js' +export * from './kvstores/index.js' diff --git a/packages/utils/src/kvstores/FileKvStore.ts b/packages/utils/src/kvstores/FileKvStore.ts index 8bbee4d7..0255ba1a 100644 --- a/packages/utils/src/kvstores/FileKvStore.ts +++ b/packages/utils/src/kvstores/FileKvStore.ts @@ -1,8 +1,8 @@ import fs from 'node:fs/promises' import path from 'node:path' -import type {KvStore} from './Types' -import type {Upload} from '../models' +import type {KvStore} from './Types.js' +import type {Upload} from '../models/index.js' /** * FileConfigstore writes the `Upload` JSON metadata to disk next the uploaded file itself. diff --git a/packages/utils/src/kvstores/IoRedisKvStore.ts b/packages/utils/src/kvstores/IoRedisKvStore.ts index 8d4a1891..04f2a9eb 100644 --- a/packages/utils/src/kvstores/IoRedisKvStore.ts +++ b/packages/utils/src/kvstores/IoRedisKvStore.ts @@ -1,6 +1,6 @@ import type {Redis as IoRedis} from 'ioredis' -import type {KvStore} from './Types' -import type {Upload} from '../models' +import type {KvStore} from './Types.js' +import type {Upload} from '../models/index.js' export class IoRedisKvStore implements KvStore { constructor( diff --git a/packages/utils/src/kvstores/MemoryKvStore.ts b/packages/utils/src/kvstores/MemoryKvStore.ts index 8c01a528..cc556989 100644 --- a/packages/utils/src/kvstores/MemoryKvStore.ts +++ b/packages/utils/src/kvstores/MemoryKvStore.ts @@ -1,5 +1,5 @@ -import type {Upload} from '../models' -import type {KvStore} from './Types' +import type {Upload} from '../models/index.js' +import type {KvStore} from './Types.js' /** * Memory based configstore. diff --git a/packages/utils/src/kvstores/RedisKvStore.ts b/packages/utils/src/kvstores/RedisKvStore.ts index c1550ecd..8de54509 100644 --- a/packages/utils/src/kvstores/RedisKvStore.ts +++ b/packages/utils/src/kvstores/RedisKvStore.ts @@ -1,6 +1,6 @@ import type {RedisClientType} from '@redis/client' -import type {KvStore} from './Types' -import type {Upload} from '../models' +import type {KvStore} from './Types.js' +import type {Upload} from '../models/index.js' /** * Redis based configstore. diff --git a/packages/utils/src/kvstores/Types.ts b/packages/utils/src/kvstores/Types.ts index 740d3410..b83d73c5 100644 --- a/packages/utils/src/kvstores/Types.ts +++ b/packages/utils/src/kvstores/Types.ts @@ -1,4 +1,4 @@ -import type {Upload} from '../models' +import type {Upload} from '../models/index.js' export interface KvStore { get(key: string): Promise diff --git a/packages/utils/src/kvstores/index.ts b/packages/utils/src/kvstores/index.ts index 5d2aff72..a65124ff 100644 --- a/packages/utils/src/kvstores/index.ts +++ b/packages/utils/src/kvstores/index.ts @@ -1,5 +1,5 @@ -export {FileKvStore} from './FileKvStore' -export {MemoryKvStore} from './MemoryKvStore' -export {RedisKvStore} from './RedisKvStore' -export {IoRedisKvStore} from './IoRedisKvStore' -export {KvStore} from './Types' +export {FileKvStore} from './FileKvStore.js' +export {MemoryKvStore} from './MemoryKvStore.js' +export {RedisKvStore} from './RedisKvStore.js' +export {IoRedisKvStore} from './IoRedisKvStore.js' +export {KvStore} from './Types.js' diff --git a/packages/utils/src/models/DataStore.ts b/packages/utils/src/models/DataStore.ts index e399696a..dd30f679 100644 --- a/packages/utils/src/models/DataStore.ts +++ b/packages/utils/src/models/DataStore.ts @@ -1,6 +1,6 @@ import EventEmitter from 'node:events' -import {Upload} from './Upload' +import {Upload} from './Upload.js' import type stream from 'node:stream' import type http from 'node:http' diff --git a/packages/utils/src/models/Metadata.ts b/packages/utils/src/models/Metadata.ts index a17cc6cd..31fdd858 100644 --- a/packages/utils/src/models/Metadata.ts +++ b/packages/utils/src/models/Metadata.ts @@ -1,4 +1,4 @@ -import type {Upload} from './Upload' +import type {Upload} from './Upload.js' const ASCII_SPACE = ' '.codePointAt(0) const ASCII_COMMA = ','.codePointAt(0) diff --git a/packages/utils/src/models/StreamLimiter.ts b/packages/utils/src/models/StreamLimiter.ts index 8a35df96..8e1c2af9 100644 --- a/packages/utils/src/models/StreamLimiter.ts +++ b/packages/utils/src/models/StreamLimiter.ts @@ -1,5 +1,5 @@ import {Transform, type TransformCallback} from 'node:stream' -import {ERRORS} from '../constants' +import {ERRORS} from '../constants.js' // TODO: create HttpError and use it everywhere instead of throwing objects export class MaxFileExceededError extends Error { diff --git a/packages/utils/src/models/index.ts b/packages/utils/src/models/index.ts index 9d85b32e..62278278 100644 --- a/packages/utils/src/models/index.ts +++ b/packages/utils/src/models/index.ts @@ -1,8 +1,8 @@ -export {DataStore} from './DataStore' -export * as Metadata from './Metadata' -export {StreamSplitter} from './StreamSplitter' -export {StreamLimiter} from './StreamLimiter' -export {Uid} from './Uid' -export {Upload} from './Upload' -export {Locker, Lock, RequestRelease} from './Locker' -export {CancellationContext} from './Context' +export {DataStore} from './DataStore.js' +export * as Metadata from './Metadata.js' +export {StreamSplitter} from './StreamSplitter.js' +export {StreamLimiter} from './StreamLimiter.js' +export {Uid} from './Uid.js' +export {Upload} from './Upload.js' +export {Locker, Lock, RequestRelease} from './Locker.js' +export {CancellationContext} from './Context.js' diff --git a/packages/utils/test/Metadata.test.ts b/packages/utils/test/Metadata.test.ts index b6ce0eab..09699168 100644 --- a/packages/utils/test/Metadata.test.ts +++ b/packages/utils/test/Metadata.test.ts @@ -1,5 +1,5 @@ import {strict as assert} from 'node:assert' -import {parse, stringify} from '../src/models/Metadata' +import {parse, stringify} from '../src/models/Metadata.js' describe('Metadata', () => { it('parse valid metadata string', () => { diff --git a/packages/utils/test/StreamSplitter.test.ts b/packages/utils/test/StreamSplitter.test.ts index c9cc5907..cc403f6e 100644 --- a/packages/utils/test/StreamSplitter.test.ts +++ b/packages/utils/test/StreamSplitter.test.ts @@ -3,7 +3,7 @@ import fs from 'node:fs' import stream from 'node:stream/promises' import {strict as assert} from 'node:assert' -import {StreamSplitter} from '../src/models' +import {StreamSplitter} from '../src/models/index.js' import {Readable} from 'node:stream' const fileSize = 20_971_520 diff --git a/packages/utils/test/Uid.test.ts b/packages/utils/test/Uid.test.ts index b7134df2..d5c220f9 100644 --- a/packages/utils/test/Uid.test.ts +++ b/packages/utils/test/Uid.test.ts @@ -1,6 +1,6 @@ import {strict as assert} from 'node:assert' -import {Uid} from '../src/models' +import {Uid} from '../src/models/index.js' describe('Uid', () => { it('returns a 32 char string', (done) => { diff --git a/packages/utils/test/Upload.test.ts b/packages/utils/test/Upload.test.ts index a3cbb542..12c76eec 100644 --- a/packages/utils/test/Upload.test.ts +++ b/packages/utils/test/Upload.test.ts @@ -1,8 +1,8 @@ import 'should' import {strict as assert} from 'node:assert' -import {Upload} from '../src/models/Upload' -import {Uid} from '../src/models/Uid' +import {Upload} from '../src/models/Upload.js' +import {Uid} from '../src/models/Uid.js' describe('Upload', () => { describe('constructor', () => { diff --git a/test/package.json b/test/package.json index 90525a6a..400594e5 100644 --- a/test/package.json +++ b/test/package.json @@ -2,6 +2,7 @@ "$schema": "https://json.schemastore.org/package.json", "name": "test", "private": true, + "type":"module", "scripts": { "build": "tsc --build", "test": "mocha dist/e2e.test.js dist/s3.e2e.js --timeout 40000 --exit --extension ts --require ts-node/register" From 37c235c3000e720fc5486002d631dd83f2cad3c8 Mon Sep 17 00:00:00 2001 From: Murderlon Date: Thu, 13 Mar 2025 17:30:30 +0100 Subject: [PATCH 08/18] Undo unrelated change --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index d14bbba0..9b5d9cf9 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,5 @@ "@changesets/changelog-github": "^0.5.0", "@changesets/cli": "^2.27.10", "typescript": "^5.8.2" - }, - "packageManager": "yarn@1.22.19+sha1.4ba7fc5c6e704fce2066ecbfb0b0d8976fe62447" + } } From e8f3216173939dd43511833931a7c9e50dfc64e1 Mon Sep 17 00:00:00 2001 From: Murderlon Date: Mon, 24 Mar 2025 10:53:46 +0100 Subject: [PATCH 09/18] Fix all imports in tests --- packages/azure-store/package.json | 3 ++- packages/azure-store/test/index.ts | 2 +- packages/file-store/package.json | 3 ++- packages/file-store/test/index.ts | 2 +- packages/gcs-store/package.json | 3 ++- packages/gcs-store/test/index.ts | 2 +- packages/s3-store/package.json | 3 ++- packages/s3-store/test/index.ts | 2 +- packages/server/package.json | 3 ++- packages/server/test/BaseHandler.test.ts | 4 ++-- packages/server/test/DeleteHandler.test.ts | 4 ++-- packages/server/test/GetHandler.test.ts | 4 ++-- packages/server/test/HeadHandler.test.ts | 4 ++-- packages/server/test/HeaderValidator.test.ts | 2 +- packages/server/test/Locker.test.ts | 2 +- packages/server/test/OptionsHandler.test.ts | 4 ++-- packages/server/test/PatchHandler.test.ts | 10 +++++----- packages/server/test/PostHandler.test.ts | 6 +++--- packages/server/test/Server.test.ts | 4 ++-- packages/server/test/utils.ts | 2 +- packages/server/tsconfig.json | 3 ++- packages/utils/test/Metadata.test.ts | 2 +- packages/utils/test/StreamSplitter.test.ts | 2 +- packages/utils/test/Uid.test.ts | 2 +- packages/utils/test/Upload.test.ts | 4 ++-- 25 files changed, 44 insertions(+), 38 deletions(-) diff --git a/packages/azure-store/package.json b/packages/azure-store/package.json index a3b89926..57e2bb06 100644 --- a/packages/azure-store/package.json +++ b/packages/azure-store/package.json @@ -3,7 +3,8 @@ "name": "@tus/azure-store", "version": "1.0.0", "description": "Azure blob storage for @tus/server", - "main": "dist/index.js", + "main": "./dist/index.js", + "exports": "./dist/index.js", "type": "module", "homepage": "https://github.com/tus/tus-node-server#readme", "bugs": "https://github.com/tus/tus-node-server/issues", diff --git a/packages/azure-store/test/index.ts b/packages/azure-store/test/index.ts index c192f669..53fa8ad0 100644 --- a/packages/azure-store/test/index.ts +++ b/packages/azure-store/test/index.ts @@ -1,6 +1,6 @@ import 'should' import path from 'node:path' -import {AzureStore} from '../src/index.js' +import {AzureStore} from '@tus/azure-store' import * as shared from 'test/stores.test' const fixturesPath = path.resolve('../', '../', 'test', 'fixtures') diff --git a/packages/file-store/package.json b/packages/file-store/package.json index 4b91e5b8..da0507d2 100644 --- a/packages/file-store/package.json +++ b/packages/file-store/package.json @@ -3,7 +3,8 @@ "name": "@tus/file-store", "version": "1.5.1", "description": "Local file storage for @tus/server", - "main": "dist/index.js", + "main": "./dist/index.js", + "exports": "./dist/index.js", "type": "module", "homepage": "https://github.com/tus/tus-node-server#readme", "bugs": "https://github.com/tus/tus-node-server/issues", diff --git a/packages/file-store/test/index.ts b/packages/file-store/test/index.ts index 7085e638..2671b760 100644 --- a/packages/file-store/test/index.ts +++ b/packages/file-store/test/index.ts @@ -7,7 +7,7 @@ import path from 'node:path' import sinon from 'sinon' -import {FileStore, FileConfigstore} from '../src/index.js' +import {FileStore, FileConfigstore} from '@tus/file-store' import {Upload} from '@tus/utils' import * as shared from 'test/stores.test' diff --git a/packages/gcs-store/package.json b/packages/gcs-store/package.json index 27072797..16ea2943 100644 --- a/packages/gcs-store/package.json +++ b/packages/gcs-store/package.json @@ -3,7 +3,8 @@ "name": "@tus/gcs-store", "version": "1.4.2", "description": "Google Cloud Storage for @tus/server", - "main": "dist/index.js", + "main": "./dist/index.js", + "exports": "./dist/index.js", "type": "module", "homepage": "https://github.com/tus/tus-node-server#readme", "bugs": "https://github.com/tus/tus-node-server/issues", diff --git a/packages/gcs-store/test/index.ts b/packages/gcs-store/test/index.ts index 9c80144f..d7c79419 100644 --- a/packages/gcs-store/test/index.ts +++ b/packages/gcs-store/test/index.ts @@ -1,6 +1,6 @@ import path from 'node:path' -import {GCSStore} from '../src/index.js' +import {GCSStore} from '@tus/gcs-store' import * as shared from 'test/stores.test' diff --git a/packages/s3-store/package.json b/packages/s3-store/package.json index 34d20343..cab8ac4e 100644 --- a/packages/s3-store/package.json +++ b/packages/s3-store/package.json @@ -3,7 +3,8 @@ "name": "@tus/s3-store", "version": "1.9.1", "description": "AWS S3 store for @tus/server", - "main": "dist/index.js", + "main": "./dist/index.js", + "exports": "./dist/index.js", "type": "module", "homepage": "https://github.com/tus/tus-node-server#readme", "bugs": "https://github.com/tus/tus-node-server/issues", diff --git a/packages/s3-store/test/index.ts b/packages/s3-store/test/index.ts index dec660a5..14c36380 100644 --- a/packages/s3-store/test/index.ts +++ b/packages/s3-store/test/index.ts @@ -4,7 +4,7 @@ import {Readable} from 'node:stream' import sinon from 'sinon' -import {S3Store} from '../src/index.js' +import {S3Store} from '@tus/s3-store' import * as shared from 'test/stores.test' import {Upload} from '@tus/utils' diff --git a/packages/server/package.json b/packages/server/package.json index c848fe99..314ef604 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -3,7 +3,8 @@ "name": "@tus/server", "version": "1.10.2", "description": "Tus resumable upload protocol in Node.js", - "main": "dist/index.js", + "main": "./dist/index.js", + "exports": "./dist/index.js", "type": "module", "homepage": "https://github.com/tus/tus-node-server#readme", "bugs": "https://github.com/tus/tus-node-server/issues", diff --git a/packages/server/test/BaseHandler.test.ts b/packages/server/test/BaseHandler.test.ts index ab50e883..dc52cd52 100644 --- a/packages/server/test/BaseHandler.test.ts +++ b/packages/server/test/BaseHandler.test.ts @@ -3,9 +3,9 @@ import type http from 'node:http' import httpMocks from 'node-mocks-http' -import {BaseHandler} from '../src/handlers/BaseHandler.js' +import {BaseHandler} from '../dist/handlers/BaseHandler.js' import {DataStore} from '@tus/utils' -import {MemoryLocker} from '../src/index.js' +import {MemoryLocker} from '@tus/server' describe('BaseHandler', () => { const store = new DataStore() diff --git a/packages/server/test/DeleteHandler.test.ts b/packages/server/test/DeleteHandler.test.ts index fe6b310e..06176335 100644 --- a/packages/server/test/DeleteHandler.test.ts +++ b/packages/server/test/DeleteHandler.test.ts @@ -7,8 +7,8 @@ import sinon from 'sinon' import httpMocks from 'node-mocks-http' import {ERRORS, EVENTS, DataStore, type CancellationContext} from '@tus/utils' -import {DeleteHandler} from '../src/handlers/DeleteHandler.js' -import {MemoryLocker} from '../src/index.js' +import {DeleteHandler} from '../dist/handlers/DeleteHandler.js' +import {MemoryLocker} from '@tus/server' describe('DeleteHandler', () => { const path = '/test/output' diff --git a/packages/server/test/GetHandler.test.ts b/packages/server/test/GetHandler.test.ts index 4edbc24d..3dda6633 100644 --- a/packages/server/test/GetHandler.test.ts +++ b/packages/server/test/GetHandler.test.ts @@ -8,10 +8,10 @@ import type http from 'node:http' import sinon from 'sinon' import httpMocks from 'node-mocks-http' -import {GetHandler} from '../src/handlers/GetHandler.js' +import {GetHandler} from '../dist/handlers/GetHandler.js' import {DataStore, Upload} from '@tus/utils' import {FileStore} from '@tus/file-store' -import {MemoryLocker} from '../src/index.js' +import {MemoryLocker} from '@tus/server' describe('GetHandler', () => { const path = '/test/output' diff --git a/packages/server/test/HeadHandler.test.ts b/packages/server/test/HeadHandler.test.ts index 6dd65c8a..0c7b65c4 100644 --- a/packages/server/test/HeadHandler.test.ts +++ b/packages/server/test/HeadHandler.test.ts @@ -5,8 +5,8 @@ import sinon from 'sinon' import httpMocks from 'node-mocks-http' import {ERRORS, DataStore, Upload, type CancellationContext} from '@tus/utils' -import {HeadHandler} from '../src/handlers/HeadHandler.js' -import {MemoryLocker} from '../src/index.js' +import {HeadHandler} from '../dist/handlers/HeadHandler.js' +import {MemoryLocker} from '@tus/server' describe('HeadHandler', () => { const path = '/test/output' diff --git a/packages/server/test/HeaderValidator.test.ts b/packages/server/test/HeaderValidator.test.ts index 7af45f1b..58074de9 100644 --- a/packages/server/test/HeaderValidator.test.ts +++ b/packages/server/test/HeaderValidator.test.ts @@ -1,6 +1,6 @@ import {strict as assert} from 'node:assert' -import {validateHeader} from '../src/validators/HeaderValidator.js' +import {validateHeader} from '../dist/validators/HeaderValidator.js' import {TUS_RESUMABLE} from '@tus/utils' describe('HeaderValidator', () => { diff --git a/packages/server/test/Locker.test.ts b/packages/server/test/Locker.test.ts index 4391e484..4b068745 100644 --- a/packages/server/test/Locker.test.ts +++ b/packages/server/test/Locker.test.ts @@ -1,6 +1,6 @@ import assert from 'node:assert' import sinon from 'sinon' -import {ERRORS, MemoryLocker} from '../src/index.js' +import {ERRORS, MemoryLocker} from '@tus/server' describe('MemoryLocker', () => { it('will acquire a lock by notifying another to release it', async () => { diff --git a/packages/server/test/OptionsHandler.test.ts b/packages/server/test/OptionsHandler.test.ts index fb4c6042..9f3cd917 100644 --- a/packages/server/test/OptionsHandler.test.ts +++ b/packages/server/test/OptionsHandler.test.ts @@ -5,9 +5,9 @@ import type http from 'node:http' import httpMocks from 'node-mocks-http' -import {OptionsHandler} from '../src/handlers/OptionsHandler.js' +import {OptionsHandler} from '../dist/handlers/OptionsHandler.js' import {DataStore, ALLOWED_METHODS, ALLOWED_HEADERS, MAX_AGE} from '@tus/utils' -import {MemoryLocker, type ServerOptions} from '../src/index.js' +import {MemoryLocker, type ServerOptions} from '@tus/server' describe('OptionsHandler', () => { const options: ServerOptions = { diff --git a/packages/server/test/PatchHandler.test.ts b/packages/server/test/PatchHandler.test.ts index bc305f91..cd1e2617 100644 --- a/packages/server/test/PatchHandler.test.ts +++ b/packages/server/test/PatchHandler.test.ts @@ -2,17 +2,17 @@ import 'should' import {strict as assert} from 'node:assert' import type http from 'node:http' +import streamP from 'node:stream/promises' +import stream, {PassThrough} from 'node:stream' import sinon from 'sinon' import httpMocks from 'node-mocks-http' -import {PatchHandler} from '../src/handlers/PatchHandler.js' +import {PatchHandler} from '../dist/handlers/PatchHandler.js' import {EVENTS, Upload, DataStore, type CancellationContext} from '@tus/utils' import {EventEmitter} from 'node:events' -import {addPipableStreamBody} from './utils.js' -import {MemoryLocker} from '../src/index.js' -import streamP from 'node:stream/promises' -import stream, {PassThrough} from 'node:stream' +import {addPipableStreamBody} from './utils.ts' +import {MemoryLocker} from '@tus/server' describe('PatchHandler', () => { const path = '/test/output' diff --git a/packages/server/test/PostHandler.test.ts b/packages/server/test/PostHandler.test.ts index 1ff8f46c..d8bdda1e 100644 --- a/packages/server/test/PostHandler.test.ts +++ b/packages/server/test/PostHandler.test.ts @@ -8,9 +8,9 @@ import httpMocks from 'node-mocks-http' import sinon from 'sinon' import {EVENTS, Upload, DataStore, type CancellationContext} from '@tus/utils' -import {PostHandler} from '../src/handlers/PostHandler.js' -import {addPipableStreamBody} from './utils.js' -import {MemoryLocker} from '../src/index.js' +import {PostHandler} from '../dist/handlers/PostHandler.js' +import {addPipableStreamBody} from './utils.ts' +import {MemoryLocker} from '@tus/server' const SERVER_OPTIONS = { path: '/test', diff --git a/packages/server/test/Server.test.ts b/packages/server/test/Server.test.ts index 080e7d9e..f1fe44ca 100644 --- a/packages/server/test/Server.test.ts +++ b/packages/server/test/Server.test.ts @@ -10,7 +10,7 @@ import path from 'node:path' import request from 'supertest' import Throttle from 'throttle' -import {Server} from '../src/index.js' +import {Server} from '@tus/server' import {FileStore} from '@tus/file-store' import {TUS_RESUMABLE, EVENTS, DataStore, Metadata} from '@tus/utils' import httpMocks from 'node-mocks-http' @@ -18,7 +18,7 @@ import sinon from 'sinon' // Test server crashes on http://{some-ip} so we remove the protocol... const removeProtocol = (location: string) => location.slice(6) -const directory = path.resolve(__dirname, 'output', 'server') +const directory = path.resolve(import.meta.dirname, 'output', 'server') describe('Server', () => { before(async () => { diff --git a/packages/server/test/utils.ts b/packages/server/test/utils.ts index aae8d03b..5faeb0f1 100644 --- a/packages/server/test/utils.ts +++ b/packages/server/test/utils.ts @@ -1,5 +1,5 @@ import type httpMocks from 'node-mocks-http' -import stream, {Readable, Transform, TransformCallback} from 'node:stream' +import stream, {Readable} from 'node:stream' import type http from 'node:http' export function addPipableStreamBody< diff --git a/packages/server/tsconfig.json b/packages/server/tsconfig.json index 867c29f9..b2fbd24f 100644 --- a/packages/server/tsconfig.json +++ b/packages/server/tsconfig.json @@ -4,6 +4,7 @@ "extends": "../../tsconfig.base.json", "exclude": ["src"], "compilerOptions": { - "noEmit": true + "noEmit": true, + "allowImportingTsExtensions": true } } diff --git a/packages/utils/test/Metadata.test.ts b/packages/utils/test/Metadata.test.ts index 09699168..bed36106 100644 --- a/packages/utils/test/Metadata.test.ts +++ b/packages/utils/test/Metadata.test.ts @@ -1,5 +1,5 @@ import {strict as assert} from 'node:assert' -import {parse, stringify} from '../src/models/Metadata.js' +import {parse, stringify} from '../dist/models/Metadata.js' describe('Metadata', () => { it('parse valid metadata string', () => { diff --git a/packages/utils/test/StreamSplitter.test.ts b/packages/utils/test/StreamSplitter.test.ts index cc403f6e..15c0f561 100644 --- a/packages/utils/test/StreamSplitter.test.ts +++ b/packages/utils/test/StreamSplitter.test.ts @@ -3,7 +3,7 @@ import fs from 'node:fs' import stream from 'node:stream/promises' import {strict as assert} from 'node:assert' -import {StreamSplitter} from '../src/models/index.js' +import {StreamSplitter} from '../dist/models/index.js' import {Readable} from 'node:stream' const fileSize = 20_971_520 diff --git a/packages/utils/test/Uid.test.ts b/packages/utils/test/Uid.test.ts index d5c220f9..e4a80912 100644 --- a/packages/utils/test/Uid.test.ts +++ b/packages/utils/test/Uid.test.ts @@ -1,6 +1,6 @@ import {strict as assert} from 'node:assert' -import {Uid} from '../src/models/index.js' +import {Uid} from '../dist/models/index.js' describe('Uid', () => { it('returns a 32 char string', (done) => { diff --git a/packages/utils/test/Upload.test.ts b/packages/utils/test/Upload.test.ts index 12c76eec..06ee0b68 100644 --- a/packages/utils/test/Upload.test.ts +++ b/packages/utils/test/Upload.test.ts @@ -1,8 +1,8 @@ import 'should' import {strict as assert} from 'node:assert' -import {Upload} from '../src/models/Upload.js' -import {Uid} from '../src/models/Uid.js' +import {Upload} from '../dist/models/Upload.js' +import {Uid} from '../dist/models/Uid.js' describe('Upload', () => { describe('constructor', () => { From 53dd54ed2b4cdd6056afc5c79fb76427c9c26bbd Mon Sep 17 00:00:00 2001 From: Murderlon Date: Mon, 24 Mar 2025 11:00:25 +0100 Subject: [PATCH 10/18] Add changeset --- .changeset/tricky-paws-hear.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .changeset/tricky-paws-hear.md diff --git a/.changeset/tricky-paws-hear.md b/.changeset/tricky-paws-hear.md new file mode 100644 index 00000000..d2920a2e --- /dev/null +++ b/.changeset/tricky-paws-hear.md @@ -0,0 +1,10 @@ +--- +"@tus/azure-store": major +"@tus/file-store": major +"@tus/gcs-store": major +"@tus/s3-store": major +"@tus/server": major +"@tus/utils": minor +--- + +Make this package ESM-only instead of CommonJS. Since Node.js >= 20.19.0 you can `require(esm)` so you can consume this package even if you don't ESM yourself yet. From 18ea4f1c88b6160629d1ccaa1b692c8f1b95f5bc Mon Sep 17 00:00:00 2001 From: Murderlon Date: Mon, 24 Mar 2025 11:14:29 +0100 Subject: [PATCH 11/18] Use ts-node/esm instead of /register --- packages/azure-store/package.json | 2 +- packages/file-store/package.json | 2 +- packages/gcs-store/package.json | 2 +- packages/s3-store/package.json | 2 +- packages/server/package.json | 2 +- packages/utils/package.json | 2 +- test/package.json | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/azure-store/package.json b/packages/azure-store/package.json index 57e2bb06..1cae542f 100644 --- a/packages/azure-store/package.json +++ b/packages/azure-store/package.json @@ -18,7 +18,7 @@ "license": "MIT", "scripts": { "build": "tsc --build", - "test": "mocha --exit --extension ts --require ts-node/register" + "test": "mocha --exit --extension ts --require ts-node/esm" }, "dependencies": { "@tus/utils": "^0.5.0", diff --git a/packages/file-store/package.json b/packages/file-store/package.json index da0507d2..5a903dbe 100644 --- a/packages/file-store/package.json +++ b/packages/file-store/package.json @@ -13,7 +13,7 @@ "license": "MIT", "scripts": { "build": "tsc --build", - "test": "mocha --exit --extension ts --require ts-node/register" + "test": "mocha --exit --extension ts --require ts-node/esm" }, "dependencies": { "@tus/utils": "^0.5.0", diff --git a/packages/gcs-store/package.json b/packages/gcs-store/package.json index 16ea2943..c33494b2 100644 --- a/packages/gcs-store/package.json +++ b/packages/gcs-store/package.json @@ -18,7 +18,7 @@ ], "scripts": { "build": "tsc --build", - "test": "mocha --timeout 30000 --exit --extension ts --require ts-node/register" + "test": "mocha --timeout 30000 --exit --extension ts --require ts-node/esm" }, "dependencies": { "@tus/utils": "^0.5.0", diff --git a/packages/s3-store/package.json b/packages/s3-store/package.json index cab8ac4e..e9c4c0e2 100644 --- a/packages/s3-store/package.json +++ b/packages/s3-store/package.json @@ -19,7 +19,7 @@ "scripts": { "build": "tsc --build", "pretest": "tsc --build", - "test": "mocha --timeout 40000 --exit --extension ts --require ts-node/register" + "test": "mocha --timeout 40000 --exit --extension ts --require ts-node/esm" }, "dependencies": { "@aws-sdk/client-s3": "^3.758.0", diff --git a/packages/server/package.json b/packages/server/package.json index 314ef604..cf2d6869 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -18,7 +18,7 @@ ], "scripts": { "build": "tsc --build", - "test": "mocha --timeout 40000 --exit --extension ts --require ts-node/register" + "test": "mocha --timeout 40000 --exit --extension ts --require ts-node/esm" }, "dependencies": { "@tus/utils": "^0.5.1", diff --git a/packages/utils/package.json b/packages/utils/package.json index eab9f2f1..530395ea 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -17,7 +17,7 @@ ], "scripts": { "build": "tsc --build", - "test": "mocha --timeout 40000 --exit --extension ts --require ts-node/register" + "test": "mocha --timeout 40000 --exit --extension ts --require ts-node/esm" }, "devDependencies": { "@types/debug": "^4.1.12", diff --git a/test/package.json b/test/package.json index 400594e5..22481d93 100644 --- a/test/package.json +++ b/test/package.json @@ -5,7 +5,7 @@ "type":"module", "scripts": { "build": "tsc --build", - "test": "mocha dist/e2e.test.js dist/s3.e2e.js --timeout 40000 --exit --extension ts --require ts-node/register" + "test": "mocha dist/e2e.test.js dist/s3.e2e.js --timeout 40000 --exit --extension ts --require ts-node/esm" }, "exports": { "./stores.test": "./dist/stores.test.js" From ab0ae964ecbf83497153c77f7c746496de9d954c Mon Sep 17 00:00:00 2001 From: Murderlon Date: Mon, 24 Mar 2025 11:25:51 +0100 Subject: [PATCH 12/18] Hopefully this fixes it --- package-lock.json | 175 ++---------------------------- packages/azure-store/package.json | 2 +- packages/file-store/package.json | 2 +- packages/gcs-store/package.json | 2 +- packages/s3-store/package.json | 2 +- packages/server/package.json | 5 +- packages/utils/package.json | 5 +- test/package.json | 3 +- 8 files changed, 20 insertions(+), 176 deletions(-) diff --git a/package-lock.json b/package-lock.json index a008d0b1..f3a9d9d5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1602,17 +1602,6 @@ "prettier": "^2.7.1" } }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/@google-cloud/paginator": { "version": "3.0.7", "dev": true, @@ -1796,28 +1785,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, "node_modules/@manypkg/find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz", @@ -2740,26 +2707,6 @@ "node": ">= 10" } }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "dev": true, - "license": "MIT" - }, "node_modules/@tus/azure-store": { "resolved": "packages/azure-store", "link": true @@ -3030,25 +2977,6 @@ "node": ">= 0.6" } }, - "node_modules/acorn": { - "version": "8.10.0", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/agent-base": { "version": "6.0.2", "dev": true, @@ -3118,11 +3046,6 @@ "node": ">= 8" } }, - "node_modules/arg": { - "version": "4.1.3", - "dev": true, - "license": "MIT" - }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -3411,11 +3334,6 @@ "dev": true, "license": "MIT" }, - "node_modules/create-require": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -4523,11 +4441,6 @@ "node": ">=10" } }, - "node_modules/make-error": { - "version": "1.3.6", - "dev": true, - "license": "ISC" - }, "node_modules/media-typer": { "version": "0.3.0", "dev": true, @@ -5852,56 +5765,6 @@ "dev": true, "license": "MIT" }, - "node_modules/ts-node": { - "version": "10.9.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/tslib": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", @@ -5970,11 +5833,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "dev": true, - "license": "MIT" - }, "node_modules/webidl-conversions": { "version": "3.0.1", "dev": true, @@ -6113,14 +5971,6 @@ "node": ">=8" } }, - "node_modules/yn": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "dev": true, @@ -6149,7 +5999,7 @@ "should": "^13.2.3" }, "engines": { - "node": ">=20" + "node": ">=20.19.0" } }, "packages/eslint-config-custom": { @@ -6185,7 +6035,7 @@ "should": "^13.2.3" }, "engines": { - "node": ">=20" + "node": ">=20.19.0" }, "optionalDependencies": { "@redis/client": "^1.6.0" @@ -6209,7 +6059,7 @@ "should": "^13.2.3" }, "engines": { - "node": ">=20" + "node": ">=20.19.0" }, "peerDependencies": { "@google-cloud/storage": "*" @@ -6217,7 +6067,7 @@ }, "packages/s3-store": { "name": "@tus/s3-store", - "version": "1.9.0", + "version": "1.9.1", "license": "MIT", "dependencies": { "@aws-sdk/client-s3": "^3.758.0", @@ -6235,7 +6085,7 @@ "should": "^13.2.3" }, "engines": { - "node": ">=20" + "node": ">=20.19.0" } }, "packages/server": { @@ -6258,11 +6108,10 @@ "node-mocks-http": "^1.16.1", "should": "^13.2.3", "sinon": "^18.0.0", - "supertest": "^6.3.4", - "ts-node": "^10.9.2" + "supertest": "^6.3.4" }, "engines": { - "node": ">=20" + "node": ">=20.19.0" }, "optionalDependencies": { "@redis/client": "^1.6.0", @@ -6279,18 +6128,17 @@ "@types/node": "^22.13.7", "ioredis": "^5.4.1", "mocha": "^11.0.1", - "should": "^13.2.3", - "ts-node": "^10.9.2" + "should": "^13.2.3" }, "engines": { - "node": ">=20" + "node": ">=20.19.0" } }, "test": { "dependencies": { "@tus/file-store": "^1.5.1", "@tus/gcs-store": "^1.4.2", - "@tus/s3-store": "^1.9.0", + "@tus/s3-store": "^1.9.1", "@tus/server": "^1.10.2" }, "devDependencies": { @@ -6305,8 +6153,7 @@ "should": "^13.2.3", "sinon": "^18.0.0", "supertest": "^6.3.4", - "throttle": "^1.0.3", - "ts-node": "^10.9.2" + "throttle": "^1.0.3" } } } diff --git a/packages/azure-store/package.json b/packages/azure-store/package.json index 1cae542f..35437d51 100644 --- a/packages/azure-store/package.json +++ b/packages/azure-store/package.json @@ -18,7 +18,7 @@ "license": "MIT", "scripts": { "build": "tsc --build", - "test": "mocha --exit --extension ts --require ts-node/esm" + "test": "node --experimental-strip-types ../../node_modules/.bin/mocha --exit --extension ts" }, "dependencies": { "@tus/utils": "^0.5.0", diff --git a/packages/file-store/package.json b/packages/file-store/package.json index 5a903dbe..5252e21d 100644 --- a/packages/file-store/package.json +++ b/packages/file-store/package.json @@ -13,7 +13,7 @@ "license": "MIT", "scripts": { "build": "tsc --build", - "test": "mocha --exit --extension ts --require ts-node/esm" + "test": "node --experimental-strip-types ../../node_modules/.bin/mocha --exit --extension ts" }, "dependencies": { "@tus/utils": "^0.5.0", diff --git a/packages/gcs-store/package.json b/packages/gcs-store/package.json index c33494b2..83686009 100644 --- a/packages/gcs-store/package.json +++ b/packages/gcs-store/package.json @@ -18,7 +18,7 @@ ], "scripts": { "build": "tsc --build", - "test": "mocha --timeout 30000 --exit --extension ts --require ts-node/esm" + "test": "node --experimental-strip-types ../../node_modules/.bin/mocha --timeout 40000 --exit --extension ts" }, "dependencies": { "@tus/utils": "^0.5.0", diff --git a/packages/s3-store/package.json b/packages/s3-store/package.json index e9c4c0e2..768b60f7 100644 --- a/packages/s3-store/package.json +++ b/packages/s3-store/package.json @@ -19,7 +19,7 @@ "scripts": { "build": "tsc --build", "pretest": "tsc --build", - "test": "mocha --timeout 40000 --exit --extension ts --require ts-node/esm" + "test": "node --experimental-strip-types ../../node_modules/.bin/mocha --timeout 40000 --exit --extension ts" }, "dependencies": { "@aws-sdk/client-s3": "^3.758.0", diff --git a/packages/server/package.json b/packages/server/package.json index cf2d6869..bd6484e1 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -18,7 +18,7 @@ ], "scripts": { "build": "tsc --build", - "test": "mocha --timeout 40000 --exit --extension ts --require ts-node/esm" + "test": "node --experimental-strip-types ../../node_modules/.bin/mocha --exit --extension ts" }, "dependencies": { "@tus/utils": "^0.5.1", @@ -36,8 +36,7 @@ "node-mocks-http": "^1.16.1", "should": "^13.2.3", "sinon": "^18.0.0", - "supertest": "^6.3.4", - "ts-node": "^10.9.2" + "supertest": "^6.3.4" }, "optionalDependencies": { "@redis/client": "^1.6.0", diff --git a/packages/utils/package.json b/packages/utils/package.json index 530395ea..0fcc070f 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -17,7 +17,7 @@ ], "scripts": { "build": "tsc --build", - "test": "mocha --timeout 40000 --exit --extension ts --require ts-node/esm" + "test": "node --experimental-strip-types ../../node_modules/.bin/mocha --exit --extension ts" }, "devDependencies": { "@types/debug": "^4.1.12", @@ -25,8 +25,7 @@ "@types/node": "^22.13.7", "ioredis": "^5.4.1", "mocha": "^11.0.1", - "should": "^13.2.3", - "ts-node": "^10.9.2" + "should": "^13.2.3" }, "engines": { "node": ">=20.19.0" diff --git a/test/package.json b/test/package.json index 22481d93..44d7f8f9 100644 --- a/test/package.json +++ b/test/package.json @@ -28,7 +28,6 @@ "should": "^13.2.3", "sinon": "^18.0.0", "supertest": "^6.3.4", - "throttle": "^1.0.3", - "ts-node": "^10.9.2" + "throttle": "^1.0.3" } } From 8d87bffc686d8aa7ba17a4d2895894693f52c6cd Mon Sep 17 00:00:00 2001 From: Murderlon Date: Mon, 24 Mar 2025 11:31:39 +0100 Subject: [PATCH 13/18] Revert "Hopefully this fixes it" This reverts commit ab0ae964ecbf83497153c77f7c746496de9d954c. --- package-lock.json | 175 ++++++++++++++++++++++++++++-- packages/azure-store/package.json | 2 +- packages/file-store/package.json | 2 +- packages/gcs-store/package.json | 2 +- packages/s3-store/package.json | 2 +- packages/server/package.json | 5 +- packages/utils/package.json | 5 +- test/package.json | 3 +- 8 files changed, 176 insertions(+), 20 deletions(-) diff --git a/package-lock.json b/package-lock.json index f3a9d9d5..a008d0b1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1602,6 +1602,17 @@ "prettier": "^2.7.1" } }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@google-cloud/paginator": { "version": "3.0.7", "dev": true, @@ -1785,6 +1796,28 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@manypkg/find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz", @@ -2707,6 +2740,26 @@ "node": ">= 10" } }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "dev": true, + "license": "MIT" + }, "node_modules/@tus/azure-store": { "resolved": "packages/azure-store", "link": true @@ -2977,6 +3030,25 @@ "node": ">= 0.6" } }, + "node_modules/acorn": { + "version": "8.10.0", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/agent-base": { "version": "6.0.2", "dev": true, @@ -3046,6 +3118,11 @@ "node": ">= 8" } }, + "node_modules/arg": { + "version": "4.1.3", + "dev": true, + "license": "MIT" + }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -3334,6 +3411,11 @@ "dev": true, "license": "MIT" }, + "node_modules/create-require": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -4441,6 +4523,11 @@ "node": ">=10" } }, + "node_modules/make-error": { + "version": "1.3.6", + "dev": true, + "license": "ISC" + }, "node_modules/media-typer": { "version": "0.3.0", "dev": true, @@ -5765,6 +5852,56 @@ "dev": true, "license": "MIT" }, + "node_modules/ts-node": { + "version": "10.9.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/tslib": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", @@ -5833,6 +5970,11 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "dev": true, + "license": "MIT" + }, "node_modules/webidl-conversions": { "version": "3.0.1", "dev": true, @@ -5971,6 +6113,14 @@ "node": ">=8" } }, + "node_modules/yn": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "dev": true, @@ -5999,7 +6149,7 @@ "should": "^13.2.3" }, "engines": { - "node": ">=20.19.0" + "node": ">=20" } }, "packages/eslint-config-custom": { @@ -6035,7 +6185,7 @@ "should": "^13.2.3" }, "engines": { - "node": ">=20.19.0" + "node": ">=20" }, "optionalDependencies": { "@redis/client": "^1.6.0" @@ -6059,7 +6209,7 @@ "should": "^13.2.3" }, "engines": { - "node": ">=20.19.0" + "node": ">=20" }, "peerDependencies": { "@google-cloud/storage": "*" @@ -6067,7 +6217,7 @@ }, "packages/s3-store": { "name": "@tus/s3-store", - "version": "1.9.1", + "version": "1.9.0", "license": "MIT", "dependencies": { "@aws-sdk/client-s3": "^3.758.0", @@ -6085,7 +6235,7 @@ "should": "^13.2.3" }, "engines": { - "node": ">=20.19.0" + "node": ">=20" } }, "packages/server": { @@ -6108,10 +6258,11 @@ "node-mocks-http": "^1.16.1", "should": "^13.2.3", "sinon": "^18.0.0", - "supertest": "^6.3.4" + "supertest": "^6.3.4", + "ts-node": "^10.9.2" }, "engines": { - "node": ">=20.19.0" + "node": ">=20" }, "optionalDependencies": { "@redis/client": "^1.6.0", @@ -6128,17 +6279,18 @@ "@types/node": "^22.13.7", "ioredis": "^5.4.1", "mocha": "^11.0.1", - "should": "^13.2.3" + "should": "^13.2.3", + "ts-node": "^10.9.2" }, "engines": { - "node": ">=20.19.0" + "node": ">=20" } }, "test": { "dependencies": { "@tus/file-store": "^1.5.1", "@tus/gcs-store": "^1.4.2", - "@tus/s3-store": "^1.9.1", + "@tus/s3-store": "^1.9.0", "@tus/server": "^1.10.2" }, "devDependencies": { @@ -6153,7 +6305,8 @@ "should": "^13.2.3", "sinon": "^18.0.0", "supertest": "^6.3.4", - "throttle": "^1.0.3" + "throttle": "^1.0.3", + "ts-node": "^10.9.2" } } } diff --git a/packages/azure-store/package.json b/packages/azure-store/package.json index 35437d51..1cae542f 100644 --- a/packages/azure-store/package.json +++ b/packages/azure-store/package.json @@ -18,7 +18,7 @@ "license": "MIT", "scripts": { "build": "tsc --build", - "test": "node --experimental-strip-types ../../node_modules/.bin/mocha --exit --extension ts" + "test": "mocha --exit --extension ts --require ts-node/esm" }, "dependencies": { "@tus/utils": "^0.5.0", diff --git a/packages/file-store/package.json b/packages/file-store/package.json index 5252e21d..5a903dbe 100644 --- a/packages/file-store/package.json +++ b/packages/file-store/package.json @@ -13,7 +13,7 @@ "license": "MIT", "scripts": { "build": "tsc --build", - "test": "node --experimental-strip-types ../../node_modules/.bin/mocha --exit --extension ts" + "test": "mocha --exit --extension ts --require ts-node/esm" }, "dependencies": { "@tus/utils": "^0.5.0", diff --git a/packages/gcs-store/package.json b/packages/gcs-store/package.json index 83686009..c33494b2 100644 --- a/packages/gcs-store/package.json +++ b/packages/gcs-store/package.json @@ -18,7 +18,7 @@ ], "scripts": { "build": "tsc --build", - "test": "node --experimental-strip-types ../../node_modules/.bin/mocha --timeout 40000 --exit --extension ts" + "test": "mocha --timeout 30000 --exit --extension ts --require ts-node/esm" }, "dependencies": { "@tus/utils": "^0.5.0", diff --git a/packages/s3-store/package.json b/packages/s3-store/package.json index 768b60f7..e9c4c0e2 100644 --- a/packages/s3-store/package.json +++ b/packages/s3-store/package.json @@ -19,7 +19,7 @@ "scripts": { "build": "tsc --build", "pretest": "tsc --build", - "test": "node --experimental-strip-types ../../node_modules/.bin/mocha --timeout 40000 --exit --extension ts" + "test": "mocha --timeout 40000 --exit --extension ts --require ts-node/esm" }, "dependencies": { "@aws-sdk/client-s3": "^3.758.0", diff --git a/packages/server/package.json b/packages/server/package.json index bd6484e1..cf2d6869 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -18,7 +18,7 @@ ], "scripts": { "build": "tsc --build", - "test": "node --experimental-strip-types ../../node_modules/.bin/mocha --exit --extension ts" + "test": "mocha --timeout 40000 --exit --extension ts --require ts-node/esm" }, "dependencies": { "@tus/utils": "^0.5.1", @@ -36,7 +36,8 @@ "node-mocks-http": "^1.16.1", "should": "^13.2.3", "sinon": "^18.0.0", - "supertest": "^6.3.4" + "supertest": "^6.3.4", + "ts-node": "^10.9.2" }, "optionalDependencies": { "@redis/client": "^1.6.0", diff --git a/packages/utils/package.json b/packages/utils/package.json index 0fcc070f..530395ea 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -17,7 +17,7 @@ ], "scripts": { "build": "tsc --build", - "test": "node --experimental-strip-types ../../node_modules/.bin/mocha --exit --extension ts" + "test": "mocha --timeout 40000 --exit --extension ts --require ts-node/esm" }, "devDependencies": { "@types/debug": "^4.1.12", @@ -25,7 +25,8 @@ "@types/node": "^22.13.7", "ioredis": "^5.4.1", "mocha": "^11.0.1", - "should": "^13.2.3" + "should": "^13.2.3", + "ts-node": "^10.9.2" }, "engines": { "node": ">=20.19.0" diff --git a/test/package.json b/test/package.json index 44d7f8f9..22481d93 100644 --- a/test/package.json +++ b/test/package.json @@ -28,6 +28,7 @@ "should": "^13.2.3", "sinon": "^18.0.0", "supertest": "^6.3.4", - "throttle": "^1.0.3" + "throttle": "^1.0.3", + "ts-node": "^10.9.2" } } From be3ea32c638d49cfadd77a4299de62ed071479fd Mon Sep 17 00:00:00 2001 From: Murderlon Date: Mon, 24 Mar 2025 12:18:06 +0100 Subject: [PATCH 14/18] Run compiled tests --- package-lock.json | 175 ++----------------- packages/azure-store/package.json | 8 +- packages/azure-store/tsconfig.build.json | 10 -- packages/azure-store/tsconfig.json | 8 +- packages/file-store/package.json | 9 +- packages/file-store/tsconfig.build.json | 10 -- packages/file-store/tsconfig.json | 8 +- packages/gcs-store/package.json | 8 +- packages/gcs-store/tsconfig.build.json | 10 -- packages/gcs-store/tsconfig.json | 8 +- packages/s3-store/package.json | 7 +- packages/s3-store/tsconfig.build.json | 10 -- packages/s3-store/tsconfig.json | 8 +- packages/server/package.json | 11 +- packages/server/test/BaseHandler.test.ts | 2 +- packages/server/test/DeleteHandler.test.ts | 2 +- packages/server/test/GetHandler.test.ts | 2 +- packages/server/test/HeadHandler.test.ts | 2 +- packages/server/test/HeaderValidator.test.ts | 2 +- packages/server/test/OptionsHandler.test.ts | 2 +- packages/server/test/PatchHandler.test.ts | 4 +- packages/server/test/PostHandler.test.ts | 4 +- packages/server/tsconfig.build.json | 10 -- packages/server/tsconfig.json | 6 +- packages/utils/package.json | 11 +- packages/utils/test/Metadata.test.ts | 2 +- packages/utils/test/StreamSplitter.test.ts | 2 +- packages/utils/test/Uid.test.ts | 2 +- packages/utils/test/Upload.test.ts | 4 +- packages/utils/tsconfig.build.json | 9 - packages/utils/tsconfig.json | 5 +- test/package.json | 5 +- test/tsconfig.json | 10 +- 33 files changed, 73 insertions(+), 303 deletions(-) delete mode 100644 packages/azure-store/tsconfig.build.json delete mode 100644 packages/file-store/tsconfig.build.json delete mode 100644 packages/gcs-store/tsconfig.build.json delete mode 100644 packages/s3-store/tsconfig.build.json delete mode 100644 packages/server/tsconfig.build.json delete mode 100644 packages/utils/tsconfig.build.json diff --git a/package-lock.json b/package-lock.json index a008d0b1..f3a9d9d5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1602,17 +1602,6 @@ "prettier": "^2.7.1" } }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/@google-cloud/paginator": { "version": "3.0.7", "dev": true, @@ -1796,28 +1785,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, "node_modules/@manypkg/find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz", @@ -2740,26 +2707,6 @@ "node": ">= 10" } }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "dev": true, - "license": "MIT" - }, "node_modules/@tus/azure-store": { "resolved": "packages/azure-store", "link": true @@ -3030,25 +2977,6 @@ "node": ">= 0.6" } }, - "node_modules/acorn": { - "version": "8.10.0", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/agent-base": { "version": "6.0.2", "dev": true, @@ -3118,11 +3046,6 @@ "node": ">= 8" } }, - "node_modules/arg": { - "version": "4.1.3", - "dev": true, - "license": "MIT" - }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -3411,11 +3334,6 @@ "dev": true, "license": "MIT" }, - "node_modules/create-require": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -4523,11 +4441,6 @@ "node": ">=10" } }, - "node_modules/make-error": { - "version": "1.3.6", - "dev": true, - "license": "ISC" - }, "node_modules/media-typer": { "version": "0.3.0", "dev": true, @@ -5852,56 +5765,6 @@ "dev": true, "license": "MIT" }, - "node_modules/ts-node": { - "version": "10.9.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/tslib": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", @@ -5970,11 +5833,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "dev": true, - "license": "MIT" - }, "node_modules/webidl-conversions": { "version": "3.0.1", "dev": true, @@ -6113,14 +5971,6 @@ "node": ">=8" } }, - "node_modules/yn": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "dev": true, @@ -6149,7 +5999,7 @@ "should": "^13.2.3" }, "engines": { - "node": ">=20" + "node": ">=20.19.0" } }, "packages/eslint-config-custom": { @@ -6185,7 +6035,7 @@ "should": "^13.2.3" }, "engines": { - "node": ">=20" + "node": ">=20.19.0" }, "optionalDependencies": { "@redis/client": "^1.6.0" @@ -6209,7 +6059,7 @@ "should": "^13.2.3" }, "engines": { - "node": ">=20" + "node": ">=20.19.0" }, "peerDependencies": { "@google-cloud/storage": "*" @@ -6217,7 +6067,7 @@ }, "packages/s3-store": { "name": "@tus/s3-store", - "version": "1.9.0", + "version": "1.9.1", "license": "MIT", "dependencies": { "@aws-sdk/client-s3": "^3.758.0", @@ -6235,7 +6085,7 @@ "should": "^13.2.3" }, "engines": { - "node": ">=20" + "node": ">=20.19.0" } }, "packages/server": { @@ -6258,11 +6108,10 @@ "node-mocks-http": "^1.16.1", "should": "^13.2.3", "sinon": "^18.0.0", - "supertest": "^6.3.4", - "ts-node": "^10.9.2" + "supertest": "^6.3.4" }, "engines": { - "node": ">=20" + "node": ">=20.19.0" }, "optionalDependencies": { "@redis/client": "^1.6.0", @@ -6279,18 +6128,17 @@ "@types/node": "^22.13.7", "ioredis": "^5.4.1", "mocha": "^11.0.1", - "should": "^13.2.3", - "ts-node": "^10.9.2" + "should": "^13.2.3" }, "engines": { - "node": ">=20" + "node": ">=20.19.0" } }, "test": { "dependencies": { "@tus/file-store": "^1.5.1", "@tus/gcs-store": "^1.4.2", - "@tus/s3-store": "^1.9.0", + "@tus/s3-store": "^1.9.1", "@tus/server": "^1.10.2" }, "devDependencies": { @@ -6305,8 +6153,7 @@ "should": "^13.2.3", "sinon": "^18.0.0", "supertest": "^6.3.4", - "throttle": "^1.0.3", - "ts-node": "^10.9.2" + "throttle": "^1.0.3" } } } diff --git a/packages/azure-store/package.json b/packages/azure-store/package.json index 1cae542f..5fe571c7 100644 --- a/packages/azure-store/package.json +++ b/packages/azure-store/package.json @@ -10,15 +10,15 @@ "bugs": "https://github.com/tus/tus-node-server/issues", "repository": "tus/tus-node-server", "files": [ - "README.md", - "LICENSE", "dist", - "src" + "src", + "!test*" ], "license": "MIT", "scripts": { "build": "tsc --build", - "test": "mocha --exit --extension ts --require ts-node/esm" + "pretest": "tsc --build", + "test": "mocha './dist/test/*.js' --exit" }, "dependencies": { "@tus/utils": "^0.5.0", diff --git a/packages/azure-store/tsconfig.build.json b/packages/azure-store/tsconfig.build.json deleted file mode 100644 index 06719e77..00000000 --- a/packages/azure-store/tsconfig.build.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig.json", - "references": [{ "path": "../utils/tsconfig.build.json" }], - "extends": "../../tsconfig.base.json", - "include": ["src"], - "compilerOptions": { - "rootDir": "src", - "outDir": "dist" - } -} diff --git a/packages/azure-store/tsconfig.json b/packages/azure-store/tsconfig.json index 823c3da5..165fd4ce 100644 --- a/packages/azure-store/tsconfig.json +++ b/packages/azure-store/tsconfig.json @@ -1,12 +1,8 @@ { "$schema": "https://json.schemastore.org/tsconfig.json", - "references": [ - { "path": "./tsconfig.build.json" }, - { "path": "../../test/tsconfig.json" } - ], "extends": "../../tsconfig.base.json", - "exclude": ["src"], + "include": ["src", "test"], "compilerOptions": { - "noEmit": true + "outDir": "dist", } } diff --git a/packages/file-store/package.json b/packages/file-store/package.json index 5a903dbe..304bd85d 100644 --- a/packages/file-store/package.json +++ b/packages/file-store/package.json @@ -9,11 +9,16 @@ "homepage": "https://github.com/tus/tus-node-server#readme", "bugs": "https://github.com/tus/tus-node-server/issues", "repository": "tus/tus-node-server", - "files": ["README.md", "LICENSE", "dist", "src"], + "files": [ + "dist", + "src", + "!test*" + ], "license": "MIT", "scripts": { "build": "tsc --build", - "test": "mocha --exit --extension ts --require ts-node/esm" + "pretest": "tsc --build", + "test": "mocha './dist/test/*.js' --exit" }, "dependencies": { "@tus/utils": "^0.5.0", diff --git a/packages/file-store/tsconfig.build.json b/packages/file-store/tsconfig.build.json deleted file mode 100644 index 06719e77..00000000 --- a/packages/file-store/tsconfig.build.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig.json", - "references": [{ "path": "../utils/tsconfig.build.json" }], - "extends": "../../tsconfig.base.json", - "include": ["src"], - "compilerOptions": { - "rootDir": "src", - "outDir": "dist" - } -} diff --git a/packages/file-store/tsconfig.json b/packages/file-store/tsconfig.json index 823c3da5..165fd4ce 100644 --- a/packages/file-store/tsconfig.json +++ b/packages/file-store/tsconfig.json @@ -1,12 +1,8 @@ { "$schema": "https://json.schemastore.org/tsconfig.json", - "references": [ - { "path": "./tsconfig.build.json" }, - { "path": "../../test/tsconfig.json" } - ], "extends": "../../tsconfig.base.json", - "exclude": ["src"], + "include": ["src", "test"], "compilerOptions": { - "noEmit": true + "outDir": "dist", } } diff --git a/packages/gcs-store/package.json b/packages/gcs-store/package.json index c33494b2..f0f53b29 100644 --- a/packages/gcs-store/package.json +++ b/packages/gcs-store/package.json @@ -11,14 +11,14 @@ "repository": "tus/tus-node-server", "license": "MIT", "files": [ - "README.md", - "LICENSE", "dist", - "src" + "src", + "!test*" ], "scripts": { "build": "tsc --build", - "test": "mocha --timeout 30000 --exit --extension ts --require ts-node/esm" + "pretest": "tsc --build", + "test": "mocha './dist/test/*.js' --exit --timeout 30000" }, "dependencies": { "@tus/utils": "^0.5.0", diff --git a/packages/gcs-store/tsconfig.build.json b/packages/gcs-store/tsconfig.build.json deleted file mode 100644 index d199726e..00000000 --- a/packages/gcs-store/tsconfig.build.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig.json", - "references": [{ "path": "../utils//tsconfig.build.json" }], - "extends": "../../tsconfig.base.json", - "include": ["src"], - "compilerOptions": { - "rootDir": "src", - "outDir": "dist" - } -} diff --git a/packages/gcs-store/tsconfig.json b/packages/gcs-store/tsconfig.json index 823c3da5..165fd4ce 100644 --- a/packages/gcs-store/tsconfig.json +++ b/packages/gcs-store/tsconfig.json @@ -1,12 +1,8 @@ { "$schema": "https://json.schemastore.org/tsconfig.json", - "references": [ - { "path": "./tsconfig.build.json" }, - { "path": "../../test/tsconfig.json" } - ], "extends": "../../tsconfig.base.json", - "exclude": ["src"], + "include": ["src", "test"], "compilerOptions": { - "noEmit": true + "outDir": "dist", } } diff --git a/packages/s3-store/package.json b/packages/s3-store/package.json index e9c4c0e2..777c513b 100644 --- a/packages/s3-store/package.json +++ b/packages/s3-store/package.json @@ -11,15 +11,14 @@ "repository": "tus/tus-node-server", "license": "MIT", "files": [ - "README.md", - "LICENSE", "dist", - "src" + "src", + "!test*" ], "scripts": { "build": "tsc --build", "pretest": "tsc --build", - "test": "mocha --timeout 40000 --exit --extension ts --require ts-node/esm" + "test": "mocha './dist/test/*.js' --exit --timeout 40000" }, "dependencies": { "@aws-sdk/client-s3": "^3.758.0", diff --git a/packages/s3-store/tsconfig.build.json b/packages/s3-store/tsconfig.build.json deleted file mode 100644 index d199726e..00000000 --- a/packages/s3-store/tsconfig.build.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig.json", - "references": [{ "path": "../utils//tsconfig.build.json" }], - "extends": "../../tsconfig.base.json", - "include": ["src"], - "compilerOptions": { - "rootDir": "src", - "outDir": "dist" - } -} diff --git a/packages/s3-store/tsconfig.json b/packages/s3-store/tsconfig.json index 823c3da5..165fd4ce 100644 --- a/packages/s3-store/tsconfig.json +++ b/packages/s3-store/tsconfig.json @@ -1,12 +1,8 @@ { "$schema": "https://json.schemastore.org/tsconfig.json", - "references": [ - { "path": "./tsconfig.build.json" }, - { "path": "../../test/tsconfig.json" } - ], "extends": "../../tsconfig.base.json", - "exclude": ["src"], + "include": ["src", "test"], "compilerOptions": { - "noEmit": true + "outDir": "dist", } } diff --git a/packages/server/package.json b/packages/server/package.json index cf2d6869..219a7784 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -11,14 +11,14 @@ "repository": "tus/tus-node-server", "license": "MIT", "files": [ - "README.md", - "LICENSE", "dist", - "src" + "src", + "!test*" ], "scripts": { "build": "tsc --build", - "test": "mocha --timeout 40000 --exit --extension ts --require ts-node/esm" + "pretest": "tsc --build", + "test": "mocha './dist/test/*.js' --exit" }, "dependencies": { "@tus/utils": "^0.5.1", @@ -36,8 +36,7 @@ "node-mocks-http": "^1.16.1", "should": "^13.2.3", "sinon": "^18.0.0", - "supertest": "^6.3.4", - "ts-node": "^10.9.2" + "supertest": "^6.3.4" }, "optionalDependencies": { "@redis/client": "^1.6.0", diff --git a/packages/server/test/BaseHandler.test.ts b/packages/server/test/BaseHandler.test.ts index dc52cd52..729353df 100644 --- a/packages/server/test/BaseHandler.test.ts +++ b/packages/server/test/BaseHandler.test.ts @@ -3,7 +3,7 @@ import type http from 'node:http' import httpMocks from 'node-mocks-http' -import {BaseHandler} from '../dist/handlers/BaseHandler.js' +import {BaseHandler} from '../src/handlers/BaseHandler.js' import {DataStore} from '@tus/utils' import {MemoryLocker} from '@tus/server' diff --git a/packages/server/test/DeleteHandler.test.ts b/packages/server/test/DeleteHandler.test.ts index 06176335..202a5ac3 100644 --- a/packages/server/test/DeleteHandler.test.ts +++ b/packages/server/test/DeleteHandler.test.ts @@ -7,7 +7,7 @@ import sinon from 'sinon' import httpMocks from 'node-mocks-http' import {ERRORS, EVENTS, DataStore, type CancellationContext} from '@tus/utils' -import {DeleteHandler} from '../dist/handlers/DeleteHandler.js' +import {DeleteHandler} from '../src/handlers/DeleteHandler.js' import {MemoryLocker} from '@tus/server' describe('DeleteHandler', () => { diff --git a/packages/server/test/GetHandler.test.ts b/packages/server/test/GetHandler.test.ts index 3dda6633..d54df2e6 100644 --- a/packages/server/test/GetHandler.test.ts +++ b/packages/server/test/GetHandler.test.ts @@ -8,7 +8,7 @@ import type http from 'node:http' import sinon from 'sinon' import httpMocks from 'node-mocks-http' -import {GetHandler} from '../dist/handlers/GetHandler.js' +import {GetHandler} from '../src/handlers/GetHandler.js' import {DataStore, Upload} from '@tus/utils' import {FileStore} from '@tus/file-store' import {MemoryLocker} from '@tus/server' diff --git a/packages/server/test/HeadHandler.test.ts b/packages/server/test/HeadHandler.test.ts index 0c7b65c4..b421ab48 100644 --- a/packages/server/test/HeadHandler.test.ts +++ b/packages/server/test/HeadHandler.test.ts @@ -5,7 +5,7 @@ import sinon from 'sinon' import httpMocks from 'node-mocks-http' import {ERRORS, DataStore, Upload, type CancellationContext} from '@tus/utils' -import {HeadHandler} from '../dist/handlers/HeadHandler.js' +import {HeadHandler} from '../src/handlers/HeadHandler.js' import {MemoryLocker} from '@tus/server' describe('HeadHandler', () => { diff --git a/packages/server/test/HeaderValidator.test.ts b/packages/server/test/HeaderValidator.test.ts index 58074de9..7af45f1b 100644 --- a/packages/server/test/HeaderValidator.test.ts +++ b/packages/server/test/HeaderValidator.test.ts @@ -1,6 +1,6 @@ import {strict as assert} from 'node:assert' -import {validateHeader} from '../dist/validators/HeaderValidator.js' +import {validateHeader} from '../src/validators/HeaderValidator.js' import {TUS_RESUMABLE} from '@tus/utils' describe('HeaderValidator', () => { diff --git a/packages/server/test/OptionsHandler.test.ts b/packages/server/test/OptionsHandler.test.ts index 9f3cd917..ba7fa9ca 100644 --- a/packages/server/test/OptionsHandler.test.ts +++ b/packages/server/test/OptionsHandler.test.ts @@ -5,7 +5,7 @@ import type http from 'node:http' import httpMocks from 'node-mocks-http' -import {OptionsHandler} from '../dist/handlers/OptionsHandler.js' +import {OptionsHandler} from '../src/handlers/OptionsHandler.js' import {DataStore, ALLOWED_METHODS, ALLOWED_HEADERS, MAX_AGE} from '@tus/utils' import {MemoryLocker, type ServerOptions} from '@tus/server' diff --git a/packages/server/test/PatchHandler.test.ts b/packages/server/test/PatchHandler.test.ts index cd1e2617..c1967d43 100644 --- a/packages/server/test/PatchHandler.test.ts +++ b/packages/server/test/PatchHandler.test.ts @@ -8,10 +8,10 @@ import stream, {PassThrough} from 'node:stream' import sinon from 'sinon' import httpMocks from 'node-mocks-http' -import {PatchHandler} from '../dist/handlers/PatchHandler.js' +import {PatchHandler} from '../src/handlers/PatchHandler.js' import {EVENTS, Upload, DataStore, type CancellationContext} from '@tus/utils' import {EventEmitter} from 'node:events' -import {addPipableStreamBody} from './utils.ts' +import {addPipableStreamBody} from './utils.js' import {MemoryLocker} from '@tus/server' describe('PatchHandler', () => { diff --git a/packages/server/test/PostHandler.test.ts b/packages/server/test/PostHandler.test.ts index d8bdda1e..dce15c47 100644 --- a/packages/server/test/PostHandler.test.ts +++ b/packages/server/test/PostHandler.test.ts @@ -8,8 +8,8 @@ import httpMocks from 'node-mocks-http' import sinon from 'sinon' import {EVENTS, Upload, DataStore, type CancellationContext} from '@tus/utils' -import {PostHandler} from '../dist/handlers/PostHandler.js' -import {addPipableStreamBody} from './utils.ts' +import {PostHandler} from '../src/handlers/PostHandler.js' +import {addPipableStreamBody} from './utils.js' import {MemoryLocker} from '@tus/server' const SERVER_OPTIONS = { diff --git a/packages/server/tsconfig.build.json b/packages/server/tsconfig.build.json deleted file mode 100644 index 06719e77..00000000 --- a/packages/server/tsconfig.build.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig.json", - "references": [{ "path": "../utils/tsconfig.build.json" }], - "extends": "../../tsconfig.base.json", - "include": ["src"], - "compilerOptions": { - "rootDir": "src", - "outDir": "dist" - } -} diff --git a/packages/server/tsconfig.json b/packages/server/tsconfig.json index b2fbd24f..165fd4ce 100644 --- a/packages/server/tsconfig.json +++ b/packages/server/tsconfig.json @@ -1,10 +1,8 @@ { "$schema": "https://json.schemastore.org/tsconfig.json", - "references": [{ "path": "./tsconfig.build.json" }], "extends": "../../tsconfig.base.json", - "exclude": ["src"], + "include": ["src", "test"], "compilerOptions": { - "noEmit": true, - "allowImportingTsExtensions": true + "outDir": "dist", } } diff --git a/packages/utils/package.json b/packages/utils/package.json index 530395ea..e8572c76 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -10,14 +10,14 @@ "repository": "tus/tus-node-server", "license": "MIT", "files": [ - "README.md", - "LICENSE", "dist", - "src" + "src", + "!test*" ], "scripts": { "build": "tsc --build", - "test": "mocha --timeout 40000 --exit --extension ts --require ts-node/esm" + "pretest": "tsc --build", + "test": "mocha './dist/test/*.js' --exit" }, "devDependencies": { "@types/debug": "^4.1.12", @@ -25,8 +25,7 @@ "@types/node": "^22.13.7", "ioredis": "^5.4.1", "mocha": "^11.0.1", - "should": "^13.2.3", - "ts-node": "^10.9.2" + "should": "^13.2.3" }, "engines": { "node": ">=20.19.0" diff --git a/packages/utils/test/Metadata.test.ts b/packages/utils/test/Metadata.test.ts index bed36106..09699168 100644 --- a/packages/utils/test/Metadata.test.ts +++ b/packages/utils/test/Metadata.test.ts @@ -1,5 +1,5 @@ import {strict as assert} from 'node:assert' -import {parse, stringify} from '../dist/models/Metadata.js' +import {parse, stringify} from '../src/models/Metadata.js' describe('Metadata', () => { it('parse valid metadata string', () => { diff --git a/packages/utils/test/StreamSplitter.test.ts b/packages/utils/test/StreamSplitter.test.ts index 15c0f561..cc403f6e 100644 --- a/packages/utils/test/StreamSplitter.test.ts +++ b/packages/utils/test/StreamSplitter.test.ts @@ -3,7 +3,7 @@ import fs from 'node:fs' import stream from 'node:stream/promises' import {strict as assert} from 'node:assert' -import {StreamSplitter} from '../dist/models/index.js' +import {StreamSplitter} from '../src/models/index.js' import {Readable} from 'node:stream' const fileSize = 20_971_520 diff --git a/packages/utils/test/Uid.test.ts b/packages/utils/test/Uid.test.ts index e4a80912..d5c220f9 100644 --- a/packages/utils/test/Uid.test.ts +++ b/packages/utils/test/Uid.test.ts @@ -1,6 +1,6 @@ import {strict as assert} from 'node:assert' -import {Uid} from '../dist/models/index.js' +import {Uid} from '../src/models/index.js' describe('Uid', () => { it('returns a 32 char string', (done) => { diff --git a/packages/utils/test/Upload.test.ts b/packages/utils/test/Upload.test.ts index 06ee0b68..12c76eec 100644 --- a/packages/utils/test/Upload.test.ts +++ b/packages/utils/test/Upload.test.ts @@ -1,8 +1,8 @@ import 'should' import {strict as assert} from 'node:assert' -import {Upload} from '../dist/models/Upload.js' -import {Uid} from '../dist/models/Uid.js' +import {Upload} from '../src/models/Upload.js' +import {Uid} from '../src/models/Uid.js' describe('Upload', () => { describe('constructor', () => { diff --git a/packages/utils/tsconfig.build.json b/packages/utils/tsconfig.build.json deleted file mode 100644 index 5eaf56de..00000000 --- a/packages/utils/tsconfig.build.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig.json", - "extends": "../../tsconfig.base.json", - "include": ["src"], - "compilerOptions": { - "rootDir": "src", - "outDir": "dist" - } -} diff --git a/packages/utils/tsconfig.json b/packages/utils/tsconfig.json index 867c29f9..165fd4ce 100644 --- a/packages/utils/tsconfig.json +++ b/packages/utils/tsconfig.json @@ -1,9 +1,8 @@ { "$schema": "https://json.schemastore.org/tsconfig.json", - "references": [{ "path": "./tsconfig.build.json" }], "extends": "../../tsconfig.base.json", - "exclude": ["src"], + "include": ["src", "test"], "compilerOptions": { - "noEmit": true + "outDir": "dist", } } diff --git a/test/package.json b/test/package.json index 22481d93..df71e2d0 100644 --- a/test/package.json +++ b/test/package.json @@ -5,7 +5,7 @@ "type":"module", "scripts": { "build": "tsc --build", - "test": "mocha dist/e2e.test.js dist/s3.e2e.js --timeout 40000 --exit --extension ts --require ts-node/esm" + "test": "mocha dist/e2e.test.js dist/s3.e2e.js --timeout 40000 --exit" }, "exports": { "./stores.test": "./dist/stores.test.js" @@ -28,7 +28,6 @@ "should": "^13.2.3", "sinon": "^18.0.0", "supertest": "^6.3.4", - "throttle": "^1.0.3", - "ts-node": "^10.9.2" + "throttle": "^1.0.3" } } diff --git a/test/tsconfig.json b/test/tsconfig.json index e27cf8a4..7bf14f2a 100644 --- a/test/tsconfig.json +++ b/test/tsconfig.json @@ -1,11 +1,11 @@ { "$schema": "https://json.schemastore.org/tsconfig.json", "references": [ - { "path": "../packages/azure-store/tsconfig.build.json" }, - { "path": "../packages/file-store/tsconfig.build.json" }, - { "path": "../packages/gcs-store/tsconfig.build.json" }, - { "path": "../packages/s3-store/tsconfig.build.json" }, - { "path": "../packages/server/tsconfig.build.json" } + { "path": "../packages/azure-store/tsconfig.json" }, + { "path": "../packages/file-store/tsconfig.json" }, + { "path": "../packages/gcs-store/tsconfig.json" }, + { "path": "../packages/s3-store/tsconfig.json" }, + { "path": "../packages/server/tsconfig.json" } ], "extends": "../tsconfig.base.json", "include": ["src"], From 934d4604c246602a45ffb6b9f394fa1d8f09bc5f Mon Sep 17 00:00:00 2001 From: Murderlon Date: Mon, 24 Mar 2025 12:22:23 +0100 Subject: [PATCH 15/18] Bring back references in tsconfig.json --- packages/azure-store/tsconfig.json | 1 + packages/file-store/tsconfig.json | 1 + packages/gcs-store/tsconfig.json | 1 + packages/s3-store/tsconfig.json | 1 + packages/server/tsconfig.json | 1 + 5 files changed, 5 insertions(+) diff --git a/packages/azure-store/tsconfig.json b/packages/azure-store/tsconfig.json index 165fd4ce..da3aa98d 100644 --- a/packages/azure-store/tsconfig.json +++ b/packages/azure-store/tsconfig.json @@ -1,6 +1,7 @@ { "$schema": "https://json.schemastore.org/tsconfig.json", "extends": "../../tsconfig.base.json", + "references": [{ "path": "../utils/tsconfig.json" }], "include": ["src", "test"], "compilerOptions": { "outDir": "dist", diff --git a/packages/file-store/tsconfig.json b/packages/file-store/tsconfig.json index 165fd4ce..da3aa98d 100644 --- a/packages/file-store/tsconfig.json +++ b/packages/file-store/tsconfig.json @@ -1,6 +1,7 @@ { "$schema": "https://json.schemastore.org/tsconfig.json", "extends": "../../tsconfig.base.json", + "references": [{ "path": "../utils/tsconfig.json" }], "include": ["src", "test"], "compilerOptions": { "outDir": "dist", diff --git a/packages/gcs-store/tsconfig.json b/packages/gcs-store/tsconfig.json index 165fd4ce..da3aa98d 100644 --- a/packages/gcs-store/tsconfig.json +++ b/packages/gcs-store/tsconfig.json @@ -1,6 +1,7 @@ { "$schema": "https://json.schemastore.org/tsconfig.json", "extends": "../../tsconfig.base.json", + "references": [{ "path": "../utils/tsconfig.json" }], "include": ["src", "test"], "compilerOptions": { "outDir": "dist", diff --git a/packages/s3-store/tsconfig.json b/packages/s3-store/tsconfig.json index 165fd4ce..da3aa98d 100644 --- a/packages/s3-store/tsconfig.json +++ b/packages/s3-store/tsconfig.json @@ -1,6 +1,7 @@ { "$schema": "https://json.schemastore.org/tsconfig.json", "extends": "../../tsconfig.base.json", + "references": [{ "path": "../utils/tsconfig.json" }], "include": ["src", "test"], "compilerOptions": { "outDir": "dist", diff --git a/packages/server/tsconfig.json b/packages/server/tsconfig.json index 165fd4ce..da3aa98d 100644 --- a/packages/server/tsconfig.json +++ b/packages/server/tsconfig.json @@ -1,6 +1,7 @@ { "$schema": "https://json.schemastore.org/tsconfig.json", "extends": "../../tsconfig.base.json", + "references": [{ "path": "../utils/tsconfig.json" }], "include": ["src", "test"], "compilerOptions": { "outDir": "dist", From b7e9ac539415a35d46de1a66957d34c6fdc37cb4 Mon Sep 17 00:00:00 2001 From: Murderlon Date: Mon, 24 Mar 2025 16:29:57 +0100 Subject: [PATCH 16/18] Move test folder inside src --- packages/azure-store/{ => src}/test/index.ts | 2 +- packages/azure-store/tsconfig.json | 3 ++- packages/file-store/{ => src}/test/index.ts | 2 +- packages/file-store/tsconfig.json | 3 ++- packages/gcs-store/{ => src}/test/index.ts | 2 +- packages/gcs-store/tsconfig.json | 3 ++- packages/s3-store/{ => src}/test/index.ts | 2 +- packages/s3-store/tsconfig.json | 3 ++- packages/server/{ => src}/test/BaseHandler.test.ts | 2 +- packages/server/{ => src}/test/DataStore.test.ts | 0 packages/server/{ => src}/test/DeleteHandler.test.ts | 2 +- packages/server/{ => src}/test/GetHandler.test.ts | 2 +- packages/server/{ => src}/test/HeadHandler.test.ts | 2 +- packages/server/{ => src}/test/HeaderValidator.test.ts | 2 +- packages/server/{ => src}/test/Locker.test.ts | 0 packages/server/{ => src}/test/OptionsHandler.test.ts | 2 +- packages/server/{ => src}/test/PatchHandler.test.ts | 2 +- packages/server/{ => src}/test/PostHandler.test.ts | 2 +- packages/server/{ => src}/test/Server.test.ts | 0 packages/server/{ => src}/test/utils.ts | 0 packages/server/tsconfig.json | 8 ++++++-- packages/utils/package.json | 3 ++- packages/utils/{ => src}/test/Metadata.test.ts | 2 +- packages/utils/{ => src}/test/StreamSplitter.test.ts | 2 +- packages/utils/{ => src}/test/Uid.test.ts | 2 +- packages/utils/{ => src}/test/Upload.test.ts | 4 ++-- .../stores.test.ts => packages/utils/src/test/stores.ts | 2 +- packages/utils/tsconfig.json | 3 ++- 28 files changed, 36 insertions(+), 26 deletions(-) rename packages/azure-store/{ => src}/test/index.ts (94%) rename packages/file-store/{ => src}/test/index.ts (98%) rename packages/gcs-store/{ => src}/test/index.ts (94%) rename packages/s3-store/{ => src}/test/index.ts (99%) rename packages/server/{ => src}/test/BaseHandler.test.ts (98%) rename packages/server/{ => src}/test/DataStore.test.ts (100%) rename packages/server/{ => src}/test/DeleteHandler.test.ts (97%) rename packages/server/{ => src}/test/GetHandler.test.ts (99%) rename packages/server/{ => src}/test/HeadHandler.test.ts (98%) rename packages/server/{ => src}/test/HeaderValidator.test.ts (98%) rename packages/server/{ => src}/test/Locker.test.ts (100%) rename packages/server/{ => src}/test/OptionsHandler.test.ts (96%) rename packages/server/{ => src}/test/PatchHandler.test.ts (99%) rename packages/server/{ => src}/test/PostHandler.test.ts (99%) rename packages/server/{ => src}/test/Server.test.ts (100%) rename packages/server/{ => src}/test/utils.ts (100%) rename packages/utils/{ => src}/test/Metadata.test.ts (98%) rename packages/utils/{ => src}/test/StreamSplitter.test.ts (96%) rename packages/utils/{ => src}/test/Uid.test.ts (92%) rename packages/utils/{ => src}/test/Upload.test.ts (89%) rename test/src/stores.test.ts => packages/utils/src/test/stores.ts (99%) diff --git a/packages/azure-store/test/index.ts b/packages/azure-store/src/test/index.ts similarity index 94% rename from packages/azure-store/test/index.ts rename to packages/azure-store/src/test/index.ts index 53fa8ad0..b2f19026 100644 --- a/packages/azure-store/test/index.ts +++ b/packages/azure-store/src/test/index.ts @@ -1,7 +1,7 @@ import 'should' import path from 'node:path' import {AzureStore} from '@tus/azure-store' -import * as shared from 'test/stores.test' +import * as shared from '../../../utils/dist/test/stores.js' const fixturesPath = path.resolve('../', '../', 'test', 'fixtures') const storePath = path.resolve('../', '../', 'test', 'output', 'azure-store') diff --git a/packages/azure-store/tsconfig.json b/packages/azure-store/tsconfig.json index da3aa98d..51a2b81f 100644 --- a/packages/azure-store/tsconfig.json +++ b/packages/azure-store/tsconfig.json @@ -2,8 +2,9 @@ "$schema": "https://json.schemastore.org/tsconfig.json", "extends": "../../tsconfig.base.json", "references": [{ "path": "../utils/tsconfig.json" }], - "include": ["src", "test"], + "include": ["src"], "compilerOptions": { + "rootDir": "src", "outDir": "dist", } } diff --git a/packages/file-store/test/index.ts b/packages/file-store/src/test/index.ts similarity index 98% rename from packages/file-store/test/index.ts rename to packages/file-store/src/test/index.ts index 2671b760..0c490581 100644 --- a/packages/file-store/test/index.ts +++ b/packages/file-store/src/test/index.ts @@ -10,7 +10,7 @@ import sinon from 'sinon' import {FileStore, FileConfigstore} from '@tus/file-store' import {Upload} from '@tus/utils' -import * as shared from 'test/stores.test' +import * as shared from '../../../utils/dist/test/stores.js' const fixturesPath = path.resolve('../', '../', 'test', 'fixtures') const storePath = path.resolve('../', '../', 'test', 'output', 'file-store') diff --git a/packages/file-store/tsconfig.json b/packages/file-store/tsconfig.json index da3aa98d..51a2b81f 100644 --- a/packages/file-store/tsconfig.json +++ b/packages/file-store/tsconfig.json @@ -2,8 +2,9 @@ "$schema": "https://json.schemastore.org/tsconfig.json", "extends": "../../tsconfig.base.json", "references": [{ "path": "../utils/tsconfig.json" }], - "include": ["src", "test"], + "include": ["src"], "compilerOptions": { + "rootDir": "src", "outDir": "dist", } } diff --git a/packages/gcs-store/test/index.ts b/packages/gcs-store/src/test/index.ts similarity index 94% rename from packages/gcs-store/test/index.ts rename to packages/gcs-store/src/test/index.ts index d7c79419..95603bdf 100644 --- a/packages/gcs-store/test/index.ts +++ b/packages/gcs-store/src/test/index.ts @@ -2,7 +2,7 @@ import path from 'node:path' import {GCSStore} from '@tus/gcs-store' -import * as shared from 'test/stores.test' +import * as shared from '../../../utils/dist/test/stores.js' import {Storage} from '@google-cloud/storage' diff --git a/packages/gcs-store/tsconfig.json b/packages/gcs-store/tsconfig.json index da3aa98d..51a2b81f 100644 --- a/packages/gcs-store/tsconfig.json +++ b/packages/gcs-store/tsconfig.json @@ -2,8 +2,9 @@ "$schema": "https://json.schemastore.org/tsconfig.json", "extends": "../../tsconfig.base.json", "references": [{ "path": "../utils/tsconfig.json" }], - "include": ["src", "test"], + "include": ["src"], "compilerOptions": { + "rootDir": "src", "outDir": "dist", } } diff --git a/packages/s3-store/test/index.ts b/packages/s3-store/src/test/index.ts similarity index 99% rename from packages/s3-store/test/index.ts rename to packages/s3-store/src/test/index.ts index 14c36380..ab1342db 100644 --- a/packages/s3-store/test/index.ts +++ b/packages/s3-store/src/test/index.ts @@ -5,7 +5,7 @@ import {Readable} from 'node:stream' import sinon from 'sinon' import {S3Store} from '@tus/s3-store' -import * as shared from 'test/stores.test' +import * as shared from '../../../utils/dist/test/stores.js' import {Upload} from '@tus/utils' const fixturesPath = path.resolve('../', '../', 'test', 'fixtures') diff --git a/packages/s3-store/tsconfig.json b/packages/s3-store/tsconfig.json index da3aa98d..51a2b81f 100644 --- a/packages/s3-store/tsconfig.json +++ b/packages/s3-store/tsconfig.json @@ -2,8 +2,9 @@ "$schema": "https://json.schemastore.org/tsconfig.json", "extends": "../../tsconfig.base.json", "references": [{ "path": "../utils/tsconfig.json" }], - "include": ["src", "test"], + "include": ["src"], "compilerOptions": { + "rootDir": "src", "outDir": "dist", } } diff --git a/packages/server/test/BaseHandler.test.ts b/packages/server/src/test/BaseHandler.test.ts similarity index 98% rename from packages/server/test/BaseHandler.test.ts rename to packages/server/src/test/BaseHandler.test.ts index 729353df..f9c3e922 100644 --- a/packages/server/test/BaseHandler.test.ts +++ b/packages/server/src/test/BaseHandler.test.ts @@ -3,7 +3,7 @@ import type http from 'node:http' import httpMocks from 'node-mocks-http' -import {BaseHandler} from '../src/handlers/BaseHandler.js' +import {BaseHandler} from '../handlers/BaseHandler.js' import {DataStore} from '@tus/utils' import {MemoryLocker} from '@tus/server' diff --git a/packages/server/test/DataStore.test.ts b/packages/server/src/test/DataStore.test.ts similarity index 100% rename from packages/server/test/DataStore.test.ts rename to packages/server/src/test/DataStore.test.ts diff --git a/packages/server/test/DeleteHandler.test.ts b/packages/server/src/test/DeleteHandler.test.ts similarity index 97% rename from packages/server/test/DeleteHandler.test.ts rename to packages/server/src/test/DeleteHandler.test.ts index 202a5ac3..183a3409 100644 --- a/packages/server/test/DeleteHandler.test.ts +++ b/packages/server/src/test/DeleteHandler.test.ts @@ -7,7 +7,7 @@ import sinon from 'sinon' import httpMocks from 'node-mocks-http' import {ERRORS, EVENTS, DataStore, type CancellationContext} from '@tus/utils' -import {DeleteHandler} from '../src/handlers/DeleteHandler.js' +import {DeleteHandler} from '../handlers/DeleteHandler.js' import {MemoryLocker} from '@tus/server' describe('DeleteHandler', () => { diff --git a/packages/server/test/GetHandler.test.ts b/packages/server/src/test/GetHandler.test.ts similarity index 99% rename from packages/server/test/GetHandler.test.ts rename to packages/server/src/test/GetHandler.test.ts index d54df2e6..50bdf006 100644 --- a/packages/server/test/GetHandler.test.ts +++ b/packages/server/src/test/GetHandler.test.ts @@ -8,7 +8,7 @@ import type http from 'node:http' import sinon from 'sinon' import httpMocks from 'node-mocks-http' -import {GetHandler} from '../src/handlers/GetHandler.js' +import {GetHandler} from '../handlers/GetHandler.js' import {DataStore, Upload} from '@tus/utils' import {FileStore} from '@tus/file-store' import {MemoryLocker} from '@tus/server' diff --git a/packages/server/test/HeadHandler.test.ts b/packages/server/src/test/HeadHandler.test.ts similarity index 98% rename from packages/server/test/HeadHandler.test.ts rename to packages/server/src/test/HeadHandler.test.ts index b421ab48..1e359dc9 100644 --- a/packages/server/test/HeadHandler.test.ts +++ b/packages/server/src/test/HeadHandler.test.ts @@ -5,7 +5,7 @@ import sinon from 'sinon' import httpMocks from 'node-mocks-http' import {ERRORS, DataStore, Upload, type CancellationContext} from '@tus/utils' -import {HeadHandler} from '../src/handlers/HeadHandler.js' +import {HeadHandler} from '../handlers/HeadHandler.js' import {MemoryLocker} from '@tus/server' describe('HeadHandler', () => { diff --git a/packages/server/test/HeaderValidator.test.ts b/packages/server/src/test/HeaderValidator.test.ts similarity index 98% rename from packages/server/test/HeaderValidator.test.ts rename to packages/server/src/test/HeaderValidator.test.ts index 7af45f1b..b20ed878 100644 --- a/packages/server/test/HeaderValidator.test.ts +++ b/packages/server/src/test/HeaderValidator.test.ts @@ -1,6 +1,6 @@ import {strict as assert} from 'node:assert' -import {validateHeader} from '../src/validators/HeaderValidator.js' +import {validateHeader} from '../validators/HeaderValidator.js' import {TUS_RESUMABLE} from '@tus/utils' describe('HeaderValidator', () => { diff --git a/packages/server/test/Locker.test.ts b/packages/server/src/test/Locker.test.ts similarity index 100% rename from packages/server/test/Locker.test.ts rename to packages/server/src/test/Locker.test.ts diff --git a/packages/server/test/OptionsHandler.test.ts b/packages/server/src/test/OptionsHandler.test.ts similarity index 96% rename from packages/server/test/OptionsHandler.test.ts rename to packages/server/src/test/OptionsHandler.test.ts index ba7fa9ca..763ec7a3 100644 --- a/packages/server/test/OptionsHandler.test.ts +++ b/packages/server/src/test/OptionsHandler.test.ts @@ -5,7 +5,7 @@ import type http from 'node:http' import httpMocks from 'node-mocks-http' -import {OptionsHandler} from '../src/handlers/OptionsHandler.js' +import {OptionsHandler} from '../handlers/OptionsHandler.js' import {DataStore, ALLOWED_METHODS, ALLOWED_HEADERS, MAX_AGE} from '@tus/utils' import {MemoryLocker, type ServerOptions} from '@tus/server' diff --git a/packages/server/test/PatchHandler.test.ts b/packages/server/src/test/PatchHandler.test.ts similarity index 99% rename from packages/server/test/PatchHandler.test.ts rename to packages/server/src/test/PatchHandler.test.ts index c1967d43..60e4f99d 100644 --- a/packages/server/test/PatchHandler.test.ts +++ b/packages/server/src/test/PatchHandler.test.ts @@ -8,7 +8,7 @@ import stream, {PassThrough} from 'node:stream' import sinon from 'sinon' import httpMocks from 'node-mocks-http' -import {PatchHandler} from '../src/handlers/PatchHandler.js' +import {PatchHandler} from '../handlers/PatchHandler.js' import {EVENTS, Upload, DataStore, type CancellationContext} from '@tus/utils' import {EventEmitter} from 'node:events' import {addPipableStreamBody} from './utils.js' diff --git a/packages/server/test/PostHandler.test.ts b/packages/server/src/test/PostHandler.test.ts similarity index 99% rename from packages/server/test/PostHandler.test.ts rename to packages/server/src/test/PostHandler.test.ts index dce15c47..02122a70 100644 --- a/packages/server/test/PostHandler.test.ts +++ b/packages/server/src/test/PostHandler.test.ts @@ -8,7 +8,7 @@ import httpMocks from 'node-mocks-http' import sinon from 'sinon' import {EVENTS, Upload, DataStore, type CancellationContext} from '@tus/utils' -import {PostHandler} from '../src/handlers/PostHandler.js' +import {PostHandler} from '../handlers/PostHandler.js' import {addPipableStreamBody} from './utils.js' import {MemoryLocker} from '@tus/server' diff --git a/packages/server/test/Server.test.ts b/packages/server/src/test/Server.test.ts similarity index 100% rename from packages/server/test/Server.test.ts rename to packages/server/src/test/Server.test.ts diff --git a/packages/server/test/utils.ts b/packages/server/src/test/utils.ts similarity index 100% rename from packages/server/test/utils.ts rename to packages/server/src/test/utils.ts diff --git a/packages/server/tsconfig.json b/packages/server/tsconfig.json index da3aa98d..f0fa0802 100644 --- a/packages/server/tsconfig.json +++ b/packages/server/tsconfig.json @@ -1,9 +1,13 @@ { "$schema": "https://json.schemastore.org/tsconfig.json", "extends": "../../tsconfig.base.json", - "references": [{ "path": "../utils/tsconfig.json" }], - "include": ["src", "test"], + "references": [ + { "path": "../utils/tsconfig.json" }, + { "path": "../file-store/tsconfig.json" } + ], + "include": ["src"], "compilerOptions": { + "rootDir": "src", "outDir": "dist", } } diff --git a/packages/utils/package.json b/packages/utils/package.json index e8572c76..2d3edae7 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -3,7 +3,8 @@ "name": "@tus/utils", "version": "0.5.1", "description": "Internal utils for tus Node.js server and stores", - "main": "dist/index.js", + "main": "./dist/index.js", + "exports": "./dist/index.js", "type": "module", "homepage": "https://github.com/tus/tus-node-server#readme", "bugs": "https://github.com/tus/tus-node-server/issues", diff --git a/packages/utils/test/Metadata.test.ts b/packages/utils/src/test/Metadata.test.ts similarity index 98% rename from packages/utils/test/Metadata.test.ts rename to packages/utils/src/test/Metadata.test.ts index 09699168..5cd63f71 100644 --- a/packages/utils/test/Metadata.test.ts +++ b/packages/utils/src/test/Metadata.test.ts @@ -1,5 +1,5 @@ import {strict as assert} from 'node:assert' -import {parse, stringify} from '../src/models/Metadata.js' +import {parse, stringify} from '../models/Metadata.js' describe('Metadata', () => { it('parse valid metadata string', () => { diff --git a/packages/utils/test/StreamSplitter.test.ts b/packages/utils/src/test/StreamSplitter.test.ts similarity index 96% rename from packages/utils/test/StreamSplitter.test.ts rename to packages/utils/src/test/StreamSplitter.test.ts index cc403f6e..2c7108ff 100644 --- a/packages/utils/test/StreamSplitter.test.ts +++ b/packages/utils/src/test/StreamSplitter.test.ts @@ -3,7 +3,7 @@ import fs from 'node:fs' import stream from 'node:stream/promises' import {strict as assert} from 'node:assert' -import {StreamSplitter} from '../src/models/index.js' +import {StreamSplitter} from '../models/index.js' import {Readable} from 'node:stream' const fileSize = 20_971_520 diff --git a/packages/utils/test/Uid.test.ts b/packages/utils/src/test/Uid.test.ts similarity index 92% rename from packages/utils/test/Uid.test.ts rename to packages/utils/src/test/Uid.test.ts index d5c220f9..3ea47c7b 100644 --- a/packages/utils/test/Uid.test.ts +++ b/packages/utils/src/test/Uid.test.ts @@ -1,6 +1,6 @@ import {strict as assert} from 'node:assert' -import {Uid} from '../src/models/index.js' +import {Uid} from '../models/index.js' describe('Uid', () => { it('returns a 32 char string', (done) => { diff --git a/packages/utils/test/Upload.test.ts b/packages/utils/src/test/Upload.test.ts similarity index 89% rename from packages/utils/test/Upload.test.ts rename to packages/utils/src/test/Upload.test.ts index 12c76eec..4174d7a9 100644 --- a/packages/utils/test/Upload.test.ts +++ b/packages/utils/src/test/Upload.test.ts @@ -1,8 +1,8 @@ import 'should' import {strict as assert} from 'node:assert' -import {Upload} from '../src/models/Upload.js' -import {Uid} from '../src/models/Uid.js' +import {Upload} from '../models/Upload.js' +import {Uid} from '../models/Uid.js' describe('Upload', () => { describe('constructor', () => { diff --git a/test/src/stores.test.ts b/packages/utils/src/test/stores.ts similarity index 99% rename from test/src/stores.test.ts rename to packages/utils/src/test/stores.ts index 264e55a8..cb4d773e 100644 --- a/test/src/stores.test.ts +++ b/packages/utils/src/test/stores.ts @@ -4,7 +4,7 @@ import fs from 'node:fs' import stream from 'node:stream' import {setTimeout as promSetTimeout} from 'node:timers/promises' -import {Upload, Uid} from '@tus/server' +import {Upload, Uid} from '@tus/utils' export function testId(id: string) { return `${id}-${Uid.rand()}` diff --git a/packages/utils/tsconfig.json b/packages/utils/tsconfig.json index 165fd4ce..346c1ed4 100644 --- a/packages/utils/tsconfig.json +++ b/packages/utils/tsconfig.json @@ -1,8 +1,9 @@ { "$schema": "https://json.schemastore.org/tsconfig.json", "extends": "../../tsconfig.base.json", - "include": ["src", "test"], + "include": ["src"], "compilerOptions": { + "rootDir": "src", "outDir": "dist", } } From 62fe21d36674c798669e814cd73cd3d32a7bdb53 Mon Sep 17 00:00:00 2001 From: Murderlon Date: Mon, 24 Mar 2025 18:37:28 +0100 Subject: [PATCH 17/18] Increase test timeout for @tus/server --- packages/server/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/server/package.json b/packages/server/package.json index 219a7784..253a7e8d 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -18,7 +18,7 @@ "scripts": { "build": "tsc --build", "pretest": "tsc --build", - "test": "mocha './dist/test/*.js' --exit" + "test": "mocha './dist/test/*.js' --exit --timeout 30000" }, "dependencies": { "@tus/utils": "^0.5.1", From 8c11b8d19ac800c07d1a7695be41e6f0024ddbc3 Mon Sep 17 00:00:00 2001 From: Murderlon Date: Tue, 25 Mar 2025 10:00:58 +0100 Subject: [PATCH 18/18] fix merge --- package-lock.json | 8 -------- 1 file changed, 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 22657d23..119ff1cb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4606,13 +4606,6 @@ "node": ">=10" } }, -<<<<<<< HEAD -======= - "node_modules/make-error": { - "version": "1.3.6", - "dev": true, - "license": "ISC" - }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -4623,7 +4616,6 @@ "node": ">= 0.4" } }, ->>>>>>> main "node_modules/media-typer": { "version": "0.3.0", "dev": true,