From 596e60a6f3af1b60ca5b8b3c9b46ada9dddc16c0 Mon Sep 17 00:00:00 2001 From: Jari Kolehmainen Date: Mon, 16 Nov 2020 15:09:16 +0200 Subject: [PATCH] Generate extension-api .d.ts and .js files using tsc (#1387) Signed-off-by: Jari Kolehmainen --- .eslintrc.js | 2 +- Makefile | 50 +++++++++++++++--- package.json | 10 ++-- src/common/utils/debouncePromise.ts | 2 +- src/extensions/extension-api.ts | 2 +- src/extensions/npm/extensions/.gitignore | 3 +- src/extensions/npm/extensions/package.json | 7 ++- src/extensions/rollup.config.js | 5 -- src/extensions/rollup.config.ts | 57 --------------------- tsconfig.extensions.json | 11 ++++ tsconfig.json | 7 ++- yarn.lock | 59 +--------------------- 12 files changed, 75 insertions(+), 140 deletions(-) delete mode 100644 src/extensions/rollup.config.js delete mode 100644 src/extensions/rollup.config.ts create mode 100644 tsconfig.extensions.json diff --git a/.eslintrc.js b/.eslintrc.js index 6fd243d54e..63ace2611b 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,5 +1,5 @@ module.exports = { - ignorePatterns: ["src/extensions/npm/extensions/api.d.ts"], + ignorePatterns: ["src/extensions/npm/extensions/dist/**/*"], overrides: [ { files: [ diff --git a/Makefile b/Makefile index fc89d72cb4..c5252a9748 100644 --- a/Makefile +++ b/Makefile @@ -6,49 +6,59 @@ else DETECTED_OS := $(shell uname) endif -.PHONY: init dev build test clean - +.PHONY: init init: install-deps download-bins compile-dev echo "Init done" +.PHONY: download-bins download-bins: yarn download-bins +.PHONY: install-deps install-deps: yarn install --frozen-lockfile --verbose yarn check --verify-tree --integrity +.PHONY: compile-dev compile-dev: yarn compile:main --cache yarn compile:renderer --cache +.PHONY: dev dev: ifeq ("$(wildcard static/build/main.js)","") make init endif yarn dev +.PHONY: lint lint: yarn lint +.PHONY: test test: download-bins yarn test +.PHONY: integration-linux integration-linux: build-extension-types build-extensions yarn build:linux yarn integration +.PHONY: integration-mac integration-mac: build-extension-types build-extensions yarn build:mac yarn integration +.PHONY: integration-win integration-win: build-extension-types build-extensions yarn build:win yarn integration +.PHONY: test-app test-app: yarn test +.PHONY: build build: install-deps download-bins build-extensions ifeq "$(DETECTED_OS)" "Windows" yarn dist:win @@ -56,23 +66,51 @@ else yarn dist endif +.PHONY: build-extensions build-extensions: $(foreach dir, $(wildcard $(EXTENSIONS_DIR)/*), (cd $(dir) && npm install && npm run build || exit $?);) +.PHONY: test-extensions test-extensions: $(foreach dir, $(wildcard $(EXTENSIONS_DIR)/*), (cd $(dir) && npm install --dev && npm run test || exit $?);) -build-npm: build-extension-types - yarn npm:fix-package-version +.PHONY: copy-extension-themes +copy-extension-themes: + mkdir -p src/extensions/npm/extensions/dist/src/renderer/themes/ + cp $(wildcard src/renderer/themes/*.json) src/extensions/npm/extensions/dist/src/renderer/themes/ -build-extension-types: +src/extensions/npm/extensions/__mocks__: + cp -r __mocks__ src/extensions/npm/extensions/ + +src/extensions/npm/extensions/dist: yarn compile:extension-types +.PHONY: build-npm +build-npm: build-extension-types copy-extension-themes src/extensions/npm/extensions/__mocks__ + yarn npm:fix-package-version + +.PHONY: build-extension-types +build-extension-types: src/extensions/npm/extensions/dist + +.PHONY: publish-npm publish-npm: build-npm npm config set '//registry.npmjs.org/:_authToken' "${NPM_TOKEN}" cd src/extensions/npm/extensions && npm publish --access=public -clean: +.PHONY: clean-npm +clean-npm: +ifeq "$(DETECTED_OS)" "Windows" + if exist src\extensions\npm\extensions\dist del /s /q src\extensions\npm\extensions\dist + if exist src\extensions\npm\extensions\__mocks__ del /s /q src\extensions\npm\extensions\__mocks__ + if exist src\extensions\npm\extensions\node_modules del /s /q src\extensions\npm\extensions\node_modules +else + rm -rf src/extensions/npm/extensions/dist + rm -rf src/extensions/npm/extensions/__mocks__ + rm -rf src/extensions/npm/extensions/node_modules +endif + +.PHONY: clean +clean: clean-npm ifeq "$(DETECTED_OS)" "Windows" if exist binaries\client del /s /q binaries\client\*.* if exist dist del /s /q dist\*.* diff --git a/package.json b/package.json index 141a128d4a..2aae54e4cd 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "compile:main": "yarn run webpack --config webpack.main.ts", "compile:renderer": "yarn run webpack --config webpack.renderer.ts", "compile:i18n": "yarn run lingui compile", - "compile:extension-types": "yarn run rollup --config src/extensions/rollup.config.js", + "compile:extension-types": "yarn run tsc -p ./tsconfig.extensions.json --outDir src/extensions/npm/extensions/dist", "npm:fix-package-version": "yarn run ts-node build/set_npm_version.ts", "build:linux": "yarn run compile && electron-builder --linux --dir -c.productName=Lens", "build:mac": "yarn run compile && electron-builder --mac --dir -c.productName=Lens", @@ -77,7 +77,8 @@ "^@lingui/macro$": "/__mocks__/@linguiMacro.ts" }, "modulePathIgnorePatterns": [ - "/dist" + "/dist", + "/src/extensions/npm" ], "setupFiles": [ "/src/jest.setup.ts" @@ -271,7 +272,6 @@ "@lingui/react": "^3.0.0-13", "@material-ui/core": "^4.10.1", "@pmmmwh/react-refresh-webpack-plugin": "^0.4.3", - "@rollup/plugin-json": "^4.1.0", "@testing-library/jest-dom": "^5.11.5", "@testing-library/react": "^11.1.0", "@types/chart.js": "^2.9.21", @@ -369,10 +369,6 @@ "react-router-dom": "^5.2.0", "react-select": "^3.1.0", "react-window": "^1.8.5", - "rollup": "^2.28.2", - "rollup-plugin-dts": "^1.4.13", - "rollup-plugin-ignore-import": "^1.3.2", - "rollup-pluginutils": "^2.8.2", "sass-loader": "^8.0.2", "sharp": "^0.26.1", "spectron": "11.0.0", diff --git a/src/common/utils/debouncePromise.ts b/src/common/utils/debouncePromise.ts index 22ffd5217f..c9dcfafc89 100755 --- a/src/common/utils/debouncePromise.ts +++ b/src/common/utils/debouncePromise.ts @@ -4,6 +4,6 @@ export function debouncePromise(func: (...args: F) => T | Pr let timer: NodeJS.Timeout; return (...params: any[]) => new Promise((resolve, reject) => { clearTimeout(timer); - timer = setTimeout(() => resolve(func.apply(this, params)), timeout); + timer = global.setTimeout(() => resolve(func.apply(this, params)), timeout); }); } diff --git a/src/extensions/extension-api.ts b/src/extensions/extension-api.ts index f3d3ff02ec..b6be0b9f4e 100644 --- a/src/extensions/extension-api.ts +++ b/src/extensions/extension-api.ts @@ -1,4 +1,4 @@ -// Extension-api types generation bundle (used by rollup.js) +// Extension-api types generation bundle export * from "./core-api" export * from "./renderer-api" diff --git a/src/extensions/npm/extensions/.gitignore b/src/extensions/npm/extensions/.gitignore index 482f8026a4..81174aebbf 100644 --- a/src/extensions/npm/extensions/.gitignore +++ b/src/extensions/npm/extensions/.gitignore @@ -1,2 +1,3 @@ -api.d.ts +dist/ yarn.lock +__mocks__/ diff --git a/src/extensions/npm/extensions/package.json b/src/extensions/npm/extensions/package.json index bfb32f75ce..1fc67414bf 100644 --- a/src/extensions/npm/extensions/package.json +++ b/src/extensions/npm/extensions/package.json @@ -5,9 +5,12 @@ "version": "0.0.0", "copyright": "© 2020, Mirantis, Inc.", "license": "MIT", - "types": "api.d.ts", + "main": "dist/src/extensions/extension-api.js", + "types": "dist/src/extensions/extension-api.d.ts", "files": [ - "api.d.ts" + "dist/**/*.ts", + "__mocks__/*.ts", + "dist/**/*.js" ], "author": { "name": "Mirantis, Inc.", diff --git a/src/extensions/rollup.config.js b/src/extensions/rollup.config.js deleted file mode 100644 index beb74ba319..0000000000 --- a/src/extensions/rollup.config.js +++ /dev/null @@ -1,5 +0,0 @@ -// Workaround for using Typescript in Rollup configutation -// https://stackoverflow.com/questions/54711437/does-rollup-support-typescript-in-rollup-config-file - -require('ts-node').register(); -module.exports = require('./rollup.config.ts'); diff --git a/src/extensions/rollup.config.ts b/src/extensions/rollup.config.ts deleted file mode 100644 index a076fa43ce..0000000000 --- a/src/extensions/rollup.config.ts +++ /dev/null @@ -1,57 +0,0 @@ -// Generating declaration types for extensions-api -// Rollup: https://rollupjs.org/guide/en/ -// Plugin docs: https://github.com/Swatinem/rollup-plugin-dts - -import { OutputChunk, Plugin, RollupOptions } from 'rollup'; -import json from '@rollup/plugin-json'; -import dts from "rollup-plugin-dts"; -import ignoreImport from 'rollup-plugin-ignore-import' - -const config: RollupOptions = { - input: "src/extensions/extension-api.ts", - output: [ - { file: "src/extensions/npm/extensions/api.d.ts", format: "es", } - ], - plugins: [ - dts(), - dtsModuleWrap({ name: "@k8slens/extensions" }), - ignoreImport({ extensions: ['.scss'] }), - json(), - ], -}; - -function dtsModuleWrap({ name }: { name: string }): Plugin { - return { - name, - generateBundle: (options, bundle) => { - const apiTypes = Object.values(bundle)[0] as OutputChunk; // extension-api.d.ts - const typeRefs: string[] = [] - const declarations: string[] = [] - const apiLines = apiTypes.code.split("\n") - let outputCode = "" - - apiLines.forEach(line => { - if (line.startsWith("///")) { - typeRefs.push(line) - } else { - declarations.push(line) - } - }) - - // print external @types refs first - if (typeRefs.length) { - outputCode += typeRefs.join("\n") + "\n\n" - } - - // wrap declarations into global module definition - outputCode += `declare module "${name}" {\n` - outputCode += declarations.map(line => `\t${line}`).join("\n") - outputCode += `\n}` - - // save - apiTypes.code = outputCode; - } - } -} - -export default [config]; diff --git a/tsconfig.extensions.json b/tsconfig.extensions.json new file mode 100644 index 0000000000..21579bae38 --- /dev/null +++ b/tsconfig.extensions.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.json", + "files": [ + "src/extensions/extension-api.ts", + ], + "compilerOptions": { + "module": "CommonJS", + "sourceMap": false, + "declaration": true + } +} diff --git a/tsconfig.json b/tsconfig.json index 9cfbd543a8..9c2190d6ba 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -35,12 +35,17 @@ "module": "CommonJS" } }, + "include": [ + "src/**/*", + "types/*.d.ts" + ], "exclude": [ "node_modules", "out", "dist", "coverage", "binaries", - "static" + "static", + "src/extensions/npm" ] } diff --git a/yarn.lock b/yarn.lock index 48b83faa3d..72b2025686 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1657,22 +1657,6 @@ schema-utils "^2.6.5" source-map "^0.7.3" -"@rollup/plugin-json@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-4.1.0.tgz#54e09867ae6963c593844d8bd7a9c718294496f3" - integrity sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw== - dependencies: - "@rollup/pluginutils" "^3.0.8" - -"@rollup/pluginutils@^3.0.8": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" - integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== - dependencies: - "@types/estree" "0.0.39" - estree-walker "^1.0.1" - picomatch "^2.2.2" - "@sindresorhus/is@^0.14.0": version "0.14.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" @@ -1890,11 +1874,6 @@ dependencies: electron "*" -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== - "@types/express-serve-static-core@*": version "4.17.13" resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.13.tgz#d9af025e925fc8b089be37423b8d1eac781be084" @@ -5935,16 +5914,6 @@ estraverse@^5.1.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642" integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw== -estree-walker@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" - integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== - -estree-walker@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" - integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== - esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -11269,7 +11238,7 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1, picomatch@^2.2.2: +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== @@ -12522,32 +12491,6 @@ roarr@^2.15.3: semver-compare "^1.0.0" sprintf-js "^1.1.2" -rollup-plugin-dts@^1.4.13: - version "1.4.13" - resolved "https://registry.yarnpkg.com/rollup-plugin-dts/-/rollup-plugin-dts-1.4.13.tgz#4f086e84f4fdcc1f49160799ebc66f6b09db292b" - integrity sha512-7mxoQ6PcmCkBE5ZhrjGDL4k42XLy8BkSqpiRi1MipwiGs+7lwi4mQkp2afX+OzzLjJp/TGM8llfe8uayIUhPEw== - optionalDependencies: - "@babel/code-frame" "^7.10.4" - -rollup-plugin-ignore-import@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-ignore-import/-/rollup-plugin-ignore-import-1.3.2.tgz#5379eac73d2c7e389ebeb5b3a90ae4c15c15e6c8" - integrity sha512-q7yH2c+PKVfb61+MTXqqyBHIgflikumC7OEB+OfQWNsSmDqE5FLZLeewcBGl1VDmjDjSXuALXsaBjyIsl3oNmQ== - -rollup-pluginutils@^2.8.2: - version "2.8.2" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" - integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== - dependencies: - estree-walker "^0.6.1" - -rollup@^2.28.2: - version "2.28.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.28.2.tgz#599ec4978144a82d8a8ec3d37670a8440cb04e4b" - integrity sha512-8txbsFBFLmm9Xdt4ByTOGa9Muonmc8MfNjnGAR8U8scJlF1ZW7AgNZa7aqBXaKtlvnYP/ab++fQIq9dB9NWUbg== - optionalDependencies: - fsevents "~2.1.2" - rsvp@^4.8.4: version "4.8.5" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734"