commonjs compatible