1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Simpify by using webpack to create a commonjs package

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2022-11-09 11:23:47 -05:00
parent 1d763c1972
commit 9718837784
10 changed files with 18 additions and 139 deletions

View File

@ -127,10 +127,6 @@
"to": "./templates/",
"filter": "**/*.yaml"
},
{
"from": "build/webpack",
"to": "static/bundles"
},
"LICENSE"
],
"linux": {

View File

@ -0,0 +1,9 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getGlobalOverrideForFunction } from "../test-utils/get-global-override-for-function";
import fetchInjectable from "./fetch.injectable";
export default getGlobalOverrideForFunction(fetchInjectable);

View File

@ -2,32 +2,20 @@
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectionToken, getInjectable } from "@ogre-tools/injectable";
import { getInjectable } from "@ogre-tools/injectable";
import type * as FetchModule from "node-fetch";
const { NodeFetch: { default: fetch }} = require("../../../build/webpack/node-fetch.bundle") as { NodeFetch: typeof FetchModule };
type Response = FetchModule.Response;
type RequestInit = FetchModule.RequestInit;
export type Fetch = (url: string, init?: RequestInit) => Promise<Response>;
export const fetchImplInjectionToken = getInjectionToken<Promise<typeof FetchModule>>({
id: "fetch-impl-token",
});
const fetchInjectable = getInjectable({
id: "fetch",
instantiate: (di): Fetch => {
let fetchP: Promise<typeof FetchModule> | undefined;
return async (url, init) => {
/**
* This is done so that there are no timing issues with the first use of `fetchInjectable`.
*/
const fetch = (await (fetchP ??= di.inject(fetchImplInjectionToken))).default;
return fetch(url, init);
};
},
instantiate: () => fetch,
causesSideEffects: true,
});
export default fetchInjectable;

View File

@ -1,19 +0,0 @@
/**
* 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 joinPathsInjectable from "../path/join-paths.injectable";
import lensResourcesDirInjectable from "./lens-resources-dir.injectable";
const developmentBundledLibrariesDirectoryInjectable = getInjectable({
id: "development-bundled-libraries-directory",
instantiate: (di) => {
const lensResourcesDir = di.inject(lensResourcesDirInjectable);
const joinPaths = di.inject(joinPathsInjectable);
return joinPaths(lensResourcesDir, "build", "webpack");
},
});
export default developmentBundledLibrariesDirectoryInjectable;

View File

@ -1,13 +0,0 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getGlobalOverride } from "../../common/test-utils/get-global-override";
import fetchImplInjectable from "./fetch-impl.injectable";
export default getGlobalOverride(fetchImplInjectable, async () => ({
default: async () => {
throw new Error("tried to fetch resource without override");
},
} as any));

View File

@ -1,18 +0,0 @@
/**
* 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 { fetchImplInjectionToken } from "../../common/fetch/fetch.injectable";
import type * as FetchModule from "node-fetch";
const importFetchModule = new Function("return import('node-fetch')") as () => Promise<typeof FetchModule>;
const fetchImplInjectable = getInjectable({
id: "fetch-impl",
instantiate: () => importFetchModule(),
injectionToken: fetchImplInjectionToken,
causesSideEffects: true,
});
export default fetchImplInjectable;

View File

@ -4,51 +4,21 @@
*/
import { getInjectable } from "@ogre-tools/injectable";
import httpProxy from "http-proxy";
import path from "path";
import { webpackDevServerPort } from "../../../../webpack/vars";
import readFileBufferInjectable from "../../../common/fs/read-file-buffer.injectable";
import joinPathsInjectable from "../../../common/path/join-paths.injectable";
import { publicPath } from "../../../common/vars";
import developmentBundledLibrariesDirectoryInjectable from "../../../common/vars/development-bundled-libraries-dir.injectable";
import appNameInjectable from "../../../common/vars/app-name.injectable";
import type { LensApiRequest, RouteResponse } from "../../router/route";
import type { SupportedFileExtension } from "../../router/router-content-types";
import { contentTypes } from "../../router/router-content-types";
const devStaticFileRouteHandlerInjectable = getInjectable({
id: "dev-static-file-route-handler",
instantiate: (di) => {
const proxy = httpProxy.createProxy();
const appName = di.inject(appNameInjectable);
const readFileBuffer = di.inject(readFileBufferInjectable);
const proxyTarget = `http://127.0.0.1:${webpackDevServerPort}`;
const bundledLibrariesDirectory = di.inject(developmentBundledLibrariesDirectoryInjectable);
const joinPaths = di.inject(joinPathsInjectable);
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("/bundles/")) {
const bundledLibraryFilePath = joinPaths(bundledLibrariesDirectory, req.url.replace("/bundles/", ""));
if (!bundledLibraryFilePath.startsWith(bundledLibrariesDirectory)) {
return { statusCode: 404 };
}
try {
const fileExtension = path
.extname(bundledLibraryFilePath)
.slice(1) as SupportedFileExtension;
const contentType = contentTypes[fileExtension] || contentTypes.txt;
return {
response: await readFileBuffer(bundledLibraryFilePath),
contentType,
};
} catch {
return { statusCode: 404 };
}
} else if (!req.url.startsWith("/build/")) {
return { statusCode: 404 };
}

View File

@ -1,13 +0,0 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getGlobalOverride } from "../../common/test-utils/get-global-override";
import fetchImplInjectable from "./fetch-impl.injectable";
export default getGlobalOverride(fetchImplInjectable, async () => ({
default: async () => {
throw new Error("tried to fetch resource without override");
},
} as any));

View File

@ -1,18 +0,0 @@
/**
* 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 { fetchImplInjectionToken } from "../../common/fetch/fetch.injectable";
import type * as FetchModule from "node-fetch";
const importFetchModule = new Function("return import('/bundles/node-fetch.bundle.js')") as () => Promise<typeof FetchModule>;
const fetchImplInjectable = getInjectable({
id: "fetch-impl",
instantiate: () => importFetchModule(),
injectionToken: fetchImplInjectionToken,
causesSideEffects: true,
});
export default fetchImplInjectable;

View File

@ -7,18 +7,15 @@ import path from "path";
export default {
entry: "./node_modules/node-fetch/src/index.js",
output: {
library: {
type: "module",
},
path: path.resolve(__dirname, "..", "build", "webpack"),
filename: "node-fetch.bundle.js",
module: true,
library: {
name: "NodeFetch",
type: "commonjs",
},
clean: true,
asyncChunks: false, // This is required so that only one file is created
},
experiments: {
outputModule: true,
},
mode: "production",
target: "electron-renderer",
optimization: {