1 | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
2 | return new (P || (P = Promise))(function (resolve, reject) {
|
3 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
4 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
5 | function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
6 | step((generator = generator.apply(thisArg, _arguments || [])).next());
|
7 | });
|
8 | };
|
9 | Object.defineProperty(exports, "__esModule", { value: true });
|
10 | const fs = require("mz/fs");
|
11 | const os = require("os");
|
12 | const path = require("path");
|
13 | const Helpers = require("./helpers");
|
14 | const IMPORT_PATTERN = /@import ['"](.+)['"];/g;
|
15 | const COMMENTED_IMPORT_PATTERN = /\/\/@import '(.+)';/g;
|
16 | const FILE_EXTENSION = ".scss";
|
17 | class Bundle {
|
18 | static Bundle(file) {
|
19 | return __awaiter(this, void 0, void 0, function* () {
|
20 | let content = yield fs.readFile(file, "utf-8");
|
21 | return yield this.bundle(file, content);
|
22 | });
|
23 | }
|
24 | static BundleAll(files) {
|
25 | return __awaiter(this, void 0, void 0, function* () {
|
26 | let resultsPromises = files.map(this.Bundle);
|
27 | return yield Promise.all(resultsPromises);
|
28 | });
|
29 | }
|
30 | static bundle(filePath, content, filesContents) {
|
31 | return __awaiter(this, void 0, void 0, function* () {
|
32 | if (filesContents == null) {
|
33 | filesContents = {};
|
34 | }
|
35 | // Remove commented imports
|
36 | content = content.replace(COMMENTED_IMPORT_PATTERN, "");
|
37 | // Resolve path to work only with full paths
|
38 | filePath = path.resolve(filePath);
|
39 | let dirname = path.dirname(filePath);
|
40 | if (filesContents[filePath] == null) {
|
41 | filesContents[filePath] = content;
|
42 | }
|
43 | let importsPromises = Helpers.getAllMatches(content, IMPORT_PATTERN).map((match) => __awaiter(this, void 0, void 0, function* () {
|
44 | let importName = match[1];
|
45 | // Append extension if it's absent
|
46 | if (importName.indexOf(FILE_EXTENSION) === -1) {
|
47 | importName += FILE_EXTENSION;
|
48 | }
|
49 | let fullPath = path.resolve(dirname, importName);
|
50 | let importData = {
|
51 | importString: match[0],
|
52 | path: importName,
|
53 | fullPath: fullPath,
|
54 | found: false
|
55 | };
|
56 | try {
|
57 | yield fs.access(fullPath);
|
58 | importData.found = true;
|
59 | }
|
60 | catch (error) {
|
61 | let underscoredFilePath = path.join(dirname, `_${importName}`);
|
62 | try {
|
63 | yield fs.access(underscoredFilePath);
|
64 | importData.fullPath = underscoredFilePath;
|
65 | importData.found = true;
|
66 | }
|
67 | catch (underscoreErr) {
|
68 | // Neither file, nor partial was found
|
69 | }
|
70 | }
|
71 | return importData;
|
72 | }));
|
73 | let imports = yield Promise.all(importsPromises);
|
74 | let allImports = [];
|
75 | for (let imp of imports) {
|
76 | // Push current import
|
77 | allImports.push(imp);
|
78 | let contentToReplace;
|
79 | if (imp.found && filesContents[imp.fullPath] == null) {
|
80 | let impContent = yield fs.readFile(imp.fullPath, "utf-8");
|
81 | let bundledImport = yield this.bundle(imp.fullPath, impContent);
|
82 | filesContents[imp.fullPath] = bundledImport.content;
|
83 | allImports = allImports.concat(bundledImport.imports);
|
84 | }
|
85 | contentToReplace = filesContents[imp.fullPath];
|
86 | if (contentToReplace == null) {
|
87 | contentToReplace = `/*** IMPORTED FILE NOT FOUND ***/${os.EOL}${imp.importString}/*** --- ***/`;
|
88 | }
|
89 | content = content.replace(imp.importString, contentToReplace);
|
90 | }
|
91 | return {
|
92 | content: content,
|
93 | filePath: filePath,
|
94 | imports: allImports
|
95 | };
|
96 | });
|
97 | }
|
98 | }
|
99 | exports.Bundle = Bundle;
|
100 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVuZGxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2J1bmRsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSw0QkFBNEI7QUFDNUIseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUU3QixxQ0FBcUM7QUFFckMsTUFBTSxjQUFjLEdBQUcsd0JBQXdCLENBQUM7QUFDaEQsTUFBTSx3QkFBd0IsR0FBRyxzQkFBc0IsQ0FBQztBQUN4RCxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUM7QUFtQi9CO0lBQ1csTUFBTSxDQUFPLE1BQU0sQ0FBQyxJQUFZOztZQUNuQyxJQUFJLE9BQU8sR0FBRyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQy9DLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLENBQUM7S0FBQTtJQUVNLE1BQU0sQ0FBTyxTQUFTLENBQUMsS0FBZTs7WUFDekMsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0MsTUFBTSxDQUFDLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM5QyxDQUFDO0tBQUE7SUFFTyxNQUFNLENBQU8sTUFBTSxDQUFDLFFBQWdCLEVBQUUsT0FBZSxFQUFFLGFBQTBCOztZQUNyRixFQUFFLENBQUMsQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDeEIsYUFBYSxHQUFHLEVBQUUsQ0FBQztZQUN2QixDQUFDO1lBRUQsMkJBQTJCO1lBQzNCLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRXhELDRDQUE0QztZQUM1QyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUVsQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRXJDLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNsQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsT0FBTyxDQUFDO1lBQ3RDLENBQUM7WUFFRCxJQUFJLGVBQWUsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBTSxLQUFLO2dCQUNoRixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFCLGtDQUFrQztnQkFDbEMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzVDLFVBQVUsSUFBSSxjQUFjLENBQUM7Z0JBQ2pDLENBQUM7Z0JBQ0QsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBRWpELElBQUksVUFBVSxHQUFlO29CQUN6QixZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFDdEIsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLFFBQVEsRUFBRSxRQUFRO29CQUNsQixLQUFLLEVBQUUsS0FBSztpQkFDZixDQUFDO2dCQUVGLElBQUksQ0FBQztvQkFDRCxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzFCLFVBQVUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO2dCQUM1QixDQUFDO2dCQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQ2IsSUFBSSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLFVBQVUsRUFBRSxDQUFDLENBQUM7b0JBQy9ELElBQUksQ0FBQzt3QkFDRCxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQzt3QkFDckMsVUFBVSxDQUFDLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQzt3QkFDMUMsVUFBVSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7b0JBQzVCLENBQUM7b0JBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQzt3QkFDckIsc0NBQXNDO29CQUMxQyxDQUFDO2dCQUNMLENBQUM7Z0JBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQztZQUN0QixDQUFDLENBQUEsQ0FBQyxDQUFDO1lBRUgsSUFBSSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ2pELElBQUksVUFBVSxHQUFpQixFQUFFLENBQUM7WUFDbEMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDdEIsc0JBQXNCO2dCQUN0QixVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUVyQixJQUFJLGdCQUFnQixDQUFDO2dCQUNyQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDbkQsSUFBSSxVQUFVLEdBQUcsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQzFELElBQUksYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO29CQUNoRSxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUM7b0JBQ3BELFVBQVUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDMUQsQ0FBQztnQkFFRCxnQkFBZ0IsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUUvQyxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUMzQixnQkFBZ0IsR0FBRyxvQ0FBb0MsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsWUFBWSxlQUFlLENBQUM7Z0JBQ3BHLENBQUM7Z0JBRUQsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2xFLENBQUM7WUFFRCxNQUFNLENBQUM7Z0JBQ0gsT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixPQUFPLEVBQUUsVUFBVTthQUN0QixDQUFDO1FBQ04sQ0FBQztLQUFBO0NBQ0o7QUF6RkQsd0JBeUZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSBcIm16L2ZzXCI7XHJcbmltcG9ydCAqIGFzIG9zIGZyb20gXCJvc1wiO1xyXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XHJcblxyXG5pbXBvcnQgKiBhcyBIZWxwZXJzIGZyb20gXCIuL2hlbHBlcnNcIjtcclxuXHJcbmNvbnN0IElNUE9SVF9QQVRURVJOID0gL0BpbXBvcnQgWydcIl0oLispWydcIl07L2c7XHJcbmNvbnN0IENPTU1FTlRFRF9JTVBPUlRfUEFUVEVSTiA9IC9cXC9cXC9AaW1wb3J0ICcoLispJzsvZztcclxuY29uc3QgRklMRV9FWFRFTlNJT04gPSBcIi5zY3NzXCI7XHJcblxyXG5pbnRlcmZhY2UgRGljdGlvbmFyeSB7XHJcbiAgICBbaWQ6IHN0cmluZ106IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIEltcG9ydERhdGEge1xyXG4gICAgaW1wb3J0U3RyaW5nOiBzdHJpbmc7XHJcbiAgICBwYXRoOiBzdHJpbmc7XHJcbiAgICBmdWxsUGF0aDogc3RyaW5nO1xyXG4gICAgZm91bmQ6IGJvb2xlYW47XHJcbn1cclxuXHJcbmludGVyZmFjZSBCdW5kbGVSZXN1bHQge1xyXG4gICAgaW1wb3J0czogSW1wb3J0RGF0YVtdO1xyXG4gICAgZmlsZVBhdGg6IHN0cmluZztcclxuICAgIGNvbnRlbnQ6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEJ1bmRsZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIGFzeW5jIEJ1bmRsZShmaWxlOiBzdHJpbmcpOiBQcm9taXNlPEJ1bmRsZVJlc3VsdD4ge1xyXG4gICAgICAgIGxldCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUoZmlsZSwgXCJ1dGYtOFwiKTtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5idW5kbGUoZmlsZSwgY29udGVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBhc3luYyBCdW5kbGVBbGwoZmlsZXM6IHN0cmluZ1tdKTogUHJvbWlzZTxCdW5kbGVSZXN1bHRbXT4ge1xyXG4gICAgICAgIGxldCByZXN1bHRzUHJvbWlzZXMgPSBmaWxlcy5tYXAodGhpcy5CdW5kbGUpO1xyXG4gICAgICAgIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChyZXN1bHRzUHJvbWlzZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIGFzeW5jIGJ1bmRsZShmaWxlUGF0aDogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcsIGZpbGVzQ29udGVudHM/OiBEaWN0aW9uYXJ5KTogUHJvbWlzZTxCdW5kbGVSZXN1bHQ+IHtcclxuICAgICAgICBpZiAoZmlsZXNDb250ZW50cyA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGZpbGVzQ29udGVudHMgPSB7fTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlbW92ZSBjb21tZW50ZWQgaW1wb3J0c1xyXG4gICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoQ09NTUVOVEVEX0lNUE9SVF9QQVRURVJOLCBcIlwiKTtcclxuXHJcbiAgICAgICAgLy8gUmVzb2x2ZSBwYXRoIHRvIHdvcmsgb25seSB3aXRoIGZ1bGwgcGF0aHNcclxuICAgICAgICBmaWxlUGF0aCA9IHBhdGgucmVzb2x2ZShmaWxlUGF0aCk7XHJcblxyXG4gICAgICAgIGxldCBkaXJuYW1lID0gcGF0aC5kaXJuYW1lKGZpbGVQYXRoKTtcclxuXHJcbiAgICAgICAgaWYgKGZpbGVzQ29udGVudHNbZmlsZVBhdGhdID09IG51bGwpIHtcclxuICAgICAgICAgICAgZmlsZXNDb250ZW50c1tmaWxlUGF0aF0gPSBjb250ZW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGltcG9ydHNQcm9taXNlcyA9IEhlbHBlcnMuZ2V0QWxsTWF0Y2hlcyhjb250ZW50LCBJTVBPUlRfUEFUVEVSTikubWFwKGFzeW5jIG1hdGNoID0+IHtcclxuICAgICAgICAgICAgbGV0IGltcG9ydE5hbWUgPSBtYXRjaFsxXTtcclxuICAgICAgICAgICAgLy8gQXBwZW5kIGV4dGVuc2lvbiBpZiBpdCdzIGFic2VudFxyXG4gICAgICAgICAgICBpZiAoaW1wb3J0TmFtZS5pbmRleE9mKEZJTEVfRVhURU5TSU9OKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGltcG9ydE5hbWUgKz0gRklMRV9FWFRFTlNJT047XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IGZ1bGxQYXRoID0gcGF0aC5yZXNvbHZlKGRpcm5hbWUsIGltcG9ydE5hbWUpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGltcG9ydERhdGE6IEltcG9ydERhdGEgPSB7XHJcbiAgICAgICAgICAgICAgICBpbXBvcnRTdHJpbmc6IG1hdGNoWzBdLFxyXG4gICAgICAgICAgICAgICAgcGF0aDogaW1wb3J0TmFtZSxcclxuICAgICAgICAgICAgICAgIGZ1bGxQYXRoOiBmdWxsUGF0aCxcclxuICAgICAgICAgICAgICAgIGZvdW5kOiBmYWxzZVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGZzLmFjY2VzcyhmdWxsUGF0aCk7XHJcbiAgICAgICAgICAgICAgICBpbXBvcnREYXRhLmZvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGxldCB1bmRlcnNjb3JlZEZpbGVQYXRoID0gcGF0aC5qb2luKGRpcm5hbWUsIGBfJHtpbXBvcnROYW1lfWApO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBmcy5hY2Nlc3ModW5kZXJzY29yZWRGaWxlUGF0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaW1wb3J0RGF0YS5mdWxsUGF0aCA9IHVuZGVyc2NvcmVkRmlsZVBhdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgaW1wb3J0RGF0YS5mb3VuZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoICh1bmRlcnNjb3JlRXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTmVpdGhlciBmaWxlLCBub3IgcGFydGlhbCB3YXMgZm91bmRcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGltcG9ydERhdGE7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGxldCBpbXBvcnRzID0gYXdhaXQgUHJvbWlzZS5hbGwoaW1wb3J0c1Byb21pc2VzKTtcclxuICAgICAgICBsZXQgYWxsSW1wb3J0czogSW1wb3J0RGF0YVtdID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaW1wIG9mIGltcG9ydHMpIHtcclxuICAgICAgICAgICAgLy8gUHVzaCBjdXJyZW50IGltcG9ydFxyXG4gICAgICAgICAgICBhbGxJbXBvcnRzLnB1c2goaW1wKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBjb250ZW50VG9SZXBsYWNlO1xyXG4gICAgICAgICAgICBpZiAoaW1wLmZvdW5kICYmIGZpbGVzQ29udGVudHNbaW1wLmZ1bGxQYXRoXSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgaW1wQ29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKGltcC5mdWxsUGF0aCwgXCJ1dGYtOFwiKTtcclxuICAgICAgICAgICAgICAgIGxldCBidW5kbGVkSW1wb3J0ID0gYXdhaXQgdGhpcy5idW5kbGUoaW1wLmZ1bGxQYXRoLCBpbXBDb250ZW50KTtcclxuICAgICAgICAgICAgICAgIGZpbGVzQ29udGVudHNbaW1wLmZ1bGxQYXRoXSA9IGJ1bmRsZWRJbXBvcnQuY29udGVudDtcclxuICAgICAgICAgICAgICAgIGFsbEltcG9ydHMgPSBhbGxJbXBvcnRzLmNvbmNhdChidW5kbGVkSW1wb3J0LmltcG9ydHMpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb250ZW50VG9SZXBsYWNlID0gZmlsZXNDb250ZW50c1tpbXAuZnVsbFBhdGhdO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvbnRlbnRUb1JlcGxhY2UgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgY29udGVudFRvUmVwbGFjZSA9IGAvKioqIElNUE9SVEVEIEZJTEUgTk9UIEZPVU5EICoqKi8ke29zLkVPTH0ke2ltcC5pbXBvcnRTdHJpbmd9LyoqKiAtLS0gKioqL2A7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoaW1wLmltcG9ydFN0cmluZywgY29udGVudFRvUmVwbGFjZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBjb250ZW50OiBjb250ZW50LFxyXG4gICAgICAgICAgICBmaWxlUGF0aDogZmlsZVBhdGgsXHJcbiAgICAgICAgICAgIGltcG9ydHM6IGFsbEltcG9ydHNcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbiJdfQ== |
\ | No newline at end of file |