diff --git a/hook.js b/hook.js index 1752bcf..40359db 100644 --- a/hook.js +++ b/hook.js @@ -206,24 +206,19 @@ async function processModule ({ srcUrl, context, parentGetSource, parentResolve, if (isStarExportLine(n) === true) { const [, modFile] = n.split('* from ') - let modUrl + async function processSubModule (url, ctx) { + const setters = await processModule({ srcUrl: url, context: ctx, parentGetSource, parentResolve, excludeDefault: true }) + for (const [name, setter] of setters.entries()) { + addSetter(name, setter, true) + } + } + if (isBareSpecifier(modFile)) { // Bare specifiers need to be resolved relative to the parent module. const result = await parentResolve(modFile, { parentURL: srcUrl }) - modUrl = result.url + await processSubModule(result.url, { ...context, format: result.format }) } else { - modUrl = new URL(modFile, srcUrl).href - } - - const setters = await processModule({ - srcUrl: modUrl, - context, - parentGetSource, - parentResolve, - excludeDefault: true - }) - for (const [name, setter] of setters.entries()) { - addSetter(name, setter, true) + await processSubModule(new URL(modFile, srcUrl).href, context) } } else { addSetter(n, ` diff --git a/package.json b/package.json index 45d4a06..5625605 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,8 @@ "imhotap": "^2.1.0", "openai": "^4.47.2", "ts-node": "^10.9.1", - "typescript": "^4.7.4" + "typescript": "^4.7.4", + "vue": "^3.4.31" }, "dependencies": { "acorn": "^8.8.2", diff --git a/test/hook/vue-server-renderer.mjs b/test/hook/vue-server-renderer.mjs new file mode 100644 index 0000000..2e0b3b2 --- /dev/null +++ b/test/hook/vue-server-renderer.mjs @@ -0,0 +1,5 @@ +// https://github.com/nodejs/import-in-the-middle/issues/139 +import { strictEqual } from 'assert' +import * as lib from 'vue/server-renderer' + +strictEqual(typeof lib.renderToString, 'function')