diff --git a/packages/ast-utils/src/matchers/isIIFE.ts b/packages/ast-utils/src/matchers/isIIFE.ts index 48fbe631..5bf1ddc6 100644 --- a/packages/ast-utils/src/matchers/isIIFE.ts +++ b/packages/ast-utils/src/matchers/isIIFE.ts @@ -6,10 +6,7 @@ import type { ASTNode, ASTPath, CallExpression, Collection, ExpressionStatement, * ```js * (() => { ... })(...) * (function() { ... })(...) - * ``` - * - * @example - * ```js + * !(() => { ... })(...) * !function() { ... }(...) * ``` */ @@ -25,23 +22,20 @@ export function isStatementIIFE(j: JSCodeshift, node: Statement): node is Expres * ```js * (() => { ... })(...) * (function() { ... })(...) - * ``` - * - * @example - * ```js + * !(() => { ... })(...) * !function() { ... }(...) * ``` */ export function isIIFE(j: JSCodeshift, node: ASTNode): node is ExpressionStatement { + if (j.UnaryExpression.check(node) && node.operator === '!') { + node = node.argument + } + if (j.CallExpression.check(node)) { return j.FunctionExpression.check(node.callee) || j.ArrowFunctionExpression.check(node.callee) } - if (j.UnaryExpression.check(node) && node.operator === '!') { - return j.FunctionExpression.check(node.argument) - } - return false } @@ -73,6 +67,12 @@ export function findIIFEs( operator: '!', argument: { type: 'CallExpression', + callee: { + type: (type: string) => { + return type === 'FunctionExpression' + || type === 'ArrowFunctionExpression' + }, + }, }, }, }) diff --git a/packages/unminify/src/transformations/__tests__/un-import-rename.spec.ts b/packages/unminify/src/transformations/__tests__/un-import-rename.spec.ts index 966a7b48..14e25513 100644 --- a/packages/unminify/src/transformations/__tests__/un-import-rename.spec.ts +++ b/packages/unminify/src/transformations/__tests__/un-import-rename.spec.ts @@ -1,5 +1,6 @@ import { defineInlineTest } from '@wakaru/test-utils' import transform from '../un-import-rename' +import unOptionalChaining from '../un-optional-chaining' const inlineTest = defineInlineTest(transform) @@ -47,3 +48,20 @@ const foo_1 = 'local'; console.log(foo_2, bar_1, foo, bar, foo_1); `, ) + +defineInlineTest([transform, unOptionalChaining])('avoid crash when combined with scopes', + ` +import { foo as a, bar as b, code } from '_'; + +console.log(a, b, code); + +var _a; +(_a = a) === null || _a === void 0 ? void 0 : _a.b; +`, ` +import { foo, bar, code } from '_'; + +console.log(foo, bar, code); + +foo?.b; +`, +) diff --git a/packages/unminify/src/transformations/un-import-rename.ts b/packages/unminify/src/transformations/un-import-rename.ts index 4ddf0d2f..becb5ecd 100644 --- a/packages/unminify/src/transformations/un-import-rename.ts +++ b/packages/unminify/src/transformations/un-import-rename.ts @@ -65,7 +65,8 @@ export default createJSCodeshiftTransformationRule({ if (imported.name !== local.name) return - path.replace(j.importSpecifier(j.identifier(imported.name))) + const newIdent = j.identifier(imported.name) + path.replace(j.importSpecifier(newIdent, newIdent)) }) }, }) diff --git a/packages/unpacker/__tests__/__snapshots__/webpack5.spec.ts.snap b/packages/unpacker/__tests__/__snapshots__/webpack5.spec.ts.snap index 8d2ef709..d0ec00ea 100644 --- a/packages/unpacker/__tests__/__snapshots__/webpack5.spec.ts.snap +++ b/packages/unpacker/__tests__/__snapshots__/webpack5.spec.ts.snap @@ -26,8 +26,15 @@ export default /* binding */ m1; } } +class A_A { + constructor() { + this.label = "a_a"; + } +} + /***/ export { /* binding */ A }; +export { /* binding */ A_A }; ", "id": "./src/a.js", "isEntry": false, @@ -62,29 +69,60 @@ export { /* binding */ getC }; "id": "./src/c.js", "isEntry": false, }, + { + "code": "/* harmony import */ var _a_js__WEBPACK_IMPORTED_MODULE_0__ = require(/*! ./a.js */ "./src/a.js"); +// re-export + +/***/ +export const A = /* reexport safe */ _a_js__WEBPACK_IMPORTED_MODULE_0__.A; +export const A_A = /* reexport safe */ _a_js__WEBPACK_IMPORTED_MODULE_0__.A_A; +", + "id": "./src/d.js", + "isEntry": false, + }, + { + "code": "/* harmony import */ var _a_js__WEBPACK_IMPORTED_MODULE_0__ = require(/*! ./a.js */ "./src/a.js"); + +// partial re-export + +/***/ +export const A = /* reexport safe */ _a_js__WEBPACK_IMPORTED_MODULE_0__.A; +", + "id": "./src/e.js", + "isEntry": false, + }, { "code": "/*!**********************!*\\ !*** ./src/index.js ***! \\**********************/ __webpack_require__.r(__webpack_exports__); -/* harmony import */ var _a_js__WEBPACK_IMPORTED_MODULE_0__ = +/* harmony import */ var _1_js__WEBPACK_IMPORTED_MODULE_0__ = + __webpack_require__(/*! ./1.js */ "./src/1.js"); +/* harmony import */ var _a_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./a.js */ "./src/a.js"); -/* harmony import */ var _b_js__WEBPACK_IMPORTED_MODULE_1__ = +/* harmony import */ var _b_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./b.js */ "./src/b.js"); -/* harmony import */ var _c_js__WEBPACK_IMPORTED_MODULE_2__ = +/* harmony import */ var _c_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./c.js */ "./src/c.js"); -/* harmony import */ var _1_js__WEBPACK_IMPORTED_MODULE_3__ = - __webpack_require__(/*! ./1.js */ "./src/1.js"); +/* harmony import */ var _d_js__WEBPACK_IMPORTED_MODULE_4__ = + __webpack_require__(/*! ./d.js */ "./src/d.js"); +/* harmony import */ var _e_js__WEBPACK_IMPORTED_MODULE_5__ = + __webpack_require__(/*! ./e.js */ "./src/e.js"); + +const d = new _d_js__WEBPACK_IMPORTED_MODULE_4__.A(); +const e = new _e_js__WEBPACK_IMPORTED_MODULE_5__.A(); console.log( - _b_js__WEBPACK_IMPORTED_MODULE_1__.version, - _a_js__WEBPACK_IMPORTED_MODULE_0__.A + _b_js__WEBPACK_IMPORTED_MODULE_2__.version, + _a_js__WEBPACK_IMPORTED_MODULE_1__.A, + d, + e ); -(0, _b_js__WEBPACK_IMPORTED_MODULE_1__["default"])(); -(0, _c_js__WEBPACK_IMPORTED_MODULE_2__.getC)().then(console.log); +(0, _b_js__WEBPACK_IMPORTED_MODULE_2__["default"])(); +(0, _c_js__WEBPACK_IMPORTED_MODULE_3__.getC)().then(console.log); // const M1 = await import('./1.js') -(0, _1_js__WEBPACK_IMPORTED_MODULE_3__["default"])(); +(0, _1_js__WEBPACK_IMPORTED_MODULE_0__["default"])(); ", "id": "entry.js", "isEntry": true, diff --git a/packages/unpacker/__tests__/webpack5.spec.ts b/packages/unpacker/__tests__/webpack5.spec.ts index d1607e29..f62c6554 100644 --- a/packages/unpacker/__tests__/webpack5.spec.ts +++ b/packages/unpacker/__tests__/webpack5.spec.ts @@ -19,7 +19,7 @@ describe('Webpack 5', () => { expect(result.moduleIdMapping).toMatchSnapshot() - expect(result.modules.length).toBe(5) + expect(result.modules.length).toBe(7) const modules = result.modules.map(({ id, isEntry, code }) => ({ id, isEntry, code: format(code) })) expect(modules).toMatchSnapshot() diff --git a/packages/unpacker/src/extractors/webpack/jsonp.ts b/packages/unpacker/src/extractors/webpack/jsonp.ts index 49fcceac..4619f034 100644 --- a/packages/unpacker/src/extractors/webpack/jsonp.ts +++ b/packages/unpacker/src/extractors/webpack/jsonp.ts @@ -2,7 +2,7 @@ import { renameFunctionParameters } from '@wakaru/ast-utils' import { Module } from '../../Module' import { convertRequireHelpersForWebpack4, convertRequireHelpersForWebpack5 } from './requireHelpers' import type { ModuleMapping } from '@wakaru/ast-utils/types' -import type { ArrayExpression, Collection, FunctionExpression, JSCodeshift, MemberExpression, NumericLiteral, ObjectExpression, ObjectProperty, StringLiteral } from 'jscodeshift' +import type { ArrayExpression, ArrowFunctionExpression, BlockStatement, Collection, FunctionExpression, JSCodeshift, MemberExpression, NumericLiteral, ObjectExpression, ObjectProperty, StringLiteral } from 'jscodeshift' /** * Find the modules array in webpack jsonp chunk. @@ -83,7 +83,9 @@ export function getModulesForWebpackJsonP(j: JSCodeshift, root: Collection): return properties.every((property) => { return j.ObjectProperty.check(property) && (j.StringLiteral.check(property.key) || j.NumericLiteral.check(property.key)) - && j.FunctionExpression.check(property.value) + && (j.FunctionExpression.check(property.value) + || (j.ArrowFunctionExpression.check(property.value) && j.BlockStatement.check(property.value.body)) + ) }) }, }, @@ -99,12 +101,13 @@ export function getModulesForWebpackJsonP(j: JSCodeshift, root: Collection): moreModules.properties.forEach((property) => { const prop = property as ObjectProperty const moduleId = (prop.key as StringLiteral | NumericLiteral).value - const functionExpression = prop.value as FunctionExpression + const functionExpression = prop.value as FunctionExpression | ArrowFunctionExpression renameFunctionParameters(j, functionExpression, ['module', 'exports', 'require']) + const functionBody = functionExpression.body as BlockStatement - const program = j.program(functionExpression.body.body) - if (functionExpression.body.directives) { - program.directives = [...(program.directives || []), ...functionExpression.body.directives] + const program = j.program(functionBody.body) + if (functionBody.directives) { + program.directives = [...(program.directives || []), ...functionBody.directives] } const moduleContent = j(program) convertRequireHelpersForWebpack4(j, moduleContent) diff --git a/packages/unpacker/src/extractors/webpack/requireHelpers.ts b/packages/unpacker/src/extractors/webpack/requireHelpers.ts index c5d8f913..ede6569a 100644 --- a/packages/unpacker/src/extractors/webpack/requireHelpers.ts +++ b/packages/unpacker/src/extractors/webpack/requireHelpers.ts @@ -178,7 +178,7 @@ export function convertExportsGetterForWebpack5(j: JSCodeshift, collection: Coll exportValue = fn.body.body[0].argument } - if (j.Identifier.check(fn.body)) { + if (j.Identifier.check(fn.body) || j.MemberExpression.check(fn.body)) { exportValue = fn.body } diff --git a/packages/unpacker/src/extractors/webpack/webpack5.ts b/packages/unpacker/src/extractors/webpack/webpack5.ts index 42a05ebe..dd77cf95 100644 --- a/packages/unpacker/src/extractors/webpack/webpack5.ts +++ b/packages/unpacker/src/extractors/webpack/webpack5.ts @@ -4,7 +4,7 @@ import { getTopLevelStatements } from '@wakaru/ast-utils/program' import { Module } from '../../Module' import { convertRequireHelpersForWebpack5 } from './requireHelpers' import type { ModuleMapping } from '@wakaru/ast-utils/types' -import type { ArrowFunctionExpression, Collection, FunctionExpression, JSCodeshift, ObjectProperty, Statement, StringLiteral, VariableDeclaration } from 'jscodeshift' +import type { ArrowFunctionExpression, CallExpression, Collection, ExpressionStatement, FunctionExpression, JSCodeshift, ObjectProperty, Statement, StringLiteral, UnaryExpression, VariableDeclaration } from 'jscodeshift' /** * Find the modules map in webpack 5 bootstrap. @@ -46,11 +46,15 @@ export function getModulesForWebpack5(j: JSCodeshift, root: Collection): const moduleIdMapping: ModuleMapping = {} const statements = getTopLevelStatements(root) - const webpackBootstrap = statements.find(node => isStatementIIFE(j, node)) + const webpackBootstrap = statements.find(node => isStatementIIFE(j, node)) as ExpressionStatement | undefined if (!webpackBootstrap) return null - // @ts-expect-error - skip type check - const statementsInBootstrap: Statement[] = webpackBootstrap.expression.callee.body.body + const expression = webpackBootstrap.expression as CallExpression | UnaryExpression + const callExpression = (j.CallExpression.check(expression) ? expression : expression.argument) as CallExpression + const callee = callExpression.callee as FunctionExpression | ArrowFunctionExpression + if (!j.BlockStatement.check(callee.body)) return null + + const statementsInBootstrap: Statement[] = callee.body.body const webpackModules = statementsInBootstrap.find((node) => { if (node.type !== 'VariableDeclaration') return false diff --git a/testcases/webpack5/dist/index.js b/testcases/webpack5/dist/index.js index 4e58873f..4b035599 100644 --- a/testcases/webpack5/dist/index.js +++ b/testcases/webpack5/dist/index.js @@ -27,7 +27,8 @@ function m1() { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ A) +/* harmony export */ A: () => (/* binding */ A), +/* harmony export */ A_A: () => (/* binding */ A_A) /* harmony export */ }); class A { constructor() { @@ -39,6 +40,12 @@ class A { } } +class A_A { + constructor() { + this.label = 'a_a' + } +} + /***/ }), @@ -83,6 +90,43 @@ const getC = async () => { } +/***/ }), + +/***/ "./src/d.js": +/*!******************!*\ + !*** ./src/d.js ***! + \******************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (/* reexport safe */ _a_js__WEBPACK_IMPORTED_MODULE_0__.A), +/* harmony export */ A_A: () => (/* reexport safe */ _a_js__WEBPACK_IMPORTED_MODULE_0__.A_A) +/* harmony export */ }); +/* harmony import */ var _a_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./a.js */ "./src/a.js"); +// re-export + + + +/***/ }), + +/***/ "./src/e.js": +/*!******************!*\ + !*** ./src/e.js ***! + \******************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ A: () => (/* reexport safe */ _a_js__WEBPACK_IMPORTED_MODULE_0__.A) +/* harmony export */ }); +/* harmony import */ var _a_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./a.js */ "./src/a.js"); + + +// partial re-export + + + /***/ }) /******/ }); @@ -148,24 +192,31 @@ var __webpack_exports__ = {}; !*** ./src/index.js ***! \**********************/ __webpack_require__.r(__webpack_exports__); -/* harmony import */ var _a_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./a.js */ "./src/a.js"); -/* harmony import */ var _b_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./b.js */ "./src/b.js"); -/* harmony import */ var _c_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./c.js */ "./src/c.js"); -/* harmony import */ var _1_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./1.js */ "./src/1.js"); +/* harmony import */ var _1_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./1.js */ "./src/1.js"); +/* harmony import */ var _a_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./a.js */ "./src/a.js"); +/* harmony import */ var _b_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./b.js */ "./src/b.js"); +/* harmony import */ var _c_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./c.js */ "./src/c.js"); +/* harmony import */ var _d_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./d.js */ "./src/d.js"); +/* harmony import */ var _e_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./e.js */ "./src/e.js"); + + + +const d = new _d_js__WEBPACK_IMPORTED_MODULE_4__.A() +const e = new _e_js__WEBPACK_IMPORTED_MODULE_5__.A() -console.log(_b_js__WEBPACK_IMPORTED_MODULE_1__.version, _a_js__WEBPACK_IMPORTED_MODULE_0__.A) +console.log(_b_js__WEBPACK_IMPORTED_MODULE_2__.version, _a_js__WEBPACK_IMPORTED_MODULE_1__.A, d, e) -;(0,_b_js__WEBPACK_IMPORTED_MODULE_1__["default"])() +;(0,_b_js__WEBPACK_IMPORTED_MODULE_2__["default"])() -;(0,_c_js__WEBPACK_IMPORTED_MODULE_2__.getC)().then(console.log) +;(0,_c_js__WEBPACK_IMPORTED_MODULE_3__.getC)().then(console.log) // const M1 = await import('./1.js') -;(0,_1_js__WEBPACK_IMPORTED_MODULE_3__["default"])() +;(0,_1_js__WEBPACK_IMPORTED_MODULE_0__["default"])() })(); diff --git a/testcases/webpack5/dist/index.js.map b/testcases/webpack5/dist/index.js.map index 696f46fd..cf774f2b 100644 --- a/testcases/webpack5/dist/index.js.map +++ b/testcases/webpack5/dist/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","mappings":";;;;;;;;;;;;;;AAAe;AACf;AACA;;;;;;;;;;;;;;;ACFO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACRO;AACP;AACA,6BAAe,sCAAY;AAC3B;AACA;;;;;;;;;;;;;;;;ACJgC;AAChC;AACO;AACP,uBAAuB,0CAAO;AAC9B;AACA;AACA;AACA;;;;;;;UCPA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;;;;;;;;;;;ACN0B;AACS;AACN;AACN;AACvB;AACA,YAAY,0CAAO,EAAE,oCAAC;AACtB;AACA,kDAAC;AACD;AACA,4CAAI;AACJ;AACA;AACA;AACA,kDAAE","sources":["webpack://testcase-webpack5/./src/1.js","webpack://testcase-webpack5/./src/a.js","webpack://testcase-webpack5/./src/b.js","webpack://testcase-webpack5/./src/c.js","webpack://testcase-webpack5/webpack/bootstrap","webpack://testcase-webpack5/webpack/runtime/define property getters","webpack://testcase-webpack5/webpack/runtime/hasOwnProperty shorthand","webpack://testcase-webpack5/webpack/runtime/make namespace object","webpack://testcase-webpack5/./src/index.js"],"sourcesContent":["export default function m1() {\r\n console.log('m1')\r\n}\r\n","export class A {\r\n constructor() {\r\n this.label = 'a'\r\n }\r\n\r\n print() {\r\n console.log('a', this.version)\r\n }\r\n}\r\n","export const version = '1.0.0'\r\n\r\nexport default function () {\r\n console.log('b', version)\r\n}\r\n","import { version } from './b.js'\r\n\r\nexport const getC = async () => {\r\n console.log('c.a', version)\r\n const result = await fetch('https://jsonplaceholder.typicode.com/todos/1')\r\n const json = await result.json()\r\n return json\r\n}\r\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { A } from './a.js'\r\nimport b, { version } from './b.js'\r\nimport { getC } from './c.js'\r\nimport M1 from './1.js'\r\n\r\nconsole.log(version, A)\r\n\r\nb()\r\n\r\ngetC().then(console.log)\r\n\r\n// const M1 = await import('./1.js')\r\n\r\nM1()\r\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"index.js","mappings":";;;;;;;;;;;;;;AAAe;AACf;AACA;;;;;;;;;;;;;;;;ACFO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACdO;AACP;AACA,6BAAe,sCAAY;AAC3B;AACA;;;;;;;;;;;;;;;;ACJgC;AAChC;AACO;AACP,uBAAuB,0CAAO;AAC9B;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACPA;AACsB;;;;;;;;;;;;;;;;ACDI;AAC1B;AACA;AACY;;;;;;;UCHZ;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;;;;;;;;;;;;;ACNuB;AACG;AACS;AACN;AACG;AACC;AACjC;AACA,cAAc,oCAAE;AAChB,cAAc,oCAAG;AACjB;AACA,YAAY,0CAAO,EAAE,oCAAC;AACtB;AACA,kDAAC;AACD;AACA,4CAAI;AACJ;AACA;AACA;AACA,kDAAE","sources":["webpack://testcase-webpack5/./src/1.js","webpack://testcase-webpack5/./src/a.js","webpack://testcase-webpack5/./src/b.js","webpack://testcase-webpack5/./src/c.js","webpack://testcase-webpack5/./src/d.js","webpack://testcase-webpack5/./src/e.js","webpack://testcase-webpack5/webpack/bootstrap","webpack://testcase-webpack5/webpack/runtime/define property getters","webpack://testcase-webpack5/webpack/runtime/hasOwnProperty shorthand","webpack://testcase-webpack5/webpack/runtime/make namespace object","webpack://testcase-webpack5/./src/index.js"],"sourcesContent":["export default function m1() {\r\n console.log('m1')\r\n}\r\n","export class A {\r\n constructor() {\r\n this.label = 'a'\r\n }\r\n\r\n print() {\r\n console.log('a', this.version)\r\n }\r\n}\r\n\r\nexport class A_A {\r\n constructor() {\r\n this.label = 'a_a'\r\n }\r\n}\r\n","export const version = '1.0.0'\r\n\r\nexport default function () {\r\n console.log('b', version)\r\n}\r\n","import { version } from './b.js'\r\n\r\nexport const getC = async () => {\r\n console.log('c.a', version)\r\n const result = await fetch('https://jsonplaceholder.typicode.com/todos/1')\r\n const json = await result.json()\r\n return json\r\n}\r\n","// re-export\r\nexport * from './a.js'\r\n","import { A } from './a.js'\r\n\r\n// partial re-export\r\nexport { A }\r\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import M1 from './1.js'\r\nimport { A } from './a.js'\r\nimport b, { version } from './b.js'\r\nimport { getC } from './c.js'\r\nimport { A as AA } from './d.js'\r\nimport { A as AAA } from './e.js'\r\n\r\nconst d = new AA()\r\nconst e = new AAA()\r\n\r\nconsole.log(version, A, d, e)\r\n\r\nb()\r\n\r\ngetC().then(console.log)\r\n\r\n// const M1 = await import('./1.js')\r\n\r\nM1()\r\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/testcases/webpack5/dist/index.pretty.js b/testcases/webpack5/dist/index.pretty.js index 4a5a5d75..3c71916a 100644 --- a/testcases/webpack5/dist/index.pretty.js +++ b/testcases/webpack5/dist/index.pretty.js @@ -35,6 +35,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ A: () => /* binding */ A, + /* harmony export */ A_A: () => /* binding */ A_A, /* harmony export */ }); class A { @@ -47,6 +48,12 @@ } } + class A_A { + constructor() { + this.label = "a_a"; + } + } + /***/ }, @@ -104,6 +111,53 @@ /***/ }, + /***/ "./src/d.js": + /*!******************!*\ + !*** ./src/d.js ***! + \******************/ + /***/ ( + __unused_webpack___webpack_module__, + __webpack_exports__, + __webpack_require__ + ) => { + __webpack_require__.r(__webpack_exports__); + /* harmony export */ __webpack_require__.d(__webpack_exports__, { + /* harmony export */ A: () => + /* reexport safe */ _a_js__WEBPACK_IMPORTED_MODULE_0__.A, + /* harmony export */ A_A: () => + /* reexport safe */ _a_js__WEBPACK_IMPORTED_MODULE_0__.A_A, + /* harmony export */ + }); + /* harmony import */ var _a_js__WEBPACK_IMPORTED_MODULE_0__ = + __webpack_require__(/*! ./a.js */ "./src/a.js"); + // re-export + + /***/ + }, + + /***/ "./src/e.js": + /*!******************!*\ + !*** ./src/e.js ***! + \******************/ + /***/ ( + __unused_webpack___webpack_module__, + __webpack_exports__, + __webpack_require__ + ) => { + __webpack_require__.r(__webpack_exports__); + /* harmony export */ __webpack_require__.d(__webpack_exports__, { + /* harmony export */ A: () => + /* reexport safe */ _a_js__WEBPACK_IMPORTED_MODULE_0__.A, + /* harmony export */ + }); + /* harmony import */ var _a_js__WEBPACK_IMPORTED_MODULE_0__ = + __webpack_require__(/*! ./a.js */ "./src/a.js"); + + // partial re-export + + /***/ + }, + /******/ }; /************************************************************************/ @@ -192,24 +246,33 @@ !*** ./src/index.js ***! \**********************/ __webpack_require__.r(__webpack_exports__); - /* harmony import */ var _a_js__WEBPACK_IMPORTED_MODULE_0__ = + /* harmony import */ var _1_js__WEBPACK_IMPORTED_MODULE_0__ = + __webpack_require__(/*! ./1.js */ "./src/1.js"); + /* harmony import */ var _a_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./a.js */ "./src/a.js"); - /* harmony import */ var _b_js__WEBPACK_IMPORTED_MODULE_1__ = + /* harmony import */ var _b_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./b.js */ "./src/b.js"); - /* harmony import */ var _c_js__WEBPACK_IMPORTED_MODULE_2__ = + /* harmony import */ var _c_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./c.js */ "./src/c.js"); - /* harmony import */ var _1_js__WEBPACK_IMPORTED_MODULE_3__ = - __webpack_require__(/*! ./1.js */ "./src/1.js"); + /* harmony import */ var _d_js__WEBPACK_IMPORTED_MODULE_4__ = + __webpack_require__(/*! ./d.js */ "./src/d.js"); + /* harmony import */ var _e_js__WEBPACK_IMPORTED_MODULE_5__ = + __webpack_require__(/*! ./e.js */ "./src/e.js"); + + const d = new _d_js__WEBPACK_IMPORTED_MODULE_4__.A(); + const e = new _e_js__WEBPACK_IMPORTED_MODULE_5__.A(); console.log( - _b_js__WEBPACK_IMPORTED_MODULE_1__.version, - _a_js__WEBPACK_IMPORTED_MODULE_0__.A + _b_js__WEBPACK_IMPORTED_MODULE_2__.version, + _a_js__WEBPACK_IMPORTED_MODULE_1__.A, + d, + e ); - (0, _b_js__WEBPACK_IMPORTED_MODULE_1__["default"])(); - (0, _c_js__WEBPACK_IMPORTED_MODULE_2__.getC)().then(console.log); + (0, _b_js__WEBPACK_IMPORTED_MODULE_2__["default"])(); + (0, _c_js__WEBPACK_IMPORTED_MODULE_3__.getC)().then(console.log); // const M1 = await import('./1.js') - (0, _1_js__WEBPACK_IMPORTED_MODULE_3__["default"])(); + (0, _1_js__WEBPACK_IMPORTED_MODULE_0__["default"])(); })(); /******/ diff --git a/testcases/webpack5/src/a.js b/testcases/webpack5/src/a.js index 898e8b06..c1e99792 100644 --- a/testcases/webpack5/src/a.js +++ b/testcases/webpack5/src/a.js @@ -7,3 +7,9 @@ export class A { console.log('a', this.version) } } + +export class A_A { + constructor() { + this.label = 'a_a' + } +} diff --git a/testcases/webpack5/src/d.js b/testcases/webpack5/src/d.js new file mode 100644 index 00000000..604f7cbd --- /dev/null +++ b/testcases/webpack5/src/d.js @@ -0,0 +1,2 @@ +// re-export +export * from './a.js' diff --git a/testcases/webpack5/src/e.js b/testcases/webpack5/src/e.js new file mode 100644 index 00000000..194cd170 --- /dev/null +++ b/testcases/webpack5/src/e.js @@ -0,0 +1,4 @@ +import { A } from './a.js' + +// partial re-export +export { A } diff --git a/testcases/webpack5/src/index.js b/testcases/webpack5/src/index.js index 30eae8f9..554e0edc 100644 --- a/testcases/webpack5/src/index.js +++ b/testcases/webpack5/src/index.js @@ -2,8 +2,13 @@ import M1 from './1.js' import { A } from './a.js' import b, { version } from './b.js' import { getC } from './c.js' +import { A as AA } from './d.js' +import { A as AAA } from './e.js' -console.log(version, A) +const d = new AA() +const e = new AAA() + +console.log(version, A, d, e) b()