UNPKG

npm

Version:

a package manager for JavaScript

153 lines 6.13 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var parser_1 = __importDefault(require("./parser")); var Processor = /** @class */ (function () { function Processor(func, options) { this.func = func || function noop() { }; this.funcRes = null; this.options = options; } Processor.prototype._shouldUpdateSelector = function (rule, options) { if (options === void 0) { options = {}; } var merged = Object.assign({}, this.options, options); if (merged.updateSelector === false) { return false; } else { return typeof rule !== "string"; } }; Processor.prototype._isLossy = function (options) { if (options === void 0) { options = {}; } var merged = Object.assign({}, this.options, options); if (merged.lossless === false) { return true; } else { return false; } }; Processor.prototype._root = function (rule, options) { if (options === void 0) { options = {}; } var parser = new parser_1.default(rule, this._parseOptions(options)); return parser.root; }; Processor.prototype._parseOptions = function (options) { var merged = Object.assign({}, this.options, options); return { lossy: this._isLossy(merged), maxNestingDepth: merged.maxNestingDepth, }; }; Processor.prototype._stringifyOptions = function (options) { var merged = Object.assign({}, this.options, options); return { maxNestingDepth: merged.maxNestingDepth, }; }; Processor.prototype._run = function (rule, options) { var _this = this; if (options === void 0) { options = {}; } return new Promise(function (resolve, reject) { try { var root_1 = _this._root(rule, options); Promise.resolve(_this.func(root_1)) .then(function (transform) { var string = undefined; if (_this._shouldUpdateSelector(rule, options)) { string = root_1.toString(_this._stringifyOptions(options)); rule.selector = string; } return { transform: transform, root: root_1, string: string }; }) .then(resolve, reject); } catch (e) { reject(e); return; } }); }; Processor.prototype._runSync = function (rule, options) { if (options === void 0) { options = {}; } var root = this._root(rule, options); var transform = this.func(root); if (transform && typeof transform.then === "function") { throw new Error("Selector processor returned a promise to a synchronous call."); } var string = undefined; if (options.updateSelector && typeof rule !== "string") { string = root.toString(this._stringifyOptions(options)); rule.selector = string; } return { transform: transform, root: root, string: string }; }; /** * Process rule into a selector AST. * * @param rule {postcss.Rule | string} The css selector to be processed * @param options The options for processing * @returns {Promise<parser.Root>} The AST of the selector after processing it. */ Processor.prototype.ast = function (rule, options) { return this._run(rule, options).then(function (result) { return result.root; }); }; /** * Process rule into a selector AST synchronously. * * @param rule {postcss.Rule | string} The css selector to be processed * @param options The options for processing * @returns {parser.Root} The AST of the selector after processing it. */ Processor.prototype.astSync = function (rule, options) { return this._runSync(rule, options).root; }; /** * Process a selector into a transformed value asynchronously * * @param rule {postcss.Rule | string} The css selector to be processed * @param options The options for processing * @returns {Promise<any>} The value returned by the processor. */ Processor.prototype.transform = function (rule, options) { return this._run(rule, options).then(function (result) { return result.transform; }); }; /** * Process a selector into a transformed value synchronously. * * @param rule {postcss.Rule | string} The css selector to be processed * @param options The options for processing * @returns {any} The value returned by the processor. */ Processor.prototype.transformSync = function (rule, options) { return this._runSync(rule, options).transform; }; /** * Process a selector into a new selector string asynchronously. * * @param rule {postcss.Rule | string} The css selector to be processed * @param options The options for processing * @returns {string} the selector after processing. */ Processor.prototype.process = function (rule, options) { var _this = this; return this._run(rule, options).then(function (result) { return result.string || result.root.toString(_this._stringifyOptions(options)); }); }; /** * Process a selector into a new selector string synchronously. * * @param rule {postcss.Rule | string} The css selector to be processed * @param options The options for processing * @returns {string} the selector after processing. */ Processor.prototype.processSync = function (rule, options) { var result = this._runSync(rule, options); return result.string || result.root.toString(this._stringifyOptions(options)); }; return Processor; }()); exports.default = Processor; //# sourceMappingURL=processor.js.map