From 35203feb95c8eaa71a3566e1f6a66f7f16d72871 Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Mon, 20 Jul 2020 16:51:37 +0800 Subject: [PATCH 1/9] chore: upgrade to tsup 3.0 --- package.json | 4 ++-- yarn.lock | 35 +++++++++-------------------------- 2 files changed, 11 insertions(+), 28 deletions(-) diff --git a/package.json b/package.json index dbe28305..5f453eef 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "url": "https://github.com/egoist/tsup.git" }, "scripts": { - "build": "rm -rf dist && tsup src/cli.ts src/index.ts src/rollup.ts --external typescript --bundle --dts", + "build": "rm -rf dist && tsup src/cli.ts src/index.ts src/rollup.ts --dts", "prepublishOnly": "npm run build", "test": "npm run build && jest" }, @@ -39,7 +39,7 @@ "prettier": "^2.0.5", "rollup-plugin-hashbang": "^2.2.2", "ts-jest": "^26.1.2", - "tsup": "^2.1.0", + "tsup": "^3.0.0", "typescript": "^3.9.6" } } diff --git a/yarn.lock b/yarn.lock index 2f957e90..ca346338 100644 --- a/yarn.lock +++ b/yarn.lock @@ -484,7 +484,7 @@ dependencies: "@rollup/pluginutils" "^3.0.8" -"@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0": +"@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== @@ -1309,11 +1309,6 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -esbuild@^0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.6.3.tgz#a957e22f2503c745793514388110f9b55b3a6f83" - integrity sha512-4lHgz/EvGLRQnDYzzrvW+eilaPHim5pCLz4mP0k0QIalD/n8Ji2NwQwoIa1uX+yKkbn9R/FAZvaEbodjx55rDg== - esbuild@^0.6.4: version "0.6.5" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.6.5.tgz#efbe11cf51abd0d4d489ca1bc80fd4761a35bd16" @@ -3143,15 +3138,6 @@ rollup-plugin-dts@^1.4.8: optionalDependencies: "@babel/code-frame" "^7.10.4" -rollup-plugin-esbuild@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-esbuild/-/rollup-plugin-esbuild-2.4.1.tgz#6e05850e3051a56811b2f491e2243272701b060d" - integrity sha512-UyL3LKbh4DxV8VZCzEw3kZB/z+vhkIXSMT8Y5JzOMc/PI3FGA6w94vSRl68IZUsS1hLxG1NB+W+0ck/9fDLk3A== - dependencies: - "@rollup/pluginutils" "^3.1.0" - joycon "^2.2.5" - strip-json-comments "^3.1.1" - rollup-plugin-hashbang@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/rollup-plugin-hashbang/-/rollup-plugin-hashbang-2.2.2.tgz#971fc49b452e63f9dfdc75f79ae7256b3485e750" @@ -3470,11 +3456,6 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - sucrase@^3.15.0: version "3.15.0" resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.15.0.tgz#78596a78be7264a65b52ed8d873883413ef0220c" @@ -3637,17 +3618,19 @@ ts-jest@^26.1.2: semver "7.x" yargs-parser "18.x" -tsup@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tsup/-/tsup-2.1.0.tgz#2d6410d38a62e28a20eb6cb863fe5590b5488b3c" - integrity sha512-olm/SXqV58FUczleRXRuZiUB3odEbH+BH+AQGZgW8PgTkCKjN+MIvw7T6KewH6Y0guUFkJJw7M4q8EMYjaIioA== +tsup@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/tsup/-/tsup-3.0.0.tgz#2474176b35fcebfdd4a48f17e7d302946f45830f" + integrity sha512-R4nwIEiR7SiTFl92wk5OHFetJvIUFPDJu3HlMpOnAVrza8YlrK4zyYbfSUaV8M9w4f2z2+HE246L4CRjLWIeQA== dependencies: cac "^6.5.13" - esbuild "^0.6.3" + chalk "^4.1.0" + chokidar "^3.4.1" + esbuild "^0.6.4" joycon "^2.2.5" rollup "^2.21.0" rollup-plugin-dts "^1.4.8" - rollup-plugin-esbuild "^2.4.1" + sucrase "^3.15.0" tunnel-agent@^0.6.0: version "0.6.0" From a3ac5bf49805ec527a9170114d07e0e2b38229cd Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Mon, 20 Jul 2020 16:53:01 +0800 Subject: [PATCH 2/9] chore: no longer support --dts-bundle --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 33ff5702..6aee9c43 100644 --- a/README.md +++ b/README.md @@ -51,8 +51,6 @@ tsup index.ts --dts This will emit `./dist/index.js` and `./dist/index.d.ts`. -If you want to bundle types from `node_modules` as well, use the `--dts-bundle` flag instead, which implicitly set `--dts` flag as well. (Note that this is experimental.) - ### Bundle formats Supported format: `esm`, `cjs`, (default) and `iife`. From c3b88aeac73407dfbe6a89b40c8a6ab8c2794e54 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 20 Jul 2020 21:25:26 +0000 Subject: [PATCH 3/9] chore(deps): [security] bump lodash from 4.17.15 to 4.17.19 (#73) --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index ca346338..3f2675b6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2541,9 +2541,9 @@ lodash.sortby@^4.7.0: integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= lodash@^4.17.13, lodash@^4.17.15: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" - integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + version "4.17.19" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" + integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== magic-string@^0.22.4: version "0.22.5" From f16372e84aa3cbe39e1f0fddd5bc195dd7ae36ad Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 20 Jul 2020 21:26:05 +0000 Subject: [PATCH 4/9] chore(deps): bump cac from 6.5.13 to 6.6.1 (#74) --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 5f453eef..808d2401 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "test": "npm run build && jest" }, "dependencies": { - "cac": "^6.5.13", + "cac": "^6.6.1", "chalk": "^4.1.0", "chokidar": "^3.4.1", "esbuild": "^0.6.4", diff --git a/yarn.lock b/yarn.lock index 3f2675b6..32d03d7b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -936,10 +936,10 @@ buffer-from@1.x, buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== -cac@^6.5.13: - version "6.5.13" - resolved "https://registry.yarnpkg.com/cac/-/cac-6.5.13.tgz#8d9be6dce0afb707c76c5962bf9cc6571f4c933a" - integrity sha512-pt643//kQb3S6syXMJ/EIfNZpivKeFpCdnnPbJ3Iq9ZVZyXQcQjXvzVMWTEQuUspp+rHUlhZYZZfnviP88VuYA== +cac@^6.5.13, cac@^6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/cac/-/cac-6.6.1.tgz#3dde3f6943f45d42a56729ea3573c08b3e7b6a6d" + integrity sha512-uhki4T3Ax68hw7Dufi0bATVAF8ayBSwOKUEJHjObPrUN4tlQ8Lf7oljpTje/mArLxYN0D743c2zJt4C1bVTCqg== cache-base@^1.0.1: version "1.0.1" From 42c7d9b7365d1ba1e0b22bab6d1f163dfe797760 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 20 Jul 2020 21:26:36 +0000 Subject: [PATCH 5/9] chore(deps-dev): bump typescript from 3.9.6 to 3.9.7 (#77) --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 808d2401..8e0a491e 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,6 @@ "rollup-plugin-hashbang": "^2.2.2", "ts-jest": "^26.1.2", "tsup": "^3.0.0", - "typescript": "^3.9.6" + "typescript": "^3.9.7" } } diff --git a/yarn.lock b/yarn.lock index 32d03d7b..2052799b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3678,10 +3678,10 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typescript@^3.9.6: - version "3.9.6" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.6.tgz#8f3e0198a34c3ae17091b35571d3afd31999365a" - integrity sha512-Pspx3oKAPJtjNwE92YS05HQoY7z2SFyOpHo9MqJor3BXAGNaPUs83CuVp9VISFkSjyRfiTpmKuAYGJB7S7hOxw== +typescript@^3.9.7: + version "3.9.7" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" + integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== union-value@^1.0.0: version "1.0.1" From 8b52a5751d277e296a8bf4b2fd0d866afabcbea3 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 20 Jul 2020 21:26:42 +0000 Subject: [PATCH 6/9] chore(deps-dev): bump @types/jest from 26.0.4 to 26.0.5 (#75) --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 8e0a491e..b4d3b861 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "devDependencies": { "@rollup/plugin-json": "^4.1.0", "@types/fs-extra": "^9.0.1", - "@types/jest": "^26.0.4", + "@types/jest": "^26.0.5", "@types/node": "^14.0.23", "@types/resolve": "^1.17.1", "execa": "^4.0.3", diff --git a/yarn.lock b/yarn.lock index 2052799b..32572332 100644 --- a/yarn.lock +++ b/yarn.lock @@ -595,10 +595,10 @@ "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" -"@types/jest@^26.0.4": - version "26.0.4" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.4.tgz#d2e513e85aca16992816f192582b5e67b0b15efb" - integrity sha512-4fQNItvelbNA9+sFgU+fhJo8ZFF+AS4Egk3GWwCW2jFtViukXbnztccafAdLhzE/0EiCogljtQQXP8aQ9J7sFg== +"@types/jest@^26.0.5": + version "26.0.5" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.5.tgz#23a8eecf4764a770ea8d3a0d1ea16b96c822035d" + integrity sha512-heU+7w8snfwfjtcj2H458aTx3m5unIToOJhx75ebHilBiiQ39OIdA18WkG4LP08YKeAoWAGvWg8s+22w/PeJ6w== dependencies: jest-diff "^25.2.1" pretty-format "^25.2.1" From 1d03de78e1cc63a465d0b2226ba9aff55b5ec735 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 20 Jul 2020 21:29:37 +0000 Subject: [PATCH 7/9] chore(deps): bump rollup from 2.21.0 to 2.22.1 (#78) --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index b4d3b861..ae715ce2 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "chokidar": "^3.4.1", "esbuild": "^0.6.4", "joycon": "^2.2.5", - "rollup": "^2.21.0", + "rollup": "^2.22.1", "rollup-plugin-dts": "^1.4.8", "sucrase": "^3.15.0" }, diff --git a/yarn.lock b/yarn.lock index 32572332..8c828d14 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3145,10 +3145,10 @@ rollup-plugin-hashbang@^2.2.2: dependencies: magic-string "^0.22.4" -rollup@^2.21.0: - version "2.21.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.21.0.tgz#d2e114533812043d5c9b7b0a83f1b2a242e4e1d6" - integrity sha512-BEGgy+wSzux7Ycq58pRiWEOBZaXRXTuvzl1gsm7gqmsAHxkWf9nyA5V2LN9fGSHhhDQd0/C13iRzSh4bbIpWZQ== +rollup@^2.21.0, rollup@^2.22.1: + version "2.22.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.22.1.tgz#8700522aa5feb12c6bd51810df8a276699d136b1" + integrity sha512-K9AUQUCJkVqC+A7uUDacfhmpEeAjc2uOmSpvGI5xaYsm8pXgy4ZWEM8wHPfKj11xvCwFZppkRDo8a0RESJXCnw== optionalDependencies: fsevents "~2.1.2" From 4f36b9df1a1760c085c38dd403d1882bc3c2ba29 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 20 Jul 2020 21:29:54 +0000 Subject: [PATCH 8/9] chore(deps-dev): bump ts-jest from 26.1.2 to 26.1.3 (#76) --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index ae715ce2..3dc6c0f9 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "jest": "^26.1.0", "prettier": "^2.0.5", "rollup-plugin-hashbang": "^2.2.2", - "ts-jest": "^26.1.2", + "ts-jest": "^26.1.3", "tsup": "^3.0.0", "typescript": "^3.9.7" } diff --git a/yarn.lock b/yarn.lock index 8c828d14..2afcaece 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3602,10 +3602,10 @@ ts-interface-checker@^0.1.9: resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.11.tgz#07e7eddb08212f83fef12c253d0cefa8c70fe1bc" integrity sha512-Jx6cFBiuCQrRl3CgoIOamIE/toZ8jQJbIlsLGpkBiUpCEUyFcyZ2pvjP8kSXIcz8V5v/murgm/5EfIQapUmh6A== -ts-jest@^26.1.2: - version "26.1.2" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.1.2.tgz#dd2e832ffae9cb803361483b6a3010a6413dc475" - integrity sha512-V4SyBDO9gOdEh+AF4KtXJeP+EeI4PkOrxcA8ptl4o8nCXUVM5Gg/8ngGKneS5BsZaR9DXVQNqj9k+iqGAnpGow== +ts-jest@^26.1.3: + version "26.1.3" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.1.3.tgz#aac928a05fdf13e3e6dfbc8caec3847442667894" + integrity sha512-beUTSvuqR9SmKQEylewqJdnXWMVGJRFqSz2M8wKJe7GBMmLZ5zw6XXKSJckbHNMxn+zdB3guN2eOucSw2gBMnw== dependencies: bs-logger "0.x" buffer-from "1.x" From 0ebb08dd8ec70c13ec09b05c8fb33d87d83ff2ec Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Tue, 21 Jul 2020 15:17:02 +0800 Subject: [PATCH 9/9] feat: add es5 target --- README.md | 4 + package.json | 5 +- src/index.ts | 68 +++++++++++---- src/utils.ts | 16 +++- test/__snapshots__/index.test.ts.snap | 14 +++ test/index.test.ts | 26 +++++- yarn.lock | 118 +++++++++++++++++++++++++- 7 files changed, 228 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 6aee9c43..2b973695 100644 --- a/README.md +++ b/README.md @@ -72,6 +72,10 @@ dist └── index.js ``` +### ES5 support + +You can `--target es5` or `"target": "es5" in `tsconfig.json` to compile the code down to es5, it's processed by [buble](http://buble.surge.sh/). Some features are supported by this target, namely: `for .. of`. + ### Watch mode ```bash diff --git a/package.json b/package.json index 3dc6c0f9..c5232d8e 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ }, "devDependencies": { "@rollup/plugin-json": "^4.1.0", + "@types/buble": "^0.19.2", "@types/fs-extra": "^9.0.1", "@types/jest": "^26.0.5", "@types/node": "^14.0.23", @@ -40,6 +41,8 @@ "rollup-plugin-hashbang": "^2.2.2", "ts-jest": "^26.1.3", "tsup": "^3.0.0", - "typescript": "^3.9.7" + "typescript": "^3.9.7", + "strip-json-comments": "^3.1.1", + "buble": "^0.20.0" } } diff --git a/src/index.ts b/src/index.ts index f4539300..878f28b5 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,9 +2,11 @@ import fs from 'fs' import { dirname, join } from 'path' import { Worker } from 'worker_threads' import colors from 'chalk' +import { transform as transformToEs5 } from 'buble' import { Service, startService, BuildResult } from 'esbuild' -import { getDeps, resolveTsConfig } from './utils' +import { getDeps, loadTsConfig } from './utils' import { FSWatcher } from 'chokidar' +import { PrettyError } from './errors' const textDecoder = new TextDecoder('utf-8') @@ -63,11 +65,13 @@ export async function runEsbuild( globalName: options.globalName, jsxFactory: options.jsxFactory, jsxFragment: options.jsxFragment, + target: options.target === 'es5' ? 'es2016' : options.target, define: options.define, external, outdir: format === 'cjs' ? outDir : join(outDir, format), write: false, splitting: format === 'cjs' || format === 'esm', + logLevel: 'error' })) const timeInMs = Date.now() - startTime console.log( @@ -91,25 +95,41 @@ export async function runEsbuild( result.outputFiles.map(async (file) => { const dir = dirname(file.path) const outPath = file.path + if (!outPath.endsWith('.js')) return await fs.promises.mkdir(dir, { recursive: true }) let mode: number | undefined if (file.contents[0] === 35 && file.contents[1] === 33) { mode = 0o755 } + let contents = textDecoder.decode(file.contents) + if (options.target === 'es5') { + try { + contents = transformToEs5(contents, { + source: file.path, + file: file.path, + transforms: { + modules: false, + arrow: true, + dangerousTaggedTemplateString: true, + spreadRest: true, + }, + }).code + } catch (error) { + throw new PrettyError( + `Error compiling to es5 target:\n${error.snippet}` + ) + } + } // Cause we need to transform to code from esm to cjs first - if (format === 'cjs' && outPath.endsWith('.js')) { - const content = transform(textDecoder.decode(file.contents), { + if (format === 'cjs') { + contents = transform(contents, { transforms: ['imports'], - }) - await fs.promises.writeFile(outPath, content.code, { - encoding: 'utf8', - mode, - }) - } else { - await fs.promises.writeFile(outPath, file.contents, { - mode, - }) + }).code } + await fs.promises.writeFile(outPath, contents, { + encoding: 'utf8', + mode, + }) }) ) } @@ -124,6 +144,8 @@ function stopServices() { } export async function build(options: Options) { + options = { ...options } + let watcher: FSWatcher | undefined let runServices: Array<() => Promise> | undefined @@ -150,10 +172,24 @@ export async function build(options: Options) { } try { - const tsconfig = resolveTsConfig(process.cwd()) - if (tsconfig) { - console.log(makeLabel('CLI', 'info'), `Using tsconfig: ${tsconfig}`) + const tsconfig = await loadTsConfig(process.cwd()) + if (tsconfig.path && tsconfig.data) { + console.log(makeLabel('CLI', 'info'), `Using tsconfig: ${tsconfig.path}`) + if (!options.target) { + options.target = tsconfig.data.compilerOptions?.target + } + if (!options.jsxFactory) { + options.jsxFactory = tsconfig.data.compilerOptions?.jsxFactory + } + if (!options.jsxFragment) { + options.jsxFragment = tsconfig.data.compilerOptions?.jsxFragmentFactory + } + } + + if (!options.target) { + options.target = 'es2018' } + console.log(makeLabel('CLI', 'info'), `Target: ${options.target}`) runServices = await Promise.all([ ...options.format.map((format) => runEsbuild(options, { format })), @@ -164,7 +200,7 @@ export async function build(options: Options) { worker.postMessage({ options, }) - worker.on('message', data => { + worker.on('message', (data) => { if (data === 'exit') { worker.unref() } diff --git a/src/utils.ts b/src/utils.ts index 81a4cadc..6dc40c02 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,7 +1,19 @@ +import fs from 'fs' import JoyCon from 'joycon' +import stripJsonComments from 'strip-json-comments' const joycon = new JoyCon() +joycon.addLoader({ + test: /\.json$/, + async load(filepath) { + const content = stripJsonComments( + await fs.promises.readFile(filepath, 'utf8') + ) + return JSON.parse(content) + }, +}) + // No backslash in path function slash(input: string) { return input.replace(/\\/g, '/') @@ -45,8 +57,8 @@ export function isExternal( return false } -export function resolveTsConfig(cwd: string) { - return joycon.resolveSync(['tsconfig.build.json', 'tsconfig.json'], cwd) +export function loadTsConfig(cwd: string) { + return joycon.load(['tsconfig.build.json', 'tsconfig.json'], cwd) } export async function getDeps(cwd: string) { diff --git a/test/__snapshots__/index.test.ts.snap b/test/__snapshots__/index.test.ts.snap index 6910f29e..b54c74ed 100644 --- a/test/__snapshots__/index.test.ts.snap +++ b/test/__snapshots__/index.test.ts.snap @@ -1,5 +1,19 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`es5 target 1`] = ` +"\\"use strict\\";Object.defineProperty(exports, \\"__esModule\\", {value: true});// input.ts +var Foo = function Foo () {}; + +Foo.prototype.hi = function hi () { + var a = function () { return \\"foo\\"; }; + console.log(a()); +}; + + +exports.Foo = Foo; +" +`; + exports[`simple 1`] = ` "\\"use strict\\";Object.defineProperty(exports, \\"__esModule\\", {value: true});// foo.ts var foo_default = \\"foo\\"; diff --git a/test/index.test.ts b/test/index.test.ts index ce7594ea..202b35c6 100644 --- a/test/index.test.ts +++ b/test/index.test.ts @@ -24,14 +24,16 @@ function runTest( return fs.outputFile(join(testDir, name), files[name], 'utf8') }) ) - const { exitCode } = await execa( + const { exitCode, stdout, stderr } = await execa( bin, ['input.ts', ...(options.flags || [])], { cwd: testDir, } ) - expect(exitCode).toBe(0) + if (exitCode !== 0) { + throw new Error(stdout + stderr) + } if (options.snapshot !== false) { const output = await fs.readFile(join(testDir, 'dist/input.js'), 'utf8') expect(output).toMatchSnapshot() @@ -51,6 +53,24 @@ runTest( }, { snapshot: false, - flags: ['--dts'] + flags: ['--dts'], + } +) + +runTest( + 'es5 target', + { + 'input.ts': ` + export class Foo { + hi (): void { + let a = () => 'foo' + + console.log(a()) + } + } + `, + }, + { + flags: ['--target', 'es5'], } ) diff --git a/yarn.lock b/yarn.lock index 2afcaece..02cffa46 100644 --- a/yarn.lock +++ b/yarn.lock @@ -551,6 +551,13 @@ dependencies: "@babel/types" "^7.3.0" +"@types/buble@^0.19.2": + version "0.19.2" + resolved "https://registry.yarnpkg.com/@types/buble/-/buble-0.19.2.tgz#a4289d20b175b3c206aaad80caabdabe3ecdfdd1" + integrity sha512-uUD8zIfXMKThmFkahTXDGI3CthFH1kMg2dOm3KLi4GlC5cbARA64bEcUMbbWdWdE73eoc/iBB9PiTMqH0dNS2Q== + dependencies: + magic-string "^0.25.0" + "@types/color-name@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" @@ -647,6 +654,11 @@ abab@^2.0.3: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg== +acorn-dynamic-import@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" + integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw== + acorn-globals@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" @@ -655,11 +667,21 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" +acorn-jsx@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" + integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== + acorn-walk@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.1.1.tgz#345f0dffad5c735e7373d2fec9a1023e6a44b83e" integrity sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ== +acorn@^6.4.1: + version "6.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" + integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== + acorn@^7.1.1: version "7.2.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.2.0.tgz#17ea7e40d7c8640ff54a694c889c26f31704effe" @@ -931,6 +953,19 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" +buble@^0.20.0: + version "0.20.0" + resolved "https://registry.yarnpkg.com/buble/-/buble-0.20.0.tgz#a143979a8d968b7f76b57f38f2e7ce7cfe938d1f" + integrity sha512-/1gnaMQE8xvd5qsNBl+iTuyjJ9XxeaVxAMF86dQ4EyxFJOZtsgOS8Ra+7WHgZTam5IFDtt4BguN0sH0tVTKrOw== + dependencies: + acorn "^6.4.1" + acorn-dynamic-import "^4.0.0" + acorn-jsx "^5.2.0" + chalk "^2.4.2" + magic-string "^0.25.7" + minimist "^1.2.5" + regexpu-core "4.5.4" + buffer-from@1.x, buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -983,7 +1018,7 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@^2.0.0: +chalk@^2.0.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -2430,6 +2465,11 @@ jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -2552,6 +2592,13 @@ magic-string@^0.22.4: dependencies: vlq "^0.2.2" +magic-string@^0.25.0, magic-string@^0.25.7: + version "0.25.7" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" + integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== + dependencies: + sourcemap-codec "^1.4.4" + make-dir@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" @@ -3020,6 +3067,18 @@ readdirp@~3.4.0: dependencies: picomatch "^2.2.1" +regenerate-unicode-properties@^8.0.2: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" + integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== + regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" @@ -3028,6 +3087,30 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regexpu-core@4.5.4: + version "4.5.4" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.4.tgz#080d9d02289aa87fe1667a4f5136bc98a6aebaae" + integrity sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.0.2" + regjsgen "^0.5.0" + regjsparser "^0.6.0" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.1.0" + +regjsgen@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + +regjsparser@^0.6.0: + version "0.6.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== + dependencies: + jsesc "~0.5.0" + remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" @@ -3344,6 +3427,11 @@ source-map@^0.7.3: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== +sourcemap-codec@^1.4.4: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + spdx-correct@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" @@ -3456,6 +3544,11 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + sucrase@^3.15.0: version "3.15.0" resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.15.0.tgz#78596a78be7264a65b52ed8d873883413ef0220c" @@ -3683,6 +3776,29 @@ typescript@^3.9.7: resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== + union-value@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"