保誠-保戶業務員媒合平台
HelenHuang
2022-06-09 9bdb95c9e34cef640534e5e5a1e2225a80442000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
var LoaderLoadingError = require("./LoaderLoadingError");
var url;
 
module.exports = function loadLoader(loader, callback) {
    if(loader.type === "module") {
        try {
            if(url === undefined) url = require("url");
            var loaderUrl = url.pathToFileURL(loader.path);
            var modulePromise = eval("import(" + JSON.stringify(loaderUrl.toString()) + ")");
            modulePromise.then(function(module) {
                handleResult(loader, module, callback);
            }, callback);
            return;
        } catch(e) {
            callback(e);
        }
    } else {
        try {
            var module = require(loader.path);
        } catch(e) {
            // it is possible for node to choke on a require if the FD descriptor
            // limit has been reached. give it a chance to recover.
            if(e instanceof Error && e.code === "EMFILE") {
                var retry = loadLoader.bind(null, loader, callback);
                if(typeof setImmediate === "function") {
                    // node >= 0.9.0
                    return setImmediate(retry);
                } else {
                    // node < 0.9.0
                    return process.nextTick(retry);
                }
            }
            return callback(e);
        }
        return handleResult(loader, module, callback);
    }
};
 
function handleResult(loader, module, callback) {
    if(typeof module !== "function" && typeof module !== "object") {
        return callback(new LoaderLoadingError(
            "Module '" + loader.path + "' is not a loader (export function or es6 module)"
        ));
    }
    loader.normal = typeof module === "function" ? module : module.default;
    loader.pitch = module.pitch;
    loader.raw = module.raw;
    if(typeof loader.normal !== "function" && typeof loader.pitch !== "function") {
        return callback(new LoaderLoadingError(
            "Module '" + loader.path + "' is not a loader (must have normal or pitch function)"
        ));
    }
    callback();
}