diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 8e32a4dac8..0000000000 --- a/.eslintrc.js +++ /dev/null @@ -1,300 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -const packageJson = require("./package.json"); - -module.exports = { - ignorePatterns: [ - "**/node_modules/**/*", - "**/dist/**/*", - "**/static/**/*", - "**/site/**/*", - "build/webpack/**/*", - ], - settings: { - react: { - version: packageJson.devDependencies.react || "detect", - }, - "import/parsers": { - "@typescript-eslint/parser": [".ts", ".tsx"], - }, - "import/resolver": { - "typescript": { - "alwaysTryTypes": true, - "project": "./tsconfig.json", - }, - }, - }, - overrides: [ - { - files: [ - "**/*.js", - "**/*.mjs", - ], - extends: [ - "eslint:recommended", - ], - env: { - node: true, - es2022: true, - }, - parserOptions: { - sourceType: "module", - }, - plugins: [ - "header", - "unused-imports", - "react-hooks", - ], - rules: { - "no-constant-condition": ["error", { "checkLoops": false }], - "header/header": [2, "./license-header"], - "comma-dangle": ["error", "always-multiline"], - "comma-spacing": "error", - "indent": ["error", 2, { - "SwitchCase": 1, - }], - "no-unused-vars": "off", - "space-before-function-paren": ["error", { - "anonymous": "always", - "named": "never", - "asyncArrow": "always", - }], - "unused-imports/no-unused-imports": "error", - "unused-imports/no-unused-vars": [ - "warn", { - "vars": "all", - "args": "after-used", - "ignoreRestSiblings": true, - }, - ], - "quotes": ["error", "double", { - "avoidEscape": true, - "allowTemplateLiterals": true, - }], - "object-curly-spacing": ["error", "always", { - "objectsInObjects": false, - "arraysInObjects": true, - }], - "linebreak-style": ["error", "unix"], - "eol-last": ["error", "always"], - "semi": ["error", "always"], - "object-shorthand": "error", - "prefer-template": "error", - "template-curly-spacing": "error", - "no-unused-expressions": "error", - "padding-line-between-statements": [ - "error", - { "blankLine": "always", "prev": "*", "next": "return" }, - { "blankLine": "always", "prev": "*", "next": "block-like" }, - { "blankLine": "always", "prev": "*", "next": "function" }, - { "blankLine": "always", "prev": "*", "next": "class" }, - { "blankLine": "always", "prev": ["const", "let", "var"], "next": "*" }, - { "blankLine": "any", "prev": ["const", "let", "var"], "next": ["const", "let", "var"] }, - ], - "no-template-curly-in-string": "error", - }, - }, - { - files: [ - "**/*.ts", - "**/*.tsx", - ], - parser: "@typescript-eslint/parser", - extends: [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - "plugin:react/recommended", - "plugin:import/recommended", - "plugin:import/typescript", - ], - plugins: [ - "header", - "unused-imports", - "react-hooks", - ], - parserOptions: { - ecmaVersion: 2018, - sourceType: "module", - }, - rules: { - "no-constant-condition": ["error", { - "checkLoops": false, - }], - "header/header": [2, "./license-header"], - "react/prop-types": "off", - "no-invalid-this": "off", - "@typescript-eslint/no-invalid-this": ["error"], - "@typescript-eslint/explicit-function-return-type": "off", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/interface-name-prefix": "off", - "@typescript-eslint/no-use-before-define": "off", - "@typescript-eslint/no-empty-interface": "off", - "@typescript-eslint/no-var-requires": "off", - "@typescript-eslint/ban-ts-ignore": "off", - "@typescript-eslint/explicit-module-boundary-types": "off", - "@typescript-eslint/ban-types": "off", - "@typescript-eslint/ban-ts-comment": "off", - "@typescript-eslint/no-empty-function": "off", - "@typescript-eslint/no-unused-vars": "off", - "no-restricted-imports": ["error", { - "paths": [ - { - "name": ".", - "message": "No importing from local index.ts(x?) file. A common way to make circular dependencies.", - }, - ], - }], - "@typescript-eslint/member-delimiter-style": ["error", { - "multiline": { - "delimiter": "semi", - "requireLast": true, - }, - "singleline": { - "delimiter": "semi", - "requireLast": false, - }, - }], - "react/jsx-max-props-per-line": ["error", { - "maximum": { - "single": 2, - "multi": 1, - }, - }], - "react/jsx-first-prop-new-line": ["error", "multiline"], - "react/jsx-one-expression-per-line": ["error", { - "allow": "single-child", - }], - "react/jsx-indent": ["error", 2], - "react/jsx-indent-props": ["error", 2], - "react/jsx-closing-tag-location": "error", - "react/jsx-wrap-multilines": ["error", { - "declaration": "parens-new-line", - "assignment": "parens-new-line", - "return": "parens-new-line", - "arrow": "parens-new-line", - "condition": "parens-new-line", - "logical": "parens-new-line", - "prop": "parens-new-line", - }], - "react/display-name": "off", - "space-before-function-paren": "off", - "@typescript-eslint/space-before-function-paren": ["error", { - "anonymous": "always", - "named": "never", - "asyncArrow": "always", - }], - "@typescript-eslint/naming-convention": ["error", - { - "selector": "interface", - "format": ["PascalCase"], - "leadingUnderscore": "forbid", - "trailingUnderscore": "forbid", - "custom": { - "regex": "^Props$", - "match": false, - }, - }, - { - "selector": "typeAlias", - "format": ["PascalCase"], - "leadingUnderscore": "forbid", - "trailingUnderscore": "forbid", - "custom": { - "regex": "^(Props|State)$", - "match": false, - }, - }, - ], - "@typescript-eslint/consistent-type-definitions": ["error", "interface"], - "unused-imports/no-unused-imports-ts": process.env.PROD === "true" ? "error" : "warn", - "unused-imports/no-unused-vars-ts": [ - "warn", { - "vars": "all", - "args": "after-used", - "ignoreRestSiblings": true, - }, - ], - "comman-dangle": "off", - "@typescript-eslint/comma-dangle": ["error", "always-multiline"], - "comma-spacing": "off", - "@typescript-eslint/comma-spacing": "error", - "indent": ["error", 2, { - "SwitchCase": 1, - }], - "quotes": ["error", "double", { - "avoidEscape": true, - "allowTemplateLiterals": true, - }], - "object-curly-spacing": "off", - "@typescript-eslint/object-curly-spacing": ["error", "always", { - "objectsInObjects": false, - "arraysInObjects": true, - }], - "semi": "off", - "@typescript-eslint/semi": ["error"], - "linebreak-style": ["error", "unix"], - "eol-last": ["error", "always"], - "object-shorthand": "error", - "prefer-template": "error", - "template-curly-spacing": "error", - "no-unused-expressions": "off", - "@typescript-eslint/no-unused-expressions": "error", - "padding-line-between-statements": [ - "error", - { "blankLine": "always", "prev": "*", "next": "return" }, - { "blankLine": "always", "prev": "*", "next": "block-like" }, - { "blankLine": "always", "prev": "*", "next": "function" }, - { "blankLine": "always", "prev": "*", "next": "class" }, - { "blankLine": "always", "prev": ["const", "let", "var"], "next": "*" }, - { "blankLine": "any", "prev": ["const", "let", "var"], "next": ["const", "let", "var"] }, - ], - "react-hooks/rules-of-hooks": "error", - "react-hooks/exhaustive-deps": "off", - "no-template-curly-in-string": "error", - "@typescript-eslint/consistent-type-imports": "error", - }, - }, - { - files: [ - "src/{common,main,renderer}/**/*.ts", - "src/{common,main,renderer}/**/*.tsx", - ], - rules: { - "no-restricted-imports": ["error", { - "paths": [ - { - "name": ".", - "message": "No importing from local index.ts(x?) file. A common way to make circular dependencies.", - }, - { - "name": "..", - "message": "No importing from parent index.ts(x?) file. A common way to make circular dependencies.", - }, - ], - "patterns": [ - { - "group": [ - "**/extensions/renderer-api/**/*", - "**/extensions/main-api/**/*", - "**/extensions/common-api/**/*", - ], - message: "No importing from the extension api definitions in application code", - }, - { - "group": [ - "**/extensions/as-legacy-globals-for-extension-api/as-legacy-global-function-for-extension-api", - "**/extensions/as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api-with-modifications", - "**/extensions/as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api", - "**/extensions/as-legacy-globals-for-extension-api/as-legacy-global-singleton-object-for-extension-api", - ], - message: "No importing the legacy global functions in non-ExtensionApi code", - }, - ], - }], - }, - }, - ], -}; diff --git a/.swcrc b/.swcrc deleted file mode 100644 index 742642b7eb..0000000000 --- a/.swcrc +++ /dev/null @@ -1,18 +0,0 @@ -{ - "module": { - "type": "commonjs" - }, - "jsc": { - "parser": { - "syntax": "typescript", - "tsx": true, - "decorators": true, - "dynamicImport": false - }, - "transform": { - "legacyDecorator": true, - "decoratorMetadata": true - }, - "target": "es2019" - } -} diff --git a/.yarnrc b/.yarnrc deleted file mode 100644 index 811b4fd7c3..0000000000 --- a/.yarnrc +++ /dev/null @@ -1,3 +0,0 @@ -disturl "https://electronjs.org/headers" -target "19.0.4" -runtime "electron" diff --git a/package.json b/package.json index 59345099c8..8129807d72 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,9 @@ "adr:list": "adr list", "build": "lerna run --stream build", "build:docs": "lerna run --stream build:docs", + "clean": "lerna run clean --stream", "clean:node_modules": "lerna clean -y && rm -rf node_modules", + "lint": "lerna run lint --stream", "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", "mkdocs:verify": "docker build -t mkdocs-serve-local:latest mkdocs/ && docker run --rm -v ${PWD}:/docs mkdocs-serve-local:latest build --strict", "test:unit": "lerna run --stream test:unit", diff --git a/packages/core/.eslintrc.js b/packages/core/.eslintrc.js index 8e32a4dac8..90ae34ae8b 100644 --- a/packages/core/.eslintrc.js +++ b/packages/core/.eslintrc.js @@ -11,7 +11,7 @@ module.exports = { "**/dist/**/*", "**/static/**/*", "**/site/**/*", - "build/webpack/**/*", + "**/build/webpack/**/*", ], settings: { react: { @@ -50,7 +50,7 @@ module.exports = { ], rules: { "no-constant-condition": ["error", { "checkLoops": false }], - "header/header": [2, "./license-header"], + "header/header": [2, "../../license-header"], "comma-dangle": ["error", "always-multiline"], "comma-spacing": "error", "indent": ["error", 2, { @@ -123,7 +123,7 @@ module.exports = { "no-constant-condition": ["error", { "checkLoops": false, }], - "header/header": [2, "./license-header"], + "header/header": [2, "../../license-header"], "react/prop-types": "off", "no-invalid-this": "off", "@typescript-eslint/no-invalid-this": ["error"], diff --git a/packages/core/build/set_extensions_npm_version.ts b/packages/core/build/set_extensions_npm_version.ts deleted file mode 100644 index ee04257f48..0000000000 --- a/packages/core/build/set_extensions_npm_version.ts +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ -import * as fs from "fs"; -import * as path from "path"; -import packageInfo from "../packages/extensions/package.json"; -import appInfo from "../package.json"; -import { SemVer } from "semver"; -import { execSync } from "child_process"; - -const { NPM_RELEASE_TAG = "latest" } = process.env; -const version = new SemVer(appInfo.version); - -if (NPM_RELEASE_TAG !== "latest") { - const gitRef = execSync("git rev-parse --short HEAD", { - encoding: "utf-8", - }); - - version.inc("prerelease", `git.${gitRef.trim()}`); -} - -packageInfo.version = version.format(); - -fs.writeFileSync(path.join(__dirname, "../packages/extensions/package.json"), `${JSON.stringify(packageInfo, null, 2)}\n`); diff --git a/packages/core/src/common/library.ts b/packages/core/src/common/library.ts index 809f4ff666..765f70edcb 100644 --- a/packages/core/src/common/library.ts +++ b/packages/core/src/common/library.ts @@ -12,5 +12,5 @@ export { applicationInformationToken, ApplicationInformation, bundledExtensionInjectionToken, - extensionApi + extensionApi, }; diff --git a/packages/core/webpack/library-bundle.ts b/packages/core/webpack/library-bundle.ts index 29af5dbd95..9de09a2a9c 100644 --- a/packages/core/webpack/library-bundle.ts +++ b/packages/core/webpack/library-bundle.ts @@ -48,7 +48,7 @@ const config = [ declaration: true, sourceMap: false, }, - } + }, }, }, ...iconsAndImagesWebpackRules(), @@ -62,12 +62,13 @@ const config = [ ], }, { - ...rendererConfig, + ...main(), name: "lens-app-common", entry: { common: path.resolve(__dirname, "..", "src", "common", "library.ts"), }, output: { + publicPath: "", library: { type: "commonjs2", }, diff --git a/packages/core/yarn.lock b/packages/core/yarn.lock index b57e5ed201..cf111940ae 100644 --- a/packages/core/yarn.lock +++ b/packages/core/yarn.lock @@ -2685,11 +2685,6 @@ dependencies: webpack-dev-server "*" -"@types/webpack-env@^1.18.0": - version "1.18.0" - resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.18.0.tgz#ed6ecaa8e5ed5dfe8b2b3d00181702c9925f13fb" - integrity sha512-56/MAlX5WMsPVbOg7tAxnYvNYMMWr/QJiIp6BxVSW3JJXUVzzOn64qW8TzQyMSqSUFM2+PVI4aUHcHOzIz/1tg== - "@types/webpack-node-externals@^2.5.3": version "2.5.3" resolved "https://registry.yarnpkg.com/@types/webpack-node-externals/-/webpack-node-externals-2.5.3.tgz#921783aadda1fe686db0a70e20e4b9548b5a3cef" diff --git a/packages/open-lens/package.json b/packages/open-lens/package.json index 92a837a2c7..095a9d1e3e 100644 --- a/packages/open-lens/package.json +++ b/packages/open-lens/package.json @@ -19,9 +19,9 @@ "author": "OpenLens Authors ", "scripts": { "clean": "rm -rf binaries/ dist/ static/build", - "build": "npm run compile && electron-builder", + "build": "npm run compile", "build:app": "electron-builder --publish onTag", - "build:mac": "npm run compile && electron-builder --mac --dir", + "build:dir": "npm run compile && electron-builder --dir", "compile": "env NODE_ENV=production webpack --config webpack/webpack.ts --progress", "postcompile": "npm run build:tray-icons && npm run download:binaries", "predev": "rm -rf static/build/ && npm run build:tray-icons && npm run download:binaries", @@ -74,7 +74,9 @@ "build": { "generateUpdatesFilesForAllChannels": true, "files": [ - "static/**/*" + "static/**/*", + "!node_modules/@k8slens/open-lens/node_modules/**/*", + "!node_modules/@k8slens/open-lens/src" ], "afterSign": "../core/build/notarize.js", "extraResources": [ diff --git a/packages/open-lens/static/splash.html b/packages/open-lens/static/splash.html new file mode 100644 index 0000000000..2327ecd63f --- /dev/null +++ b/packages/open-lens/static/splash.html @@ -0,0 +1,164 @@ + + + + + +
+
+
+ +
OpenLens
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Loading... +
+
+
+
+ + diff --git a/packages/open-lens/webpack/dev-server.ts b/packages/open-lens/webpack/dev-server.ts index 21f9af5ecd..0e437ac6b4 100644 --- a/packages/open-lens/webpack/dev-server.ts +++ b/packages/open-lens/webpack/dev-server.ts @@ -20,7 +20,7 @@ const server = new WebpackDevServer({ headers: { "Access-Control-Allow-Origin": "*", }, - allowedHosts: "127.0.0.1", + allowedHosts: ".lens.app", host: "localhost", port: webpackDevServerPort, static: buildDir, // aka `devServer.contentBase` in webpack@4 diff --git a/packages/open-lens/webpack/renderer.ts b/packages/open-lens/webpack/renderer.ts index c51457902a..66234b2cf3 100644 --- a/packages/open-lens/webpack/renderer.ts +++ b/packages/open-lens/webpack/renderer.ts @@ -49,10 +49,10 @@ ".ts", ".tsx", ], }, - externals: { - "node-fetch": "commonjs node-fetch", - "npm": "commonjs npm", - }, + externals: [ + "node-fetch", + "npm", + ], optimization: { minimize: false, },