[M120 Migration][Service][VD] Support file extension resolver for ESM type 63/305963/4
authorDongHyun Song <dh81.song@samsung.com>
Wed, 14 Feb 2024 08:12:54 +0000 (17:12 +0900)
committerBot Blink <blinkbot@samsung.com>
Thu, 15 Feb 2024 08:09:26 +0000 (08:09 +0000)
require.extensions[] extension resolver is only supported on cjs(CommonJS).
For ESM modules, it needs to try to search path with extensions again.

Reference:
https://review.tizen.org/gerrit/#/c/platform/framework/web/chromium-efl/+/296123/

Change-Id: I693902979f51d7267cf8d23e2c66d723bc9c45ee
Signed-off-by: DongHyun Song <dh81.song@samsung.com>
third_party/electron_node/lib/internal/modules/cjs/loader.js

index 6f277da..cd215df 100644 (file)
@@ -169,6 +169,7 @@ const relativeResolveCache = ObjectCreate(null);
 let requireDepth = 0;
 let isPreloading = false;
 let statCache = null;
+let esmResolveExtensions = false;
 
 function internalRequire(module, id) {
   validateString(id, 'id');
@@ -1092,7 +1093,12 @@ function finalizeEsmResolution(resolved, parentPath, pkgPath) {
     throw new ERR_INVALID_MODULE_SPECIFIER(
       resolved, 'must not include encoded "/" or "\\" characters', parentPath);
   const filename = fileURLToPath(resolved);
-  const actual = tryFile(filename);
+  let actual = tryFile(filename);
+  if (!actual && esmResolveExtensions) {
+    const exts = ObjectKeys(Module._extensions);
+    actual = tryExtensions(filename, exts, false) ||
+             tryPackage(filename, exts, false, request);
+  }
   if (actual)
     return actual;
   const err = createEsmNotFoundErr(filename,
@@ -1459,6 +1465,10 @@ Module.syncBuiltinESMExports = function syncBuiltinESMExports() {
   }
 };
 
+Module.enableEsmResolveExtensions = function(enable) {
+  esmResolveExtensions = enable;
+}
+
 Module.isBuiltin = function isBuiltin(moduleName) {
   return allBuiltins.has(moduleName);
 };