From 5bedb25f9dd29d684add0e1f4b827db0c8e0e818 Mon Sep 17 00:00:00 2001 From: fengmk2 Date: Fri, 3 Nov 2023 18:22:57 +0800 Subject: [PATCH] feat: allow OPTIONS request on tgz downlaod url (#605) make webcontainer can run npm install on cnpmcore registry --- .../controller/package/DownloadPackageVersionTar.ts | 10 ++++++++++ package.json | 2 +- .../DownloadPackageVersionTarController.test.ts | 13 +++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/app/port/controller/package/DownloadPackageVersionTar.ts b/app/port/controller/package/DownloadPackageVersionTar.ts index d53812da..6295227f 100644 --- a/app/port/controller/package/DownloadPackageVersionTar.ts +++ b/app/port/controller/package/DownloadPackageVersionTar.ts @@ -23,6 +23,16 @@ export class DownloadPackageVersionTarController extends AbstractController { @Inject() private nfsAdapter: NFSAdapter; + // Support OPTIONS Request on tgz download + @HTTPMethod({ + // GET /:fullname/-/:filenameWithVersion.tgz + path: `/:fullname(${FULLNAME_REG_STRING})/-/:filenameWithVersion.tgz`, + method: HTTPMethodEnum.OPTIONS, + }) + async downloadForOptions(@Context() ctx: EggContext) { + ctx.status = 204; + } + @HTTPMethod({ // GET /:fullname/-/:filenameWithVersion.tgz path: `/:fullname(${FULLNAME_REG_STRING})/-/:filenameWithVersion.tgz`, diff --git a/package.json b/package.json index 60a67e7a..5486d15d 100644 --- a/package.json +++ b/package.json @@ -97,7 +97,7 @@ "eggjs-elasticsearch": "^0.0.6", "fs-cnpm": "^2.4.0", "ioredis": "^5.3.1", - "leoric": "^2.6.2", + "leoric": "^2.11.5", "lodash": "^4.17.21", "mime-types": "^2.1.35", "mysql": "^2.18.1", diff --git a/test/port/controller/package/DownloadPackageVersionTarController.test.ts b/test/port/controller/package/DownloadPackageVersionTarController.test.ts index 21dd720c..2715f114 100644 --- a/test/port/controller/package/DownloadPackageVersionTarController.test.ts +++ b/test/port/controller/package/DownloadPackageVersionTarController.test.ts @@ -53,6 +53,19 @@ describe('test/port/controller/package/DownloadPackageVersionTarController.test. assert(res.headers.location === `https://cdn.mock.com/packages/${scopedName}/1.0.0/${name}-1.0.0.tgz`); }); + it('should support cors OPTIONS Request', async () => { + mock(nfsClientAdapter, 'url', async (storeKey: string) => { + return `https://cdn.mock.com${storeKey}`; + }); + + let res = await app.httpRequest() + .options(`/${name}/-/testmodule-download-version-tar-1.0.0.tgz`); + assert.equal(res.status, 204); + res = await app.httpRequest() + .options(`/${scopedName}/-/testmodule-download-version-tar-1.0.0.tgz`); + assert.equal(res.status, 204); + }); + if (process.env.CNPMCORE_NFS_TYPE !== 'oss') { it('should download a version tar redirect to mock cdn success with url function is not async function', async () => { mock(nfsClientAdapter, 'url', (storeKey: string) => {