HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux wordpress-ubuntu-s-2vcpu-4gb-fra1-01 5.4.0-169-generic #187-Ubuntu SMP Thu Nov 23 14:52:28 UTC 2023 x86_64
User: root (0)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //proc/1526/task/1530/cwd/zaklada/html/node_modules/commoner/lib/relative.js
var assert = require("assert");
var Q = require("q");
var path = require("path");
var util = require("./util");
var recast = require("recast");
var n = recast.types.namedTypes;

function Relativizer(reader) {
    assert.ok(this instanceof Relativizer);
    assert.ok(reader === null ||
              reader instanceof require("./reader").ModuleReader);

    Object.defineProperties(this, {
        reader: { value: reader }
    });
}

var Rp = Relativizer.prototype;

exports.getProcessor = function(reader) {
    var relativizer = new Relativizer(reader);
    return function(id, input) {
        return relativizer.processSourceP(id, input);
    };
};

Rp.processSourceP = function(id, input) {
    var relativizer = this;
    var output = typeof input === "string" ? {
        ".js": input
    } : input;

    return Q(output[".js"]).then(function(source) {
        var promises = [];
        var ast = recast.parse(source);

        function fixRequireP(literal) {
            promises.push(relativizer.relativizeP(
                id, literal.value
            ).then(function(newValue) {
                return literal.value = newValue;
            }));
        }

        recast.visit(ast, {
            visitCallExpression: function(path) {
                var args = path.value.arguments;
                var callee = path.value.callee;

                if (n.Identifier.check(callee) &&
                    callee.name === "require" &&
                    args.length === 1) {
                    var arg = args[0];
                    if (n.Literal.check(arg) &&
                        typeof arg.value === "string") {
                        fixRequireP(arg);
                    }
                }

                this.traverse(path);
            }
        });

        return Q.all(promises).then(function() {
            output[".js"] = recast.print(ast).code;
            return output;
        });
    });
};

Rp.absolutizeP = function(moduleId, requiredId) {
    requiredId = util.absolutize(moduleId, requiredId);

    if (this.reader)
        return this.reader.getCanonicalIdP(requiredId);

    return Q(requiredId);
};

Rp.relativizeP = function(moduleId, requiredId) {
    return this.absolutizeP(
        moduleId,
        requiredId
    ).then(function(absoluteId) {
        return util.relativize(moduleId, absoluteId);
    });
};