1 | ;
|
2 |
|
3 | exports.__esModule = true;
|
4 | exports.default = void 0;
|
5 |
|
6 | var _cssSyntaxError = _interopRequireDefault(require("./css-syntax-error"));
|
7 |
|
8 | var _previousMap = _interopRequireDefault(require("./previous-map"));
|
9 |
|
10 | var _path = _interopRequireDefault(require("path"));
|
11 |
|
12 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
13 |
|
14 | 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); } }
|
15 |
|
16 | function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
17 |
|
18 | var sequence = 0;
|
19 | /**
|
20 | * Represents the source CSS.
|
21 | *
|
22 | * @example
|
23 | * const root = postcss.parse(css, { from: file })
|
24 | * const input = root.source.input
|
25 | */
|
26 |
|
27 | var Input =
|
28 | /*#__PURE__*/
|
29 | function () {
|
30 | /**
|
31 | * @param {string} css Input CSS source.
|
32 | * @param {object} [opts] {@link Processor#process} options.
|
33 | */
|
34 | function Input(css, opts) {
|
35 | if (opts === void 0) {
|
36 | opts = {};
|
37 | }
|
38 |
|
39 | if (css === null || typeof css === 'object' && !css.toString) {
|
40 | throw new Error("PostCSS received " + css + " instead of CSS string");
|
41 | }
|
42 | /**
|
43 | * Input CSS source
|
44 | *
|
45 | * @type {string}
|
46 | *
|
47 | * @example
|
48 | * const input = postcss.parse('a{}', { from: file }).input
|
49 | * input.css //=> "a{}"
|
50 | */
|
51 |
|
52 |
|
53 | this.css = css.toString();
|
54 |
|
55 | if (this.css[0] === "\uFEFF" || this.css[0] === "\uFFFE") {
|
56 | this.hasBOM = true;
|
57 | this.css = this.css.slice(1);
|
58 | } else {
|
59 | this.hasBOM = false;
|
60 | }
|
61 |
|
62 | if (opts.from) {
|
63 | if (/^\w+:\/\//.test(opts.from)) {
|
64 | /**
|
65 | * The absolute path to the CSS source file defined
|
66 | * with the `from` option.
|
67 | *
|
68 | * @type {string}
|
69 | *
|
70 | * @example
|
71 | * const root = postcss.parse(css, { from: 'a.css' })
|
72 | * root.source.input.file //=> '/home/ai/a.css'
|
73 | */
|
74 | this.file = opts.from;
|
75 | } else {
|
76 | this.file = _path.default.resolve(opts.from);
|
77 | }
|
78 | }
|
79 |
|
80 | var map = new _previousMap.default(this.css, opts);
|
81 |
|
82 | if (map.text) {
|
83 | /**
|
84 | * The input source map passed from a compilation step before PostCSS
|
85 | * (for example, from Sass compiler).
|
86 | *
|
87 | * @type {PreviousMap}
|
88 | *
|
89 | * @example
|
90 | * root.source.input.map.consumer().sources //=> ['a.sass']
|
91 | */
|
92 | this.map = map;
|
93 | var file = map.consumer().file;
|
94 | if (!this.file && file) this.file = this.mapResolve(file);
|
95 | }
|
96 |
|
97 | if (!this.file) {
|
98 | sequence += 1;
|
99 | /**
|
100 | * The unique ID of the CSS source. It will be created if `from` option
|
101 | * is not provided (because PostCSS does not know the file path).
|
102 | *
|
103 | * @type {string}
|
104 | *
|
105 | * @example
|
106 | * const root = postcss.parse(css)
|
107 | * root.source.input.file //=> undefined
|
108 | * root.source.input.id //=> "<input css 1>"
|
109 | */
|
110 |
|
111 | this.id = '<input css ' + sequence + '>';
|
112 | }
|
113 |
|
114 | if (this.map) this.map.file = this.from;
|
115 | }
|
116 |
|
117 | var _proto = Input.prototype;
|
118 |
|
119 | _proto.error = function error(message, line, column, opts) {
|
120 | if (opts === void 0) {
|
121 | opts = {};
|
122 | }
|
123 |
|
124 | var result;
|
125 | var origin = this.origin(line, column);
|
126 |
|
127 | if (origin) {
|
128 | result = new _cssSyntaxError.default(message, origin.line, origin.column, origin.source, origin.file, opts.plugin);
|
129 | } else {
|
130 | result = new _cssSyntaxError.default(message, line, column, this.css, this.file, opts.plugin);
|
131 | }
|
132 |
|
133 | result.input = {
|
134 | line: line,
|
135 | column: column,
|
136 | source: this.css
|
137 | };
|
138 | if (this.file) result.input.file = this.file;
|
139 | return result;
|
140 | }
|
141 | /**
|
142 | * Reads the input source map and returns a symbol position
|
143 | * in the input source (e.g., in a Sass file that was compiled
|
144 | * to CSS before being passed to PostCSS).
|
145 | *
|
146 | * @param {number} line Line in input CSS.
|
147 | * @param {number} column Column in input CSS.
|
148 | *
|
149 | * @return {filePosition} Position in input source.
|
150 | *
|
151 | * @example
|
152 | * root.source.input.origin(1, 1) //=> { file: 'a.css', line: 3, column: 1 }
|
153 | */
|
154 | ;
|
155 |
|
156 | _proto.origin = function origin(line, column) {
|
157 | if (!this.map) return false;
|
158 | var consumer = this.map.consumer();
|
159 | var from = consumer.originalPositionFor({
|
160 | line: line,
|
161 | column: column
|
162 | });
|
163 | if (!from.source) return false;
|
164 | var result = {
|
165 | file: this.mapResolve(from.source),
|
166 | line: from.line,
|
167 | column: from.column
|
168 | };
|
169 | var source = consumer.sourceContentFor(from.source);
|
170 | if (source) result.source = source;
|
171 | return result;
|
172 | };
|
173 |
|
174 | _proto.mapResolve = function mapResolve(file) {
|
175 | if (/^\w+:\/\//.test(file)) {
|
176 | return file;
|
177 | }
|
178 |
|
179 | return _path.default.resolve(this.map.consumer().sourceRoot || '.', file);
|
180 | }
|
181 | /**
|
182 | * The CSS source identifier. Contains {@link Input#file} if the user
|
183 | * set the `from` option, or {@link Input#id} if they did not.
|
184 | *
|
185 | * @type {string}
|
186 | *
|
187 | * @example
|
188 | * const root = postcss.parse(css, { from: 'a.css' })
|
189 | * root.source.input.from //=> "/home/ai/a.css"
|
190 | *
|
191 | * const root = postcss.parse(css)
|
192 | * root.source.input.from //=> "<input css 1>"
|
193 | */
|
194 | ;
|
195 |
|
196 | _createClass(Input, [{
|
197 | key: "from",
|
198 | get: function get() {
|
199 | return this.file || this.id;
|
200 | }
|
201 | }]);
|
202 |
|
203 | return Input;
|
204 | }();
|
205 |
|
206 | var _default = Input;
|
207 | /**
|
208 | * @typedef {object} filePosition
|
209 | * @property {string} file Path to file.
|
210 | * @property {number} line Source line in file.
|
211 | * @property {number} column Source column in file.
|
212 | */
|
213 |
|
214 | exports.default = _default;
|
215 | module.exports = exports.default;
|
216 | //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImlucHV0LmVzNiJdLCJuYW1lcyI6WyJzZXF1ZW5jZSIsIklucHV0IiwiY3NzIiwib3B0cyIsInRvU3RyaW5nIiwiRXJyb3IiLCJoYXNCT00iLCJzbGljZSIsImZyb20iLCJ0ZXN0IiwiZmlsZSIsInBhdGgiLCJyZXNvbHZlIiwibWFwIiwiUHJldmlvdXNNYXAiLCJ0ZXh0IiwiY29uc3VtZXIiLCJtYXBSZXNvbHZlIiwiaWQiLCJlcnJvciIsIm1lc3NhZ2UiLCJsaW5lIiwiY29sdW1uIiwicmVzdWx0Iiwib3JpZ2luIiwiQ3NzU3ludGF4RXJyb3IiLCJzb3VyY2UiLCJwbHVnaW4iLCJpbnB1dCIsIm9yaWdpbmFsUG9zaXRpb25Gb3IiLCJzb3VyY2VDb250ZW50Rm9yIiwic291cmNlUm9vdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7QUFDQTs7QUFFQTs7Ozs7Ozs7QUFFQSxJQUFJQSxRQUFRLEdBQUcsQ0FBZjtBQUVBOzs7Ozs7OztJQU9NQyxLOzs7QUFDSjs7OztBQUlBLGlCQUFhQyxHQUFiLEVBQWtCQyxJQUFsQixFQUE4QjtBQUFBLFFBQVpBLElBQVk7QUFBWkEsTUFBQUEsSUFBWSxHQUFMLEVBQUs7QUFBQTs7QUFDNUIsUUFBSUQsR0FBRyxLQUFLLElBQVIsSUFBaUIsT0FBT0EsR0FBUCxLQUFlLFFBQWYsSUFBMkIsQ0FBQ0EsR0FBRyxDQUFDRSxRQUFyRCxFQUFnRTtBQUM5RCxZQUFNLElBQUlDLEtBQUosdUJBQStCSCxHQUEvQiw0QkFBTjtBQUNEO0FBRUQ7Ozs7Ozs7Ozs7O0FBU0EsU0FBS0EsR0FBTCxHQUFXQSxHQUFHLENBQUNFLFFBQUosRUFBWDs7QUFFQSxRQUFJLEtBQUtGLEdBQUwsQ0FBUyxDQUFULE1BQWdCLFFBQWhCLElBQTRCLEtBQUtBLEdBQUwsQ0FBUyxDQUFULE1BQWdCLFFBQWhELEVBQTBEO0FBQ3hELFdBQUtJLE1BQUwsR0FBYyxJQUFkO0FBQ0EsV0FBS0osR0FBTCxHQUFXLEtBQUtBLEdBQUwsQ0FBU0ssS0FBVCxDQUFlLENB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WDtBQUNBLFFBQUksQ0FBQ2QsSUFBSSxDQUFDa0IsTUFBVixFQUFrQixPQUFPLEtBQVA7QUFFbEIsUUFBSUgsTUFBTSxHQUFHO0FBQ1hiLE1BQUFBLElBQUksRUFBRSxLQUFLTyxVQUFMLENBQWdCVCxJQUFJLENBQUNrQixNQUFyQixDQURLO0FBRVhMLE1BQUFBLElBQUksRUFBRWIsSUFBSSxDQUFDYSxJQUZBO0FBR1hDLE1BQUFBLE1BQU0sRUFBRWQsSUFBSSxDQUFDYztBQUhGLEtBQWI7QUFNQSxRQUFJSSxNQUFNLEdBQUdWLFFBQVEsQ0FBQ2MsZ0JBQVQsQ0FBMEJ0QixJQUFJLENBQUNrQixNQUEvQixDQUFiO0FBQ0EsUUFBSUEsTUFBSixFQUFZSCxNQUFNLENBQUNHLE1BQVAsR0FBZ0JBLE1BQWhCO0FBRVosV0FBT0gsTUFBUDtBQUNELEc7O1NBRUROLFUsR0FBQSxvQkFBWVAsSUFBWixFQUFrQjtBQUNoQixRQUFJLFlBQVlELElBQVosQ0FBaUJDLElBQWpCLENBQUosRUFBNEI7QUFDMUIsYUFBT0EsSUFBUDtBQUNEOztBQUNELFdBQU9DLGNBQUtDLE9BQUwsQ0FBYSxLQUFLQyxHQUFMLENBQVNHLFFBQVQsR0FBb0JlLFVBQXBCLElBQWtDLEdBQS9DLEVBQW9EckIsSUFBcEQsQ0FBUDtBQUNEO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7O3dCQWFZO0FBQ1YsYUFBTyxLQUFLQSxJQUFMLElBQWEsS0FBS1EsRUFBekI7QUFDRDs7Ozs7O2VBR1lqQixLO0FBRWYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ3NzU3ludGF4RXJyb3IgZnJvbSAnLi9jc3Mtc3ludGF4LWVycm9yJ1xuaW1wb3J0IFByZXZpb3VzTWFwIGZyb20gJy4vcHJldmlvdXMtbWFwJ1xuXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuXG5sZXQgc2VxdWVuY2UgPSAwXG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgc291cmNlIENTUy5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgcm9vdCAgPSBwb3N0Y3NzLnBhcnNlKGNzcywgeyBmcm9tOiBmaWxlIH0pXG4gKiBjb25zdCBpbnB1dCA9IHJvb3Quc291cmNlLmlucHV0XG4gKi9cbmNsYXNzIElucHV0IHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjc3MgICAgSW5wdXQgQ1NTIHNvdXJjZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRzXSB7QGxpbmsgUHJvY2Vzc29yI3Byb2Nlc3N9IG9wdGlvbnMuXG4gICAqL1xuICBjb25zdHJ1Y3RvciAoY3NzLCBvcHRzID0geyB9KSB7XG4gICAgaWYgKGNzcyA9PT0gbnVsbCB8fCAodHlwZW9mIGNzcyA9PT0gJ29iamVjdCcgJiYgIWNzcy50b1N0cmluZykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUG9zdENTUyByZWNlaXZlZCAkeyBjc3MgfSBpbnN0ZWFkIG9mIENTUyBzdHJpbmdgKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElucHV0IENTUyBzb3VyY2VcbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGNvbnN0IGlucHV0ID0gcG9zdGNzcy5wYXJzZSgnYXt9JywgeyBmcm9tOiBmaWxlIH0pLmlucHV0XG4gICAgICogaW5wdXQuY3NzIC8vPT4gXCJhe31cIlxuICAgICAqL1xuICAgIHRoaXMuY3NzID0gY3NzLnRvU3RyaW5nKClcblxuICAgIGlmICh0aGlzLmNzc1swXSA9PT0gJ1xcdUZFRkYnIHx8IHRoaXMuY3NzWzBdID09PSAnXFx1RkZGRScpIHtcbiAgICAgIHRoaXMuaGFzQk9NID0gdHJ1ZVxuICAgICAgdGhpcy5jc3MgPSB0aGlzLmNzcy5zbGljZSgxKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhhc0JPTSA9IGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKG9wdHMuZnJvbSkge1xuICAgICAgaWYgKC9eXFx3KzpcXC9cXC8vLnRlc3Qob3B0cy5mcm9tKSkge1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIENTUyBzb3VyY2UgZmlsZSBkZWZpbmVkXG4gICAgICAgICAqIHdpdGggdGhlIGBmcm9tYCBvcHRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqIGNvbnN0IHJvb3QgPSBwb3N0Y3NzLnBhcnNlKGNzcywgeyBmcm9tOiAnYS5jc3MnIH0pXG4gICAgICAgICAqIHJvb3Quc291cmNlLmlucHV0LmZpbGUgLy89PiAnL2hvbWUvYWkvYS5jc3MnXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpbGUgPSBvcHRzLmZyb21cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmlsZSA9IHBhdGgucmVzb2x2ZShvcHRzLmZyb20pXG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IG1hcCA9IG5ldyBQcmV2aW91c01hcCh0aGlzLmNzcywgb3B0cylcbiAgICBpZiAobWFwLnRleHQpIHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIGlucHV0IHNvdXJjZSBtYXAgcGFzc2VkIGZyb20gYSBjb21waWxhdGlvbiBzdGVwIGJlZm9yZSBQb3N0Q1NTXG4gICAgICAgKiAoZm9yIGV4YW1wbGUsIGZyb20gU2FzcyBjb21waWxlcikuXG4gICAgICAgKlxuICAgICAgICogQHR5cGUge1ByZXZpb3VzTWFwfVxuICAgICAgICpcbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKiByb290LnNvdXJjZS5pbnB1dC5tYXAuY29uc3VtZXIoKS5zb3VyY2VzIC8vPT4gWydhLnNhc3MnXVxuICAgICAgICovXG4gICAgICB0aGlzLm1hcCA9IG1hcFxuICAgICAgbGV0IGZpbGUgPSBtYXAuY29uc3VtZXIoKS5maWxlXG4gICAgICBpZiAoIXRoaXMuZmlsZSAmJiBmaWxlKSB0aGlzLmZpbGUgPSB0aGlzLm1hcFJlc29sdmUoZmlsZSlcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZmlsZSkge1xuICAgICAgc2VxdWVuY2UgKz0gMVxuICAgICAgLyoqXG4gICAgICAgKiBUaGUgdW5pcXVlIElEIG9mIHRoZSBDU1Mgc291cmNlLiBJdCB3aWxsIGJlIGNyZWF0ZWQgaWYgYGZyb21gIG9wdGlvblxuICAgICAgICogaXMgbm90IHByb3ZpZGVkIChiZWNhdXNlIFBvc3RDU1MgZG9lcyBub3Qga25vdyB0aGUgZmlsZSBwYXRoKS5cbiAgICAgICAqXG4gICAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAgICpcbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKiBjb25zdCByb290ID0gcG9zdGNzcy5wYXJzZShjc3MpXG4gICAgICAgKiByb290LnNvdXJjZS5pbnB1dC5maWxlIC8vPT4gdW5kZWZpbmVkXG4gICAgICAgKiByb290LnNvdXJjZS5pbnB1dC5pZCAgIC8vPT4gXCI8aW5wdXQgY3NzIDE+XCJcbiAgICAgICAqL1xuICAgICAgdGhpcy5pZCA9ICc8aW5wdXQgY3NzICcgKyBzZXF1ZW5jZSArICc+J1xuICAgIH1cbiAgICBpZiAodGhpcy5tYXApIHRoaXMubWFwLmZpbGUgPSB0aGlzLmZyb21cbiAgfVxuXG4gIGVycm9yIChtZXNzYWdlLCBsaW5lLCBjb2x1bW4sIG9wdHMgPSB7IH0pIHtcbiAgICBsZXQgcmVzdWx0XG4gICAgbGV0IG9yaWdpbiA9IHRoaXMub3JpZ2luKGxpbmUsIGNvbHVtbilcbiAgICBpZiAob3JpZ2luKSB7XG4gICAgICByZXN1bHQgPSBuZXcgQ3NzU3ludGF4RXJyb3IoXG4gICAgICAgIG1lc3NhZ2UsIG9yaWdpbi5saW5lLCBvcmlnaW4uY29sdW1uLFxuICAgICAgICBvcmlnaW4uc291cmNlLCBvcmlnaW4uZmlsZSwgb3B0cy5wbHVnaW5cbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gbmV3IENzc1N5bnRheEVycm9yKFxuICAgICAgICBtZXNzYWdlLCBsaW5lLCBjb2x1bW4sIHRoaXMuY3NzLCB0aGlzLmZpbGUsIG9wdHMucGx1Z2luKVxuICAgIH1cblxuICAgIHJlc3VsdC5pbnB1dCA9IHsgbGluZSwgY29sdW1uLCBzb3VyY2U6IHRoaXMuY3NzIH1cbiAgICBpZiAodGhpcy5maWxlKSByZXN1bHQuaW5wdXQuZmlsZSA9IHRoaXMuZmlsZVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIHRoZSBpbnB1dCBzb3VyY2UgbWFwIGFuZCByZXR1cm5zIGEgc3ltYm9sIHBvc2l0aW9uXG4gICAqIGluIHRoZSBpbnB1dCBzb3VyY2UgKGUuZy4sIGluIGEgU2FzcyBmaWxlIHRoYXQgd2FzIGNvbXBpbGVkXG4gICAqIHRvIENTUyBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIFBvc3RDU1MpLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gbGluZSAgIExpbmUgaW4gaW5wdXQgQ1NTLlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIENvbHVtbiBpbiBpbnB1dCBDU1MuXG4gICAqXG4gICAqIEByZXR1cm4ge2ZpbGVQb3NpdGlvbn0gUG9zaXRpb24gaW4gaW5wdXQgc291cmNlLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiByb290LnNvdXJjZS5pbnB1dC5vcmlnaW4oMSwgMSkgLy89PiB7IGZpbGU6ICdhLmNzcycsIGxpbmU6IDMsIGNvbHVtbjogMSB9XG4gICAqL1xuICBvcmlnaW4gKGxpbmUsIGNvbHVtbikge1xuICAgIGlmICghdGhpcy5tYXApIHJldHVybiBmYWxzZVxuICAgIGxldCBjb25zdW1lciA9IHRoaXMubWFwLmNvbnN1bWVyKClcblxuICAgIGxldCBmcm9tID0gY29uc3VtZXIub3JpZ2luYWxQb3NpdGlvbkZvcih7IGxpbmUsIGNvbHVtbiB9KVxuICAgIGlmICghZnJvbS5zb3VyY2UpIHJldHVybiBmYWxzZVxuXG4gICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgIGZpbGU6IHRoaXMubWFwUmVzb2x2ZShmcm9tLnNvdXJjZSksXG4gICAgICBsaW5lOiBmcm9tLmxpbmUsXG4gICAgICBjb2x1bW46IGZyb20uY29sdW1uXG4gICAgfVxuXG4gICAgbGV0IHNvdXJjZSA9IGNvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3IoZnJvbS5zb3VyY2UpXG4gICAgaWYgKHNvdXJjZSkgcmVzdWx0LnNvdXJjZSA9IHNvdXJjZVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgbWFwUmVzb2x2ZSAoZmlsZSkge1xuICAgIGlmICgvXlxcdys6XFwvXFwvLy50ZXN0KGZpbGUpKSB7XG4gICAgICByZXR1cm4gZmlsZVxuICAgIH1cbiAgICByZXR1cm4gcGF0aC5yZXNvbHZlKHRoaXMubWFwLmNvbnN1bWVyKCkuc291cmNlUm9vdCB8fCAnLicsIGZpbGUpXG4gIH1cblxuICAvKipcbiAgICogVGhlIENTUyBzb3VyY2UgaWRlbnRpZmllci4gQ29udGFpbnMge0BsaW5rIElucHV0I2ZpbGV9IGlmIHRoZSB1c2VyXG4gICAqIHNldCB0aGUgYGZyb21gIG9wdGlvbiwgb3Ige0BsaW5rIElucHV0I2lkfSBpZiB0aGV5IGRpZCBub3QuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IHJvb3QgPSBwb3N0Y3NzLnBhcnNlKGNzcywgeyBmcm9tOiAnYS5jc3MnIH0pXG4gICAqIHJvb3Quc291cmNlLmlucHV0LmZyb20gLy89PiBcIi9ob21lL2FpL2EuY3NzXCJcbiAgICpcbiAgICogY29uc3Qgcm9vdCA9IHBvc3Rjc3MucGFyc2UoY3NzKVxuICAgKiByb290LnNvdXJjZS5pbnB1dC5mcm9tIC8vPT4gXCI8aW5wdXQgY3NzIDE+XCJcbiAgICovXG4gIGdldCBmcm9tICgpIHtcbiAgICByZXR1cm4gdGhpcy5maWxlIHx8IHRoaXMuaWRcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbnB1dFxuXG4vKipcbiAqIEB0eXBlZGVmICB7b2JqZWN0fSBmaWxlUG9zaXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBmaWxlICAgUGF0aCB0byBmaWxlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGxpbmUgICBTb3VyY2UgbGluZSBpbiBmaWxlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNvbHVtbiBTb3VyY2UgY29sdW1uIGluIGZpbGUuXG4gKi9cbiJdLCJmaWxlIjoiaW5wdXQuanMifQ==
|