calebdwilliams/rollup-plugin-import-assert

Does not work if dynamic import path is a template literal

Opened this issue · 0 comments

CxRes commented

If one has a dynamic import statement of the form:

import(`/path/to/${file}`, { assert: { type: 'json' } }) 

rollup crashes with error:

TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received undefined
    at validateString (internal/validators.js:124:11)
    at Object.resolve (path.js:162:9)
    at getImportPath (file:///D:/dev/Proto/syntropize70c/packages/apis/resource/node_modules/.pnpm/rollup-plugin-import-assert@1.1.2_acorn-import-assertions@1.7.6/node_modules/rollup-plugin-import-assert/dist/import-assert.js:25:44)
    at file:///D:/dev/Proto/syntropize70c/packages/apis/resource/node_modules/.pnpm/rollup-plugin-import-assert@1.1.2_acorn-import-assertions@1.7.6/node_modules/rollup-plugin-import-assert/dist/import-assert.js:48:40
    at Array.forEach (<anonymous>)
    at Object.transform (file:///D:/dev/Proto/syntropize70c/packages/apis/resource/node_modules/.pnpm/rollup-plugin-import-assert@1.1.2_acorn-import-assertions@1.7.6/node_modules/rollup-plugin-import-assert/dist/import-assert.js:47:35)
    at file:///D:/dev/Proto/syntropize70c/node_modules/.pnpm/rollup@2.56.2/node_modules/rollup/dist/es/shared/rollup.js:20117:25
    at runNextTicks (internal/process/task_queues.js:60:5)
    at processImmediate (internal/timers.js:437:9) {
  code: 'PLUGIN_ERROR',
  pluginCode: 'ERR_INVALID_ARG_TYPE',
  plugin: 'rollup-plugin-import-assert',
  hook: 'transform',
  id: 'D:\\dev\\Proto\\syntropize70c\\packages\\apis\\resource\\src\\schema\\fetch.js',
  watchFiles: [...]

Looking into the code, I find that the second argument to getImportPath() is node.source.value which assumes the path to be a value; whereas the template literal leads to a tree no value property. I believe fixing this should resolve the issue.. Actually, any dynamic statement should just be left alone (except for appropriate modification of variable names, if import path is an expression).