create-payload-app 0.5.2 → 1.0.0-beta.0
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/index.js +10 -53
- package/dist/lib/configure-payload-config.js +97 -148
- package/dist/lib/create-project.js +101 -174
- package/dist/lib/create-project.spec.js +148 -172
- package/dist/lib/generate-secret.js +12 -44
- package/dist/lib/packages.js +52 -32
- package/dist/lib/parse-project-name.js +29 -67
- package/dist/lib/parse-template.js +42 -80
- package/dist/lib/select-db.js +62 -105
- package/dist/lib/templates.js +63 -97
- package/dist/lib/write-env-file.js +51 -106
- package/dist/main.js +118 -198
- package/dist/types.js +5 -1
- package/dist/utils/log.js +40 -19
- package/dist/utils/messages.js +71 -73
- package/package.json +8 -39
- package/.vscode/launch.json +0 -13
package/dist/index.js
CHANGED
@@ -1,55 +1,12 @@
|
|
1
1
|
"use strict";
|
2
|
-
|
3
|
-
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
-
});
|
10
|
-
};
|
11
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
13
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
14
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
15
|
-
function step(op) {
|
16
|
-
if (f) throw new TypeError("Generator is already executing.");
|
17
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
18
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
19
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
20
|
-
switch (op[0]) {
|
21
|
-
case 0: case 1: t = op; break;
|
22
|
-
case 4: _.label++; return { value: op[1], done: false };
|
23
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
24
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
25
|
-
default:
|
26
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
27
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
28
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
29
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
30
|
-
if (t[2]) _.ops.pop();
|
31
|
-
_.trys.pop(); continue;
|
32
|
-
}
|
33
|
-
op = body.call(thisArg, _);
|
34
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
35
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
36
|
-
}
|
37
|
-
};
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
39
|
-
var main_1 = require("./main");
|
40
|
-
var log_1 = require("./utils/log");
|
41
|
-
function main() {
|
42
|
-
return __awaiter(this, void 0, void 0, function () {
|
43
|
-
return __generator(this, function (_a) {
|
44
|
-
switch (_a.label) {
|
45
|
-
case 0: return [4 /*yield*/, new main_1.Main().init()];
|
46
|
-
case 1:
|
47
|
-
_a.sent();
|
48
|
-
return [2 /*return*/];
|
49
|
-
}
|
50
|
-
});
|
51
|
-
});
|
52
|
-
}
|
53
|
-
main().catch(function (e) {
|
54
|
-
return (0, log_1.error)("An error has occurred: ".concat(e instanceof Error ? e.message : e));
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
3
|
+
value: true
|
55
4
|
});
|
5
|
+
const _main = require("./main");
|
6
|
+
const _log = require("./utils/log");
|
7
|
+
async function main() {
|
8
|
+
await new _main.Main().init();
|
9
|
+
}
|
10
|
+
main().catch((e)=>(0, _log.error)(`An error has occurred: ${e instanceof Error ? e.message : e}`));
|
11
|
+
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNYWluIH0gZnJvbSAnLi9tYWluJ1xuaW1wb3J0IHsgZXJyb3IgfSBmcm9tICcuL3V0aWxzL2xvZydcblxuYXN5bmMgZnVuY3Rpb24gbWFpbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgbmV3IE1haW4oKS5pbml0KClcbn1cblxubWFpbigpLmNhdGNoKChlKSA9PiBlcnJvcihgQW4gZXJyb3IgaGFzIG9jY3VycmVkOiAke2UgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IGV9YCkpXG4iXSwibmFtZXMiOlsibWFpbiIsIk1haW4iLCJpbml0IiwiY2F0Y2giLCJlIiwiZXJyb3IiLCJFcnJvciIsIm1lc3NhZ2UiXSwibWFwcGluZ3MiOiI7Ozs7c0JBQXFCO3FCQUNDO0FBRXRCLGVBQWVBO0lBQ2IsTUFBTSxJQUFJQyxVQUFJLEdBQUdDLElBQUk7QUFDdkI7QUFFQUYsT0FBT0csS0FBSyxDQUFDLENBQUNDLElBQU1DLElBQUFBLFVBQUssRUFBQyxDQUFDLHVCQUF1QixFQUFFRCxhQUFhRSxRQUFRRixFQUFFRyxPQUFPLEdBQUdILEVBQUUsQ0FBQyJ9
|
@@ -1,155 +1,104 @@
|
|
1
1
|
"use strict";
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
}
|
10
|
-
};
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
3
|
+
value: true
|
4
|
+
});
|
5
|
+
Object.defineProperty(exports, "configurePayloadConfig", {
|
6
|
+
enumerable: true,
|
7
|
+
get: function() {
|
8
|
+
return configurePayloadConfig;
|
9
|
+
}
|
10
|
+
});
|
11
|
+
const _fsextra = /*#__PURE__*/ _interop_require_default(require("fs-extra"));
|
12
|
+
const _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
13
|
+
const _log = require("../utils/log");
|
14
|
+
const _packages = require("./packages");
|
15
|
+
function _interop_require_default(obj) {
|
16
|
+
return obj && obj.__esModule ? obj : {
|
17
|
+
default: obj
|
18
|
+
};
|
19
|
+
}
|
20
|
+
async function configurePayloadConfig(args) {
|
21
|
+
if (!args.dbDetails) {
|
22
|
+
return;
|
23
|
+
}
|
24
|
+
// Update package.json
|
25
|
+
const packageJsonPath = _path.default.resolve(args.projectDir, 'package.json');
|
26
|
+
try {
|
27
|
+
const packageObj = await _fsextra.default.readJson(packageJsonPath);
|
28
|
+
packageObj.dependencies['payload'] = '^2.0.0';
|
29
|
+
const dbPackage = _packages.dbPackages[args.dbDetails.type];
|
30
|
+
const bundlerPackage = _packages.bundlerPackages['webpack'];
|
31
|
+
const editorPackage = _packages.editorPackages['slate'];
|
32
|
+
// Delete all other db adapters
|
33
|
+
Object.values(_packages.dbPackages).forEach((p)=>{
|
34
|
+
if (p.packageName !== dbPackage.packageName) {
|
35
|
+
delete packageObj.dependencies[p.packageName];
|
32
36
|
}
|
33
|
-
|
34
|
-
|
35
|
-
|
37
|
+
});
|
38
|
+
packageObj.dependencies[dbPackage.packageName] = dbPackage.version;
|
39
|
+
packageObj.dependencies[bundlerPackage.packageName] = bundlerPackage.version;
|
40
|
+
packageObj.dependencies[editorPackage.packageName] = editorPackage.version;
|
41
|
+
await _fsextra.default.writeJson(packageJsonPath, packageObj, {
|
42
|
+
spaces: 2
|
43
|
+
});
|
44
|
+
} catch (err) {
|
45
|
+
(0, _log.warning)('Unable to update name in package.json');
|
36
46
|
}
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
47
|
+
try {
|
48
|
+
const possiblePaths = [
|
49
|
+
_path.default.resolve(args.projectDir, 'src/payload.config.ts'),
|
50
|
+
_path.default.resolve(args.projectDir, 'src/payload/payload.config.ts')
|
51
|
+
];
|
52
|
+
let payloadConfigPath;
|
53
|
+
possiblePaths.forEach((p)=>{
|
54
|
+
if (_fsextra.default.pathExistsSync(p) && !payloadConfigPath) {
|
55
|
+
payloadConfigPath = p;
|
56
|
+
}
|
57
|
+
});
|
58
|
+
if (!payloadConfigPath) {
|
59
|
+
(0, _log.warning)('Unable to update payload.config.ts with plugins');
|
60
|
+
return;
|
43
61
|
}
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
packageObj_1 = _a.sent();
|
73
|
-
packageObj_1.dependencies['payload'] = '^2.0.0';
|
74
|
-
dbPackage_1 = packages_1.dbPackages[args.dbDetails.type];
|
75
|
-
bundlerPackage = packages_1.bundlerPackages['webpack'];
|
76
|
-
editorPackage = packages_1.editorPackages['slate'];
|
77
|
-
// Delete all other db adapters
|
78
|
-
Object.values(packages_1.dbPackages).forEach(function (p) {
|
79
|
-
if (p.packageName !== dbPackage_1.packageName) {
|
80
|
-
delete packageObj_1.dependencies[p.packageName];
|
81
|
-
}
|
82
|
-
});
|
83
|
-
packageObj_1.dependencies[dbPackage_1.packageName] = dbPackage_1.version;
|
84
|
-
packageObj_1.dependencies[bundlerPackage.packageName] = bundlerPackage.version;
|
85
|
-
packageObj_1.dependencies[editorPackage.packageName] = editorPackage.version;
|
86
|
-
return [4 /*yield*/, fs_extra_1.default.writeJson(packageJsonPath, packageObj_1, { spaces: 2 })];
|
87
|
-
case 3:
|
88
|
-
_a.sent();
|
89
|
-
return [3 /*break*/, 5];
|
90
|
-
case 4:
|
91
|
-
err_1 = _a.sent();
|
92
|
-
(0, log_1.warning)('Unable to update name in package.json');
|
93
|
-
return [3 /*break*/, 5];
|
94
|
-
case 5:
|
95
|
-
try {
|
96
|
-
possiblePaths = [
|
97
|
-
path_1.default.resolve(args.projectDir, 'src/payload.config.ts'),
|
98
|
-
path_1.default.resolve(args.projectDir, 'src/payload/payload.config.ts'),
|
99
|
-
];
|
100
|
-
possiblePaths.forEach(function (p) {
|
101
|
-
if (fs_extra_1.default.pathExistsSync(p) && !payloadConfigPath_1) {
|
102
|
-
payloadConfigPath_1 = p;
|
103
|
-
}
|
104
|
-
});
|
105
|
-
if (!payloadConfigPath_1) {
|
106
|
-
(0, log_1.warning)('Unable to update payload.config.ts with plugins');
|
107
|
-
return [2 /*return*/];
|
108
|
-
}
|
109
|
-
configContent = fs_extra_1.default.readFileSync(payloadConfigPath_1, 'utf-8');
|
110
|
-
configLines_1 = configContent.split('\n');
|
111
|
-
dbReplacement_1 = packages_1.dbPackages[args.dbDetails.type];
|
112
|
-
bundlerReplacement_1 = packages_1.bundlerPackages['webpack'];
|
113
|
-
editorReplacement_1 = packages_1.editorPackages['slate'];
|
114
|
-
configLines_1.forEach(function (l, i) {
|
115
|
-
if (l.includes('// database-adapter-import')) {
|
116
|
-
configLines_1[i] = dbReplacement_1.importReplacement;
|
117
|
-
}
|
118
|
-
if (l.includes('// bundler-import')) {
|
119
|
-
configLines_1[i] = bundlerReplacement_1.importReplacement;
|
120
|
-
}
|
121
|
-
if (l.includes('// bundler-config')) {
|
122
|
-
configLines_1[i] = bundlerReplacement_1.configReplacement;
|
123
|
-
}
|
124
|
-
if (l.includes('// editor-import')) {
|
125
|
-
configLines_1[i] = editorReplacement_1.importReplacement;
|
126
|
-
}
|
127
|
-
if (l.includes('// editor-config')) {
|
128
|
-
configLines_1[i] = editorReplacement_1.configReplacement;
|
129
|
-
}
|
130
|
-
if (l.includes('// database-adapter-config-start')) {
|
131
|
-
dbConfigStartLineIndex_1 = i;
|
132
|
-
}
|
133
|
-
if (l.includes('// database-adapter-config-end')) {
|
134
|
-
dbConfigEndLineIndex_1 = i;
|
135
|
-
}
|
136
|
-
});
|
137
|
-
if (!dbConfigStartLineIndex_1 || !dbConfigEndLineIndex_1) {
|
138
|
-
(0, log_1.warning)('Unable to update payload.config.ts with database adapter import');
|
139
|
-
}
|
140
|
-
else {
|
141
|
-
// Replaces lines between `// database-adapter-config-start` and `// database-adapter-config-end`
|
142
|
-
configLines_1.splice.apply(configLines_1, __spreadArray([dbConfigStartLineIndex_1,
|
143
|
-
dbConfigEndLineIndex_1 - dbConfigStartLineIndex_1 + 1], dbReplacement_1.configReplacement, false));
|
144
|
-
}
|
145
|
-
fs_extra_1.default.writeFileSync(payloadConfigPath_1, configLines_1.join('\n'));
|
146
|
-
}
|
147
|
-
catch (err) {
|
148
|
-
(0, log_1.warning)('Unable to update payload.config.ts with plugins');
|
149
|
-
}
|
150
|
-
return [2 /*return*/];
|
62
|
+
const configContent = _fsextra.default.readFileSync(payloadConfigPath, 'utf-8');
|
63
|
+
const configLines = configContent.split('\n');
|
64
|
+
const dbReplacement = _packages.dbPackages[args.dbDetails.type];
|
65
|
+
const bundlerReplacement = _packages.bundlerPackages['webpack'];
|
66
|
+
const editorReplacement = _packages.editorPackages['slate'];
|
67
|
+
let dbConfigStartLineIndex;
|
68
|
+
let dbConfigEndLineIndex;
|
69
|
+
configLines.forEach((l, i)=>{
|
70
|
+
if (l.includes('// database-adapter-import')) {
|
71
|
+
configLines[i] = dbReplacement.importReplacement;
|
72
|
+
}
|
73
|
+
if (l.includes('// bundler-import')) {
|
74
|
+
configLines[i] = bundlerReplacement.importReplacement;
|
75
|
+
}
|
76
|
+
if (l.includes('// bundler-config')) {
|
77
|
+
configLines[i] = bundlerReplacement.configReplacement;
|
78
|
+
}
|
79
|
+
if (l.includes('// editor-import')) {
|
80
|
+
configLines[i] = editorReplacement.importReplacement;
|
81
|
+
}
|
82
|
+
if (l.includes('// editor-config')) {
|
83
|
+
configLines[i] = editorReplacement.configReplacement;
|
84
|
+
}
|
85
|
+
if (l.includes('// database-adapter-config-start')) {
|
86
|
+
dbConfigStartLineIndex = i;
|
87
|
+
}
|
88
|
+
if (l.includes('// database-adapter-config-end')) {
|
89
|
+
dbConfigEndLineIndex = i;
|
151
90
|
}
|
152
91
|
});
|
153
|
-
|
92
|
+
if (!dbConfigStartLineIndex || !dbConfigEndLineIndex) {
|
93
|
+
(0, _log.warning)('Unable to update payload.config.ts with database adapter import');
|
94
|
+
} else {
|
95
|
+
// Replaces lines between `// database-adapter-config-start` and `// database-adapter-config-end`
|
96
|
+
configLines.splice(dbConfigStartLineIndex, dbConfigEndLineIndex - dbConfigStartLineIndex + 1, ...dbReplacement.configReplacement);
|
97
|
+
}
|
98
|
+
_fsextra.default.writeFileSync(payloadConfigPath, configLines.join('\n'));
|
99
|
+
} catch (err) {
|
100
|
+
(0, _log.warning)('Unable to update payload.config.ts with plugins');
|
101
|
+
}
|
154
102
|
}
|
155
|
-
|
103
|
+
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY29uZmlndXJlLXBheWxvYWQtY29uZmlnLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmc2UgZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuXG5pbXBvcnQgdHlwZSB7IERiRGV0YWlscyB9IGZyb20gJy4uL3R5cGVzJ1xuXG5pbXBvcnQgeyB3YXJuaW5nIH0gZnJvbSAnLi4vdXRpbHMvbG9nJ1xuaW1wb3J0IHsgYnVuZGxlclBhY2thZ2VzLCBkYlBhY2thZ2VzLCBlZGl0b3JQYWNrYWdlcyB9IGZyb20gJy4vcGFja2FnZXMnXG5cbi8qKiBVcGRhdGUgcGF5bG9hZCBjb25maWcgd2l0aCBuZWNlc3NhcnkgaW1wb3J0cyBhbmQgYWRhcHRlcnMgKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb25maWd1cmVQYXlsb2FkQ29uZmlnKGFyZ3M6IHtcbiAgZGJEZXRhaWxzOiBEYkRldGFpbHMgfCB1bmRlZmluZWRcbiAgcHJvamVjdERpcjogc3RyaW5nXG59KTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghYXJncy5kYkRldGFpbHMpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIFVwZGF0ZSBwYWNrYWdlLmpzb25cbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aC5yZXNvbHZlKGFyZ3MucHJvamVjdERpciwgJ3BhY2thZ2UuanNvbicpXG4gIHRyeSB7XG4gICAgY29uc3QgcGFja2FnZU9iaiA9IGF3YWl0IGZzZS5yZWFkSnNvbihwYWNrYWdlSnNvblBhdGgpXG5cbiAgICBwYWNrYWdlT2JqLmRlcGVuZGVuY2llc1sncGF5bG9hZCddID0gJ14yLjAuMCdcblxuICAgIGNvbnN0IGRiUGFja2FnZSA9IGRiUGFja2FnZXNbYXJncy5kYkRldGFpbHMudHlwZV1cbiAgICBjb25zdCBidW5kbGVyUGFja2FnZSA9IGJ1bmRsZXJQYWNrYWdlc1snd2VicGFjayddXG4gICAgY29uc3QgZWRpdG9yUGFja2FnZSA9IGVkaXRvclBhY2thZ2VzWydzbGF0ZSddXG5cbiAgICAvLyBEZWxldGUgYWxsIG90aGVyIGRiIGFkYXB0ZXJzXG4gICAgT2JqZWN0LnZhbHVlcyhkYlBhY2thZ2VzKS5mb3JFYWNoKChwKSA9PiB7XG4gICAgICBpZiAocC5wYWNrYWdlTmFtZSAhPT0gZGJQYWNrYWdlLnBhY2thZ2VOYW1lKSB7XG4gICAgICAgIGRlbGV0ZSBwYWNrYWdlT2JqLmRlcGVuZGVuY2llc1twLnBhY2thZ2VOYW1lXVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBwYWNrYWdlT2JqLmRlcGVuZGVuY2llc1tkYlBhY2thZ2UucGFja2FnZU5hbWVdID0gZGJQYWNrYWdlLnZlcnNpb25cbiAgICBwYWNrYWdlT2JqLmRlcGVuZGVuY2llc1tidW5kbGVyUGFja2FnZS5wYWNrYWdlTmFtZV0gPSBidW5kbGVyUGFja2FnZS52ZXJzaW9uXG4gICAgcGFja2FnZU9iai5kZXBlbmRlbmNpZXNbZWRpdG9yUGFja2FnZS5wYWNrYWdlTmFtZV0gPSBlZGl0b3JQYWNrYWdlLnZlcnNpb25cblxuICAgIGF3YWl0IGZzZS53cml0ZUpzb24ocGFja2FnZUpzb25QYXRoLCBwYWNrYWdlT2JqLCB7IHNwYWNlczogMiB9KVxuICB9IGNhdGNoIChlcnI6IHVua25vd24pIHtcbiAgICB3YXJuaW5nKCdVbmFibGUgdG8gdXBkYXRlIG5hbWUgaW4gcGFja2FnZS5qc29uJylcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcG9zc2libGVQYXRocyA9IFtcbiAgICAgIHBhdGgucmVzb2x2ZShhcmdzLnByb2plY3REaXIsICdzcmMvcGF5bG9hZC5jb25maWcudHMnKSxcbiAgICAgIHBhdGgucmVzb2x2ZShhcmdzLnByb2plY3REaXIsICdzcmMvcGF5bG9hZC9wYXlsb2FkLmNvbmZpZy50cycpLFxuICAgIF1cblxuICAgIGxldCBwYXlsb2FkQ29uZmlnUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkXG5cbiAgICBwb3NzaWJsZVBhdGhzLmZvckVhY2goKHApID0+IHtcbiAgICAgIGlmIChmc2UucGF0aEV4aXN0c1N5bmMocCkgJiYgIXBheWxvYWRDb25maWdQYXRoKSB7XG4gICAgICAgIHBheWxvYWRDb25maWdQYXRoID0gcFxuICAgICAgfVxuICAgIH0pXG5cbiAgICBpZiAoIXBheWxvYWRDb25maWdQYXRoKSB7XG4gICAgICB3YXJuaW5nKCdVbmFibGUgdG8gdXBkYXRlIHBheWxvYWQuY29uZmlnLnRzIHdpdGggcGx1Z2lucycpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBjb25maWdDb250ZW50ID0gZnNlLnJlYWRGaWxlU3luYyhwYXlsb2FkQ29uZmlnUGF0aCwgJ3V0Zi04JylcbiAgICBjb25zdCBjb25maWdMaW5lcyA9IGNvbmZpZ0NvbnRlbnQuc3BsaXQoJ1xcbicpXG5cbiAgICBjb25zdCBkYlJlcGxhY2VtZW50ID0gZGJQYWNrYWdlc1thcmdzLmRiRGV0YWlscy50eXBlXVxuICAgIGNvbnN0IGJ1bmRsZXJSZXBsYWNlbWVudCA9IGJ1bmRsZXJQYWNrYWdlc1snd2VicGFjayddXG4gICAgY29uc3QgZWRpdG9yUmVwbGFjZW1lbnQgPSBlZGl0b3JQYWNrYWdlc1snc2xhdGUnXVxuXG4gICAgbGV0IGRiQ29uZmlnU3RhcnRMaW5lSW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZFxuICAgIGxldCBkYkNvbmZpZ0VuZExpbmVJbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkXG5cbiAgICBjb25maWdMaW5lcy5mb3JFYWNoKChsLCBpKSA9PiB7XG4gICAgICBpZiAobC5pbmNsdWRlcygnLy8gZGF0YWJhc2UtYWRhcHRlci1pbXBvcnQnKSkge1xuICAgICAgICBjb25maWdMaW5lc1tpXSA9IGRiUmVwbGFjZW1lbnQuaW1wb3J0UmVwbGFjZW1lbnRcbiAgICAgIH1cbiAgICAgIGlmIChsLmluY2x1ZGVzKCcvLyBidW5kbGVyLWltcG9ydCcpKSB7XG4gICAgICAgIGNvbmZpZ0xpbmVzW2ldID0gYnVuZGxlclJlcGxhY2VtZW50LmltcG9ydFJlcGxhY2VtZW50XG4gICAgICB9XG5cbiAgICAgIGlmIChsLmluY2x1ZGVzKCcvLyBidW5kbGVyLWNvbmZpZycpKSB7XG4gICAgICAgIGNvbmZpZ0xpbmVzW2ldID0gYnVuZGxlclJlcGxhY2VtZW50LmNvbmZpZ1JlcGxhY2VtZW50XG4gICAgICB9XG5cbiAgICAgIGlmIChsLmluY2x1ZGVzKCcvLyBlZGl0b3ItaW1wb3J0JykpIHtcbiAgICAgICAgY29uZmlnTGluZXNbaV0gPSBlZGl0b3JSZXBsYWNlbWVudC5pbXBvcnRSZXBsYWNlbWVudFxuICAgICAgfVxuXG4gICAgICBpZiAobC5pbmNsdWRlcygnLy8gZWRpdG9yLWNvbmZpZycpKSB7XG4gICAgICAgIGNvbmZpZ0xpbmVzW2ldID0gZWRpdG9yUmVwbGFjZW1lbnQuY29uZmlnUmVwbGFjZW1lbnRcbiAgICAgIH1cblxuICAgICAgaWYgKGwuaW5jbHVkZXMoJy8vIGRhdGFiYXNlLWFkYXB0ZXItY29uZmlnLXN0YXJ0JykpIHtcbiAgICAgICAgZGJDb25maWdTdGFydExpbmVJbmRleCA9IGlcbiAgICAgIH1cbiAgICAgIGlmIChsLmluY2x1ZGVzKCcvLyBkYXRhYmFzZS1hZGFwdGVyLWNvbmZpZy1lbmQnKSkge1xuICAgICAgICBkYkNvbmZpZ0VuZExpbmVJbmRleCA9IGlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgaWYgKCFkYkNvbmZpZ1N0YXJ0TGluZUluZGV4IHx8ICFkYkNvbmZpZ0VuZExpbmVJbmRleCkge1xuICAgICAgd2FybmluZygnVW5hYmxlIHRvIHVwZGF0ZSBwYXlsb2FkLmNvbmZpZy50cyB3aXRoIGRhdGFiYXNlIGFkYXB0ZXIgaW1wb3J0JylcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVwbGFjZXMgbGluZXMgYmV0d2VlbiBgLy8gZGF0YWJhc2UtYWRhcHRlci1jb25maWctc3RhcnRgIGFuZCBgLy8gZGF0YWJhc2UtYWRhcHRlci1jb25maWctZW5kYFxuICAgICAgY29uZmlnTGluZXMuc3BsaWNlKFxuICAgICAgICBkYkNvbmZpZ1N0YXJ0TGluZUluZGV4LFxuICAgICAgICBkYkNvbmZpZ0VuZExpbmVJbmRleCAtIGRiQ29uZmlnU3RhcnRMaW5lSW5kZXggKyAxLFxuICAgICAgICAuLi5kYlJlcGxhY2VtZW50LmNvbmZpZ1JlcGxhY2VtZW50LFxuICAgICAgKVxuICAgIH1cblxuICAgIGZzZS53cml0ZUZpbGVTeW5jKHBheWxvYWRDb25maWdQYXRoLCBjb25maWdMaW5lcy5qb2luKCdcXG4nKSlcbiAgfSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG4gICAgd2FybmluZygnVW5hYmxlIHRvIHVwZGF0ZSBwYXlsb2FkLmNvbmZpZy50cyB3aXRoIHBsdWdpbnMnKVxuICB9XG59XG4iXSwibmFtZXMiOlsiY29uZmlndXJlUGF5bG9hZENvbmZpZyIsImFyZ3MiLCJkYkRldGFpbHMiLCJwYWNrYWdlSnNvblBhdGgiLCJwYXRoIiwicmVzb2x2ZSIsInByb2plY3REaXIiLCJwYWNrYWdlT2JqIiwiZnNlIiwicmVhZEpzb24iLCJkZXBlbmRlbmNpZXMiLCJkYlBhY2thZ2UiLCJkYlBhY2thZ2VzIiwidHlwZSIsImJ1bmRsZXJQYWNrYWdlIiwiYnVuZGxlclBhY2thZ2VzIiwiZWRpdG9yUGFja2FnZSIsImVkaXRvclBhY2thZ2VzIiwiT2JqZWN0IiwidmFsdWVzIiwiZm9yRWFjaCIsInAiLCJwYWNrYWdlTmFtZSIsInZlcnNpb24iLCJ3cml0ZUpzb24iLCJzcGFjZXMiLCJlcnIiLCJ3YXJuaW5nIiwicG9zc2libGVQYXRocyIsInBheWxvYWRDb25maWdQYXRoIiwicGF0aEV4aXN0c1N5bmMiLCJjb25maWdDb250ZW50IiwicmVhZEZpbGVTeW5jIiwiY29uZmlnTGluZXMiLCJzcGxpdCIsImRiUmVwbGFjZW1lbnQiLCJidW5kbGVyUmVwbGFjZW1lbnQiLCJlZGl0b3JSZXBsYWNlbWVudCIsImRiQ29uZmlnU3RhcnRMaW5lSW5kZXgiLCJkYkNvbmZpZ0VuZExpbmVJbmRleCIsImwiLCJpIiwiaW5jbHVkZXMiLCJpbXBvcnRSZXBsYWNlbWVudCIsImNv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
|