UNPKG

2.45 kBJavaScriptView Raw
1"use strict";
2/**
3 * @todo Document why this abstraction exists, and the relationship between
4 * environment, file managers, and plugin manager
5 */
6Object.defineProperty(exports, "__esModule", { value: true });
7var tslib_1 = require("tslib");
8var logger_1 = tslib_1.__importDefault(require("../logger"));
9var Environment = /** @class */ (function () {
10 function Environment(externalEnvironment, fileManagers) {
11 this.fileManagers = fileManagers || [];
12 externalEnvironment = externalEnvironment || {};
13 var optionalFunctions = ['encodeBase64', 'mimeLookup', 'charsetLookup', 'getSourceMapGenerator'];
14 var requiredFunctions = [];
15 var functions = requiredFunctions.concat(optionalFunctions);
16 for (var i = 0; i < functions.length; i++) {
17 var propName = functions[i];
18 var environmentFunc = externalEnvironment[propName];
19 if (environmentFunc) {
20 this[propName] = environmentFunc.bind(externalEnvironment);
21 }
22 else if (i < requiredFunctions.length) {
23 this.warn("missing required function in environment - " + propName);
24 }
25 }
26 }
27 Environment.prototype.getFileManager = function (filename, currentDirectory, options, environment, isSync) {
28 if (!filename) {
29 logger_1.default.warn('getFileManager called with no filename.. Please report this issue. continuing.');
30 }
31 if (currentDirectory == null) {
32 logger_1.default.warn('getFileManager called with null directory.. Please report this issue. continuing.');
33 }
34 var fileManagers = this.fileManagers;
35 if (options.pluginManager) {
36 fileManagers = [].concat(fileManagers).concat(options.pluginManager.getFileManagers());
37 }
38 for (var i = fileManagers.length - 1; i >= 0; i--) {
39 var fileManager = fileManagers[i];
40 if (fileManager[isSync ? 'supportsSync' : 'supports'](filename, currentDirectory, options, environment)) {
41 return fileManager;
42 }
43 }
44 return null;
45 };
46 Environment.prototype.addFileManager = function (fileManager) {
47 this.fileManagers.push(fileManager);
48 };
49 Environment.prototype.clearFileManagers = function () {
50 this.fileManagers = [];
51 };
52 return Environment;
53}());
54exports.default = Environment;
55//# sourceMappingURL=environment.js.map
\No newline at end of file