deno.land / x / esm@v135_2 / packages / esm-cjs-lexer / src / test.rs
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416#[cfg(test)]mod tests { use crate::swc::SWC;
#[test] fn parse_cjs_exports_case_1() { let source = r#" const c = 'c' Object.defineProperty(exports, 'a', { value: true }) Object.defineProperty(exports, 'b', { get: () => true }) Object.defineProperty(exports, c, { get() { return true } }) Object.defineProperty(exports, 'd', { "value": true }) Object.defineProperty(exports, 'e', { "get": () => true }) Object.defineProperty(exports, 'f', {}) Object.defineProperty(module.exports, '__esModule', { value: true }) "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("development", false) .expect("could not parse exports"); assert_eq!(exports.join(","), "a,b,c,d,e,__esModule") }
#[test] fn parse_cjs_exports_case_2() { let source = r#" const alas = true const obj = { bar: 123 } Object.defineProperty(exports, 'nope', { value: true }) Object.defineProperty(module, 'exports', { value: { alas, foo: 'bar', ...obj, ...require('a'), ...require('b') } }) "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, reexports) = swc .parse_cjs_exports("development", false) .expect("could not parse exports"); assert_eq!(exports.join(","), "alas,foo,bar"); assert_eq!(reexports.join(","), "a,b"); }
#[test] fn parse_cjs_exports_case_3() { let source = r#" const alas = true const obj = { bar: 1 } obj.meta = 1 Object.assign(module.exports, { alas, foo: 'bar', ...obj }, { ...require('a') }, require('b')) "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, reexports) = swc .parse_cjs_exports("development", false) .expect("could not parse exports"); assert_eq!(exports.join(","), "alas,foo,bar,meta"); assert_eq!(reexports.join(","), "a,b"); }
#[test] fn parse_cjs_exports_case_4() { let source = r#" Object.assign(module.exports, { foo: 'bar', ...require('lib') }) Object.assign(module, { exports: { nope: true } }) "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, reexports) = swc .parse_cjs_exports("development", false) .expect("could not parse exports"); assert_eq!(exports.join(","), "nope"); assert_eq!(reexports.join(","), ""); }
#[test] fn parse_cjs_exports_case_5() { let source = r#" exports.foo = 'bar' module.exports.bar = 123 "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("development", false) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo,bar"); }
#[test] fn parse_cjs_exports_case_6() { let source = r#" const alas = true const obj = { boom: 1 } obj.coco = 1 exports.foo = 'bar' module.exports.bar = 123 module.exports = { alas, ...obj, ...require('a'), ...require('b') } "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, reexports) = swc .parse_cjs_exports("development", false) .expect("could not parse exports"); assert_eq!(exports.join(","), "alas,boom,coco"); assert_eq!(reexports.join(","), "a,b"); }
#[test] fn parse_cjs_exports_case_7() { let source = r#" exports['foo'] = 'bar' module['exports']['bar'] = 123 "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("development", false) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo,bar"); }
#[test] fn parse_cjs_exports_case_8() { let source = r#" module.exports = function() {} module.exports.foo = 'bar'; "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("development", false) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo"); }
#[test] fn parse_cjs_exports_case_9() { let source = r#" module.exports = require("lib") "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (_, reexports) = swc .parse_cjs_exports("development", false) .expect("could not parse exports"); assert_eq!(reexports.join(","), "lib"); }
#[test] fn parse_cjs_exports_case_9_1() { let source = r#" var lib = require("lib") module.exports = lib "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (_, reexports) = swc .parse_cjs_exports("development", false) .expect("could not parse exports"); assert_eq!(reexports.join(","), "lib"); }
#[test] fn parse_cjs_exports_case_10() { let source = r#" function Module() {} Module.foo = 'bar' module.exports = Module "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("development", false) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo"); }
#[test] fn parse_cjs_exports_case_10_1() { let source = r#" let Module = function () {} Module.foo = 'bar' module.exports = Module "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("development", false) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo"); }
#[test] fn parse_cjs_exports_case_10_2() { let source = r#" let Module = () => {} Module.foo = 'bar' module.exports = Module "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("development", false) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo"); }
#[test] fn parse_cjs_exports_case_11() { let source = r#" class Module { static foo = 'bar' static greet() {} alas = true boom() {} } module.exports = Module "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("development", false) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo,greet"); }
#[test] fn parse_cjs_exports_case_12() { let source = r#" (function() { module.exports = { foo: 'bar' } })() "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("development", false) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo"); }
#[test] fn parse_cjs_exports_case_12_1() { let source = r#" (() => { module.exports = { foo: 'bar' } })() "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("development", false) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo"); }
#[test] fn parse_cjs_exports_case_12_2() { let source = r#" (function() { module.exports = { foo: 'bar' } }()) "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("development", false) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo"); }
#[test] fn parse_cjs_exports_case_12_3() { let source = r#" ~function() { module.exports = { foo: 'bar' } }() "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("development", false) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo"); }
#[test] fn parse_cjs_exports_case_12_4() { let source = r#" let es = { foo: 'bar' }; (function() { module.exports = es })() "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("development", false) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo"); }
#[test] fn parse_cjs_exports_case_13() { let source = r#" { module.exports = { foo: 'bar' } } "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("development", false) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo"); }
#[test] fn parse_cjs_exports_case_13_1() { let source = r#" const obj1 = { foo: 'bar' } { const obj2 = { bar: 123 } module.exports = { ...obj1, ...obj2 } } "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("development", false) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo,bar"); }
#[test] fn parse_cjs_exports_case_14() { let source = r#" if (process.env.NODE_ENV === 'development') { module.exports = { foo: 'bar' } } "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("development", false) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo"); }
#[test] fn parse_cjs_exports_case_14_1() { let source = r#" const { NODE_ENV } = process.env if (NODE_ENV === 'development') { module.exports = { foo: 'bar' } } "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("development", false) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo"); }
#[test] fn parse_cjs_exports_case_14_2() { let source = r#" const { NODE_ENV: denv } = process.env if (denv === 'development') { module.exports = { foo: 'bar' } } "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("development", false) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo"); }
#[test] fn parse_cjs_exports_case_14_3() { let source = r#" const denv = process.env.NODE_ENV if (denv === 'development') { module.exports = { foo: 'bar' } } "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("development", false) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo"); }
#[test] fn parse_cjs_exports_case_14_4() { let source = r#" if (process.env.NODE_ENV !== 'development') { module.exports = { foo: 'bar' } } "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("development", false) .expect("could not parse exports"); assert_eq!(exports.join(","), ""); } #[test] fn parse_cjs_exports_case_14_5() { let source = r#" if (typeof module !== 'undefined' && module.exports) { module.exports = { foo: 'bar' } } "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("development", false) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo"); }
#[test] fn parse_cjs_exports_case_15() { let source = r#" let es = { foo: 'bar' }; (function() { const { NODE_ENV } = process.env es.bar = 123 if (NODE_ENV === 'development') { module.exports = es } })() "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("development", false) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo,bar"); }
#[test] fn parse_cjs_exports_case_16() { let source = r#" function fn() { return { foo: 'bar' } }; module.exports = fn() "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("development", false) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo"); }
#[test] fn parse_cjs_exports_case_16_1() { let source = r#" let fn = () => ({ foo: 'bar' }); module.exports = fn() "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("development", false) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo"); }
#[test] fn parse_cjs_exports_case_16_2() { let source = r#" function fn() { const mod = { foo: 'bar' } mod.bar = 123 return mod }; module.exports = fn() "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("development", false) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo,bar"); }
#[test] fn parse_cjs_exports_case_17() { let source = r#" module.exports = require("lib")() "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (_, reexports) = swc .parse_cjs_exports("development", false) .expect("could not parse exports"); assert_eq!(reexports.join(","), "lib()"); }
#[test] fn parse_cjs_exports_case_18() { let source = r#" module.exports = function () { const mod = { foo: 'bar' } mod.bar = 123 return mod }; "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("development", true) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo,bar"); }
#[test] fn parse_cjs_exports_case_18_1() { let source = r#" function fn() { const mod = { foo: 'bar' } mod.bar = 123 return mod } module.exports = fn; "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("development", true) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo,bar"); }
#[test] fn parse_cjs_exports_case_18_2() { let source = r#" const fn = () => { const mod = { foo: 'bar' } mod.bar = 123 return mod } module.exports = fn; "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("development", true) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo,bar"); }
#[test] fn parse_cjs_exports_case_18_3() { let source = r#" function fn() { const { NODE_ENV } = process.env const mod = { foo: 'bar' } if (NODE_ENV === 'production') { return mod } mod.bar = 123 return mod } module.exports = fn; "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("production", true) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo"); }
#[test] fn parse_cjs_exports_case_18_4() { let source = r#" function fn() { const { NODE_ENV } = process.env const mod = { foo: 'bar' } if (NODE_ENV === 'development') { return mod } mod.bar = 123 return mod } module.exports = fn; "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("production", true) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo,bar"); }
#[test] fn parse_cjs_exports_case_19() { let source = r#" require("tslib").__exportStar({foo: 'bar'}, exports) exports.bar = 123 "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("production", true) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo,bar"); }
#[test] fn parse_cjs_exports_case_19_2() { let source = r#" const tslib = require("tslib"); (0, tslib.__exportStar)({foo: 'bar'}, exports) exports.bar = 123 "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("production", true) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo,bar"); }
#[test] fn parse_cjs_exports_case_19_3() { let source = r#" const { __exportStar } = require("tslib"); (0, __exportStar)({foo: 'bar'}, exports) exports.bar = 123 "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("production", true) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo,bar"); }
#[test] fn parse_cjs_exports_case_19_4() { let source = r#" var tslib_1 = require("tslib"); (0, tslib_1.__exportStar)(require("./crossPlatformSha256"), exports); "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (_, reexorts) = swc .parse_cjs_exports("production", true) .expect("could not parse exports"); assert_eq!(reexorts.join(","), "./crossPlatformSha256"); }
#[test] fn parse_cjs_exports_case_19_5() { let source = r#" var __exportStar = function() {} Object.defineProperty(exports, "foo", { value: 1 }); __exportStar(require("./bar"), exports); "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, reexorts) = swc .parse_cjs_exports("production", true) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo"); assert_eq!(reexorts.join(","), "./bar"); }
#[test] fn parse_cjs_exports_case_20_1() { let source = r#" var foo; foo = exports.foo || (exports.foo = {}); var bar = exports.bar || (exports.bar = {}); exports.greet = 123; "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("production", true) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo,bar,greet"); }
#[test] fn parse_cjs_exports_case_20_2() { let source = r#" var bar; ((foo, bar) => { })(exports.foo || (exports.foo = {}), bar = exports.bar || (exports.bar = {})); exports.greet = 123; "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("production", true) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo,bar,greet"); }
#[test] fn parse_cjs_exports_case_21_1() { let source = r#" (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (factory((global.MMDParser = global.MMDParser || {}))); }(this, function (exports) { exports.foo = "bar"; Object.defineProperty(exports, '__esModule', { value: true }); })) "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("production", true) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo,__esModule"); }
#[test] fn parse_cjs_exports_case_21_2() { let source = r#" (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (factory((global.MMDParser = global.MMDParser || {}))); }(this, (function (exports) { exports.foo = "bar"; Object.defineProperty(exports, '__esModule', { value: true }); }))) "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("production", true) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo,__esModule"); }
#[test] fn parse_cjs_exports_case_21_3() { // Webpack 4 minified UMD output after replacing https://github.com/glennflanagan/react-collapsible/blob/1b987617fe7c20337977a0a877574263ed7ed657/src/Collapsible.js#L1 // with: // ``` // export const named = 'named-export';
// export default 'default-export'; // ``` // Manually formatted to avoid ast changes from prettier let source = r#" !function (e, t) { if ("object" == typeof exports && "object" == typeof module) module.exports = t(); else if ("function" == typeof define && define.amd) define([], t); else { var r = t(); for (var n in r) ("object" == typeof exports ? exports : e)[n] = r[n] } }(this, (function () { return function (e) { var t = {}; function r(n) { if (t[n]) return t[n].exports; var o = t[n] = { i: n, l: !1, exports: {} }; return e[n].call(o.exports, o, o.exports, r), o.l = !0, o.exports } return r.m = e, r.c = t, r.d = function (e, t, n) { r.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, get: n }) }, r.r = function (e) { "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(e, "__esModule", { value: !0 }) }, r.t = function (e, t) { if (1 & t && (e = r(e)), 8 & t) return e; if (4 & t && "object" == typeof e && e && e.__esModule) return e; var n = Object.create(null); if ( r.r(n), Object.defineProperty(n, "default", { enumerable: !0, value: e }), 2 & t && "string" != typeof e ) for (var o in e) r.d(n, o, function (t) { return e[t] }.bind(null, o)); return n }, r.n = function (e) { var t = e && e.__esModule ? function () { return e.default } : function () { return e }; return r.d(t, "a", t), t }, r.o = function (e, t) { return Object.prototype.hasOwnProperty.call(e, t) }, r.p = "", r(r.s = 0) }([ function (e, t, r) { "use strict"; r.r(t), r.d(t, "named", (function () { return n })); var n = "named-export"; t.default = "default-export"; } ]) })); "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("production", true) .expect("could not parse exports"); assert_eq!(exports.join(","), "__esModule,named,default"); }
#[test] fn parse_cjs_exports_case_21_4() { // Webpack 5 minified UMD output after replacing https://github.com/amrlabib/react-timer-hook/blob/46aad2022d5cfa69bb24d1f4a20a94c774ea13d7/src/index.js#L1: // with: // ``` // export const named1 = 'named-export-1'; // export const named2 = 'named-export-2';
// export default 'default-export'; // ``` // Manually formatted to avoid ast changes from prettier let source = r#" !function (e, t) { "object" == typeof exports && "object" == typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define([], t) : "object" == typeof exports ? exports["react-timer-hook"] = t() : e["react-timer-hook"] = t() }( "undefined" != typeof self ? self : this, (() => (() => { "use strict"; var e = { d: (t, o) => { for (var r in o) e.o(o, r) && !e.o(t, r) && Object.defineProperty(t, r, { enumerable: !0, get: o[r] }) }, o: (e, t) => Object.prototype.hasOwnProperty.call(e, t), r: e => { "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(e, "__esModule", { value: !0 }) } }, t = {}; e.r(t), e.d(t, { default: () => n, named1: () => o, named2: () => r }); const o = "named-export-1", r = "named-export-2", n = "default-export"; return t })() )); "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("production", true) .expect("could not parse exports"); assert_eq!(exports.join(","), "__esModule,default,named1,named2"); }
#[test] fn parse_cjs_exports_case_21_5() { // Webpack 5 minified UMD output after replacing https://github.com/amrlabib/react-timer-hook/blob/46aad2022d5cfa69bb24d1f4a20a94c774ea13d7/src/index.js#L1: // with: // ``` // import { useEffect } from "react";
// export default function useFn() { // useEffect(() => {}, []); // }
// export const named1 = "named-export-1"; // export const named2 = "named-export-2"; // ``` // Formatted with Deno to avoid ast changes from prettier let source = r#" !function (e, t) { "object" == typeof exports && "object" == typeof module ? module.exports = t(require("react")) : "function" == typeof define && define.amd ? define(["react"], t) : "object" == typeof exports ? exports["react-timer-hook"] = t(require("react")) : e["react-timer-hook"] = t(e.react); }("undefined" != typeof self ? self : this, (e) => (() => { "use strict"; var t = { 156: (t) => { t.exports = e; }, }, r = {}; function o(e) { var n = r[e]; if (void 0 !== n) return n.exports; var a = r[e] = { exports: {} }; return t[e](a, a.exports, o), a.exports; } o.n = (e) => { var t = e && e.__esModule ? () => e.default : () => e; return o.d(t, { a: t }), t; }, o.d = (e, t) => { for (var r in t) { o.o(t, r) && !o.o(e, r) && Object.defineProperty(e, r, { enumerable: !0, get: t[r] }); } }, o.o = (e, t) => Object.prototype.hasOwnProperty.call(e, t), o.r = (e) => { "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(e, "__esModule", { value: !0 }); }; var n = {}; return (() => { o.r(n), o.d(n, { default: () => t, named1: () => r, named2: () => a }); var e = o(156); function t() { (0, e.useEffect)(() => {}, []); } const r = "named-export-1", a = "named-export-2"; })(), n; })()); "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("production", true) .expect("could not parse exports"); assert_eq!(exports.join(","), "__esModule,default,named1,named2"); }
#[test] fn parse_cjs_exports_case_21_6() { // Webpack 5 minified UMD output after replacing https://github.com/xmtp/xmtp-js-content-types/blob/c3cac4842c98785a0436240148f228c654c919c8/remote-attachment/src/index.ts // with: // ``` // export const named1 = 'named-export-1'; // export const named2 = 'named-export-2';
// export default 'default-export'; // ``` // Formatted with Deno to avoid ast changes from prettier let source = r#" !function (e, t) { "object" == typeof exports && "object" == typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define([], t) : "object" == typeof exports ? exports.xmtp = t() : e.xmtp = t(); }(this, () => (() => { "use strict"; var e = {}; return (() => { var t = e; Object.defineProperty(t, "__esModule", { value: !0 }), t.named2 = t.named1 = void 0, t.named1 = "named-export-1", t.named2 = "named-export-2", t.default = "default-export"; })(), e; })()); "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("production", true) .expect("could not parse exports"); assert_eq!(exports.join(","), "__esModule,named2,named1,default"); }
#[test] fn parse_cjs_exports_case_21_7() { // Webpack 5 minified UMD output after replacing https://github.com/xmtp/xmtp-js-content-types/blob/c3cac4842c98785a0436240148f228c654c919c8/remote-attachment/src/index.ts // with: // ``` // export const named1 = 'named-export-1'; // export const named2 = 'named-export-2';
// export default 'default-export'; // ``` // Formatted with Deno to avoid ast changes from prettier let source = r#" !function (e, t) { "object" == typeof exports && "object" == typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define([], t) : "object" == typeof exports ? exports.xmtp = t() : e.xmtp = t(); }(this, () => (() => { "use strict"; var e = {}; return (() => { "use strict"; var t = e; Object.defineProperty(t, "__esModule", { value: !0 }), t.named2 = t.named1 = void 0, t.named1 = "named-export-1", t.named2 = "named-export-2", t.default = "default-export"; })(), e; })()); "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("production", true) .expect("could not parse exports"); assert_eq!(exports.join(","), "__esModule,named2,named1,default"); }
#[test] fn parse_cjs_exports_case_21_8() { // Rollup 2 minified UMD output after replacing https://github.com/Hacker0x01/react-datepicker/blob/0c13f35e11577ca0979c363a19ea2c1f34bfdf1f/src/index.jsx#L1 // with: // ``` // import { useEffect } from "react";
// export default function useFn() { // useEffect(() => {}, []); // }
// export const named1 = "named-export-1"; // export const named2 = "named-export-2"; // ``` // Formatted with Deno to avoid ast changes from prettier let source = r#" !function (e, t) { "object" == typeof exports && "undefined" != typeof module ? t(exports, require("react")) : "function" == typeof define && define.amd ? define(["exports", "react"], t) : t( (e = "undefined" != typeof globalThis ? globalThis : e || self) .DatePicker = {}, e.React, ); }(this, function (e, t) { "use strict"; e.default = function () { t.useEffect(function () {}, []); }, e.named1 = "named-export-1", e.named2 = "named-export-2", Object.defineProperty(e, "__esModule", { value: !0 }); }); "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("production", true) .expect("could not parse exports"); assert_eq!(exports.join(","), "default,named1,named2,__esModule"); }
#[test] fn parse_cjs_exports_case_21_9() { // Webpack 5 minified UMD output after replacing https://github.com/ttag-org/ttag/blob/622c16c8e723a15916f4c5e0fcabefe3d3ad5f84/src/index.ts#L1 // with: // ``` // function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } // function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } // function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } // function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } // export default createDedent({}); // function createDedent() { // return createDedent(_objectSpread(_objectSpread({}))); // }
// export const named1 = 'named1'; // ``` // Formatted with Deno to avoid ast changes from prettier let source = r#" !function (e, t) { if ("object" == typeof exports && "object" == typeof module) { module.exports = t(); } else if ("function" == typeof define && define.amd) define([], t); else { var r = t(); for (var o in r) ("object" == typeof exports ? exports : e)[o] = r[o]; } }(this, () => (() => { "use strict"; var e = { d: (t, r) => { for (var o in r) { e.o(r, o) && !e.o(t, o) && Object.defineProperty(t, o, { enumerable: !0, get: r[o] }); } }, o: (e, t) => Object.prototype.hasOwnProperty.call(e, t), r: (e) => { "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(e, "__esModule", { value: !0 }); }, }, t = {}; function r(e) { return r = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) { return typeof e; } : function (e) { return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; }, r(e); } function o(e) { for (var t = 1; t < arguments.length; t++) { var r = null != arguments[t] ? arguments[t] : {}; t % 2 ? ownKeys(Object(r), !0).forEach(function (t) { n(e, t, r[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(r)) : ownKeys(Object(r)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(r, t)); }); } return e; } function n(e, t, o) { return (t = function (e) { var t = function (e, t) { if ("object" !== r(e) || null === e) return e; var o = e[Symbol.toPrimitive]; if (void 0 !== o) { var n = o.call(e, "string"); if ("object" !== r(n)) return n; throw new TypeError( "@@toPrimitive must return a primitive value.", ); } return String(e); }(e); return "symbol" === r(t) ? t : String(t); }(t)) in e ? Object.defineProperty(e, t, { value: o, enumerable: !0, configurable: !0, writable: !0, }) : e[t] = o, e; } e.r(t), e.d(t, { default: () => i, named1: () => f }); const i = function e() { return e(o(o({}))); }(); var f = "named1"; return t; })()); "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("production", true) .expect("could not parse exports"); assert_eq!(exports.join(","), "__esModule,default,named1"); }
#[test] fn parse_cjs_exports_case_21_10() { // Webpack 5 minified UMD output from https://github.com/ttag-org/ttag/blob/622c16c8e723a15916f4c5e0fcabefe3d3ad5f84/src/index.ts#L1 // with irrelevant parts manually removed. // This ended up being subtly different from parse_cjs_exports_case_21_9, found out when I tried testing with the full original output. // Formatted with Deno to avoid ast changes from prettier. let source = r#" !function (n, t) { if ("object" == typeof exports && "object" == typeof module) { module.exports = t(); } else if ("function" == typeof define && define.amd) define([], t); else { var e = t(); for (var r in e) ("object" == typeof exports ? exports : n)[r] = e[r]; } }(this, () => (() => { var n = { 44: (n, t) => { }, 429: (n, t, e) => { }, }, t = {}; function e(r) { var o = t[r]; if (void 0 !== o) return o.exports; var f = t[r] = { exports: {} }; return n[r](f, f.exports, e), f.exports; } e.d = (n, t) => { for (var r in t) { e.o(t, r) && !e.o(n, r) && Object.defineProperty(n, r, { enumerable: !0, get: t[r] }); } }, e.o = (n, t) => Object.prototype.hasOwnProperty.call(n, t), e.r = (n) => { "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(n, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(n, "__esModule", { value: !0 }); }; var r = {}; return (() => { "use strict"; function n(n, t) { var e = Object.keys(n); if (Object.getOwnPropertySymbols) { var r = Object.getOwnPropertySymbols(n); t && (r = r.filter(function (t) { return Object.getOwnPropertyDescriptor(n, t).enumerable; })), e.push.apply(e, r); } return e; } function t(t) { for (var e = 1; e < arguments.length; e++) { var r = null != arguments[e] ? arguments[e] : {}; e % 2 ? n(Object(r), !0).forEach(function (n) { o(t, n, r[n]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(r)) : n(Object(r)).forEach(function (n) { Object.defineProperty( t, n, Object.getOwnPropertyDescriptor(r, n), ); }); } return t; } function o(n, t, e) { return (t = function (n) { var t = function (n, t) { if ("object" != typeof n || null === n) return n; var e = n[Symbol.toPrimitive]; if (void 0 !== e) { var r = e.call(n, "string"); if ("object" != typeof r) return r; throw new TypeError( "@@toPrimitive must return a primitive value.", ); } return String(n); }(n); return "symbol" == typeof t ? t : String(t); }(t)) in n ? Object.defineProperty(n, t, { value: e, enumerable: !0, configurable: !0, writable: !0, }) : n[t] = e, n; } e.r(r), e.d(r, { Context: () => F, TTag: () => H, _: () => B, addLocale: () => R, c: () => q, gettext: () => U, jt: () => G, msgid: () => N, ngettext: () => J, setDedent: () => K, setDefaultLang: () => Q, t: () => V, useLocale: () => X, useLocales: () => Y, }); })(), r; })()); "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("production", true) .expect("could not parse exports"); assert_eq!( exports.join(","), "__esModule,Context,TTag,_,addLocale,c,gettext,jt,msgid,ngettext,setDedent,setDefaultLang,t,useLocale,useLocales" ); }
#[test] fn parse_cjs_exports_case_21_11() { // Webpack 5 minified UMD output from https://github.com/OfficeDev/microsoft-teams-library-js/blob/b5ee6475a7ed333cdb27f25fc51e5bb1ebd0da94/packages/teams-js/src/index.ts#L1 // with irrelevant parts manually removed. // with umdNamedDefine: true: https://webpack.js.org/configuration/output/#outputlibraryumdnameddefine // Formatted with Deno to avoid ast changes from prettier. let source = r#" !function (e, t) { "object" == typeof exports && "object" == typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define("microsoftTeams", [], t) : "object" == typeof exports ? exports.microsoftTeams = t() : e.microsoftTeams = t(); }("undefined" != typeof self ? self : this, () => (() => { var e = { 302: (e, t, n) => { }, 65: (e, t, n) => {}, 247: (e) => {}, }, t = {}; function n(o) { var i = t[o]; if (void 0 !== i) return i.exports; var r = t[o] = { exports: {} }; return e[o](r, r.exports, n), r.exports; } (() => { var e, t = Object.getPrototypeOf ? (e) => Object.getPrototypeOf(e) : (e) => e.__proto__; n.t = function (o, i) { if (1 & i && (o = this(o)), 8 & i) return o; if ("object" == typeof o && o) { if (4 & i && o.__esModule) return o; if (16 & i && "function" == typeof o.then) return o; } var r = Object.create(null); n.r(r); var a = {}; e = e || [null, t({}), t([]), t(t)]; for ( var s = 2 & i && o; "object" == typeof s && !~e.indexOf(s); s = t(s) ) Object.getOwnPropertyNames(s).forEach((e) => a[e] = () => o[e]); return a.default = () => o, n.d(r, a), r; }; })(), (() => { n.d = (e, t) => { for (var o in t) {n.o(t, o) && !n.o(e, o) && Object.defineProperty(e, o, { enumerable: !0, get: t[o] });} }; })(), (() => { n.o = (e, t) => Object.prototype.hasOwnProperty.call(e, t); })(), (() => { n.r = (e) => { "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(e, "__esModule", { value: !0 }); }; })(); var o = {}; return (() => { "use strict"; n.r(o), n.d(o, { app: () => pt, }); })(), o; })()); "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("production", true) .expect("could not parse exports"); assert_eq!(exports.join(","), "__esModule,app"); }
#[test] fn parse_cjs_exports_case_22() { let source = r#" var url = module.exports = {}; url.foo = 'bar'; "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("production", true) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo"); }
#[test] fn parse_cjs_exports_case_22_2() { let source = r#" exports.i18n = exports.use = exports.t = undefined; "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("production", true) .expect("could not parse exports"); assert_eq!(exports.join(","), "i18n,use,t"); }
#[test] fn parse_cjs_exports_case_23() { let source = r#" Object.defineProperty(exports, "__esModule", { value: true }); __export({foo:"bar"}); __export(require("./lib")); "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, reexports) = swc .parse_cjs_exports("production", true) .expect("could not parse exports"); assert_eq!(exports.join(","), "__esModule,foo"); assert_eq!(reexports.join(","), "./lib"); }
#[test] fn parse_cjs_exports_case_24() { let source = r#" 0 && (module.exports = { foo, bar }); "#; let swc = SWC::parse("index.cjs", source).expect("could not parse module"); let (exports, _) = swc .parse_cjs_exports("production", true) .expect("could not parse exports"); assert_eq!(exports.join(","), "foo,bar"); }}
Version Info