endo icon indicating copy to clipboard operation
endo copied to clipboard

ses: unexpectedly undefined `import.meta`

Open boneskull opened this issue 6 months ago • 1 comments

Describe the bug

I ran into this exception when using ses to load a file from @babel/helper-define-polyfill-provider, containing this line:

const require = createRequire(import /*::(_)*/.meta.url); // eslint-disable-line

Steps to reproduce

TODO: Add minimal reproduction

The actual error looks like:

TypeError: [BABEL]: Cannot read properties of undefined (reading 'meta') (While processing: /Users/boneskull/projects/lavamoat/lavamoat/node_modules/@babel/preset-env/lib/index.js)
  at eval (file:///Users/boneskull/projects/lavamoat/lavamoat/node_modules/@babel/helper-define-polyfill-provider/esm/index.node.mjs:503:52)
  at eval (file:///Users/boneskull/projects/lavamoat/lavamoat/node_modules/@babel/helper-define-polyfill-provider/esm/index.node.mjs:880:3)
  at Object.execute (file:///Users/boneskull/projects/endojs/endo/packages/ses/src/module-instance.js:472:9)
  at imports (file:///Users/boneskull/projects/endojs/endo/packages/ses/src/module-instance.js:382:16)
  at eval (file:///Users/boneskull/projects/lavamoat/lavamoat/node_modules/babel-plugin-polyfill-corejs2/esm/index.mjs:1:176)
  at eval (file:///Users/boneskull/projects/lavamoat/lavamoat/node_modules/babel-plugin-polyfill-corejs2/esm/index.mjs:397:3)
  at execute (file:///Users/boneskull/projects/endojs/endo/packages/ses/src/module-instance.js:472:9)
  at compartmentImportNow (file:///Users/boneskull/projects/endojs/endo/packages/ses/src/compartment.js:138:3)
  at ExecutionCompartment.importNow (file:///Users/boneskull/projects/endojs/endo/packages/ses/src/compartment.js:230:12)
  at require (file:///Users/boneskull/projects/endojs/endo/packages/compartment-mapper/src/parse-cjs-shared-export-wrapper.js:159:31)

Expected behavior

No exception thrown.

Platform environment

Node.js v22.15.0, boneskull/reexport-fix branch

boneskull avatar Jul 30 '25 00:07 boneskull

I’ve learned from Nicolò of Babel that this is a counter-measure for Flow, which was unable to recognize import.meta.url at some point, but now that it can, this is no longer needed. This was a successful measure against their ESM parser and was recognized as import().meta.

kriskowal avatar Jul 31 '25 16:07 kriskowal