diff --git a/docs/todo/core.md b/docs/todo/core.md index b859d39..7362726 100644 --- a/docs/todo/core.md +++ b/docs/todo/core.md @@ -1,5 +1,6 @@ # @idraw/core +* [] License text in JS result * [] Options default data * [] Support gradient color * [] Listen keyboard action diff --git a/package.json b/package.json index d9c3ee0..387f289 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "@babel/preset-typescript": "^7.13.0", "@microsoft/api-extractor": "^7.13.2", "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/pluginutils": "^4.1.1", "@types/jest": "^26.0.23", "@typescript-eslint/eslint-plugin": "^4.25.0", "@typescript-eslint/parser": "^4.25.0", @@ -50,7 +51,9 @@ "postcss": "^8.2.9", "puppeteer": "^8.0.0", "rollup": "^2.40.0", + "rollup-plugin-cleanup": "^3.2.1", "rollup-plugin-postcss": "^4.0.0", + "rollup-plugin-terser": "^7.0.2", "rollup-plugin-typescript2": "^0.30.0", "serve-handler": "^6.1.3", "ts-node": "^9.1.1", diff --git a/scripts/rollup.config.js b/scripts/rollup.config.js index b839d4d..394ce2c 100644 --- a/scripts/rollup.config.js +++ b/scripts/rollup.config.js @@ -1,9 +1,12 @@ const path = require('path'); const typescript = require('rollup-plugin-typescript2'); +const { terser } = require('rollup-plugin-terser'); +const cleanup = require('rollup-plugin-cleanup'); const { nodeResolve } = require('@rollup/plugin-node-resolve'); const { getTargetPackage } = require('./config'); const dtsPlugin = require('./util/dts-plugin'); const stylePlugin = require('./util/style-plugin'); +// const cleanPlugin = require('./util/clean-plugin'); const resolveFile = function(names = []) { return path.join(__dirname, '..', 'packages', ...names) @@ -58,8 +61,31 @@ function createConfigItem(params) { exports }, plugins: [ - ...[stylePlugin(), nodeResolve(), typescript()], + ...[ + stylePlugin(), + nodeResolve(), + typescript({ + tsconfig: path.resolve(__dirname, '..', 'tsconfig.json'), + tsconfigOverride: {} + }), + ], ...plugins, + ...[ + // cleanPlugin({ + // sourcemap: process.env.NODE_ENV === 'development', + // }), + // terser({ + // output: { + // beautify: true, + // // comments: false, + // // indent_level: 2, + // // quote_style: 3, + // } + // }) + cleanup({ + comments: 'none', + }), + ] ], }; } diff --git a/scripts/util/clean-plugin.js b/scripts/util/clean-plugin.js new file mode 100644 index 0000000..aa91b67 --- /dev/null +++ b/scripts/util/clean-plugin.js @@ -0,0 +1,39 @@ +const extname = require("path").extname; +const { createFilter } = require('@rollup/pluginutils'); +const MagicString = require('magic-string'); + +module.exports = function cleanPlugin(options = {}) { + const filter = createFilter(options.include, options.exclude); + const sourcemap = options.sourcemap === true; + + return { + name: 'clean-plugin', + + transform (code, id) { + if (!filter(id) || !(['.js', '.ts'].indexOf(extname(id)) >= 0)) return; + + let codeStr = `${code}`; + const magic = new MagicString(codeStr); + if (sourcemap === true) { + codeStr = codeStr.replace(/\/\*\!([^\\]+)\*\//gi, function(match, offset) { + const start = offset; + const end = offset + match.length; + magic.overwrite(start, end, ''); + return ''; + }); + } + const resultCode = magic.toString(); + let resultMap = false; + if (sourcemap === true) { + resultMap = magic.generateMap({ + hires: true, + }); + } + return { + code: resultCode, + map: resultMap, + }; + } + + }; +} \ No newline at end of file diff --git a/scripts/util/dts-plugin.js b/scripts/util/dts-plugin.js index 0001ccf..3380eca 100644 --- a/scripts/util/dts-plugin.js +++ b/scripts/util/dts-plugin.js @@ -26,7 +26,7 @@ module.exports = function myPlugin(pkgName) { if (extractorResult.succeeded) { // concat additional d.ts to rolled-up dts const typesDir = path.resolve(pkgDir, 'types') - if (await fs.exists(typesDir)) { + if (fs.existsSync(typesDir)) { const dtsPath = path.resolve(pkgDir, pkg.types) const existing = await fs.readFile(dtsPath, 'utf-8') const typeFiles = await fs.readdir(typesDir) diff --git a/tsconfig.json b/tsconfig.json index bd40edc..55a426b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -13,7 +13,7 @@ "experimentalDecorators": true, "resolveJsonModule": true, "esModuleInterop": true, - "removeComments": false, + "removeComments": true, "jsx": "preserve", "lib": ["ESNext", "dom"], "rootDir": ".",