You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
3.6 KiB
88 lines
3.6 KiB
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var tslib_1 = require("tslib");
|
|
var contexts_1 = tslib_1.__importDefault(require("./contexts"));
|
|
var parser_1 = tslib_1.__importDefault(require("./parser/parser"));
|
|
var plugin_manager_1 = tslib_1.__importDefault(require("./plugin-manager"));
|
|
var less_error_1 = tslib_1.__importDefault(require("./less-error"));
|
|
var utils = tslib_1.__importStar(require("./utils"));
|
|
function default_1(environment, ParseTree, ImportManager) {
|
|
var parse = function (input, options, callback) {
|
|
if (typeof options === 'function') {
|
|
callback = options;
|
|
options = utils.copyOptions(this.options, {});
|
|
}
|
|
else {
|
|
options = utils.copyOptions(this.options, options || {});
|
|
}
|
|
if (!callback) {
|
|
var self_1 = this;
|
|
return new Promise(function (resolve, reject) {
|
|
parse.call(self_1, input, options, function (err, output) {
|
|
if (err) {
|
|
reject(err);
|
|
}
|
|
else {
|
|
resolve(output);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
else {
|
|
var context_1;
|
|
var rootFileInfo = void 0;
|
|
var pluginManager_1 = new plugin_manager_1.default(this, !options.reUsePluginManager);
|
|
options.pluginManager = pluginManager_1;
|
|
context_1 = new contexts_1.default.Parse(options);
|
|
if (options.rootFileInfo) {
|
|
rootFileInfo = options.rootFileInfo;
|
|
}
|
|
else {
|
|
var filename = options.filename || 'input';
|
|
var entryPath = filename.replace(/[^\/\\]*$/, '');
|
|
rootFileInfo = {
|
|
filename: filename,
|
|
rewriteUrls: context_1.rewriteUrls,
|
|
rootpath: context_1.rootpath || '',
|
|
currentDirectory: entryPath,
|
|
entryPath: entryPath,
|
|
rootFilename: filename
|
|
};
|
|
// add in a missing trailing slash
|
|
if (rootFileInfo.rootpath && rootFileInfo.rootpath.slice(-1) !== '/') {
|
|
rootFileInfo.rootpath += '/';
|
|
}
|
|
}
|
|
var imports_1 = new ImportManager(this, context_1, rootFileInfo);
|
|
this.importManager = imports_1;
|
|
// TODO: allow the plugins to be just a list of paths or names
|
|
// Do an async plugin queue like lessc
|
|
if (options.plugins) {
|
|
options.plugins.forEach(function (plugin) {
|
|
var evalResult, contents;
|
|
if (plugin.fileContent) {
|
|
contents = plugin.fileContent.replace(/^\uFEFF/, '');
|
|
evalResult = pluginManager_1.Loader.evalPlugin(contents, context_1, imports_1, plugin.options, plugin.filename);
|
|
if (evalResult instanceof less_error_1.default) {
|
|
return callback(evalResult);
|
|
}
|
|
}
|
|
else {
|
|
pluginManager_1.addPlugin(plugin);
|
|
}
|
|
});
|
|
}
|
|
new parser_1.default(context_1, imports_1, rootFileInfo)
|
|
.parse(input, function (e, root) {
|
|
if (e) {
|
|
return callback(e);
|
|
}
|
|
callback(null, root, imports_1, options);
|
|
}, options);
|
|
}
|
|
};
|
|
return parse;
|
|
}
|
|
exports.default = default_1;
|
|
;
|
|
//# sourceMappingURL=parse.js.map
|