From 2a42a02fc7c3619560dfaf65d548790c68c25453 Mon Sep 17 00:00:00 2001 From: Giuem Date: Fri, 31 Dec 2021 20:34:24 +0800 Subject: [PATCH] fix: support multiple targets (#525) --- src/cli-main.ts | 3 ++ src/options.ts | 2 +- test/index.test.ts | 17 ++++++ test/snapshots/index.test.ts.md | 87 +++++++++++++++++++----------- test/snapshots/index.test.ts.snap | Bin 2537 -> 2583 bytes 5 files changed, 76 insertions(+), 33 deletions(-) diff --git a/src/cli-main.ts b/src/cli-main.ts index e585fd78..dc17d34f 100644 --- a/src/cli-main.ts +++ b/src/cli-main.ts @@ -97,6 +97,9 @@ export async function main(options: Options = {}) { const external = ensureArray(flags.external) options.external = external } + if (flags.target) { + options.target = flags.target.indexOf(',') >= 0 ? flags.target.split(',') : flags.target + } if (flags.dts || flags.dtsResolve || flags.dtsOnly) { options.dts = {} if (typeof flags.dts === 'string') { diff --git a/src/options.ts b/src/options.ts index 518061a8..6d9850cd 100644 --- a/src/options.ts +++ b/src/options.ts @@ -37,7 +37,7 @@ export type Options = { * * default to `node12` */ - target?: string + target?: string | string[] minify?: boolean minifyWhitespace?: boolean minifyIdentifiers?: boolean diff --git a/test/index.test.ts b/test/index.test.ts index 2abe9501..9ac7158b 100644 --- a/test/index.test.ts +++ b/test/index.test.ts @@ -760,3 +760,20 @@ test('es5 target', async (t) => { t.regex(output, /createClass/) t.deepEqual(outFiles, ['input.js']) }) + +test('multiple targets', async (t) => { + const { output, outFiles } = await run( + t.title, + { + 'input.ts': ` + export const answer = 42 + ` + }, + { + entry: ['input.ts'], + flags: ['--target', 'es2020,chrome58,firefox57,safari11,edge16'], + } + ) + t.snapshot(output) + t.deepEqual(outFiles, ['input.js']) +}) diff --git a/test/snapshots/index.test.ts.md b/test/snapshots/index.test.ts.md index 0aadba81..d65e0d6f 100644 --- a/test/snapshots/index.test.ts.md +++ b/test/snapshots/index.test.ts.md @@ -41,38 +41,6 @@ Generated by [AVA](https://avajs.dev). export { MarkRequired };␊ ` -## es5 target - -> Snapshot 1 - - `var __defProp = Object.defineProperty;␊ - var __markAsModule = function (target) { return __defProp(target, "__esModule", { value: true }); };␊ - var __export = function (target, all) {␊ - __markAsModule(target);␊ - for (var name in all)␊ - { __defProp(target, name, { get: all[name], enumerable: true }); }␊ - };␊ - ␊ - // input.ts␊ - __export(exports, {␊ - Foo: function () { return Foo; }␊ - });␊ - var Foo = /*@__PURE__*/(function () {␊ - function Foo () {}␊ - ␊ - Foo.prototype.hi = function hi () {␊ - var a = function () { return "foo"; };␊ - console.log(a());␊ - };␊ - ␊ - return Foo;␊ - }());␊ - // Annotate the CommonJS export names for ESM import in node:␊ - 0 && (module.exports = {␊ - Foo: Foo␊ - });␊ - ` - ## multiple formats > Snapshot 1 @@ -468,3 +436,58 @@ Generated by [AVA](https://avajs.dev). ␊ export { bar };␊ ` + +## es5 target + +> Snapshot 1 + + `var __defProp = Object.defineProperty;␊ + var __markAsModule = function (target) { return __defProp(target, "__esModule", { value: true }); };␊ + var __export = function (target, all) {␊ + __markAsModule(target);␊ + for (var name in all)␊ + { __defProp(target, name, { get: all[name], enumerable: true }); }␊ + };␊ + ␊ + // input.ts␊ + __export(exports, {␊ + Foo: function () { return Foo; }␊ + });␊ + var Foo = /*@__PURE__*/(function () {␊ + function Foo () {}␊ + ␊ + Foo.prototype.hi = function hi () {␊ + var a = function () { return "foo"; };␊ + console.log(a());␊ + };␊ + ␊ + return Foo;␊ + }());␊ + // Annotate the CommonJS export names for ESM import in node:␊ + 0 && (module.exports = {␊ + Foo: Foo␊ + });␊ + ` + +## multiple targets + +> Snapshot 1 + + `var __defProp = Object.defineProperty;␊ + var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });␊ + var __export = (target, all) => {␊ + __markAsModule(target);␊ + for (var name in all)␊ + __defProp(target, name, { get: all[name], enumerable: true });␊ + };␊ + ␊ + // input.ts␊ + __export(exports, {␊ + answer: () => answer␊ + });␊ + var answer = 42;␊ + // Annotate the CommonJS export names for ESM import in node:␊ + 0 && (module.exports = {␊ + answer␊ + });␊ + ` diff --git a/test/snapshots/index.test.ts.snap b/test/snapshots/index.test.ts.snap index e622ded75465de521c17fd4ebd5bd6d616c4f181..e4d2e82ff870bdb9a9cd1646d56327c38d5e01be 100644 GIT binary patch literal 2583 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 literal 2537 zcmVW?B$R130I z*f4?(mmF#-k(>=@C`;Ka(D*NC4>|P|qoy!X)L6sz z?#{fgdGGh$yczQAa1=BDlz;V_ib%vX_rp1(GRODIu?UMr+(8!Obc%3M3nkCckm?va* z#Y}m~*mlMEidSGpiqW+Ie!?>Q>%Sfj4~`BW42SD|yT*s>F~5-*$7UU+!kuJHFvOQT zj;h{*Uz(Q?)Z*1#S+PdtBsv~ReU<|HsT;Fn+p`_%Ok6Li8sC}8nd?bR<2v}SQ%TZE z0>vPL+KvJfPw;tEFaN!U>c1^7YWy43c+XUKufQmxXY(2(?o~s5zSfL2@zQ`yPLEw# zNF#n}Io_%wV0o>%&*){C+Nl(mdf%VZ`!W(^64PVPzaT6ZAZh`-w-t6_5~WdiF%PQ$ z*5doGCA2IXv_}=^#DEQUGn;j5;hL&ot!#iwq@n|$2%W+1RM^bf0qd3T(eThg_Ov@i z_l7UhPr4PqqJ-HFEu1%n0={j7pd2I@B|f*EsVdpBz|S^TR~tSUAY*0yC%qm`&qx@1 z$1NcLcg+d^Sb+S^Kn@-@Fo&-N(9!YG9>ZoH@-ogaB8AWdtXj8upB(4ZX zi00#$DURN!+%Kuiaiqq%ESdgM7O(e_~U+&Vo_+|bsM3EX2Kc9j0^?){%kZ~lJrEa3uQF9@eE~C# z>|e11g`p;_?80eigM%(WO1ET|PKV~YY^{|6vXZD^2v)|{tlYT2IANKH*^Qc4F3dQ6 zWkAwAj>!i_CfQYlmd+*HaKPx6-YOt~zSLjc5>7Z;&|)Dl)E~6E(bc4FbrdxlWELK5 zDYs5xQcLBPHwv;c4YAA&LoNekylH3Zv}{`;x9}WOJ@eH0jHzX@9OIEaOTCtw_0C4E zX05!ls9E1n&H5p>0*h+8sHSg6HEr)>M_yLk0jrV;BQE^w%E`~oBz*14RAUWtydw_v z6;GvLhw?J4wOGR`#;Fs7x=V;*MiS#nWGz?g<9)EFAEg03HyZ^EVCM}V*V%HHj?vzz z-FIvS5tktLu`A}2I1(aCkBMLyaBP#Igp#J<`Gab016sDKQJk}C^Y)#>fMk@X0jTF^ zG!~Uxl~?Kz@ciAs)ONP7-d*f$i=Az;vn_VEw{d6Nn@o%$@OAFlCXBhNPF8oKC{?F| zOSU7$&^J_aYbtK)l#7R9<{c+A6}B(V70?mkeBz}$Wf&Fy{o=_Ekpvj`jc(HxmqKL+ zfez>gBFovSu($#aGWQserkKN@{%o4?Wmn z-qKPm9p!LQ584)>$dr$a!RqOO3YHk%-vxUrn)ushk>jCOZN=z}LK8nfTo%Bl%A2kS?=R-A;z;F^%e6o;|H~L=XGx+U-4`^X)Q~UA)0u?{{Qo z)Df-S95d*5Ga6thl_DQ_Oar$L&X)F$JWh|YSUs=u#8}>o3Jzfkqht4kv$W-E{Xezt z>Yt0N^*6g(ubeSVgFXK;O8FAXwc)YZ-T(6H;3#g<$taKFV7|lOuHm^GP$(H0Rb`;Q zyz&JR9Iia%+u;sV%cAP5DL-vo4P8*-%2kS-tOCjz z{y0xhx9W#*BT*!#jR+CL- zZh6L1=lC-g1q52$7D8=Roz8OmpuBgqcl7Av-`;KHtE9>$E&Z(bGeV?mY9E+!1lADp~@XY=md9p$sTwHCx~ zYe6