diff --git a/package.json b/package.json
index 601ca71866..690204faa0 100644
--- a/package.json
+++ b/package.json
@@ -17,11 +17,11 @@
"debug-build": "concurrently yarn:compile:main yarn:compile:extension-types",
"dev-run": "nodemon --watch ./static/build/main.js --exec \"electron --remote-debugging-port=9223 --inspect .\"",
"dev:main": "yarn run compile:main --watch --progress",
- "dev:renderer": "yarn run ts-node webpack.dev-server.ts",
+ "dev:renderer": "yarn run ts-node webpack/dev-server.ts",
"compile": "env NODE_ENV=production concurrently yarn:compile:*",
- "compile:main": "yarn run webpack --config webpack.main.ts",
- "compile:renderer": "yarn run webpack --config webpack.renderer.ts",
- "compile:extension-types": "yarn run webpack --config webpack.extensions.ts",
+ "compile:main": "yarn run webpack --config webpack/main.ts",
+ "compile:renderer": "yarn run webpack --config webpack/renderer.ts",
+ "compile:extension-types": "yarn run webpack --config webpack/extensions.ts",
"npm:fix-build-version": "yarn run ts-node build/set_build_version.ts",
"npm:fix-package-version": "yarn run ts-node build/set_npm_version.ts",
"build:linux": "yarn run compile && electron-builder --linux --dir",
diff --git a/src/common/utils/defineGlobal.ts b/src/common/utils/defineGlobal.ts
deleted file mode 100755
index 50d685dc5a..0000000000
--- a/src/common/utils/defineGlobal.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * Copyright (c) OpenLens Authors. All rights reserved.
- * Licensed under MIT License. See LICENSE in root directory for more information.
- */
-
-// Setup variable in global scope (top-level object)
-// Global type definition must be added separately to `mocks.d.ts` in form:
-// declare const __globalName: any;
-
-export function defineGlobal(propName: string, descriptor: PropertyDescriptor) {
- const scope = typeof global !== "undefined" ? global : window;
-
- if (Object.prototype.hasOwnProperty.call(scope, propName)) {
- return;
- }
-
- Object.defineProperty(scope, propName, descriptor);
-}
diff --git a/src/common/utils/index.ts b/src/common/utils/index.ts
index 0ecb4bc71e..eab3239350 100644
--- a/src/common/utils/index.ts
+++ b/src/common/utils/index.ts
@@ -20,7 +20,6 @@ export * from "./collection-functions";
export * from "./convertCpu";
export * from "./convertMemory";
export * from "./debouncePromise";
-export * from "./defineGlobal";
export * from "./delay";
export * from "./disposer";
export * from "./downloadFile";
diff --git a/src/common/vars.ts b/src/common/vars.ts
index 5a08e458a0..af61a29655 100644
--- a/src/common/vars.ts
+++ b/src/common/vars.ts
@@ -7,7 +7,6 @@
import path from "path";
import { SemVer } from "semver";
import packageInfo from "../../package.json";
-import { defineGlobal } from "./utils/defineGlobal";
import { lazyInitialized } from "./utils/lazy-initialized";
export const isMac = process.platform === "darwin";
@@ -101,26 +100,12 @@ export const kubectlBinaryName = getBinaryName("kubectl");
* @deprecated for being explicit side effect.
*/
export const kubectlBinaryPath = lazyInitialized(() => path.join(baseBinariesDir.get(), kubectlBinaryName));
-
-// Webpack build paths
-export const contextDir = process.cwd();
-export const buildDir = path.join(contextDir, "static", publicPath);
-export const preloadEntrypoint = path.join(contextDir, "src/preload.ts");
-export const mainDir = path.join(contextDir, "src/main");
-export const rendererDir = path.join(contextDir, "src/renderer");
-export const htmlTemplate = path.resolve(rendererDir, "template.html");
-export const sassCommonVars = path.resolve(rendererDir, "components/vars.scss");
-
-// Special runtime paths
-defineGlobal("__static", {
- get() {
- const root = isDevelopment
- ? contextDir
- : (process.resourcesPath ?? contextDir);
-
- return path.resolve(root, "static");
- },
-});
+export const staticFilesDirectory = path.resolve(
+ !isProduction
+ ? process.cwd()
+ : process.resourcesPath,
+ "static",
+);
// Apis
export const apiPrefix = "/api" as string; // local router apis
diff --git a/src/common/vars/context-dir.injectable.ts b/src/common/vars/context-dir.injectable.ts
deleted file mode 100644
index fdef6c2c71..0000000000
--- a/src/common/vars/context-dir.injectable.ts
+++ /dev/null
@@ -1,13 +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 { contextDir } from "../vars";
-
-const contextDirInjectable = getInjectable({
- id: "context-dir",
- instantiate: () => contextDir,
-});
-
-export default contextDirInjectable;
diff --git a/src/extensions/extension-discovery/extension-discovery.ts b/src/extensions/extension-discovery/extension-discovery.ts
index 0bb6f4f08a..846a13f17e 100644
--- a/src/extensions/extension-discovery/extension-discovery.ts
+++ b/src/extensions/extension-discovery/extension-discovery.ts
@@ -16,7 +16,7 @@ import logger from "../../main/logger";
import type { ExtensionsStore } from "../extensions-store/extensions-store";
import type { ExtensionLoader } from "../extension-loader";
import type { LensExtensionId, LensExtensionManifest } from "../lens-extension";
-import { isProduction } from "../../common/vars";
+import { isProduction, staticFilesDirectory } from "../../common/vars";
import type { ExtensionInstallationStateStore } from "../extension-installation-state-store/extension-installation-state-store";
import type { PackageJson } from "type-fest";
import { extensionDiscoveryStateChannel } from "../../common/ipc/extension-handling";
@@ -112,7 +112,7 @@ export class ExtensionDiscovery {
}
get inTreeFolderPath(): string {
- return path.resolve(__static, "../extensions");
+ return path.resolve(staticFilesDirectory, "../extensions");
}
get nodeModulesPath(): string {
diff --git a/src/main/index.ts b/src/main/index.ts
index 4162b30bcd..f6c0b1bbc0 100644
--- a/src/main/index.ts
+++ b/src/main/index.ts
@@ -11,7 +11,7 @@ import httpProxy from "http-proxy";
import * as LensExtensionsCommonApi from "../extensions/common-api";
import * as LensExtensionsMainApi from "../extensions/main-api";
import { app, autoUpdater, dialog, powerMonitor } from "electron";
-import { appName, isIntegrationTesting, isMac, isWindows, productName } from "../common/vars";
+import { appName, isIntegrationTesting, isMac, isWindows, productName, staticFilesDirectory } from "../common/vars";
import { LensProxy } from "./lens-proxy";
import { WindowManager } from "./window-manager";
import { ClusterManager } from "./cluster-manager";
@@ -198,7 +198,7 @@ async function main(di: DiContainer) {
powerMonitor.on("shutdown", () => app.exit());
- registerFileProtocol("static", __static);
+ registerFileProtocol("static", staticFilesDirectory);
PrometheusProviderRegistry.createInstance();
initializers.initPrometheusProviderRegistry();
diff --git a/src/main/router/router.ts b/src/main/router/router.ts
index 56455e52e7..545462ead6 100644
--- a/src/main/router/router.ts
+++ b/src/main/router/router.ts
@@ -11,9 +11,6 @@ import type { Cluster } from "../../common/cluster/cluster";
import type { LensApiResultContentType } from "./router-content-types";
import { contentTypes } from "./router-content-types";
-// TODO: Import causes side effect, sets value for __static
-import "../../common/vars";
-
export interface RouterRequestOpts {
req: http.IncomingMessage;
res: http.ServerResponse;
diff --git a/src/main/routes/static-file-route.injectable.ts b/src/main/routes/static-file-route.injectable.ts
index e1ee4862b2..bc7fa1a51e 100644
--- a/src/main/routes/static-file-route.injectable.ts
+++ b/src/main/routes/static-file-route.injectable.ts
@@ -8,7 +8,7 @@ import type { SupportedFileExtension } from "../router/router-content-types";
import { contentTypes } from "../router/router-content-types";
import logger from "../logger";
import { routeInjectionToken } from "../router/router.injectable";
-import { appName, publicPath, webpackDevServerPort } from "../../common/vars";
+import { appName, publicPath, staticFilesDirectory, webpackDevServerPort } from "../../common/vars";
import path from "path";
import isDevelopmentInjectable from "../../common/vars/is-development.injectable";
import httpProxy from "http-proxy";
@@ -27,7 +27,7 @@ interface ProductionDependencies {
const handleStaticFileInProduction =
({ readFileBuffer, getAbsolutePath, joinPaths }: ProductionDependencies) =>
async ({ params }: LensApiRequest) => {
- const staticPath = getAbsolutePath(__static);
+ const staticPath = getAbsolutePath(staticFilesDirectory);
let filePath = params.path;
for (let retryCount = 0; retryCount < 5; retryCount += 1) {
diff --git a/src/main/tray/tray.ts b/src/main/tray/tray.ts
index ed33e7faa5..bef95610fd 100644
--- a/src/main/tray/tray.ts
+++ b/src/main/tray/tray.ts
@@ -12,7 +12,7 @@ import { showAbout } from "../menu/menu";
import { checkForUpdates, isAutoUpdateEnabled } from "../app-updater";
import type { WindowManager } from "../window-manager";
import logger from "../logger";
-import { isDevelopment, isWindows, productName } from "../../common/vars";
+import { isDevelopment, isWindows, productName, staticFilesDirectory } from "../../common/vars";
import { exitApp } from "../exit-app";
import { toJS } from "../../common/utils";
import type { TrayMenuRegistration } from "./tray-menu-registration";
@@ -25,7 +25,7 @@ export let tray: Tray;
export function getTrayIcon(): string {
return path.resolve(
- __static,
+ staticFilesDirectory,
isDevelopment ? "../build/tray" : "icons", // copied within electron-builder extras
"trayIconTemplate.png",
);
diff --git a/src/renderer/components/dock/create-resource/lens-templates.injectable.ts b/src/renderer/components/dock/create-resource/lens-templates.injectable.ts
index d162dcb931..898855a309 100644
--- a/src/renderer/components/dock/create-resource/lens-templates.injectable.ts
+++ b/src/renderer/components/dock/create-resource/lens-templates.injectable.ts
@@ -5,7 +5,7 @@
import { getInjectable } from "@ogre-tools/injectable";
import path from "path";
import { hasCorrectExtension } from "./has-correct-extension";
-import "../../../../common/vars";
+import { staticFilesDirectory } from "../../../../common/vars";
import readFileInjectable from "../../../../common/fs/read-file.injectable";
import readDirInjectable from "../../../../common/fs/read-dir.injectable";
import type { RawTemplates } from "./create-resource-templates.injectable";
@@ -19,7 +19,7 @@ interface Dependencies {
}
async function getTemplates({ readDir, readFile, getAbsolutePath }: Dependencies) {
- const templatesFolder = getAbsolutePath(__static, "../templates/create-resource");
+ const templatesFolder = getAbsolutePath(staticFilesDirectory, "../templates/create-resource");
/**
* Mapping between file names and their contents
diff --git a/tsconfig.json b/tsconfig.json
index 9cd814d6d6..8d74393715 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -32,7 +32,11 @@
"types/*"
]
},
- "plugins": [{ "name": "typescript-plugin-css-modules" }]
+ "plugins": [
+ {
+ "name": "typescript-plugin-css-modules"
+ }
+ ]
},
"ts-node": {
"transpileOnly": true,
@@ -42,7 +46,7 @@
},
"include": [
"src/**/*",
- "types/*.d.ts"
+ "types/*.d.ts",
],
"exclude": [
"node_modules",
diff --git a/types/mocks.d.ts b/types/mocks.d.ts
index 0fbde3b4f9..17dba848b7 100644
--- a/types/mocks.d.ts
+++ b/types/mocks.d.ts
@@ -8,9 +8,6 @@ declare module "win-ca/api"
declare module "@hapi/call"
declare module "@hapi/subtext"
-// Global path to static assets
-declare const __static: string;
-
// Support import for custom module extensions
// https://www.typescriptlang.org/docs/handbook/modules.html#wildcard-module-declarations
declare module "*.module.scss" {
diff --git a/webpack.dev-server.ts b/webpack.dev-server.ts
deleted file mode 100644
index 966a0f32de..0000000000
--- a/webpack.dev-server.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * Copyright (c) OpenLens Authors. All rights reserved.
- * Licensed under MIT License. See LICENSE in root directory for more information.
- */
-
-import Webpack from "webpack";
-import WebpackDevServer from "webpack-dev-server";
-import { webpackLensRenderer } from "./webpack.renderer";
-import { buildDir, webpackDevServerPort } from "./src/common/vars";
-import logger from "./src/common/logger";
-
-/**
- * Creates `webpack-dev-server`
- * API docs:
- * @url https://webpack.js.org/configuration/dev-server/
- * @url https://github.com/chimurai/http-proxy-middleware
- */
-function createDevServer(): WebpackDevServer {
- const config = webpackLensRenderer({ showVars: false });
- const compiler = Webpack(config);
-
- const server = new WebpackDevServer({
- setupExitSignals: true,
- headers: {
- "Access-Control-Allow-Origin": "*",
- },
- allowedHosts: "all",
- host: "localhost",
- port: webpackDevServerPort,
- static: buildDir, // aka `devServer.contentBase` in webpack@4
- hot: "only", // use HMR only without errors
- liveReload: false,
- devMiddleware: {
- writeToDisk: false,
- index: "OpenLensDev.html",
- publicPath: "/build",
- },
- proxy: {
- "^/$": "/build/",
- },
- client: {
- overlay: false, // don't show warnings and errors on top of rendered app view
- logging: "error",
- },
- }, compiler);
-
- logger.info(`[WEBPACK-DEV-SERVER]: created with options`, server.options);
-
- return server;
-}
-
-const server = createDevServer();
-
-server.start();
diff --git a/webpack/dev-server.ts b/webpack/dev-server.ts
new file mode 100644
index 0000000000..3614d56f93
--- /dev/null
+++ b/webpack/dev-server.ts
@@ -0,0 +1,46 @@
+/**
+ * Copyright (c) OpenLens Authors. All rights reserved.
+ * Licensed under MIT License. See LICENSE in root directory for more information.
+ */
+
+import Webpack from "webpack";
+import WebpackDevServer from "webpack-dev-server";
+import { webpackLensRenderer } from "./renderer";
+import logger from "../src/common/logger";
+import { buildDir } from "./vars";
+
+/**
+ * API docs:
+ * @url https://webpack.js.org/configuration/dev-server/
+ * @url https://github.com/chimurai/http-proxy-middleware
+ */
+const config = webpackLensRenderer({ showVars: false });
+const compiler = Webpack(config);
+
+const server = new WebpackDevServer({
+ setupExitSignals: true,
+ headers: {
+ "Access-Control-Allow-Origin": "*",
+ },
+ allowedHosts: "all",
+ host: "localhost",
+ static: buildDir, // aka `devServer.contentBase` in webpack@4
+ hot: "only", // use HMR only without errors
+ liveReload: false,
+ devMiddleware: {
+ writeToDisk: false,
+ index: "OpenLensDev.html",
+ publicPath: "/build",
+ },
+ proxy: {
+ "^/$": "/build/",
+ },
+ client: {
+ overlay: false, // don't show warnings and errors on top of rendered app view
+ logging: "error",
+ },
+}, compiler);
+
+logger.info(`[WEBPACK-DEV-SERVER]: created with options`, server.options);
+
+server.start();
diff --git a/webpack.extensions.ts b/webpack/extensions.ts
similarity index 87%
rename from webpack.extensions.ts
rename to webpack/extensions.ts
index 57064a14be..961c1d3bf2 100644
--- a/webpack.extensions.ts
+++ b/webpack/extensions.ts
@@ -6,25 +6,21 @@
import path from "path";
import type webpack from "webpack";
-import * as vars from "./src/common/vars";
-import { cssModulesWebpackRule, fontsLoaderWebpackRules, iconsAndImagesWebpackRules } from "./webpack.renderer";
+import { cssModulesWebpackRule, fontsLoaderWebpackRules, iconsAndImagesWebpackRules } from "./renderer";
+import { extensionEntry, extensionOutDir, isDevelopment } from "./vars";
export default function generateExtensionTypes(): webpack.Configuration {
- const { isDevelopment } = vars;
- const entry = "./src/extensions/extension-api.ts";
- const outDir = "./src/extensions/npm/extensions/dist";
-
return {
// Compile for Electron for renderer process
// see
target: "electron-renderer",
- entry,
+ entry: extensionEntry,
// this is the default mode, so we should make it explicit to silence the warning
mode: isDevelopment ? "development" : "production",
output: {
filename: "extension-api.js",
// need to be an absolute path
- path: path.resolve(__dirname, `${outDir}/src/extensions`),
+ path: path.resolve(extensionOutDir, "src", "extensions"),
// can be use in commonjs environments
// e.g. require('@k8slens/extensions')
libraryTarget: "commonjs",
@@ -54,7 +50,7 @@ export default function generateExtensionTypes(): webpack.Configuration {
compilerOptions: {
declaration: true, // output .d.ts
sourceMap: false, // to override sourceMap: true in tsconfig.json
- outDir, // where the .d.ts should be located
+ outDir: extensionOutDir, // where the .d.ts should be located
},
},
},
diff --git a/src/common/getTSLoader.ts b/webpack/get-typescript-loader.ts
similarity index 89%
rename from src/common/getTSLoader.ts
rename to webpack/get-typescript-loader.ts
index 6eb670bf07..57e57245be 100644
--- a/src/common/getTSLoader.ts
+++ b/webpack/get-typescript-loader.ts
@@ -11,7 +11,7 @@ import type { Options as TSLoaderOptions } from "ts-loader";
* depends on env LENS_DEV_USE_ESBUILD_LOADER to use esbuild-loader (faster) or good-old ts-loader
* @returns ts/tsx webpack loader configuration object
*/
-const getTSLoader = (options: Partial = {}, testRegExp?: RegExp) => {
+export default function getTypescriptLoader(options: Partial = {}, testRegExp?: RegExp) {
testRegExp ??= /\.tsx?$/; // by default covers react/jsx-stuff
options.transpileOnly ??= true;
@@ -37,6 +37,4 @@ const getTSLoader = (options: Partial = {}, testRegExp?: RegExp
options,
},
};
-};
-
-export default getTSLoader;
+}
diff --git a/webpack.main.ts b/webpack/main.ts
similarity index 77%
rename from webpack.main.ts
rename to webpack/main.ts
index db742f44e6..397ffb2968 100755
--- a/webpack.main.ts
+++ b/webpack/main.ts
@@ -7,16 +7,20 @@ import path from "path";
import type webpack from "webpack";
import ForkTsCheckerPlugin from "fork-ts-checker-webpack-plugin";
import nodeExternals from "webpack-node-externals";
-import * as vars from "./src/common/vars";
-import getTSLoader from "./src/common/getTSLoader";
+import getTypeScriptLoader from "./get-typescript-loader";
import CircularDependencyPlugin from "circular-dependency-plugin";
-import { iconsAndImagesWebpackRules } from "./webpack.renderer";
+import { iconsAndImagesWebpackRules } from "./renderer";
+import type { WebpackPluginInstance } from "webpack";
+import { buildDir, isDevelopment, mainDir } from "./vars";
const configs: { (): webpack.Configuration }[] = [];
configs.push((): webpack.Configuration => {
- console.info("WEBPACK:main", { ...vars });
- const { mainDir, buildDir, isDevelopment } = vars;
+ console.info("WEBPACK:main", {
+ isDevelopment,
+ mainDir,
+ buildDir,
+ });
return {
name: "lens-app-main",
@@ -44,7 +48,7 @@ configs.push((): webpack.Configuration => {
test: /\.node$/,
use: "node-loader",
},
- getTSLoader({}, /\.ts$/),
+ getTypeScriptLoader({}, /\.ts$/),
...iconsAndImagesWebpackRules(),
],
},
@@ -54,8 +58,8 @@ configs.push((): webpack.Configuration => {
cwd: __dirname,
exclude: /node_modules/,
failOnError: true,
- }),
- ].filter(Boolean),
+ }) as unknown as WebpackPluginInstance,
+ ],
};
});
diff --git a/webpack.renderer.ts b/webpack/renderer.ts
similarity index 84%
rename from webpack.renderer.ts
rename to webpack/renderer.ts
index 7b21f9214e..945b233f3d 100755
--- a/webpack.renderer.ts
+++ b/webpack/renderer.ts
@@ -3,25 +3,31 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import * as vars from "./src/common/vars";
import path from "path";
import type webpack from "webpack";
import HtmlWebpackPlugin from "html-webpack-plugin";
import MiniCssExtractPlugin from "mini-css-extract-plugin";
import ForkTsCheckerPlugin from "fork-ts-checker-webpack-plugin";
import MonacoWebpackPlugin from "monaco-editor-webpack-plugin";
-import getTSLoader from "./src/common/getTSLoader";
import CircularDependencyPlugin from "circular-dependency-plugin";
import ReactRefreshWebpackPlugin from "@pmmmwh/react-refresh-webpack-plugin";
+import type { WebpackPluginInstance } from "webpack";
+import getTypescriptLoader from "./get-typescript-loader";
+import { assetsFolderName, isDevelopment, rendererDir, buildDir, appName, htmlTemplate, publicPath, sassCommonVars } from "./vars";
export function webpackLensRenderer({ showVars = true } = {}): webpack.Configuration {
if (showVars) {
- console.info("WEBPACK:renderer", { ...vars });
+ console.info("WEBPACK:renderer", {
+ assetsFolderName,
+ isDevelopment,
+ rendererDir,
+ buildDir,
+ appName,
+ htmlTemplate,
+ publicPath,
+ });
}
- const assetsFolderName = "assets";
- const { appName, buildDir, htmlTemplate, isDevelopment, publicPath, rendererDir } = vars;
-
return {
target: "electron-renderer",
name: "lens-app-renderer",
@@ -67,7 +73,7 @@ export function webpackLensRenderer({ showVars = true } = {}): webpack.Configura
test: /\.node$/,
use: "node-loader",
},
- getTSLoader({
+ getTypescriptLoader({
getCustomTransformers: () => ({
before: isDevelopment ? [require("react-refresh-typescript")()] : [],
}),
@@ -103,14 +109,18 @@ export function webpackLensRenderer({ showVars = true } = {}): webpack.Configura
cwd: __dirname,
exclude: /node_modules/,
failOnError: true,
- }),
+ }) as unknown as WebpackPluginInstance,
new MiniCssExtractPlugin({
filename: "[name].css",
}),
- isDevelopment && new ReactRefreshWebpackPlugin(),
- ].filter(Boolean),
+ ...(
+ isDevelopment
+ ? []
+ : [new ReactRefreshWebpackPlugin()]
+ ),
+ ],
};
}
@@ -143,15 +153,17 @@ export function fontsLoaderWebpackRules(): webpack.RuleSetRule[] {
];
}
+export interface CssModulesWebpackRuleOptions {
+ styleLoader?: string;
+}
+
/**
* Import CSS or SASS styles with modules support (*.module.scss)
- * @param {string} styleLoader
*/
-export function cssModulesWebpackRule(
- {
- styleLoader = vars.isDevelopment ? "style-loader" : MiniCssExtractPlugin.loader,
- } = {}): webpack.RuleSetRule {
- const { isDevelopment, sassCommonVars } = vars;
+export function cssModulesWebpackRule({ styleLoader }: CssModulesWebpackRuleOptions = {}): webpack.RuleSetRule {
+ styleLoader ??= isDevelopment
+ ? "style-loader"
+ : MiniCssExtractPlugin.loader;
return {
test: /\.s?css$/,
diff --git a/webpack/tsconfig.json b/webpack/tsconfig.json
new file mode 100644
index 0000000000..3c43903cfd
--- /dev/null
+++ b/webpack/tsconfig.json
@@ -0,0 +1,3 @@
+{
+ "extends": "../tsconfig.json"
+}
diff --git a/webpack/vars.ts b/webpack/vars.ts
new file mode 100644
index 0000000000..478b04459d
--- /dev/null
+++ b/webpack/vars.ts
@@ -0,0 +1,21 @@
+/**
+ * Copyright (c) OpenLens Authors. All rights reserved.
+ * Licensed under MIT License. See LICENSE in root directory for more information.
+ */
+
+import path from "path";
+import packageInfo from "../package.json";
+
+export const isDevelopment = process.env.NODE_ENV !== "production";
+export const mainDir = path.join(process.cwd(), "src", "main");
+export const buildDir = path.join(process.cwd(), "static", "build");
+export const extensionEntry = path.join(process.cwd(), "src", "extensions", "extension-api.ts");
+export const extensionOutDir = path.join(process.cwd(), "src", "extensions", "npm", "extensions", "dist");
+export const assetsFolderName = "assets";
+export const rendererDir = path.join(process.cwd(), "src", "renderer");
+export const appName = isDevelopment
+ ? `${packageInfo.productName}Dev`
+ : packageInfo.productName;
+export const htmlTemplate = path.resolve(rendererDir, "template.html");
+export const publicPath = "/build/";
+export const sassCommonVars = path.resolve(rendererDir, "components/vars.scss");