[6a3a178] | 1 | "use strict";
|
---|
| 2 |
|
---|
| 3 | exports.__esModule = true;
|
---|
| 4 | exports.default = void 0;
|
---|
| 5 |
|
---|
| 6 | var _warning = _interopRequireDefault(require("./warning"));
|
---|
| 7 |
|
---|
| 8 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
---|
| 9 |
|
---|
| 10 | function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
---|
| 11 |
|
---|
| 12 | function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
---|
| 13 |
|
---|
| 14 | /**
|
---|
| 15 | * Provides the result of the PostCSS transformations.
|
---|
| 16 | *
|
---|
| 17 | * A Result instance is returned by {@link LazyResult#then}
|
---|
| 18 | * or {@link Root#toResult} methods.
|
---|
| 19 | *
|
---|
| 20 | * @example
|
---|
| 21 | * postcss([autoprefixer]).process(css).then(result => {
|
---|
| 22 | * console.log(result.css)
|
---|
| 23 | * })
|
---|
| 24 | *
|
---|
| 25 | * @example
|
---|
| 26 | * const result2 = postcss.parse(css).toResult()
|
---|
| 27 | */
|
---|
| 28 | var Result = /*#__PURE__*/function () {
|
---|
| 29 | /**
|
---|
| 30 | * @param {Processor} processor Processor used for this transformation.
|
---|
| 31 | * @param {Root} root Root node after all transformations.
|
---|
| 32 | * @param {processOptions} opts Options from the {@link Processor#process}
|
---|
| 33 | * or {@link Root#toResult}.
|
---|
| 34 | */
|
---|
| 35 | function Result(processor, root, opts) {
|
---|
| 36 | /**
|
---|
| 37 | * The Processor instance used for this transformation.
|
---|
| 38 | *
|
---|
| 39 | * @type {Processor}
|
---|
| 40 | *
|
---|
| 41 | * @example
|
---|
| 42 | * for (const plugin of result.processor.plugins) {
|
---|
| 43 | * if (plugin.postcssPlugin === 'postcss-bad') {
|
---|
| 44 | * throw 'postcss-good is incompatible with postcss-bad'
|
---|
| 45 | * }
|
---|
| 46 | * })
|
---|
| 47 | */
|
---|
| 48 | this.processor = processor;
|
---|
| 49 | /**
|
---|
| 50 | * Contains messages from plugins (e.g., warnings or custom messages).
|
---|
| 51 | * Each message should have type and plugin properties.
|
---|
| 52 | *
|
---|
| 53 | * @type {Message[]}
|
---|
| 54 | *
|
---|
| 55 | * @example
|
---|
| 56 | * postcss.plugin('postcss-min-browser', () => {
|
---|
| 57 | * return (root, result) => {
|
---|
| 58 | * const browsers = detectMinBrowsersByCanIUse(root)
|
---|
| 59 | * result.messages.push({
|
---|
| 60 | * type: 'min-browser',
|
---|
| 61 | * plugin: 'postcss-min-browser',
|
---|
| 62 | * browsers
|
---|
| 63 | * })
|
---|
| 64 | * }
|
---|
| 65 | * })
|
---|
| 66 | */
|
---|
| 67 |
|
---|
| 68 | this.messages = [];
|
---|
| 69 | /**
|
---|
| 70 | * Root node after all transformations.
|
---|
| 71 | *
|
---|
| 72 | * @type {Root}
|
---|
| 73 | *
|
---|
| 74 | * @example
|
---|
| 75 | * root.toResult().root === root
|
---|
| 76 | */
|
---|
| 77 |
|
---|
| 78 | this.root = root;
|
---|
| 79 | /**
|
---|
| 80 | * Options from the {@link Processor#process} or {@link Root#toResult} call
|
---|
| 81 | * that produced this Result instance.
|
---|
| 82 | *
|
---|
| 83 | * @type {processOptions}
|
---|
| 84 | *
|
---|
| 85 | * @example
|
---|
| 86 | * root.toResult(opts).opts === opts
|
---|
| 87 | */
|
---|
| 88 |
|
---|
| 89 | this.opts = opts;
|
---|
| 90 | /**
|
---|
| 91 | * A CSS string representing of {@link Result#root}.
|
---|
| 92 | *
|
---|
| 93 | * @type {string}
|
---|
| 94 | *
|
---|
| 95 | * @example
|
---|
| 96 | * postcss.parse('a{}').toResult().css //=> "a{}"
|
---|
| 97 | */
|
---|
| 98 |
|
---|
| 99 | this.css = undefined;
|
---|
| 100 | /**
|
---|
| 101 | * An instance of `SourceMapGenerator` class from the `source-map` library,
|
---|
| 102 | * representing changes to the {@link Result#root} instance.
|
---|
| 103 | *
|
---|
| 104 | * @type {SourceMapGenerator}
|
---|
| 105 | *
|
---|
| 106 | * @example
|
---|
| 107 | * result.map.toJSON() //=> { version: 3, file: 'a.css', … }
|
---|
| 108 | *
|
---|
| 109 | * @example
|
---|
| 110 | * if (result.map) {
|
---|
| 111 | * fs.writeFileSync(result.opts.to + '.map', result.map.toString())
|
---|
| 112 | * }
|
---|
| 113 | */
|
---|
| 114 |
|
---|
| 115 | this.map = undefined;
|
---|
| 116 | }
|
---|
| 117 | /**
|
---|
| 118 | * Returns for @{link Result#css} content.
|
---|
| 119 | *
|
---|
| 120 | * @example
|
---|
| 121 | * result + '' === result.css
|
---|
| 122 | *
|
---|
| 123 | * @return {string} String representing of {@link Result#root}.
|
---|
| 124 | */
|
---|
| 125 |
|
---|
| 126 |
|
---|
| 127 | var _proto = Result.prototype;
|
---|
| 128 |
|
---|
| 129 | _proto.toString = function toString() {
|
---|
| 130 | return this.css;
|
---|
| 131 | }
|
---|
| 132 | /**
|
---|
| 133 | * Creates an instance of {@link Warning} and adds it
|
---|
| 134 | * to {@link Result#messages}.
|
---|
| 135 | *
|
---|
| 136 | * @param {string} text Warning message.
|
---|
| 137 | * @param {Object} [opts] Warning options.
|
---|
| 138 | * @param {Node} opts.node CSS node that caused the warning.
|
---|
| 139 | * @param {string} opts.word Word in CSS source that caused the warning.
|
---|
| 140 | * @param {number} opts.index Index in CSS node string that caused
|
---|
| 141 | * the warning.
|
---|
| 142 | * @param {string} opts.plugin Name of the plugin that created
|
---|
| 143 | * this warning. {@link Result#warn} fills
|
---|
| 144 | * this property automatically.
|
---|
| 145 | *
|
---|
| 146 | * @return {Warning} Created warning.
|
---|
| 147 | */
|
---|
| 148 | ;
|
---|
| 149 |
|
---|
| 150 | _proto.warn = function warn(text, opts) {
|
---|
| 151 | if (opts === void 0) {
|
---|
| 152 | opts = {};
|
---|
| 153 | }
|
---|
| 154 |
|
---|
| 155 | if (!opts.plugin) {
|
---|
| 156 | if (this.lastPlugin && this.lastPlugin.postcssPlugin) {
|
---|
| 157 | opts.plugin = this.lastPlugin.postcssPlugin;
|
---|
| 158 | }
|
---|
| 159 | }
|
---|
| 160 |
|
---|
| 161 | var warning = new _warning.default(text, opts);
|
---|
| 162 | this.messages.push(warning);
|
---|
| 163 | return warning;
|
---|
| 164 | }
|
---|
| 165 | /**
|
---|
| 166 | * Returns warnings from plugins. Filters {@link Warning} instances
|
---|
| 167 | * from {@link Result#messages}.
|
---|
| 168 | *
|
---|
| 169 | * @example
|
---|
| 170 | * result.warnings().forEach(warn => {
|
---|
| 171 | * console.warn(warn.toString())
|
---|
| 172 | * })
|
---|
| 173 | *
|
---|
| 174 | * @return {Warning[]} Warnings from plugins.
|
---|
| 175 | */
|
---|
| 176 | ;
|
---|
| 177 |
|
---|
| 178 | _proto.warnings = function warnings() {
|
---|
| 179 | return this.messages.filter(function (i) {
|
---|
| 180 | return i.type === 'warning';
|
---|
| 181 | });
|
---|
| 182 | }
|
---|
| 183 | /**
|
---|
| 184 | * An alias for the {@link Result#css} property.
|
---|
| 185 | * Use it with syntaxes that generate non-CSS output.
|
---|
| 186 | *
|
---|
| 187 | * @type {string}
|
---|
| 188 | *
|
---|
| 189 | * @example
|
---|
| 190 | * result.css === result.content
|
---|
| 191 | */
|
---|
| 192 | ;
|
---|
| 193 |
|
---|
| 194 | _createClass(Result, [{
|
---|
| 195 | key: "content",
|
---|
| 196 | get: function get() {
|
---|
| 197 | return this.css;
|
---|
| 198 | }
|
---|
| 199 | }]);
|
---|
| 200 |
|
---|
| 201 | return Result;
|
---|
| 202 | }();
|
---|
| 203 |
|
---|
| 204 | var _default = Result;
|
---|
| 205 | /**
|
---|
| 206 | * @typedef {object} Message
|
---|
| 207 | * @property {string} type Message type.
|
---|
| 208 | * @property {string} plugin Source PostCSS plugin name.
|
---|
| 209 | */
|
---|
| 210 |
|
---|
| 211 | exports.default = _default;
|
---|
| 212 | module.exports = exports.default;
|
---|
| 213 | //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJlc3VsdC5lczYiXSwibmFtZXMiOlsiUmVzdWx0IiwicHJvY2Vzc29yIiwicm9vdCIsIm9wdHMiLCJtZXNzYWdlcyIsImNzcyIsInVuZGVmaW5lZCIsIm1hcCIsInRvU3RyaW5nIiwid2FybiIsInRleHQiLCJwbHVnaW4iLCJsYXN0UGx1Z2luIiwicG9zdGNzc1BsdWdpbiIsIndhcm5pbmciLCJXYXJuaW5nIiwicHVzaCIsIndhcm5pbmdzIiwiZmlsdGVyIiwiaSIsInR5cGUiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7Ozs7Ozs7O0FBRUE7Ozs7Ozs7Ozs7Ozs7O0lBY01BLE07QUFDSjs7Ozs7O0FBTUEsa0JBQWFDLFNBQWIsRUFBd0JDLElBQXhCLEVBQThCQyxJQUE5QixFQUFvQztBQUNsQzs7Ozs7Ozs7Ozs7O0FBWUEsU0FBS0YsU0FBTCxHQUFpQkEsU0FBakI7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCQSxTQUFLRyxRQUFMLEdBQWdCLEVBQWhCO0FBQ0E7Ozs7Ozs7OztBQVFBLFNBQUtGLElBQUwsR0FBWUEsSUFBWjtBQUNBOzs7Ozs7Ozs7O0FBU0EsU0FBS0MsSUFBTCxHQUFZQSxJQUFaO0FBQ0E7Ozs7Ozs7OztBQVFBLFNBQUtFLEdBQUwsR0FBV0MsU0FBWDtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7QUFjQSxTQUFLQyxHQUFMLEdBQVdELFNBQVg7QUFDRDtBQUVEOzs7Ozs7Ozs7Ozs7U0FRQUUsUSxHQUFBLG9CQUFZO0FBQ1YsV0FBTyxLQUFLSCxHQUFaO0FBQ0Q7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7O1NBZ0JBSSxJLEdBQUEsY0FBTUMsSUFBTixFQUFZUCxJQUFaLEVBQXdCO0FBQUEsUUFBWkEsSUFBWTtBQUFaQSxNQUFBQSxJQUFZLEdBQUwsRUFBSztBQUFBOztBQUN0QixRQUFJLENBQUNBLElBQUksQ0FBQ1EsTUFBVixFQUFrQjtBQUNoQixVQUFJLEtBQUtDLFVBQUwsSUFBbUIsS0FBS0EsVUFBTCxDQUFnQkMsYUFBdkMsRUFBc0Q7QUFDcERWLFFBQUFBLElBQUksQ0FBQ1EsTUFBTCxHQUFjLEtBQUtDLFVBQUwsQ0FBZ0JDLGFBQTlCO0FBQ0Q7QUFDRjs7QUFFRCxRQUFJQyxPQUFPLEdBQUcsSUFBSUMsZ0JBQUosQ0FBWUwsSUFBWixFQUFrQlAsSUFBbEIsQ0FBZDtBQUNBLFNBQUtDLFFBQUwsQ0FBY1ksSUFBZCxDQUFtQkYsT0FBbkI7QUFFQSxXQUFPQSxPQUFQO0FBQ0Q7QUFFRDs7Ozs7Ozs7Ozs7OztTQVdBRyxRLEdBQUEsb0JBQVk7QUFDVixXQUFPLEtBQUtiLFFBQUwsQ0FBY2MsTUFBZCxDQUFxQixVQUFBQyxDQUFDO0FBQUEsYUFBSUEsQ0FBQyxDQUFDQyxJQUFGLEtBQVcsU0FBZjtBQUFBLEtBQXRCLENBQVA7QUFDRDtBQUVEOzs7Ozs7Ozs7Ozs7O3dCQVNlO0FBQ2IsYUFBTyxLQUFLZixHQUFaO0FBQ0Q7Ozs7OztlQUdZTCxNO0FBRWYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgV2FybmluZyBmcm9tICcuL3dhcm5pbmcnXG5cbi8qKlxuICogUHJvdmlkZXMgdGhlIHJlc3VsdCBvZiB0aGUgUG9zdENTUyB0cmFuc2Zvcm1hdGlvbnMuXG4gKlxuICogQSBSZXN1bHQgaW5zdGFuY2UgaXMgcmV0dXJuZWQgYnkge0BsaW5rIExhenlSZXN1bHQjdGhlbn1cbiAqIG9yIHtAbGluayBSb290I3RvUmVzdWx0fSBtZXRob2RzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBwb3N0Y3NzKFthdXRvcHJlZml4ZXJdKS5wcm9jZXNzKGNzcykudGhlbihyZXN1bHQgPT4ge1xuICogIGNvbnNvbGUubG9nKHJlc3VsdC5jc3MpXG4gKiB9KVxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCByZXN1bHQyID0gcG9zdGNzcy5wYXJzZShjc3MpLnRvUmVzdWx0KClcbiAqL1xuY2xhc3MgUmVzdWx0IHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7UHJvY2Vzc29yfSBwcm9jZXNzb3IgUHJvY2Vzc29yIHVzZWQgZm9yIHRoaXMgdHJhbnNmb3JtYXRpb24uXG4gICAqIEBwYXJhbSB7Um9vdH0gICAgICByb290ICAgICAgUm9vdCBub2RlIGFmdGVyIGFsbCB0cmFuc2Zvcm1hdGlvbnMuXG4gICAqIEBwYXJhbSB7cHJvY2Vzc09wdGlvbnN9IG9wdHMgT3B0aW9ucyBmcm9tIHRoZSB7QGxpbmsgUHJvY2Vzc29yI3Byb2Nlc3N9XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Ige0BsaW5rIFJvb3QjdG9SZXN1bHR9LlxuICAgKi9cbiAgY29uc3RydWN0b3IgKHByb2Nlc3Nvciwgcm9vdCwgb3B0cykge1xuICAgIC8qKlxuICAgICAqIFRoZSBQcm9jZXNzb3IgaW5zdGFuY2UgdXNlZCBmb3IgdGhpcyB0cmFuc2Zvcm1hdGlvbi5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtQcm9jZXNzb3J9XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGZvciAoY29uc3QgcGx1Z2luIG9mIHJlc3VsdC5wcm9jZXNzb3IucGx1Z2lucykge1xuICAgICAqICAgaWYgKHBsdWdpbi5wb3N0Y3NzUGx1Z2luID09PSAncG9zdGNzcy1iYWQnKSB7XG4gICAgICogICAgIHRocm93ICdwb3N0Y3NzLWdvb2QgaXMgaW5jb21wYXRpYmxlIHdpdGggcG9zdGNzcy1iYWQnXG4gICAgICogICB9XG4gICAgICogfSlcbiAgICAgKi9cbiAgICB0aGlzLnByb2Nlc3NvciA9IHByb2Nlc3NvclxuICAgIC8qKlxuICAgICAqIENvbnRhaW5zIG1lc3NhZ2VzIGZyb20gcGx1Z2lucyAoZS5nLiwgd2FybmluZ3Mgb3IgY3VzdG9tIG1lc3NhZ2VzKS5cbiAgICAgKiBFYWNoIG1lc3NhZ2Ugc2hvdWxkIGhhdmUgdHlwZSBhbmQgcGx1Z2luIHByb3BlcnRpZXMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7TWVzc2FnZVtdfVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBwb3N0Y3NzLnBsdWdpbigncG9zdGNzcy1taW4tYnJvd3NlcicsICgpID0+IHtcbiAgICAgKiAgIHJldHVybiAocm9vdCwgcmVzdWx0KSA9PiB7XG4gICAgICogICAgIGNvbnN0IGJyb3dzZXJzID0gZGV0ZWN0TWluQnJvd3NlcnNCeUNhbklVc2Uocm9vdClcbiAgICAgKiAgICAgcmVzdWx0Lm1lc3NhZ2VzLnB1c2goe1xuICAgICAqICAgICAgIHR5cGU6ICdtaW4tYnJvd3NlcicsXG4gICAgICogICAgICAgcGx1Z2luOiAncG9zdGNzcy1taW4tYnJvd3NlcicsXG4gICAgICogICAgICAgYnJvd3NlcnNcbiAgICAgKiAgICAgfSlcbiAgICAgKiAgIH1cbiAgICAgKiB9KVxuICAgICAqL1xuICAgIHRoaXMubWVzc2FnZXMgPSBbXVxuICAgIC8qKlxuICAgICAqIFJvb3Qgbm9kZSBhZnRlciBhbGwgdHJhbnNmb3JtYXRpb25zLlxuICAgICAqXG4gICAgICogQHR5cGUge1Jvb3R9XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHJvb3QudG9SZXN1bHQoKS5yb290ID09PSByb290XG4gICAgICovXG4gICAgdGhpcy5yb290ID0gcm9vdFxuICAgIC8qKlxuICAgICAqIE9wdGlvbnMgZnJvbSB0aGUge0BsaW5rIFByb2Nlc3NvciNwcm9jZXNzfSBvciB7QGxpbmsgUm9vdCN0b1Jlc3VsdH0gY2FsbFxuICAgICAqIHRoYXQgcHJvZHVjZWQgdGhpcyBSZXN1bHQgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7cHJvY2Vzc09wdGlvbnN9XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHJvb3QudG9SZXN1bHQob3B0cykub3B0cyA9PT0gb3B0c1xuICAgICAqL1xuICAgIHRoaXMub3B0cyA9IG9wdHNcbiAgICAvKipcbiAgICAgKiBBIENTUyBzdHJpbmcgcmVwcmVzZW50aW5nIG9mIHtAbGluayBSZXN1bHQjcm9vdH0uXG4gICAgICpcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBwb3N0Y3NzLnBhcnNlKCdhe30nKS50b1Jlc3VsdCgpLmNzcyAvLz0+IFwiYXt9XCJcbiAgICAgKi9cbiAgICB0aGlzLmNzcyA9IHVuZGVmaW5lZFxuICAgIC8qKlxuICAgICAqIEFuIGluc3RhbmNlIG9mIGBTb3VyY2VNYXBHZW5lcmF0b3JgIGNsYXNzIGZyb20gdGhlIGBzb3VyY2UtbWFwYCBsaWJyYXJ5LFxuICAgICAqIHJlcHJlc2VudGluZyBjaGFuZ2VzIHRvIHRoZSB7QGxpbmsgUmVzdWx0I3Jvb3R9IGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHR5cGUge1NvdXJjZU1hcEdlbmVyYXRvcn1cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogcmVzdWx0Lm1hcC50b0pTT04oKSAvLz0+IHsgdmVyc2lvbjogMywgZmlsZTogJ2EuY3NzJywg4oCmIH1cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogaWYgKHJlc3VsdC5tYXApIHtcbiAgICAgKiAgIGZzLndyaXRlRmlsZVN5bmMocmVzdWx0Lm9wdHMudG8gKyAnLm1hcCcsIHJlc3VsdC5tYXAudG9TdHJpbmcoKSlcbiAgICAgKiB9XG4gICAgICovXG4gICAgdGhpcy5tYXAgPSB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGZvciBAe2xpbmsgUmVzdWx0I2Nzc30gY29udGVudC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcmVzdWx0ICsgJycgPT09IHJlc3VsdC5jc3NcbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfSBTdHJpbmcgcmVwcmVzZW50aW5nIG9mIHtAbGluayBSZXN1bHQjcm9vdH0uXG4gICAqL1xuICB0b1N0cmluZyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3NzXG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB7QGxpbmsgV2FybmluZ30gYW5kIGFkZHMgaXRcbiAgICogdG8ge0BsaW5rIFJlc3VsdCNtZXNzYWdlc30uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0ICAgICAgICBXYXJuaW5nIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gICAgICBXYXJuaW5nIG9wdGlvbnMuXG4gICAqIEBwYXJhbSB7Tm9kZX0gICBvcHRzLm5vZGUgICBDU1Mgbm9kZSB0aGF0IGNhdXNlZCB0aGUgd2FybmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMud29yZCAgIFdvcmQgaW4gQ1NTIHNvdXJjZSB0aGF0IGNhdXNlZCB0aGUgd2FybmluZy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG9wdHMuaW5kZXggIEluZGV4IGluIENTUyBub2RlIHN0cmluZyB0aGF0IGNhdXNlZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHdhcm5pbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLnBsdWdpbiBOYW1lIG9mIHRoZSBwbHVnaW4gdGhhdCBjcmVhdGVkXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHdhcm5pbmcuIHtAbGluayBSZXN1bHQjd2Fybn0gZmlsbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgcHJvcGVydHkgYXV0b21hdGljYWxseS5cbiAgICpcbiAgICogQHJldHVybiB7V2FybmluZ30gQ3JlYXRlZCB3YXJuaW5nLlxuICAgKi9cbiAgd2FybiAodGV4dCwgb3B0cyA9IHsgfSkge1xuICAgIGlmICghb3B0cy5wbHVnaW4pIHtcbiAgICAgIGlmICh0aGlzLmxhc3RQbHVnaW4gJiYgdGhpcy5sYXN0UGx1Z2luLnBvc3Rjc3NQbHVnaW4pIHtcbiAgICAgICAgb3B0cy5wbHVnaW4gPSB0aGlzLmxhc3RQbHVnaW4ucG9zdGNzc1BsdWdpblxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCB3YXJuaW5nID0gbmV3IFdhcm5pbmcodGV4dCwgb3B0cylcbiAgICB0aGlzLm1lc3NhZ2VzLnB1c2god2FybmluZylcblxuICAgIHJldHVybiB3YXJuaW5nXG4gIH1cblxuICAvKipcbiAgICAgKiBSZXR1cm5zIHdhcm5pbmdzIGZyb20gcGx1Z2lucy4gRmlsdGVycyB7QGxpbmsgV2FybmluZ30gaW5zdGFuY2VzXG4gICAgICogZnJvbSB7QGxpbmsgUmVzdWx0I21lc3NhZ2VzfS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogcmVzdWx0Lndhcm5pbmdzKCkuZm9yRWFjaCh3YXJuID0+IHtcbiAgICAgKiAgIGNvbnNvbGUud2Fybih3YXJuLnRvU3RyaW5nKCkpXG4gICAgICogfSlcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1dhcm5pbmdbXX0gV2FybmluZ3MgZnJvbSBwbHVnaW5zLlxuICAgICAqL1xuICB3YXJuaW5ncyAoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZXMuZmlsdGVyKGkgPT4gaS50eXBlID09PSAnd2FybmluZycpXG4gIH1cblxuICAvKipcbiAgICogQW4gYWxpYXMgZm9yIHRoZSB7QGxpbmsgUmVzdWx0I2Nzc30gcHJvcGVydHkuXG4gICAqIFVzZSBpdCB3aXRoIHN5bnRheGVzIHRoYXQgZ2VuZXJhdGUgbm9uLUNTUyBvdXRwdXQuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHJlc3VsdC5jc3MgPT09IHJlc3VsdC5jb250ZW50XG4gICAqL1xuICBnZXQgY29udGVudCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3NzXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVzdWx0XG5cbi8qKlxuICogQHR5cGVkZWYgIHtvYmplY3R9IE1lc3NhZ2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlICAgTWVzc2FnZSB0eXBlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBsdWdpbiBTb3VyY2UgUG9zdENTUyBwbHVnaW4gbmFtZS5cbiAqL1xuIl0sImZpbGUiOiJyZXN1bHQuanMifQ==
|
---|