diff --git a/.eslintrc.js b/.eslintrc.js index fad2b04a6a..3fd52c2465 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -4,6 +4,7 @@ module.exports = { ignorePatterns: [ "**/node_modules/**/*", "**/dist/**/*", + "**/static/**/*", ], settings: { react: { diff --git a/extensions/example-extension/package-lock.json b/extensions/example-extension/package-lock.json index 6ab5142f50..cf3390a42b 100644 --- a/extensions/example-extension/package-lock.json +++ b/extensions/example-extension/package-lock.json @@ -1,5 +1,5 @@ { - "name": "extension-example", + "name": "example-extension", "version": "1.0.0", "lockfileVersion": 1, "requires": true, diff --git a/package.json b/package.json index 308e6383ee..086f0f5fe4 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "download:kubectl": "yarn run ts-node build/download_kubectl.ts", "download:helm": "yarn run ts-node build/download_helm.ts", "build:tray-icons": "yarn run ts-node build/build_tray_icon.ts", - "lint": "yarn run eslint $@ --ext js,ts,tsx --max-warnings=0 src/ integration/ __mocks__/ build/ extensions/", + "lint": "yarn run eslint $@ --ext js,ts,tsx --max-warnings=0 .", "lint:fix": "yarn run lint --fix", "mkdocs-serve-local": "docker build -t mkdocs-serve-local:latest mkdocs/ && docker run --rm -it -p 8000:8000 -v ${PWD}:/docs mkdocs-serve-local:latest", "verify-docs": "docker build -t mkdocs-serve-local:latest mkdocs/ && docker run --rm -v ${PWD}:/docs mkdocs-serve-local:latest build --strict", diff --git a/types/dom.d.ts b/types/dom.d.ts index 61e94a1aa5..40926b249b 100644 --- a/types/dom.d.ts +++ b/types/dom.d.ts @@ -1,7 +1,7 @@ -export {} +export {}; declare global { interface Element { scrollIntoViewIfNeeded(opt_center?: boolean): void; } -} \ No newline at end of file +} diff --git a/types/font-face.d.ts b/types/font-face.d.ts index cb1d3e84f4..ca4282ae97 100644 --- a/types/font-face.d.ts +++ b/types/font-face.d.ts @@ -1,6 +1,6 @@ // https://www.w3.org/TR/css-font-loading/ // https://developer.mozilla.org/en-US/docs/Web/API/FontFace -export {} +export {}; declare global { const FontFace: FontFace; @@ -10,11 +10,11 @@ declare global { } type CSSOMString = string; - type FontFaceLoadStatus = 'unloaded' | 'loading' | 'loaded' | 'error'; - type FontFaceSetStatus = 'loading' | 'loaded'; + type FontFaceLoadStatus = "unloaded" | "loading" | "loaded" | "error"; + type FontFaceSetStatus = "loading" | "loaded"; - interface FontFace extends FontFaceDescriptors { - new(family: string, source: string | ArrayBuffer, descriptors?: FontFaceDescriptors): FontFace; + class FontFace implements FontFaceDescriptors { + constructor(family: string, source: string | ArrayBuffer, descriptors?: FontFaceDescriptors); readonly status: FontFaceLoadStatus; readonly loaded: Promise; variationSettings: CSSOMString; @@ -41,4 +41,4 @@ declare global { delete(font: FontFace): void; clear(): void; } -} \ No newline at end of file +} diff --git a/webpack.extensions.ts b/webpack.extensions.ts index f3adcc858e..b88dfde7eb 100644 --- a/webpack.extensions.ts +++ b/webpack.extensions.ts @@ -1,87 +1,89 @@ -import path from 'path'; +import path from "path"; import webpack from "webpack"; import { sassCommonVars } from "./src/common/vars"; export default function (): webpack.Configuration { - 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, - output: { - filename: 'extension-api.js', - // need to be an absolute path - path: path.resolve(__dirname, `${outDir}/src/extensions`), - // can be use in commonjs environments - // e.g. require('@k8slens/extensions') - libraryTarget: "commonjs" + 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, + // this is the default mode, so we should make it explicit to silence the warning + mode: "production", + output: { + filename: "extension-api.js", + // need to be an absolute path + path: path.resolve(__dirname, `${outDir}/src/extensions`), + // can be use in commonjs environments + // e.g. require('@k8slens/extensions') + libraryTarget: "commonjs" + }, + module: { + rules: [ + { + test: /\.tsx?$/, + loader: "ts-loader", + options: { + // !! ts-loader will use tsconfig.json at folder root + // !! changes in tsconfig.json may have side effects + // !! on '@k8slens/extensions' module + compilerOptions: { + declaration: true, // output .d.ts + sourceMap: false, // to override sourceMap: true in tsconfig.json + outDir // where the .d.ts should be located + } + } }, - module: { - rules: [ - { - test: /\.tsx?$/, - loader: 'ts-loader', - options: { - // !! ts-loader will use tsconfig.json at folder root - // !! changes in tsconfig.json may have side effects - // !! on '@k8slens/extensions' module - compilerOptions: { - declaration: true, // output .d.ts - sourceMap: false, // to override sourceMap: true in tsconfig.json - outDir // where the .d.ts should be located - } - } + // for src/renderer/components/fonts/roboto-mono-nerd.ttf + // in src/renderer/components/dock/terminal.ts 95:25-65 + { + test: /\.(ttf|eot|woff2?)$/, + use: { + loader: "url-loader", + options: { + name: "fonts/[name].[ext]" + } + } + }, + // for import scss files + { + test: /\.s?css$/, + use: [ + // creates `style` nodes from JS strings + "style-loader", + // translates CSS into CommonJS + "css-loader", + { + loader: "sass-loader", + options: { + prependData: `@import "${path.basename(sassCommonVars)}";`, + sassOptions: { + includePaths: [ + path.dirname(sassCommonVars) + ] }, - // for src/renderer/components/fonts/roboto-mono-nerd.ttf - // in src/renderer/components/dock/terminal.ts 95:25-65 - { - test: /\.(ttf|eot|woff2?)$/, - use: { - loader: "url-loader", - options: { - name: "fonts/[name].[ext]" - } - } - }, - // for import scss files - { - test: /\.s?css$/, - use: [ - // creates `style` nodes from JS strings - "style-loader", - // translates CSS into CommonJS - "css-loader", - { - loader: "sass-loader", - options: { - prependData: `@import "${path.basename(sassCommonVars)}";`, - sassOptions: { - includePaths: [ - path.dirname(sassCommonVars) - ] - }, - } - }, - ] - } - ] - }, - resolve: { - extensions: ['.ts', '.tsx', '.js'] - }, - plugins: [ - // In ts-loader's README they said to output a built .d.ts file, - // you can set "declaration": true in tsconfig.extensions.json, - // and use the DeclarationBundlerPlugin in your webpack config... but - // !! the DeclarationBundlerPlugin doesn't work anymore, author archived it. - // https://www.npmjs.com/package/declaration-bundler-webpack-plugin - // new DeclarationBundlerPlugin({ - // moduleName: '@k8slens/extensions', - // out: 'extension-api.d.ts', - // }) - ] - }; + } + }, + ] + } + ] + }, + resolve: { + extensions: [".ts", ".tsx", ".js"] + }, + plugins: [ + // In ts-loader's README they said to output a built .d.ts file, + // you can set "declaration": true in tsconfig.extensions.json, + // and use the DeclarationBundlerPlugin in your webpack config... but + // !! the DeclarationBundlerPlugin doesn't work anymore, author archived it. + // https://www.npmjs.com/package/declaration-bundler-webpack-plugin + // new DeclarationBundlerPlugin({ + // moduleName: '@k8slens/extensions', + // out: 'extension-api.d.ts', + // }) + ] + }; } diff --git a/webpack.main.ts b/webpack.main.ts index c388466cdc..8d83d2b75d 100755 --- a/webpack.main.ts +++ b/webpack.main.ts @@ -1,12 +1,13 @@ import path from "path"; import webpack from "webpack"; -import ForkTsCheckerPlugin from "fork-ts-checker-webpack-plugin" +import ForkTsCheckerPlugin from "fork-ts-checker-webpack-plugin"; import { isDevelopment, isProduction, mainDir, buildDir } from "./src/common/vars"; import nodeExternals from "webpack-node-externals"; import ProgressBarPlugin from "progress-bar-webpack-plugin"; +import * as vars from "./src/common/vars"; export default function (): webpack.Configuration { - console.info('WEBPACK:main', require("./src/common/vars")) + console.info("WEBPACK:main", vars); return { context: __dirname, target: "electron-main", @@ -21,7 +22,7 @@ export default function (): webpack.Configuration { path: buildDir, }, resolve: { - extensions: ['.json', '.js', '.ts'] + extensions: [".json", ".js", ".ts"] }, externals: [ nodeExternals() @@ -48,5 +49,5 @@ export default function (): webpack.Configuration { new ProgressBarPlugin(), new ForkTsCheckerPlugin(), ].filter(Boolean) - } + }; } diff --git a/webpack.renderer.ts b/webpack.renderer.ts index 62adc31bb5..f788ff40c3 100755 --- a/webpack.renderer.ts +++ b/webpack.renderer.ts @@ -4,17 +4,18 @@ import webpack from "webpack"; import HtmlWebpackPlugin from "html-webpack-plugin"; import MiniCssExtractPlugin from "mini-css-extract-plugin"; import TerserPlugin from "terser-webpack-plugin"; -import ForkTsCheckerPlugin from "fork-ts-checker-webpack-plugin" +import ForkTsCheckerPlugin from "fork-ts-checker-webpack-plugin"; import ProgressBarPlugin from "progress-bar-webpack-plugin"; -import ReactRefreshWebpackPlugin from '@pmmmwh/react-refresh-webpack-plugin' +import ReactRefreshWebpackPlugin from "@pmmmwh/react-refresh-webpack-plugin"; +import * as vars from "./src/common/vars"; export default [ webpackLensRenderer -] +]; export function webpackLensRenderer({ showVars = true } = {}): webpack.Configuration { if (showVars) { - console.info('WEBPACK:renderer', require("./src/common/vars")); + console.info("WEBPACK:renderer", vars); } return { context: __dirname, @@ -27,7 +28,7 @@ export function webpackLensRenderer({ showVars = true } = {}): webpack.Configura hot: true, // to avoid cors errors when requests is from iframes disableHostCheck: true, - headers: { 'Access-Control-Allow-Origin': '*' }, + headers: { "Access-Control-Allow-Origin": "*" }, }, name: "lens-app", mode: isProduction ? "production" : "development", @@ -39,10 +40,10 @@ export function webpackLensRenderer({ showVars = true } = {}): webpack.Configura libraryTarget: "global", library: "", globalObject: "this", - publicPath: publicPath, + publicPath, path: buildDir, - filename: '[name].js', - chunkFilename: 'chunks/[name].js', + filename: "[name].js", + chunkFilename: "chunks/[name].js", }, stats: { warningsFilter: [ @@ -51,8 +52,8 @@ export function webpackLensRenderer({ showVars = true } = {}): webpack.Configura }, resolve: { extensions: [ - '.js', '.jsx', '.json', - '.ts', '.tsx', + ".js", ".jsx", ".json", + ".ts", ".tsx", ] }, optimization: { @@ -91,7 +92,7 @@ export function webpackLensRenderer({ showVars = true } = {}): webpack.Configura }], ], plugins: [ - isDevelopment && require.resolve('react-refresh/babel'), + isDevelopment && require.resolve("react-refresh/babel"), ].filter(Boolean), } }, @@ -190,5 +191,5 @@ export function webpackLensRenderer({ showVars = true } = {}): webpack.Configura isDevelopment && new ReactRefreshWebpackPlugin(), ].filter(Boolean), - } + }; }