///|
/// Node.js: require(moduleName)
pub extern "js" fn require(module_name : String) -> @core.Any =
#| (moduleName) => require(moduleName)
///|
/// Node.js: require.cache
pub extern "js" fn require_cache() -> @core.Any =
#| (moduleName) => require.cache
///|
/// Node.js: module
pub extern "js" fn module_() -> @core.Any =
#| () => module
///|
/// Node.js: require.resolve(moduleName)
/// only cjs
pub extern "js" fn require_resolve(module_name : String) =
#| (moduleName) => require.resolve(moduleName)
///|
/// Node.js: __dirname
/// only cjs
extern "js" fn __dirname() -> String =
#| () => __dirname
///|
/// Node.js: __filename
/// only cjs
extern "js" fn __filename() -> String =
#| () => __filename
///|
/// Node.js: require.main
/// only esm
pub extern "js" fn require_main() -> String =
#| () => require.main
///|
/// Initialize ESM-compatible require function.
/// Must be called once before using esm_require in pure ESM environments.
/// Returns a Promise that resolves when initialization is complete.
/// In CJS environments, this is a no-op (require is already available).
pub extern "js" fn init_esm_require() -> @core.Promise[Unit] =
#| async () => {
#| if (typeof require !== 'undefined') {
#| globalThis.__esm_require__ = require;
#| return;
#| }
#| const { createRequire } = await import('node:module');
#| globalThis.__esm_require__ = createRequire(import.meta.url);
#| }
///|
/// Universal require that works in both ESM and CJS environments.
/// In CJS mode, uses native require directly.
/// In ESM mode, requires init_esm_require() to be called first.
/// Throws an error if used in ESM without initialization.
pub extern "js" fn esm_require(module_name : String) -> @core.Any =
#| (moduleName) => {
#| if (typeof require !== 'undefined') {
#| return require(moduleName);
#| }
#| if (!globalThis.__esm_require__) {
#| throw new Error('esm_require not initialized. Call init_esm_require() first in ESM environments.');
#| }
#| return globalThis.__esm_require__(moduleName);
#| }