diff options
Diffstat (limited to 'ext/node/polyfills/01_require.js')
-rw-r--r-- | ext/node/polyfills/01_require.js | 105 |
1 files changed, 66 insertions, 39 deletions
diff --git a/ext/node/polyfills/01_require.js b/ext/node/polyfills/01_require.js index 0fdaf4b4a..364468fb3 100644 --- a/ext/node/polyfills/01_require.js +++ b/ext/node/polyfills/01_require.js @@ -3,7 +3,33 @@ // deno-lint-ignore-file import { core, internals, primordials } from "ext:core/mod.js"; -const ops = core.ops; +const { + op_require_as_file_path, + op_require_break_on_next_statement, + op_require_init_paths, + op_require_is_deno_dir_package, + op_require_is_request_relative, + op_require_node_module_paths, + op_require_package_imports_resolve, + op_require_path_basename, + op_require_path_dirname, + op_require_path_is_absolute, + op_require_path_resolve, + op_require_proxy_path, + op_require_read_file, + op_require_read_package_scope, + op_require_real_path, + op_require_resolve_deno_dir, + op_require_resolve_exports, + op_require_resolve_lookup_paths, + op_require_stat, + op_require_try_self, + op_require_try_self_parent_path, +} = core.ensureFastOps(); +const { + op_napi_open, + op_require_read_closest_package_json, +} = core.ensureFastOps(true); const { ArrayIsArray, ArrayPrototypeIncludes, @@ -12,32 +38,33 @@ const { ArrayPrototypePush, ArrayPrototypeSlice, ArrayPrototypeSplice, + Error, + JSONParse, + ObjectCreate, + ObjectEntries, ObjectGetOwnPropertyDescriptor, ObjectGetPrototypeOf, ObjectHasOwn, - ObjectSetPrototypeOf, ObjectKeys, - ObjectEntries, ObjectPrototype, - ObjectCreate, + ObjectSetPrototypeOf, Proxy, + RegExpPrototypeTest, + SafeArrayIterator, SafeMap, SafeWeakMap, - SafeArrayIterator, - JSONParse, String, + StringPrototypeCharCodeAt, StringPrototypeEndsWith, - StringPrototypeIndexOf, StringPrototypeIncludes, + StringPrototypeIndexOf, StringPrototypeMatch, StringPrototypeSlice, StringPrototypeSplit, StringPrototypeStartsWith, - StringPrototypeCharCodeAt, - RegExpPrototypeTest, - Error, TypeError, } = primordials; + import { nodeGlobals } from "ext:deno_node/00_globals.js"; import _httpAgent from "ext:deno_node/_http_agent.mjs"; @@ -248,11 +275,11 @@ function pathDirname(filepath) { } else if (filepath === "") { return "."; } - return ops.op_require_path_dirname(filepath); + return op_require_path_dirname(filepath); } function pathResolve(...args) { - return ops.op_require_path_resolve(args); + return op_require_path_resolve(args); } const nativeModulePolyfill = new SafeMap(); @@ -276,7 +303,7 @@ function stat(filename) { return result; } } - const result = ops.op_require_stat(filename); + const result = op_require_stat(filename); if (statCache !== null && result >= 0) { statCache.set(filename, result); } @@ -306,7 +333,7 @@ function tryPackage(requestPath, exts, isMain, originalPath) { requestPath, "package.json", ); - const pkg = ops.op_require_read_package_scope(packageJsonPath)?.main; + const pkg = op_require_read_package_scope(packageJsonPath)?.main; if (!pkg) { return tryExtensions( pathResolve(requestPath, "index"), @@ -360,7 +387,7 @@ function toRealPath(requestPath) { if (maybeCached) { return maybeCached; } - const rp = ops.op_require_real_path(requestPath); + const rp = op_require_real_path(requestPath); realpathCache.set(requestPath, rp); return rp; } @@ -379,7 +406,7 @@ function tryExtensions(p, exts, isMain) { // Find the longest (possibly multi-dot) extension registered in // Module._extensions function findLongestRegisteredExtension(filename) { - const name = ops.op_require_path_basename(filename); + const name = op_require_path_basename(filename); let currentExtension; let index; let startIndex = 0; @@ -513,7 +540,7 @@ function resolveExports( return false; } - return ops.op_require_resolve_exports( + return op_require_resolve_exports( usesLocalNodeModulesDir, modulesPath, request, @@ -524,7 +551,7 @@ function resolveExports( } Module._findPath = function (request, paths, isMain, parentPath) { - const absoluteRequest = ops.op_require_path_is_absolute(request); + const absoluteRequest = op_require_path_is_absolute(request); if (absoluteRequest) { paths = [""]; } else if (!paths || paths.length === 0) { @@ -568,10 +595,10 @@ Module._findPath = function (request, paths, isMain, parentPath) { if (usesLocalNodeModulesDir) { basePath = pathResolve(curPath, request); } else { - const isDenoDirPackage = ops.op_require_is_deno_dir_package( + const isDenoDirPackage = op_require_is_deno_dir_package( curPath, ); - const isRelative = ops.op_require_is_request_relative( + const isRelative = op_require_is_request_relative( request, ); basePath = (isDenoDirPackage && !isRelative) @@ -618,16 +645,16 @@ Module._findPath = function (request, paths, isMain, parentPath) { * @returns {string[]} List of module directories */ Module._nodeModulePaths = function (fromPath) { - return ops.op_require_node_module_paths(fromPath); + return op_require_node_module_paths(fromPath); }; Module._resolveLookupPaths = function (request, parent) { const paths = []; - if (ops.op_require_is_request_relative(request)) { + if (op_require_is_request_relative(request)) { ArrayPrototypePush( paths, - parent?.filename ? ops.op_require_path_dirname(parent.filename) : ".", + parent?.filename ? op_require_path_dirname(parent.filename) : ".", ); return paths; } @@ -635,7 +662,7 @@ Module._resolveLookupPaths = function (request, parent) { if ( !usesLocalNodeModulesDir && parent?.filename && parent.filename.length > 0 ) { - const denoDirPath = ops.op_require_resolve_deno_dir( + const denoDirPath = op_require_resolve_deno_dir( request, parent.filename, ); @@ -643,7 +670,7 @@ Module._resolveLookupPaths = function (request, parent) { ArrayPrototypePush(paths, denoDirPath); } } - const lookupPathsResult = ops.op_require_resolve_lookup_paths( + const lookupPathsResult = op_require_resolve_lookup_paths( request, parent?.paths, parent?.filename ?? "", @@ -765,7 +792,7 @@ Module._resolveFilename = function ( if (typeof options === "object" && options !== null) { if (ArrayIsArray(options.paths)) { - const isRelative = ops.op_require_is_request_relative( + const isRelative = op_require_is_request_relative( request, ); @@ -800,7 +827,7 @@ Module._resolveFilename = function ( if (parent?.filename) { if (request[0] === "#") { - const maybeResolved = ops.op_require_package_imports_resolve( + const maybeResolved = op_require_package_imports_resolve( parent.filename, request, ); @@ -811,12 +838,12 @@ Module._resolveFilename = function ( } // Try module self resolution first - const parentPath = ops.op_require_try_self_parent_path( + const parentPath = op_require_try_self_parent_path( !!parent, parent?.filename, parent?.id, ); - const selfResolved = ops.op_require_try_self(parentPath, request); + const selfResolved = op_require_try_self(parentPath, request); if (selfResolved) { const cacheKey = request + "\x00" + (paths.length === 1 ? paths[0] : ArrayPrototypeJoin(paths, "\x00")); @@ -832,7 +859,7 @@ Module._resolveFilename = function ( parentPath, ); if (filename) { - return ops.op_require_real_path(filename); + return op_require_real_path(filename); } const requireStack = []; for (let cursor = parent; cursor; cursor = moduleParentCache.get(cursor)) { @@ -876,7 +903,7 @@ Module.prototype.load = function (filename) { // Canonicalize the path so it's not pointing to the symlinked directory // in `node_modules` directory of the referrer. - this.filename = ops.op_require_real_path(filename); + this.filename = op_require_real_path(filename); this.paths = Module._nodeModulePaths( pathDirname(this.filename), ); @@ -989,7 +1016,7 @@ Module.prototype._compile = function (content, filename) { if (hasInspectBrk && !hasBrokenOnInspectBrk) { hasBrokenOnInspectBrk = true; - ops.op_require_break_on_next_statement(); + op_require_break_on_next_statement(); } const { @@ -1032,10 +1059,10 @@ Module.prototype._compile = function (content, filename) { }; Module._extensions[".js"] = function (module, filename) { - const content = ops.op_require_read_file(filename); + const content = op_require_read_file(filename); if (StringPrototypeEndsWith(filename, ".js")) { - const pkg = ops.op_require_read_closest_package_json(filename); + const pkg = op_require_read_closest_package_json(filename); if (pkg && pkg.exists && pkg.typ === "module") { throw createRequireEsmError( filename, @@ -1070,7 +1097,7 @@ function stripBOM(content) { // Native extension for .json Module._extensions[".json"] = function (module, filename) { - const content = ops.op_require_read_file(filename); + const content = op_require_read_file(filename); try { module.exports = JSONParse(stripBOM(content)); @@ -1085,11 +1112,11 @@ Module._extensions[".node"] = function (module, filename) { if (filename.endsWith("fsevents.node")) { throw new Error("Using fsevents module is currently not supported"); } - module.exports = ops.op_napi_open(filename, globalThis); + module.exports = op_napi_open(filename, globalThis); }; function createRequireFromPath(filename) { - const proxyPath = ops.op_require_proxy_path(filename); + const proxyPath = op_require_proxy_path(filename); const mod = new Module(proxyPath); mod.filename = proxyPath; mod.paths = Module._nodeModulePaths(mod.path); @@ -1152,14 +1179,14 @@ function createRequire(filenameOrUrl) { `The argument 'filename' must be a file URL object, file URL string, or absolute path string. Received ${filenameOrUrl}`, ); } - const filename = ops.op_require_as_file_path(fileUrlStr); + const filename = op_require_as_file_path(fileUrlStr); return createRequireFromPath(filename); } Module.createRequire = createRequire; Module._initPaths = function () { - const paths = ops.op_require_init_paths(); + const paths = op_require_init_paths(); modulePaths = paths; Module.globalPaths = ArrayPrototypeSlice(modulePaths); }; |