mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Upgrade to latest node-fetch (#6046)
* Upgrade to latest node-fetch - Introduce injection tokens for retriving the implementation of node-fetch via await import() calls - Add webpack file for compiling node-fetch to electron-renderer single file format Signed-off-by: Sebastian Malton <sebastian@malton.name> * Update lock file Signed-off-by: Sebastian Malton <sebastian@malton.name> * Add type packages which were removed for some reason Signed-off-by: Sebastian Malton <sebastian@malton.name> * Add more dev @types deps that weren't added last time Signed-off-by: Sebastian Malton <sebastian@malton.name> * Simpify by using webpack to create a commonjs package Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix build for integration tests Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix unit tests on CI not having all deps Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix tests Signed-off-by: Sebastian Malton <sebastian@malton.name> * Revert accidental timeout change Signed-off-by: Sebastian Malton <sebastian@malton.name> * Replace manually specifying nodeJS externals with preset Signed-off-by: Sebastian Malton <sebastian@malton.name> Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
1 parent
6d9a76835c
commit
86ac417cab
20 files changed
+371
-237
No files matched your search
@@ -4,7 +4,7 @@
|
||||
*/
|
||||
|
||||
import type { LensApiRequest, Route } from "../router/route";
|
||||
import staticFileRouteInjectable from "../routes/static-file-route.injectable";
|
||||
import staticFileRouteInjectable from "../routes/files/static-file-route.injectable";
|
||||
import { getDiForUnitTesting } from "../getDiForUnitTesting";
|
||||
|
||||
jest.mock("electron", () => ({
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
/**
|
||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
import { getInjectable } from "@ogre-tools/injectable";
|
||||
import httpProxy from "http-proxy";
|
||||
import { webpackDevServerPort } from "../../../../webpack/vars";
|
||||
import { publicPath } from "../../../common/vars";
|
||||
import appNameInjectable from "../../../common/vars/app-name.injectable";
|
||||
import type { LensApiRequest, RouteResponse } from "../../router/route";
|
||||
|
||||
const devStaticFileRouteHandlerInjectable = getInjectable({
|
||||
id: "dev-static-file-route-handler",
|
||||
instantiate: (di) => {
|
||||
const proxy = httpProxy.createProxy();
|
||||
const appName = di.inject(appNameInjectable);
|
||||
const proxyTarget = `http://127.0.0.1:${webpackDevServerPort}`;
|
||||
|
||||
return async ({ raw: { req, res }}: LensApiRequest<"/{path*}">): Promise<RouteResponse<Buffer>> => {
|
||||
if (req.url === "/" || !req.url) {
|
||||
req.url = `${publicPath}/${appName}.html`;
|
||||
} else if (!req.url.startsWith("/build/")) {
|
||||
return { statusCode: 404 };
|
||||
}
|
||||
|
||||
proxy.web(req, res, { target: proxyTarget });
|
||||
|
||||
return { proxy };
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
export default devStaticFileRouteHandlerInjectable;
|
||||
@@ -0,0 +1,61 @@
|
||||
/**
|
||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
import { getInjectable } from "@ogre-tools/injectable";
|
||||
import readFileBufferInjectable from "../../../common/fs/read-file-buffer.injectable";
|
||||
import joinPathsInjectable from "../../../common/path/join-paths.injectable";
|
||||
import staticFilesDirectoryInjectable from "../../../common/vars/static-files-directory.injectable";
|
||||
import appNameInjectable from "../../../common/vars/app-name.injectable";
|
||||
import type { LensApiRequest } from "../../router/route";
|
||||
import path from "path";
|
||||
import type { SupportedFileExtension } from "../../router/router-content-types";
|
||||
import { contentTypes } from "../../router/router-content-types";
|
||||
import loggerInjectable from "../../../common/logger.injectable";
|
||||
import { publicPath } from "../../../common/vars";
|
||||
|
||||
const prodStaticFileRouteHandlerInjectable = getInjectable({
|
||||
id: "prod-static-file-route-handler",
|
||||
instantiate: (di) => {
|
||||
const readFileBuffer = di.inject(readFileBufferInjectable);
|
||||
const joinPaths = di.inject(joinPathsInjectable);
|
||||
const staticFilesDirectory = di.inject(staticFilesDirectoryInjectable);
|
||||
const appName = di.inject(appNameInjectable);
|
||||
const logger = di.inject(loggerInjectable);
|
||||
|
||||
return async ({ params }: LensApiRequest<"/{path*}">) => {
|
||||
let filePath = params.path;
|
||||
|
||||
|
||||
for (let retryCount = 0; retryCount < 5; retryCount += 1) {
|
||||
const assetFilePath = joinPaths(staticFilesDirectory, filePath);
|
||||
|
||||
if (!assetFilePath.startsWith(staticFilesDirectory)) {
|
||||
return { statusCode: 404 };
|
||||
}
|
||||
|
||||
try {
|
||||
const fileExtension = path
|
||||
.extname(assetFilePath)
|
||||
.slice(1) as SupportedFileExtension;
|
||||
|
||||
const contentType = contentTypes[fileExtension] || contentTypes.txt;
|
||||
|
||||
return { response: await readFileBuffer(assetFilePath), contentType };
|
||||
} catch (err) {
|
||||
if (retryCount > 5) {
|
||||
logger.error("handleStaticFile:", String(err));
|
||||
|
||||
return { statusCode: 404 };
|
||||
}
|
||||
|
||||
filePath = `${publicPath}/${appName}.html`;
|
||||
}
|
||||
}
|
||||
|
||||
return { statusCode: 404 };
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
export default prodStaticFileRouteHandlerInjectable;
|
||||
@@ -0,0 +1,28 @@
|
||||
/**
|
||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
import { getRouteInjectable } from "../../router/router.injectable";
|
||||
import isDevelopmentInjectable from "../../../common/vars/is-development.injectable";
|
||||
import { route } from "../../router/route";
|
||||
import prodStaticFileRouteHandlerInjectable from "./production.injectable";
|
||||
import devStaticFileRouteHandlerInjectable from "./development.injectable";
|
||||
|
||||
const staticFileRouteInjectable = getRouteInjectable({
|
||||
id: "static-file-route",
|
||||
|
||||
instantiate: (di) => {
|
||||
const isDevelopment = di.inject(isDevelopmentInjectable);
|
||||
|
||||
return route({
|
||||
method: "get",
|
||||
path: `/{path*}`,
|
||||
})(
|
||||
isDevelopment
|
||||
? di.inject(devStaticFileRouteHandlerInjectable)
|
||||
: di.inject(prodStaticFileRouteHandlerInjectable),
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
export default staticFileRouteInjectable;
|
||||
@@ -1,126 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
import type { SupportedFileExtension } from "../router/router-content-types";
|
||||
import { contentTypes } from "../router/router-content-types";
|
||||
import logger from "../logger";
|
||||
import { getRouteInjectable } from "../router/router.injectable";
|
||||
import { publicPath } from "../../common/vars";
|
||||
import path from "path";
|
||||
import isDevelopmentInjectable from "../../common/vars/is-development.injectable";
|
||||
import httpProxy from "http-proxy";
|
||||
import readFileBufferInjectable from "../../common/fs/read-file-buffer.injectable";
|
||||
import type { JoinPaths } from "../../common/path/join-paths.injectable";
|
||||
import joinPathsInjectable from "../../common/path/join-paths.injectable";
|
||||
import { webpackDevServerPort } from "../../../webpack/vars";
|
||||
import type { LensApiRequest, RouteResponse } from "../router/route";
|
||||
import { route } from "../router/route";
|
||||
import staticFilesDirectoryInjectable from "../../common/vars/static-files-directory.injectable";
|
||||
import appNameInjectable from "../../common/vars/app-name.injectable";
|
||||
import type { GetAbsolutePath } from "../../common/path/get-absolute-path.injectable";
|
||||
import getAbsolutePathInjectable from "../../common/path/get-absolute-path.injectable";
|
||||
|
||||
interface ProductionDependencies {
|
||||
readFileBuffer: (path: string) => Promise<Buffer>;
|
||||
joinPaths: JoinPaths;
|
||||
getAbsolutePath: GetAbsolutePath;
|
||||
staticFilesDirectory: string;
|
||||
appName: string;
|
||||
}
|
||||
|
||||
const handleStaticFileInProduction = ({
|
||||
readFileBuffer,
|
||||
getAbsolutePath,
|
||||
joinPaths,
|
||||
staticFilesDirectory,
|
||||
appName,
|
||||
}: ProductionDependencies) => (
|
||||
async ({ params }: LensApiRequest<"/{path*}">): Promise<RouteResponse<Buffer>> => {
|
||||
let filePath = params.path;
|
||||
|
||||
for (let retryCount = 0; retryCount < 5; retryCount += 1) {
|
||||
const asset = joinPaths(staticFilesDirectory, filePath);
|
||||
const normalizedFilePath = getAbsolutePath(asset);
|
||||
|
||||
if (!normalizedFilePath.startsWith(staticFilesDirectory)) {
|
||||
return { statusCode: 404 };
|
||||
}
|
||||
|
||||
try {
|
||||
const fileExtension = path
|
||||
.extname(asset)
|
||||
.slice(1) as SupportedFileExtension;
|
||||
|
||||
const contentType = contentTypes[fileExtension] || contentTypes.txt;
|
||||
|
||||
return { response: await readFileBuffer(asset), contentType };
|
||||
} catch (err) {
|
||||
if (retryCount > 5) {
|
||||
logger.error("handleStaticFile:", String(err));
|
||||
|
||||
return { statusCode: 404 };
|
||||
}
|
||||
|
||||
filePath = `${publicPath}/${appName}.html`;
|
||||
}
|
||||
}
|
||||
|
||||
return { statusCode: 404 };
|
||||
}
|
||||
);
|
||||
|
||||
interface DevelopmentDependencies {
|
||||
proxy: httpProxy;
|
||||
appName: string;
|
||||
}
|
||||
|
||||
const handleStaticFileInDevelopment = ({
|
||||
proxy,
|
||||
appName,
|
||||
}: DevelopmentDependencies) => (
|
||||
({ raw: { req, res }}: LensApiRequest<"/{path*}">): RouteResponse<Buffer> => {
|
||||
if (req.url === "/" || !req.url?.startsWith("/build/")) {
|
||||
req.url = `${publicPath}/${appName}.html`;
|
||||
}
|
||||
|
||||
proxy.web(req, res, {
|
||||
target: `http://127.0.0.1:${webpackDevServerPort}`,
|
||||
});
|
||||
|
||||
return { proxy };
|
||||
}
|
||||
);
|
||||
|
||||
const staticFileRouteInjectable = getRouteInjectable({
|
||||
id: "static-file-route",
|
||||
|
||||
instantiate: (di) => {
|
||||
const isDevelopment = di.inject(isDevelopmentInjectable);
|
||||
const readFileBuffer = di.inject(readFileBufferInjectable);
|
||||
const joinPaths = di.inject(joinPathsInjectable);
|
||||
const getAbsolutePath = di.inject(getAbsolutePathInjectable);
|
||||
const staticFilesDirectory = di.inject(staticFilesDirectoryInjectable);
|
||||
const appName = di.inject(appNameInjectable);
|
||||
|
||||
return route({
|
||||
method: "get",
|
||||
path: `/{path*}`,
|
||||
})(
|
||||
isDevelopment
|
||||
? handleStaticFileInDevelopment({
|
||||
proxy: httpProxy.createProxy(),
|
||||
appName,
|
||||
})
|
||||
: handleStaticFileInProduction({
|
||||
readFileBuffer,
|
||||
joinPaths,
|
||||
staticFilesDirectory,
|
||||
appName,
|
||||
getAbsolutePath,
|
||||
}),
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
export default staticFileRouteInjectable;
|
||||
Reference in new issue
Block a user