1 | ;
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.extractCSS = exports.injectCSS = exports.injectStyleLoader = exports.CSS = exports.img = exports.url = exports.markdown = exports.JS = exports.extractCSSPlugin = undefined;
|
7 |
|
8 | var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
|
9 |
|
10 | var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
|
11 |
|
12 | var _stringify = require('babel-runtime/core-js/json/stringify');
|
13 |
|
14 | var _stringify2 = _interopRequireDefault(_stringify);
|
15 |
|
16 | var _extends2 = require('babel-runtime/helpers/extends');
|
17 |
|
18 | var _extends3 = _interopRequireDefault(_extends2);
|
19 |
|
20 | exports.defaultConfig = defaultConfig;
|
21 | exports.mergeConfig = mergeConfig;
|
22 | exports.moduleRequest = moduleRequest;
|
23 | exports.loader = loader;
|
24 | exports.configureWebpack = configureWebpack;
|
25 | exports.readConfigSync = readConfigSync;
|
26 |
|
27 | var _invariant = require('invariant');
|
28 |
|
29 | var _invariant2 = _interopRequireDefault(_invariant);
|
30 |
|
31 | var _fs = require('fs');
|
32 |
|
33 | var _fs2 = _interopRequireDefault(_fs);
|
34 |
|
35 | var _path = require('path');
|
36 |
|
37 | var _path2 = _interopRequireDefault(_path);
|
38 |
|
39 | var _babelCore = require('babel-core');
|
40 |
|
41 | var _extractTextWebpackPlugin = require('extract-text-webpack-plugin');
|
42 |
|
43 | var _extractTextWebpackPlugin2 = _interopRequireDefault(_extractTextWebpackPlugin);
|
44 |
|
45 | var _minimatch = require('minimatch');
|
46 |
|
47 | var _utils = require('./compiler/utils');
|
48 |
|
49 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
50 |
|
51 | var BABEL_PRESET_ES2015 = require.resolve('babel-preset-es2015'); /**
|
52 | * @copyright 2016-present, Sitegen team
|
53 | */
|
54 |
|
55 | var BABEL_PRESET_STAGE_1 = require.resolve('babel-preset-stage-1');
|
56 | var BABEL_PRESET_REACT = require.resolve('babel-preset-react');
|
57 |
|
58 | function defaultConfig(_ref) {
|
59 | var env = _ref.env;
|
60 |
|
61 |
|
62 | var deployCSS = env.development ? injectCSS : extractCSS;
|
63 |
|
64 | return {
|
65 |
|
66 | devtool: env.development ? 'cheap-module-source-map' : undefined,
|
67 |
|
68 | babel: {
|
69 | presets: [BABEL_PRESET_ES2015, BABEL_PRESET_STAGE_1, BABEL_PRESET_REACT]
|
70 | },
|
71 |
|
72 | loaders: {
|
73 | '**/*.js': JS,
|
74 | '**/*.md': [JS, markdown]
|
75 | },
|
76 |
|
77 | globalLoaders: {
|
78 | '**/*.css': deployCSS(CSS),
|
79 | '**/*.png': img,
|
80 | '**/*.jpg': img,
|
81 | '**/*.jpeg': img,
|
82 | '**/*.gif': img,
|
83 | '**/*.ico': img
|
84 | },
|
85 |
|
86 | plugins: [(env.content || env.production) && extractCSSPlugin]
|
87 | };
|
88 | }
|
89 |
|
90 | function mergeConfig() {
|
91 | for (var _len = arguments.length, config = Array(_len), _key = 0; _key < _len; _key++) {
|
92 | config[_key] = arguments[_key];
|
93 | }
|
94 |
|
95 | config = config.filter(Boolean);
|
96 | (0, _invariant2.default)(config.length > 0, 'Trying to merge empty list of configurations');
|
97 | if (config.length === 1) {
|
98 | return config[0];
|
99 | } else {
|
100 | return config.reduce(mergeConfigImpl);
|
101 | }
|
102 | }
|
103 |
|
104 | function mergeArray(a, b) {
|
105 | return [].concat(a).concat(b).filter(Boolean);
|
106 | }
|
107 |
|
108 | function mergeConfigImpl(a, b) {
|
109 | return (0, _extends3.default)({}, a, b, {
|
110 | entry: mergeArray(a.entry, b.entry),
|
111 | babel: (0, _extends3.default)({}, a.babel, b.babel, {
|
112 | presets: mergeArray(a.presets, b.presets),
|
113 | plugins: mergeArray(a.babel && a.babel.plugins, b.babel && b.babel.plugins)
|
114 | }),
|
115 | output: (0, _extends3.default)({}, a.output, b.output),
|
116 | loaders: (0, _extends3.default)({}, a.loaders, b.loaders),
|
117 | globalLoaders: (0, _extends3.default)({}, a.globalLoaders, b.globalLoaders),
|
118 | plugins: mergeArray(a.plugins, b.plugins)
|
119 | });
|
120 | }
|
121 |
|
122 | function moduleRequest(id) {
|
123 | for (var _len2 = arguments.length, loader = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
|
124 | loader[_key2 - 1] = arguments[_key2];
|
125 | }
|
126 |
|
127 | loader.reverse();
|
128 | return normalizeLoader(loader) + '!' + id;
|
129 | }
|
130 |
|
131 | function loader(loader) {
|
132 | return loaderImpl({ loader: loader });
|
133 | }
|
134 |
|
135 | function loaderImpl(config) {
|
136 | var mergeQuery = config.mergeQuery || function (a, b) {
|
137 | return (0, _extends3.default)({}, a, b);
|
138 | };
|
139 | var configurator = function configurator(query) {
|
140 | return loaderImpl((0, _extends3.default)({}, config, {
|
141 | query: mergeQuery(config.query, query)
|
142 | }));
|
143 | };
|
144 | configurator.config = config;
|
145 | configurator.toLoaderString = function toLoaderString() {
|
146 | return normalizeLoader(config);
|
147 | };
|
148 | configurator.toString = configurator.toLoaderString;
|
149 | return configurator;
|
150 | }
|
151 |
|
152 | function normalizeLoader(element) {
|
153 | if (Array.isArray(element)) {
|
154 | return element.map(normalizeLoader).join('!');
|
155 | } else if (typeof element === 'string') {
|
156 | return element;
|
157 | } else if (element.toLoaderString) {
|
158 | return element.toLoaderString();
|
159 | } else {
|
160 | if (element.query) {
|
161 | return element.loader + '?' + (0, _stringify2.default)(element.query);
|
162 | } else {
|
163 | return element.loader;
|
164 | }
|
165 | }
|
166 | }
|
167 |
|
168 | function makePatterMatcher(pattern) {
|
169 | var patterMatcher = new _minimatch.Minimatch(pattern);
|
170 |
|
171 | var matcher = function matcher(filename) {
|
172 | return patterMatcher.match(filename);
|
173 | };
|
174 | matcher.toString = function () {
|
175 | return '[PatternMatcher ' + pattern + ']';
|
176 | };
|
177 | matcher.inspect = matcher.toString;
|
178 |
|
179 | return matcher;
|
180 | }
|
181 |
|
182 | function configureWebpackLoader(context, pattern, loader, global) {
|
183 | if (!global) {
|
184 | pattern = _path2.default.join(context, pattern);
|
185 | }
|
186 | var test = makePatterMatcher(pattern);
|
187 | return {
|
188 | loader: normalizeLoader(loader),
|
189 | test: test
|
190 | };
|
191 | }
|
192 |
|
193 | function configureWebpackLoaderList(context, loaders, global) {
|
194 | var result = [];
|
195 | for (var pattern in loaders) {
|
196 | var _loader = loaders[pattern];
|
197 | result.push(configureWebpackLoader(context, pattern, _loader, global));
|
198 | }
|
199 | return result;
|
200 | }
|
201 |
|
202 | function configureWebpack(_ref2) {
|
203 | var context = _ref2.context;
|
204 | var loaders = _ref2.loaders;
|
205 | var globalLoaders = _ref2.globalLoaders;
|
206 | var config = (0, _objectWithoutProperties3.default)(_ref2, ['context', 'loaders', 'globalLoaders']);
|
207 |
|
208 | loaders = configureWebpackLoaderList(context, loaders);
|
209 | globalLoaders = configureWebpackLoaderList(context, globalLoaders, true);
|
210 | return (0, _extends3.default)({}, config, {
|
211 | context: context,
|
212 | output: (0, _extends3.default)({}, config.output, {
|
213 | path: _path2.default.resolve(config.context, config.output.path)
|
214 | }),
|
215 | module: {
|
216 | loaders: loaders.concat(globalLoaders)
|
217 | }
|
218 | });
|
219 | }
|
220 |
|
221 | function readConfigSync(filename) {
|
222 | var source = _fs2.default.readFileSync(filename, 'utf8');
|
223 | source = (0, _babelCore.transform)(source, {
|
224 | filename: filename,
|
225 | presets: [BABEL_PRESET_ES2015, BABEL_PRESET_STAGE_1]
|
226 | }).code;
|
227 | return (0, _utils.evalAsModule)(source, filename);
|
228 | }
|
229 |
|
230 | var extractCSSPlugin = exports.extractCSSPlugin = new _extractTextWebpackPlugin2.default('bundle.css');
|
231 |
|
232 | var JS = exports.JS = loader(require.resolve('babel-loader'));
|
233 |
|
234 | var markdown = exports.markdown = loader(require.resolve('reactdown/webpack'));
|
235 |
|
236 | var url = exports.url = loader(require.resolve('url-loader'));
|
237 |
|
238 | var img = exports.img = url({ limit: 10000 });
|
239 |
|
240 | var CSS = exports.CSS = loader(require.resolve('css-loader'));
|
241 |
|
242 | var injectStyleLoader = exports.injectStyleLoader = loader(require.resolve('style-loader'));
|
243 |
|
244 | var injectCSS = exports.injectCSS = function injectCSS() {
|
245 | for (var _len3 = arguments.length, loader = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
246 | loader[_key3] = arguments[_key3];
|
247 | }
|
248 |
|
249 | return normalizeLoader([injectStyleLoader].concat(loader)).split('!');
|
250 | };
|
251 |
|
252 | var extractCSS = exports.extractCSS = function extractCSS() {
|
253 | for (var _len4 = arguments.length, loader = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
|
254 | loader[_key4] = arguments[_key4];
|
255 | }
|
256 |
|
257 | return extractCSSPlugin.extract(normalizeLoader(injectStyleLoader), normalizeLoader(loader)).split('!');
|
258 | };
|
259 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9hbmRyZXlwb3BwL1dvcmtzcGFjZS9zaXRlZ2VuL3NyYy9jb25maWcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQWdCZ0IsYSxHQUFBLGE7UUFvQ0EsVyxHQUFBLFc7UUE0Q0EsYSxHQUFBLGE7UUFLQSxNLEdBQUEsTTtRQWtFQSxnQixHQUFBLGdCO1FBZ0JBLGMsR0FBQSxjOztBQW5MaEI7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7O0FBQ0E7Ozs7QUFDQTs7QUFDQTs7OztBQUVBLElBQU0sc0JBQXNCLFFBQVEsT0FBUixDQUFnQixxQkFBaEIsQ0FBNUIsQzs7OztBQUNBLElBQU0sdUJBQXVCLFFBQVEsT0FBUixDQUFnQixzQkFBaEIsQ0FBN0I7QUFDQSxJQUFNLHFCQUFxQixRQUFRLE9BQVIsQ0FBZ0Isb0JBQWhCLENBQTNCOztBQUVPLFNBQVMsYUFBVCxPQUE4QjtBQUFBLE1BQU4sR0FBTSxRQUFOLEdBQU07OztBQUVuQyxNQUFJLFlBQVksSUFBSSxXQUFKLEdBQWtCLFNBQWxCLEdBQThCLFVBQTlDOztBQUVBLFNBQU87O0FBRUwsYUFBUyxJQUFJLFdBQUosR0FBa0IseUJBQWxCLEdBQThDLFNBRmxEOztBQUlMLFdBQU87QUFDTCxlQUFTLENBQ1AsbUJBRE8sRUFFUCxvQkFGTyxFQUdQLGtCQUhPO0FBREosS0FKRjs7QUFZTCxhQUFTO0FBQ1AsaUJBQVcsRUFESjtBQUVQLGlCQUFXLENBQUMsRUFBRCxFQUFLLFFBQUw7QUFGSixLQVpKOztBQWlCTCxtQkFBZTtBQUNiLGtCQUFZLFVBQVUsR0FBVixDQURDO0FBRWIsa0JBQVksR0FGQztBQUdiLGtCQUFZLEdBSEM7QUFJYixtQkFBYSxHQUpBO0FBS2Isa0JBQVksR0FMQztBQU1iLGtCQUFZO0FBTkMsS0FqQlY7O0FBMEJMLGFBQVMsQ0FDUCxDQUFDLElBQUksT0FBSixJQUFlLElBQUksVUFBcEIsS0FBbUMsZ0JBRDVCO0FBMUJKLEdBQVA7QUE4QkQ7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QWhCLENBQVAsQ0FBeEI7O0FBRUEsSUFBSSxnQ0FBWSxTQUFaLFNBQVk7QUFBQSxxQ0FBSSxNQUFKO0FBQUksVUFBSjtBQUFBOztBQUFBLFNBQ3JCLGdCQUFnQixDQUFDLGlCQUFELEVBQW9CLE1BQXBCLENBQTJCLE1BQTNCLENBQWhCLEVBQW9ELEtBQXBELENBQTBELEdBQTFELENBRHFCO0FBQUEsQ0FBaEI7O0FBR0EsSUFBSSxrQ0FBYSxTQUFiLFVBQWE7QUFBQSxxQ0FBSSxNQUFKO0FBQUksVUFBSjtBQUFBOztBQUFBLFNBQ3RCLGlCQUFpQixPQUFqQixDQUNFLGdCQUFnQixpQkFBaEIsQ0FERixFQUVFLGdCQUFnQixNQUFoQixDQUZGLEVBR0UsS0FIRixDQUdRLEdBSFIsQ0FEc0I7QUFBQSxDQUFqQiIsImZpbGUiOiJjb25maWcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBjb3B5cmlnaHQgMjAxNi1wcmVzZW50LCBTaXRlZ2VuIHRlYW1cbiAqL1xuXG5pbXBvcnQgaW52YXJpYW50IGZyb20gJ2ludmFyaWFudCc7XG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQge3RyYW5zZm9ybX0gZnJvbSAnYmFiZWwtY29yZSc7XG5pbXBvcnQgRXh0cmFjdFRleHRQbHVnaW4gZnJvbSAnZXh0cmFjdC10ZXh0LXdlYnBhY2stcGx1Z2luJztcbmltcG9ydCB7TWluaW1hdGNofSBmcm9tICdtaW5pbWF0Y2gnO1xuaW1wb3J0IHtldmFsQXNNb2R1bGV9IGZyb20gJy4vY29tcGlsZXIvdXRpbHMnO1xuXG5jb25zdCBCQUJFTF9QUkVTRVRfRVMyMDE1ID0gcmVxdWlyZS5yZXNvbHZlKCdiYWJlbC1wcmVzZXQtZXMyMDE1Jyk7XG5jb25zdCBCQUJFTF9QUkVTRVRfU1RBR0VfMSA9IHJlcXVpcmUucmVzb2x2ZSgnYmFiZWwtcHJlc2V0LXN0YWdlLTEnKTtcbmNvbnN0IEJBQkVMX1BSRVNFVF9SRUFDVCA9IHJlcXVpcmUucmVzb2x2ZSgnYmFiZWwtcHJlc2V0LXJlYWN0Jyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0Q29uZmlnKHtlbnZ9KSB7XG5cbiAgbGV0IGRlcGxveUNTUyA9IGVudi5kZXZlbG9wbWVudCA/IGluamVjdENTUyA6IGV4dHJhY3RDU1M7XG5cbiAgcmV0dXJuIHtcblxuICAgIGRldnRvb2w6IGVudi5kZXZlbG9wbWVudCA/ICdjaGVhcC1tb2R1bGUtc291cmNlLW1hcCcgOiB1bmRlZmluZWQsXG5cbiAgICBiYWJlbDoge1xuICAgICAgcHJlc2V0czogW1xuICAgICAgICBCQUJFTF9QUkVTRVRfRVMyMDE1LFxuICAgICAgICBCQUJFTF9QUkVTRVRfU1RBR0VfMSxcbiAgICAgICAgQkFCRUxfUFJFU0VUX1JFQUNUXG4gICAgICBdXG4gICAgfSxcblxuICAgIGxvYWRlcnM6IHtcbiAgICAgICcqKi8qLmpzJzogSlMsXG4gICAgICAnKiovKi5tZCc6IFtKUywgbWFya2Rvd25dLFxuICAgIH0sXG5cbiAgICBnbG9iYWxMb2FkZXJzOiB7XG4gICAgICAnKiovKi5jc3MnOiBkZXBsb3lDU1MoQ1NTKSxcbiAgICAgICcqKi8qLnBuZyc6IGltZyxcbiAgICAgICcqKi8qLmpwZyc6IGltZyxcbiAgICAgICcqKi8qLmpwZWcnOiBpbWcsXG4gICAgICAnKiovKi5naWYnOiBpbWcsXG4gICAgICAnKiovKi5pY28nOiBpbWcsXG4gICAgfSxcblxuICAgIHBsdWdpbnM6IFtcbiAgICAgIChlbnYuY29udGVudCB8fCBlbnYucHJvZHVjdGlvbikgJiYgZXh0cmFjdENTU1BsdWdpbixcbiAgICBdLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VDb25maWcoLi4uY29uZmlnKSB7XG4gIGNvbmZpZyA9IGNvbmZpZy5maWx0ZXIoQm9vbGVhbik7XG4gIGludmFyaWFudChcbiAgICBjb25maWcubGVuZ3RoID4gMCxcbiAgICAnVHJ5aW5nIHRvIG1lcmdlIGVtcHR5IGxpc3Qgb2YgY29uZmlndXJhdGlvbnMnXG4gICk7XG4gIGlmIChjb25maWcubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGNvbmZpZ1swXTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY29uZmlnLnJlZHVjZShtZXJnZUNvbmZpZ0ltcGwpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlQXJyYXkoYSwgYikge1xuICByZXR1cm4gW10uY29uY2F0KGEpLmNvbmNhdChiKS5maWx0ZXIoQm9vbGVhbik7XG59XG5cbmZ1bmN0aW9uIG1lcmdlQ29uZmlnSW1wbChhLCBiKSB7XG4gIHJldHVybiB7XG4gICAgLi4uYSxcbiAgICAuLi5iLFxuICAgIGVudHJ5OiBtZXJnZUFycmF5KGEuZW50cnksIGIuZW50cnkpLFxuICAgIGJhYmVsOiB7XG4gICAgICAuLi5hLmJhYmVsLFxuICAgICAgLi4uYi5iYWJlbCxcbiAgICAgIHByZXNldHM6IG1lcmdlQXJyYXkoYS5wcmVzZXRzLCBiLnByZXNldHMpLFxuICAgICAgcGx1Z2luczogbWVyZ2VBcnJheShhLmJhYmVsICYmIGEuYmFiZWwucGx1Z2lucywgYi5iYWJlbCAmJiBiLmJhYmVsLnBsdWdpbnMpLFxuICAgIH0sXG4gICAgb3V0cHV0OiB7XG4gICAgICAuLi5hLm91dHB1dCxcbiAgICAgIC4uLmIub3V0cHV0LFxuICAgIH0sXG4gICAgbG9hZGVyczoge1xuICAgICAgLi4uYS5sb2FkZXJzLFxuICAgICAgLi4uYi5sb2FkZXJzXG4gICAgfSxcbiAgICBnbG9iYWxMb2FkZXJzOiB7XG4gICAgICAuLi5hLmdsb2JhbExvYWRlcnMsXG4gICAgICAuLi5iLmdsb2JhbExvYWRlcnNcbiAgICB9LFxuICAgIHBsdWdpbnM6IG1lcmdlQXJyYXkoYS5wbHVnaW5zLCBiLnBsdWdpbnMpLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9kdWxlUmVxdWVzdChpZCwgLi4ubG9hZGVyKSB7XG4gIGxvYWRlci5yZXZlcnNlKCk7XG4gIHJldHVybiBgJHtub3JtYWxpemVMb2FkZXIobG9hZGVyKX0hJHtpZH1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZGVyKGxvYWRlcikge1xuICByZXR1cm4gbG9hZGVySW1wbCh7bG9hZGVyfSk7XG59XG5cbmZ1bmN0aW9uIGxvYWRlckltcGwoY29uZmlnKSB7XG4gIGxldCBtZXJnZVF1ZXJ5ID0gY29uZmlnLm1lcmdlUXVlcnkgfHwgKChhLCBiKSA9PiAoey4uLmEsIC4uLmJ9KSk7XG4gIGxldCBjb25maWd1cmF0b3IgPSBmdW5jdGlvbiBjb25maWd1cmF0b3IocXVlcnkpIHtcbiAgICByZXR1cm4gbG9hZGVySW1wbCh7XG4gICAgICAuLi5jb25maWcsXG4gICAgICBxdWVyeTogbWVyZ2VRdWVyeShjb25maWcucXVlcnksIHF1ZXJ5KSxcbiAgICB9KTtcbiAgfTtcbiAgY29uZmlndXJhdG9yLmNvbmZpZyA9IGNvbmZpZztcbiAgY29uZmlndXJhdG9yLnRvTG9hZGVyU3RyaW5nID0gZnVuY3Rpb24gdG9Mb2FkZXJTdHJpbmcoKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZUxvYWRlcihjb25maWcpO1xuICB9O1xuICBjb25maWd1cmF0b3IudG9TdHJpbmcgPSBjb25maWd1cmF0b3IudG9Mb2FkZXJTdHJpbmc7XG4gIHJldHVybiBjb25maWd1cmF0b3I7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUxvYWRlcihlbGVtZW50KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQubWFwKG5vcm1hbGl6ZUxvYWRlcikuam9pbignIScpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9IGVsc2UgaWYgKGVsZW1lbnQudG9Mb2FkZXJTdHJpbmcpIHtcbiAgICByZXR1cm4gZWxlbWVudC50b0xvYWRlclN0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIGlmIChlbGVtZW50LnF1ZXJ5KSB7XG4gICAgICByZXR1cm4gZWxlbWVudC5sb2FkZXIgKyAnPycgKyBKU09OLnN0cmluZ2lmeShlbGVtZW50LnF1ZXJ5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGVsZW1lbnQubG9hZGVyO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtYWtlUGF0dGVyTWF0Y2hlcihwYXR0ZXJuKSB7XG4gIGxldCBwYXR0ZXJNYXRjaGVyID0gbmV3IE1pbmltYXRjaChwYXR0ZXJuKTtcblxuICBsZXQgbWF0Y2hlciA9IGZpbGVuYW1lID0+IHBhdHRlck1hdGNoZXIubWF0Y2goZmlsZW5hbWUpO1xuICBtYXRjaGVyLnRvU3RyaW5nID0gKCkgPT4gYFtQYXR0ZXJuTWF0Y2hlciAke3BhdHRlcm59XWA7XG4gIG1hdGNoZXIuaW5zcGVjdCA9IG1hdGNoZXIudG9TdHJpbmc7XG5cbiAgcmV0dXJuIG1hdGNoZXI7XG59XG5cbmZ1bmN0aW9uIGNvbmZpZ3VyZVdlYnBhY2tMb2FkZXIoY29udGV4dCwgcGF0dGVybiwgbG9hZGVyLCBnbG9iYWwpIHtcbiAgaWYgKCFnbG9iYWwpIHtcbiAgICBwYXR0ZXJuID0gcGF0aC5qb2luKGNvbnRleHQsIHBhdHRlcm4pO1xuICB9XG4gIGxldCB0ZXN0ID0gbWFrZVBhdHRlck1hdGNoZXIocGF0dGVybik7XG4gIHJldHVybiB7XG4gICAgbG9hZGVyOiBub3JtYWxpemVMb2FkZXIobG9hZGVyKSxcbiAgICB0ZXN0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb25maWd1cmVXZWJwYWNrTG9hZGVyTGlzdChjb250ZXh0LCBsb2FkZXJzLCBnbG9iYWwpIHtcbiAgbGV0IHJlc3VsdCA9IFtdO1xuICBmb3IgKGxldCBwYXR0ZXJuIGluIGxvYWRlcnMpIHtcbiAgICBsZXQgbG9hZGVyID0gbG9hZGVyc1twYXR0ZXJuXTtcbiAgICByZXN1bHQucHVzaChjb25maWd1cmVXZWJwYWNrTG9hZGVyKGNvbnRleHQsIHBhdHRlcm4sIGxvYWRlciwgZ2xvYmFsKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ3VyZVdlYnBhY2soe2NvbnRleHQsIGxvYWRlcnMsIGdsb2JhbExvYWRlcnMsIC4uLmNvbmZpZ30pIHtcbiAgbG9hZGVycyA9IGNvbmZpZ3VyZVdlYnBhY2tMb2FkZXJMaXN0KGNvbnRleHQsIGxvYWRlcnMpO1xuICBnbG9iYWxMb2FkZXJzID0gY29uZmlndXJlV2VicGFja0xvYWRlckxpc3QoY29udGV4dCwgZ2xvYmFsTG9hZGVycywgdHJ1ZSk7XG4gIHJldHVybiB7XG4gICAgLi4uY29uZmlnLFxuICAgIGNvbnRleHQsXG4gICAgb3V0cHV0OiB7XG4gICAgICAuLi5jb25maWcub3V0cHV0LFxuICAgICAgcGF0aDogcGF0aC5yZXNvbHZlKGNvbmZpZy5jb250ZXh0LCBjb25maWcub3V0cHV0LnBhdGgpXG4gICAgfSxcbiAgICBtb2R1bGU6IHtcbiAgICAgIGxvYWRlcnM6IGxvYWRlcnMuY29uY2F0KGdsb2JhbExvYWRlcnMpLFxuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRDb25maWdTeW5jKGZpbGVuYW1lKSB7XG4gIGxldCBzb3VyY2UgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZW5hbWUsICd1dGY4Jyk7XG4gIHNvdXJjZSA9IHRyYW5zZm9ybShzb3VyY2UsIHtcbiAgICBmaWxlbmFtZSxcbiAgICBwcmVzZXRzOiBbQkFCRUxfUFJFU0VUX0VTMjAxNSwgQkFCRUxfUFJFU0VUX1NUQUdFXzFdXG4gIH0pLmNvZGU7XG4gIHJldHVybiBldmFsQXNNb2R1bGUoc291cmNlLCBmaWxlbmFtZSk7XG59XG5cbmV4cG9ydCBsZXQgZXh0cmFjdENTU1BsdWdpbiA9IG5ldyBFeHRyYWN0VGV4dFBsdWdpbignYnVuZGxlLmNzcycpO1xuXG5leHBvcnQgbGV0IEpTID0gbG9hZGVyKHJlcXVpcmUucmVzb2x2ZSgnYmFiZWwtbG9hZGVyJykpO1xuXG5leHBvcnQgbGV0IG1hcmtkb3duID0gbG9hZGVyKHJlcXVpcmUucmVzb2x2ZSgncmVhY3Rkb3duL3dlYnBhY2snKSk7XG5cbmV4cG9ydCBsZXQgdXJsID0gbG9hZGVyKHJlcXVpcmUucmVzb2x2ZSgndXJsLWxvYWRlcicpKTtcblxuZXhwb3J0IGxldCBpbWcgPSB1cmwoe2xpbWl0OiAxMDAwMH0pO1xuXG5leHBvcnQgbGV0IENTUyA9IGxvYWRlcihyZXF1aXJlLnJlc29sdmUoJ2Nzcy1sb2FkZXInKSk7XG5cblxuZXhwb3J0IGxldCBpbmplY3RTdHlsZUxvYWRlciA9IGxvYWRlcihyZXF1aXJlLnJlc29sdmUoJ3N0eWxlLWxvYWRlcicpKTtcblxuZXhwb3J0IGxldCBpbmplY3RDU1MgPSAoLi4ubG9hZGVyKSA9PlxuICBub3JtYWxpemVMb2FkZXIoW2luamVjdFN0eWxlTG9hZGVyXS5jb25jYXQobG9hZGVyKSkuc3BsaXQoJyEnKTtcblxuZXhwb3J0IGxldCBleHRyYWN0Q1NTID0gKC4uLmxvYWRlcikgPT5cbiAgZXh0cmFjdENTU1BsdWdpbi5leHRyYWN0KFxuICAgIG5vcm1hbGl6ZUxvYWRlcihpbmplY3RTdHlsZUxvYWRlciksXG4gICAgbm9ybWFsaXplTG9hZGVyKGxvYWRlcilcbiAgKS5zcGxpdCgnIScpO1xuIl19 |
\ | No newline at end of file |