@brainfish-ai/devdoc 0.1.32 → 0.1.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ai-agents/.claude/skills/blame-doc/SKILL.md +171 -0
- package/ai-agents/.claude/skills/bootstrap-docs/SKILL.md +519 -64
- package/ai-agents/.claude/skills/check-docs/SKILL.md +107 -12
- package/ai-agents/.claude/skills/commit-doc/SKILL.md +214 -0
- package/ai-agents/.claude/skills/create-doc/SKILL.md +198 -0
- package/ai-agents/.claude/skills/delete-doc/SKILL.md +164 -0
- package/ai-agents/.claude/skills/update-doc/SKILL.md +219 -0
- package/ai-agents/.cursor/rules/devdoc-blame.mdc +114 -0
- package/ai-agents/.cursor/rules/devdoc-bootstrap.mdc +207 -41
- package/ai-agents/.cursor/rules/devdoc-commit.mdc +103 -0
- package/ai-agents/.cursor/rules/devdoc-create.mdc +89 -0
- package/ai-agents/.cursor/rules/devdoc-delete.mdc +101 -0
- package/ai-agents/.cursor/rules/devdoc-update.mdc +95 -0
- package/ai-agents/.devdoc/context.json +66 -0
- package/ai-agents/.devdoc/templates/api-reference.md +211 -0
- package/ai-agents/.devdoc/templates/guide.md +133 -0
- package/ai-agents/.devdoc/templates/quickstart.md +179 -0
- package/ai-agents/.devdoc/templates/troubleshooting.md +215 -0
- package/ai-agents/.devdoc/templates/tutorial.md +212 -0
- package/ai-agents/CLAUDE.md +15 -3
- package/ai-agents/schemas/context.schema.json +259 -0
- package/dist/cli/commands/ai.d.ts +1 -0
- package/dist/cli/commands/ai.js +115 -46
- package/dist/cli/commands/create.d.ts +12 -0
- package/dist/cli/commands/create.js +110 -62
- package/dist/cli/commands/init.js +11 -7
- package/dist/cli/index.js +4 -2
- package/package.json +1 -1
- package/renderer/components/docs-viewer/sidebar/index.tsx +118 -87
- package/ai-agents/.claude/skills/create-doc-page/SKILL.md +0 -57
- package/ai-agents/.claude/skills/docs-from-code/SKILL.md +0 -73
- package/ai-agents/.claude/skills/generate-api-docs/SKILL.md +0 -94
- package/ai-agents/.claude/skills/sync-docs/SKILL.md +0 -112
- package/ai-agents/.claude/skills/update-docs-json/SKILL.md +0 -60
- package/ai-agents/.cursor/rules/devdoc-sync.mdc +0 -70
package/dist/cli/commands/ai.js
CHANGED
|
@@ -87,19 +87,23 @@ const CLAUDE_SKILLS = [
|
|
|
87
87
|
'bootstrap-docs',
|
|
88
88
|
'migrate-docs',
|
|
89
89
|
'import-api-spec',
|
|
90
|
-
'sync-docs',
|
|
91
90
|
'check-docs',
|
|
92
|
-
'
|
|
93
|
-
'
|
|
94
|
-
'
|
|
95
|
-
'
|
|
91
|
+
'blame-doc',
|
|
92
|
+
'create-doc',
|
|
93
|
+
'update-doc',
|
|
94
|
+
'delete-doc',
|
|
95
|
+
'commit-doc',
|
|
96
96
|
];
|
|
97
97
|
// Cursor rules to create
|
|
98
98
|
const CURSOR_RULES = [
|
|
99
99
|
'devdoc.mdc',
|
|
100
100
|
'devdoc-bootstrap.mdc',
|
|
101
101
|
'devdoc-migrate.mdc',
|
|
102
|
-
'devdoc-
|
|
102
|
+
'devdoc-blame.mdc',
|
|
103
|
+
'devdoc-create.mdc',
|
|
104
|
+
'devdoc-update.mdc',
|
|
105
|
+
'devdoc-delete.mdc',
|
|
106
|
+
'devdoc-commit.mdc',
|
|
103
107
|
];
|
|
104
108
|
/**
|
|
105
109
|
* Get the AI agents template directory path (handles both development and installed package scenarios)
|
|
@@ -125,27 +129,29 @@ function getTemplateDir() {
|
|
|
125
129
|
}
|
|
126
130
|
/**
|
|
127
131
|
* Copy CLAUDE.md to project root
|
|
132
|
+
* Returns 'created' | 'updated' | 'skipped'
|
|
128
133
|
*/
|
|
129
134
|
function copyClaudeMd(projectPath, templateDir) {
|
|
130
135
|
const sourcePath = path_1.default.join(templateDir, 'CLAUDE.md');
|
|
131
136
|
const destPath = path_1.default.join(projectPath, 'CLAUDE.md');
|
|
132
137
|
if (!fs_extra_1.default.existsSync(sourcePath)) {
|
|
133
|
-
|
|
134
|
-
return false;
|
|
138
|
+
return 'skipped';
|
|
135
139
|
}
|
|
140
|
+
const existed = fs_extra_1.default.existsSync(destPath);
|
|
136
141
|
fs_extra_1.default.copySync(sourcePath, destPath);
|
|
137
|
-
return
|
|
142
|
+
return existed ? 'updated' : 'created';
|
|
138
143
|
}
|
|
139
144
|
/**
|
|
140
145
|
* Copy Claude Code skills to .claude/skills/
|
|
146
|
+
* Returns array of { skill, status: 'created' | 'updated' }
|
|
141
147
|
*/
|
|
142
148
|
function copyClaudeSkills(projectPath, templateDir) {
|
|
143
|
-
const
|
|
149
|
+
const results = [];
|
|
144
150
|
const sourceSkillsDir = path_1.default.join(templateDir, '.claude', 'skills');
|
|
145
151
|
const destSkillsDir = path_1.default.join(projectPath, '.claude', 'skills');
|
|
146
152
|
if (!fs_extra_1.default.existsSync(sourceSkillsDir)) {
|
|
147
153
|
logger_1.logger.warn('Claude skills template directory not found');
|
|
148
|
-
return
|
|
154
|
+
return results;
|
|
149
155
|
}
|
|
150
156
|
// Ensure destination directory exists
|
|
151
157
|
fs_extra_1.default.ensureDirSync(destSkillsDir);
|
|
@@ -153,22 +159,24 @@ function copyClaudeSkills(projectPath, templateDir) {
|
|
|
153
159
|
const sourceDir = path_1.default.join(sourceSkillsDir, skill);
|
|
154
160
|
const destDir = path_1.default.join(destSkillsDir, skill);
|
|
155
161
|
if (fs_extra_1.default.existsSync(sourceDir)) {
|
|
162
|
+
const existed = fs_extra_1.default.existsSync(destDir);
|
|
156
163
|
fs_extra_1.default.copySync(sourceDir, destDir);
|
|
157
|
-
|
|
164
|
+
results.push({ skill, status: existed ? 'updated' : 'created' });
|
|
158
165
|
}
|
|
159
166
|
}
|
|
160
|
-
return
|
|
167
|
+
return results;
|
|
161
168
|
}
|
|
162
169
|
/**
|
|
163
170
|
* Copy Cursor rules to .cursor/rules/
|
|
171
|
+
* Returns array of { rule, status: 'created' | 'updated' }
|
|
164
172
|
*/
|
|
165
173
|
function copyCursorRules(projectPath, templateDir) {
|
|
166
|
-
const
|
|
174
|
+
const results = [];
|
|
167
175
|
const sourceRulesDir = path_1.default.join(templateDir, '.cursor', 'rules');
|
|
168
176
|
const destRulesDir = path_1.default.join(projectPath, '.cursor', 'rules');
|
|
169
177
|
if (!fs_extra_1.default.existsSync(sourceRulesDir)) {
|
|
170
178
|
logger_1.logger.warn('Cursor rules template directory not found');
|
|
171
|
-
return
|
|
179
|
+
return results;
|
|
172
180
|
}
|
|
173
181
|
// Ensure destination directory exists
|
|
174
182
|
fs_extra_1.default.ensureDirSync(destRulesDir);
|
|
@@ -176,17 +184,36 @@ function copyCursorRules(projectPath, templateDir) {
|
|
|
176
184
|
const sourcePath = path_1.default.join(sourceRulesDir, rule);
|
|
177
185
|
const destPath = path_1.default.join(destRulesDir, rule);
|
|
178
186
|
if (fs_extra_1.default.existsSync(sourcePath)) {
|
|
187
|
+
const existed = fs_extra_1.default.existsSync(destPath);
|
|
179
188
|
fs_extra_1.default.copySync(sourcePath, destPath);
|
|
180
|
-
|
|
189
|
+
results.push({ rule, status: existed ? 'updated' : 'created' });
|
|
181
190
|
}
|
|
182
191
|
}
|
|
183
|
-
return
|
|
192
|
+
return results;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Check if AI tools are already installed
|
|
196
|
+
*/
|
|
197
|
+
function checkExistingInstallation(projectPath) {
|
|
198
|
+
const claudeDir = path_1.default.join(projectPath, '.claude', 'skills');
|
|
199
|
+
const cursorDir = path_1.default.join(projectPath, '.cursor', 'rules');
|
|
200
|
+
return {
|
|
201
|
+
claude: fs_extra_1.default.existsSync(claudeDir) && fs_extra_1.default.readdirSync(claudeDir).length > 0,
|
|
202
|
+
cursor: fs_extra_1.default.existsSync(cursorDir) && fs_extra_1.default.readdirSync(cursorDir).some(f => f.startsWith('devdoc')),
|
|
203
|
+
};
|
|
184
204
|
}
|
|
185
205
|
async function ai(options) {
|
|
186
|
-
console.log();
|
|
187
|
-
logger_1.logger.info('DevDoc AI Agent Setup');
|
|
188
206
|
console.log();
|
|
189
207
|
const projectPath = process.cwd();
|
|
208
|
+
const existing = checkExistingInstallation(projectPath);
|
|
209
|
+
const isUpdate = options.update || existing.claude || existing.cursor;
|
|
210
|
+
if (isUpdate) {
|
|
211
|
+
logger_1.logger.info('DevDoc AI Agent Update');
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
logger_1.logger.info('DevDoc AI Agent Setup');
|
|
215
|
+
}
|
|
216
|
+
console.log();
|
|
190
217
|
// Check if this is a DevDoc project
|
|
191
218
|
const docsJsonPath = path_1.default.join(projectPath, 'docs.json');
|
|
192
219
|
const hasDocsJson = fs_extra_1.default.existsSync(docsJsonPath);
|
|
@@ -206,56 +233,94 @@ async function ai(options) {
|
|
|
206
233
|
// Get tool selection if not provided
|
|
207
234
|
let tool = options.tool || 'both';
|
|
208
235
|
if (!options.tool) {
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
236
|
+
// If updating, default to updating what's already installed
|
|
237
|
+
if (isUpdate && existing.claude && !existing.cursor) {
|
|
238
|
+
tool = 'claude';
|
|
239
|
+
}
|
|
240
|
+
else if (isUpdate && existing.cursor && !existing.claude) {
|
|
241
|
+
tool = 'cursor';
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
const toolChoices = [
|
|
245
|
+
{ value: 'both', label: 'Both - Claude Code and Cursor' },
|
|
246
|
+
{ value: 'claude', label: 'Claude Code - Skills and CLAUDE.md' },
|
|
247
|
+
{ value: 'cursor', label: 'Cursor - Rules (.cursor/rules/)' },
|
|
248
|
+
];
|
|
249
|
+
tool = await promptSelect('Which AI tool do you use?', toolChoices);
|
|
250
|
+
}
|
|
215
251
|
}
|
|
216
252
|
console.log();
|
|
217
|
-
|
|
253
|
+
if (isUpdate) {
|
|
254
|
+
logger_1.logger.info('Updating AI agent configuration...');
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
logger_1.logger.info('Setting up AI agent configuration...');
|
|
258
|
+
}
|
|
218
259
|
console.log();
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
claudeSkills: [],
|
|
222
|
-
cursorRules: [],
|
|
223
|
-
};
|
|
260
|
+
let createdCount = 0;
|
|
261
|
+
let updatedCount = 0;
|
|
224
262
|
// Setup Claude Code
|
|
225
263
|
if (tool === 'claude' || tool === 'both') {
|
|
226
264
|
// Copy CLAUDE.md
|
|
227
|
-
|
|
228
|
-
if (
|
|
265
|
+
const claudeMdStatus = copyClaudeMd(projectPath, templateDir);
|
|
266
|
+
if (claudeMdStatus === 'created') {
|
|
229
267
|
logger_1.logger.success('Created CLAUDE.md');
|
|
268
|
+
createdCount++;
|
|
269
|
+
}
|
|
270
|
+
else if (claudeMdStatus === 'updated') {
|
|
271
|
+
logger_1.logger.success('Updated CLAUDE.md');
|
|
272
|
+
updatedCount++;
|
|
230
273
|
}
|
|
231
274
|
// Copy skills
|
|
232
|
-
|
|
233
|
-
for (const skill of
|
|
234
|
-
|
|
275
|
+
const skillResults = copyClaudeSkills(projectPath, templateDir);
|
|
276
|
+
for (const { skill, status } of skillResults) {
|
|
277
|
+
if (status === 'created') {
|
|
278
|
+
logger_1.logger.success(`Created .claude/skills/${skill}/SKILL.md`);
|
|
279
|
+
createdCount++;
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
logger_1.logger.success(`Updated .claude/skills/${skill}/SKILL.md`);
|
|
283
|
+
updatedCount++;
|
|
284
|
+
}
|
|
235
285
|
}
|
|
236
286
|
}
|
|
237
287
|
// Setup Cursor
|
|
238
288
|
if (tool === 'cursor' || tool === 'both') {
|
|
239
|
-
|
|
240
|
-
for (const rule of
|
|
241
|
-
|
|
289
|
+
const ruleResults = copyCursorRules(projectPath, templateDir);
|
|
290
|
+
for (const { rule, status } of ruleResults) {
|
|
291
|
+
if (status === 'created') {
|
|
292
|
+
logger_1.logger.success(`Created .cursor/rules/${rule}`);
|
|
293
|
+
createdCount++;
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
logger_1.logger.success(`Updated .cursor/rules/${rule}`);
|
|
297
|
+
updatedCount++;
|
|
298
|
+
}
|
|
242
299
|
}
|
|
243
300
|
}
|
|
244
301
|
// Summary
|
|
245
302
|
console.log();
|
|
246
|
-
|
|
303
|
+
if (updatedCount > 0 && createdCount > 0) {
|
|
304
|
+
logger_1.logger.success(`AI agent configuration complete! (${createdCount} created, ${updatedCount} updated)`);
|
|
305
|
+
}
|
|
306
|
+
else if (updatedCount > 0) {
|
|
307
|
+
logger_1.logger.success(`AI agent configuration updated! (${updatedCount} files)`);
|
|
308
|
+
}
|
|
309
|
+
else {
|
|
310
|
+
logger_1.logger.success('AI agent configuration complete!');
|
|
311
|
+
}
|
|
247
312
|
console.log();
|
|
248
313
|
if (tool === 'claude' || tool === 'both') {
|
|
249
314
|
console.log('Available Claude Code commands:');
|
|
250
315
|
console.log(' /bootstrap-docs - Analyze repo and generate initial documentation');
|
|
251
316
|
console.log(' /migrate-docs - Migrate from Mintlify, Docusaurus, GitBook, etc.');
|
|
252
317
|
console.log(' /import-api-spec - Import OpenAPI, GraphQL, or AsyncAPI specs');
|
|
253
|
-
console.log(' /sync-docs - Find and fix outdated documentation');
|
|
254
318
|
console.log(' /check-docs - Quick health check without changes');
|
|
255
|
-
console.log(' /
|
|
256
|
-
console.log(' /
|
|
257
|
-
console.log(' /
|
|
258
|
-
console.log(' /
|
|
319
|
+
console.log(' /blame-doc - Find duplicates, outdated content, discrepancies');
|
|
320
|
+
console.log(' /create-doc - Create a new documentation page');
|
|
321
|
+
console.log(' /update-doc - Update existing documentation');
|
|
322
|
+
console.log(' /delete-doc - Delete documentation pages');
|
|
323
|
+
console.log(' /commit-doc - Commit documentation changes');
|
|
259
324
|
console.log();
|
|
260
325
|
}
|
|
261
326
|
if (tool === 'cursor' || tool === 'both') {
|
|
@@ -276,5 +341,9 @@ async function ai(options) {
|
|
|
276
341
|
console.log(' Cursor: Ask "generate initial documentation from this repo"');
|
|
277
342
|
}
|
|
278
343
|
console.log();
|
|
344
|
+
if (isUpdate) {
|
|
345
|
+
console.log('Tip: Restart Claude Code or Cursor to load the updated skills/rules.');
|
|
346
|
+
console.log();
|
|
347
|
+
}
|
|
279
348
|
}
|
|
280
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2xpL2NvbW1hbmRzL2FpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBcUxBLGdCQTZHQztBQWxTRCxnREFBd0I7QUFDeEIsd0RBQTBCO0FBQzFCLCtDQUE0QztBQVE1QyxzQ0FBc0M7QUFDdEMsS0FBSyxVQUFVLE1BQU0sQ0FBQyxRQUFnQixFQUFFLFlBQXFCO0lBQzNELE1BQU0sUUFBUSxHQUFHLHdEQUFhLFVBQVUsR0FBQyxDQUFDO0lBQzFDLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUM7UUFDbEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO1FBQ3BCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtLQUN2QixDQUFDLENBQUM7SUFFSCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDN0IsTUFBTSxlQUFlLEdBQUcsWUFBWTtZQUNsQyxDQUFDLENBQUMsR0FBRyxRQUFRLEtBQUssWUFBWSxLQUFLO1lBQ25DLENBQUMsQ0FBQyxHQUFHLFFBQVEsSUFBSSxDQUFDO1FBRXBCLEVBQUUsQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDdEMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxZQUFZLElBQUksRUFBRSxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxLQUFLLFVBQVUsWUFBWSxDQUFDLFFBQWdCLEVBQUUsT0FBMkM7SUFDdkYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUM7SUFDL0IsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0s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LENBQUMsMENBQTBDLENBQUMsQ0FBQztRQUN4RCxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDaEQsT0FBTyxDQUFDLEdBQUcsQ0FBQywwREFBMEQsQ0FBQyxDQUFDO1FBQ3hFLE9BQU8sQ0FBQyxHQUFHLENBQUMsK0NBQStDLENBQUMsQ0FBQztRQUM3RCxPQUFPLENBQUMsR0FBRyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7UUFDdEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1FBQzNELE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM1QixJQUFJLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQ3pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBQ0QsSUFBSSxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUN6QyxPQUFPLENBQUMsR0FBRyxDQUFDLCtEQUErRCxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUNELE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyJztcblxudHlwZSBBSVRvb2wgPSAnY2xhdWRlJyB8ICdjdXJzb3InIHwgJ2JvdGgnO1xuXG5pbnRlcmZhY2UgQUlPcHRpb25zIHtcbiAgdG9vbD86IEFJVG9vbDtcbn1cblxuLy8gU2ltcGxlIHByb21wdCBoZWxwZXIgdXNpbmcgcmVhZGxpbmVcbmFzeW5jIGZ1bmN0aW9uIHByb21wdChxdWVzdGlvbjogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCByZWFkbGluZSA9IGF3YWl0IGltcG9ydCgncmVhZGxpbmUnKTtcbiAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoe1xuICAgIGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuICAgIG91dHB1dDogcHJvY2Vzcy5zdGRvdXQsXG4gIH0pO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IGRpc3BsYXlRdWVzdGlvbiA9IGRlZmF1bHRWYWx1ZSBcbiAgICAgID8gYCR7cXVlc3Rpb259ICgke2RlZmF1bHRWYWx1ZX0pOiBgXG4gICAgICA6IGAke3F1ZXN0aW9ufTogYDtcbiAgICBcbiAgICBybC5xdWVzdGlvbihkaXNwbGF5UXVlc3Rpb24sIChhbnN3ZXIpID0+IHtcbiAgICAgIHJsLmNsb3NlKCk7XG4gICAgICByZXNvbHZlKGFuc3dlci50cmltKCkgfHwgZGVmYXVsdFZhbHVlIHx8ICcnKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByb21wdFNlbGVjdChxdWVzdGlvbjogc3RyaW5nLCBjaG9pY2VzOiB7IHZhbHVlOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfVtdKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc29sZS5sb2coYFxcbiR7cXVlc3Rpb259XFxuYCk7XG4gIGNob2ljZXMuZm9yRWFjaCgoY2hvaWNlLCBpKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCAgJHtpICsgMX0uICR7Y2hvaWNlLmxhYmVsfWApO1xuICB9KTtcbiAgY29uc29sZS5sb2coKTtcbiAgXG4gIGNvbnN0IHJlYWRsaW5lID0gYXdhaXQgaW1wb3J0KCdyZWFkbGluZScpO1xuICBjb25zdCBybCA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7XG4gICAgaW5wdXQ6IHByb2Nlc3Muc3RkaW4sXG4gICAgb3V0cHV0OiBwcm9jZXNzLnN0ZG91dCxcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcmwucXVlc3Rpb24oJ0VudGVyIG51bWJlcjogJywgKGFuc3dlcikgPT4ge1xuICAgICAgcmwuY2xvc2UoKTtcbiAgICAgIGNvbnN0IGluZGV4ID0gcGFyc2VJbnQoYW5zd2VyLnRyaW0oKSwgMTApIC0gMTtcbiAgICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgY2hvaWNlcy5sZW5ndGgpIHtcbiAgICAgICAgcmVzb2x2ZShjaG9pY2VzW2luZGV4XS52YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBEZWZhdWx0IHRvIGZpcnN0IGNob2ljZVxuICAgICAgICByZXNvbHZlKGNob2ljZXNbMF0udmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuLy8gQ2xhdWRlIENvZGUgc2tpbGxzIHRvIGNyZWF0ZVxuY29uc3QgQ0xBVURFX1NLSUxMUyA9IFtcbiAgJ2Jvb3RzdHJhcC1kb2NzJyxcbiAgJ21pZ3JhdGUtZG9jcycsXG4gICdpbXBvcnQtYXBpLXNwZWMnLFxuICAnc3luYy1kb2NzJyxcbiAgJ2NoZWNrLWRvY3MnLFxuICAnY3JlYXRlLWRvYy1wYWdlJyxcbiAgJ3VwZGF0ZS1kb2NzLWpzb24nLFxuICAnZ2VuZXJhdGUtYXBpLWRvY3MnLFxuICAnZG9jcy1mcm9tLWNvZGUnLFxuXTtcblxuLy8gQ3Vyc29yIHJ1bGVzIHRvIGNyZWF0ZVxuY29uc3QgQ1VSU09SX1JVTEVTID0gW1xuICAnZGV2ZG9jLm1kYycsXG4gICdkZXZkb2MtYm9vdHN0cmFwLm1kYycsXG4gICdkZXZkb2MtbWlncmF0ZS5tZGMnLFxuICAnZGV2ZG9jLXN5bmMubWRjJyxcbl07XG5cbi8qKlxuICogR2V0IHRoZSBBSSBhZ2VudHMgdGVtcGxhdGUgZGlyZWN0b3J5IHBhdGggKGhhbmRsZXMgYm90aCBkZXZlbG9wbWVudCBhbmQgaW5zdGFsbGVkIHBhY2thZ2Ugc2NlbmFyaW9zKVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZURpcigpOiBzdHJpbmcge1xuICAvLyBUcnkgcmVsYXRpdmUgdG8gY29tcGlsZWQgZGlzdCAocGFja2FnZXMvZGV2ZG9jL2Rpc3QvY2xpL2NvbW1hbmRzIC0+IHBhY2thZ2VzL2RldmRvYy9haS1hZ2VudHMpXG4gIGxldCB0ZW1wbGF0ZURpciA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICcuLicsICcuLicsICdhaS1hZ2VudHMnKTtcbiAgXG4gIGlmIChmcy5leGlzdHNTeW5jKHRlbXBsYXRlRGlyKSkge1xuICAgIHJldHVybiB0ZW1wbGF0ZURpcjtcbiAgfVxuICBcbiAgLy8gVHJ5IHJlbGF0aXZlIHRvIHNvdXJjZSAocGFja2FnZXMvZGV2ZG9jL3NyYy9jbGkvY29tbWFuZHMgLT4gcGFja2FnZXMvZGV2ZG9jL2FpLWFnZW50cylcbiAgdGVtcGxhdGVEaXIgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAnLi4nLCAnYWktYWdlbnRzJyk7XG4gIFxuICBpZiAoZnMuZXhpc3RzU3luYyh0ZW1wbGF0ZURpcikpIHtcbiAgICByZXR1cm4gdGVtcGxhdGVEaXI7XG4gIH1cbiAgXG4gIC8vIFRyeSBkZXZkb2MvdGVtcGxhdGVzIGF0IHJlcG8gcm9vdCAoZGV2ZWxvcG1lbnQgLSBtb25vcmVwbyBzdHJ1Y3R1cmUpXG4gIC8vIF9fZGlybmFtZSBpcyBwYWNrYWdlcy9kZXZkb2MvZGlzdC9jbGkvY29tbWFuZHMgLT4gZ28gdXAgNSBsZXZlbHMgdG8gcmVwbyByb290XG4gIHRlbXBsYXRlRGlyID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJy4uJywgJy4uJywgJy4uJywgJ2RldmRvYycsICd0ZW1wbGF0ZXMnLCAnc3RhcnRlcicpO1xuICBcbiAgaWYgKGZzLmV4aXN0c1N5bmModGVtcGxhdGVEaXIpKSB7XG4gICAgcmV0dXJuIHRlbXBsYXRlRGlyO1xuICB9XG4gIFxuICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIHRlbXBsYXRlIGRpcmVjdG9yeScpO1xufVxuXG4vKipcbiAqIENvcHkgQ0xBVURFLm1kIHRvIHByb2plY3Qgcm9vdFxuICovXG5mdW5jdGlvbiBjb3B5Q2xhdWRlTWQocHJvamVjdFBhdGg6IHN0cmluZywgdGVtcGxhdGVEaXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBzb3VyY2VQYXRoID0gcGF0aC5qb2luKHRlbXBsYXRlRGlyLCAnQ0xBVURFLm1kJyk7XG4gIGNvbnN0IGRlc3RQYXRoID0gcGF0aC5qb2luKHByb2plY3RQYXRoLCAnQ0xBVURFLm1kJyk7XG4gIFxuICBpZiAoIWZzLmV4aXN0c1N5bmMoc291cmNlUGF0aCkpIHtcbiAgICBsb2dnZXIud2FybignQ0xBVURFLm1kIHRlbXBsYXRlIG5vdCBmb3VuZCcpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBcbiAgZnMuY29weVN5bmMoc291cmNlUGF0aCwgZGVzdFBhdGgpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBDb3B5IENsYXVkZSBDb2RlIHNraWxscyB0byAuY2xhdWRlL3NraWxscy9cbiAqL1xuZnVuY3Rpb24gY29weUNsYXVkZVNraWxscyhwcm9qZWN0UGF0aDogc3RyaW5nLCB0ZW1wbGF0ZURpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICBjb25zdCBjb3BpZWQ6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHNvdXJjZVNraWxsc0RpciA9IHBhdGguam9pbih0ZW1wbGF0ZURpciwgJy5jbGF1ZGUnLCAnc2tpbGxzJyk7XG4gIGNvbnN0IGRlc3RTa2lsbHNEaXIgPSBwYXRoLmpvaW4ocHJvamVjdFBhdGgsICcuY2xhdWRlJywgJ3NraWxscycpO1xuICBcbiAgaWYgKCFmcy5leGlzdHNTeW5jKHNvdXJjZVNraWxsc0RpcikpIHtcbiAgICBsb2dnZXIud2FybignQ2xhdWRlIHNraWxscyB0ZW1wbGF0ZSBkaXJlY3Rvcnkgbm90IGZvdW5kJyk7XG4gICAgcmV0dXJuIGNvcGllZDtcbiAgfVxuICBcbiAgLy8gRW5zdXJlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSBleGlzdHNcbiAgZnMuZW5zdXJlRGlyU3luYyhkZXN0U2tpbGxzRGlyKTtcbiAgXG4gIGZvciAoY29uc3Qgc2tpbGwgb2YgQ0xBVURFX1NLSUxMUykge1xuICAgIGNvbnN0IHNvdXJjZURpciA9IHBhdGguam9pbihzb3VyY2VTa2lsbHNEaXIsIHNraWxsKTtcbiAgICBjb25zdCBkZXN0RGlyID0gcGF0aC5qb2luKGRlc3RTa2lsbHNEaXIsIHNraWxsKTtcbiAgICBcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhzb3VyY2VEaXIpKSB7XG4gICAgICBmcy5jb3B5U3luYyhzb3VyY2VEaXIsIGRlc3REaXIpO1xuICAgICAgY29waWVkLnB1c2goc2tpbGwpO1xuICAgIH1cbiAgfVxuICBcbiAgcmV0dXJuIGNvcGllZDtcbn1cblxuLyoqXG4gKiBDb3B5IEN1cnNvciBydWxlcyB0byAuY3Vyc29yL3J1bGVzL1xuICovXG5mdW5jdGlvbiBjb3B5Q3Vyc29yUnVsZXMocHJvamVjdFBhdGg6IHN0cmluZywgdGVtcGxhdGVEaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgY29waWVkOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBzb3VyY2VSdWxlc0RpciA9IHBhdGguam9pbih0ZW1wbGF0ZURpciwgJy5jdXJzb3InLCAncnVsZXMnKTtcbiAgY29uc3QgZGVzdFJ1bGVzRGlyID0gcGF0aC5qb2luKHByb2plY3RQYXRoLCAnLmN1cnNvcicsICdydWxlcycpO1xuICBcbiAgaWYgKCFmcy5leGlzdHNTeW5jKHNvdXJjZVJ1bGVzRGlyKSkge1xuICAgIGxvZ2dlci53YXJuKCdDdXJzb3IgcnVsZXMgdGVtcGxhdGUgZGlyZWN0b3J5IG5vdCBmb3VuZCcpO1xuICAgIHJldHVybiBjb3BpZWQ7XG4gIH1cbiAgXG4gIC8vIEVuc3VyZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgZXhpc3RzXG4gIGZzLmVuc3VyZURpclN5bmMoZGVzdFJ1bGVzRGlyKTtcbiAgXG4gIGZvciAoY29uc3QgcnVsZSBvZiBDVVJTT1JfUlVMRVMpIHtcbiAgICBjb25zdCBzb3VyY2VQYXRoID0gcGF0aC5qb2luKHNvdXJjZVJ1bGVzRGlyLCBydWxlKTtcbiAgICBjb25zdCBkZXN0UGF0aCA9IHBhdGguam9pbihkZXN0UnVsZXNEaXIsIHJ1bGUpO1xuICAgIFxuICAgIGlmIChmcy5leGlzdHNTeW5jKHNvdXJjZVBhdGgpKSB7XG4gICAgICBmcy5jb3B5U3luYyhzb3VyY2VQYXRoLCBkZXN0UGF0aCk7XG4gICAgICBjb3BpZWQucHVzaChydWxlKTtcbiAgICB9XG4gIH1cbiAgXG4gIHJldHVybiBjb3BpZWQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhaShvcHRpb25zOiBBSU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc29sZS5sb2coKTtcbiAgbG9nZ2VyLmluZm8oJ0RldkRvYyBBSSBBZ2VudCBTZXR1cCcpO1xuICBjb25zb2xlLmxvZygpO1xuXG4gIGNvbnN0IHByb2plY3RQYXRoID0gcHJvY2Vzcy5jd2QoKTtcbiAgXG4gIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBEZXZEb2MgcHJvamVjdFxuICBjb25zdCBkb2NzSnNvblBhdGggPSBwYXRoLmpvaW4ocHJvamVjdFBhdGgsICdkb2NzLmpzb24nKTtcbiAgY29uc3QgaGFzRG9jc0pzb24gPSBmcy5leGlzdHNTeW5jKGRvY3NKc29uUGF0aCk7XG4gIFxuICBpZiAoIWhhc0RvY3NKc29uKSB7XG4gICAgbG9nZ2VyLndhcm4oJ05vIGRvY3MuanNvbiBmb3VuZC4gVGhpcyBtYXkgbm90IGJlIGEgRGV2RG9jIHByb2plY3QuJyk7XG4gICAgY29uc29sZS5sb2coKTtcbiAgfVxuXG4gIC8vIEdldCB0ZW1wbGF0ZSBkaXJlY3RvcnlcbiAgbGV0IHRlbXBsYXRlRGlyOiBzdHJpbmc7XG4gIHRyeSB7XG4gICAgdGVtcGxhdGVEaXIgPSBnZXRUZW1wbGF0ZURpcigpO1xuICB9IGNhdGNoIHtcbiAgICBsb2dnZXIuZXJyb3IoJ0NvdWxkIG5vdCBmaW5kIEFJIGFnZW50IHRlbXBsYXRlcy4gUGxlYXNlIGVuc3VyZSBEZXZEb2MgaXMgaW5zdGFsbGVkIGNvcnJlY3RseS4nKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICAvLyBHZXQgdG9vbCBzZWxlY3Rpb24gaWYgbm90IHByb3ZpZGVkXG4gIGxldCB0b29sOiBBSVRvb2wgPSBvcHRpb25zLnRvb2wgfHwgJ2JvdGgnO1xuICBcbiAgaWYgKCFvcHRpb25zLnRvb2wpIHtcbiAgICBjb25zdCB0b29sQ2hvaWNlcyA9IFtcbiAgICAgIHsgdmFsdWU6ICdib3RoJywgbGFiZWw6ICdCb3RoIC0gQ2xhdWRlIENvZGUgYW5kIEN1cnNvcicgfSxcbiAgICAgIHsgdmFsdWU6ICdjbGF1ZGUnLCBsYWJlbDogJ0NsYXVkZSBDb2RlIC0gU2tpbGxzIGFuZCBDTEFVREUubWQnIH0sXG4gICAgICB7IHZhbHVlOiAnY3Vyc29yJywgbGFiZWw6ICdDdXJzb3IgLSBSdWxlcyAoLmN1cnNvci9ydWxlcy8pJyB9LFxuICAgIF07XG5cbiAgICB0b29sID0gYXdhaXQgcHJvbXB0U2VsZWN0KCdXaGljaCBBSSB0b29sIGRvIHlvdSB1c2U/JywgdG9vbENob2ljZXMpIGFzIEFJVG9vbDtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKCk7XG4gIGxvZ2dlci5pbmZvKCdTZXR0aW5nIHVwIEFJIGFnZW50IGNvbmZpZ3VyYXRpb24uLi4nKTtcbiAgY29uc29sZS5sb2coKTtcblxuICBjb25zdCByZXN1bHRzID0ge1xuICAgIGNsYXVkZU1kOiBmYWxzZSxcbiAgICBjbGF1ZGVTa2lsbHM6IFtdIGFzIHN0cmluZ1tdLFxuICAgIGN1cnNvclJ1bGVzOiBbXSBhcyBzdHJpbmdbXSxcbiAgfTtcblxuICAvLyBTZXR1cCBDbGF1ZGUgQ29kZVxuICBpZiAodG9vbCA9PT0gJ2NsYXVkZScgfHwgdG9vbCA9PT0gJ2JvdGgnKSB7XG4gICAgLy8gQ29weSBDTEFVREUubWRcbiAgICByZXN1bHRzLmNsYXVkZU1kID0gY29weUNsYXVkZU1kKHByb2plY3RQYXRoLCB0ZW1wbGF0ZURpcik7XG4gICAgaWYgKHJlc3VsdHMuY2xhdWRlTWQpIHtcbiAgICAgIGxvZ2dlci5zdWNjZXNzKCdDcmVhdGVkIENMQVVERS5tZCcpO1xuICAgIH1cbiAgICBcbiAgICAvLyBDb3B5IHNraWxsc1xuICAgIHJlc3VsdHMuY2xhdWRlU2tpbGxzID0gY29weUNsYXVkZVNraWxscyhwcm9qZWN0UGF0aCwgdGVtcGxhdGVEaXIpO1xuICAgIGZvciAoY29uc3Qgc2tpbGwgb2YgcmVzdWx0cy5jbGF1ZGVTa2lsbHMpIHtcbiAgICAgIGxvZ2dlci5zdWNjZXNzKGBDcmVhdGVkIC5jbGF1ZGUvc2tpbGxzLyR7c2tpbGx9L1NLSUxMLm1kYCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0dXAgQ3Vyc29yXG4gIGlmICh0b29sID09PSAnY3Vyc29yJyB8fCB0b29sID09PSAnYm90aCcpIHtcbiAgICByZXN1bHRzLmN1cnNvclJ1bGVzID0gY29weUN1cnNvclJ1bGVzKHByb2plY3RQYXRoLCB0ZW1wbGF0ZURpcik7XG4gICAgZm9yIChjb25zdCBydWxlIG9mIHJlc3VsdHMuY3Vyc29yUnVsZXMpIHtcbiAgICAgIGxvZ2dlci5zdWNjZXNzKGBDcmVhdGVkIC5jdXJzb3IvcnVsZXMvJHtydWxlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN1bW1hcnlcbiAgY29uc29sZS5sb2coKTtcbiAgbG9nZ2VyLnN1Y2Nlc3MoJ0FJIGFnZW50IGNvbmZpZ3VyYXRpb24gY29tcGxldGUhJyk7XG4gIGNvbnNvbGUubG9nKCk7XG5cbiAgaWYgKHRvb2wgPT09ICdjbGF1ZGUnIHx8IHRvb2wgPT09ICdib3RoJykge1xuICAgIGNvbnNvbGUubG9nKCdBdmFpbGFibGUgQ2xhdWRlIENvZGUgY29tbWFuZHM6Jyk7XG4gICAgY29uc29sZS5sb2coJyAgL2Jvb3RzdHJhcC1kb2NzICAgIC0gQW5hbHl6ZSByZXBvIGFuZCBnZW5lcmF0ZSBpbml0aWFsIGRvY3VtZW50YXRpb24nKTtcbiAgICBjb25zb2xlLmxvZygnICAvbWlncmF0ZS1kb2NzICAgICAgLSBNaWdyYXRlIGZyb20gTWludGxpZnksIERvY3VzYXVydXMsIEdpdEJvb2ssIGV0Yy4nKTtcbiAgICBjb25zb2xlLmxvZygnICAvaW1wb3J0LWFwaS1zcGVjICAgLSBJbXBvcnQgT3BlbkFQSSwgR3JhcGhRTCwgb3IgQXN5bmNBUEkgc3BlY3MnKTtcbiAgICBjb25zb2xlLmxvZygnICAvc3luYy1kb2NzICAgICAgICAgLSBGaW5kIGFuZCBmaXggb3V0ZGF0ZWQgZG9jdW1lbnRhdGlvbicpO1xuICAgIGNvbnNvbGUubG9nKCcgIC9jaGVjay1kb2NzICAgICAgICAtIFF1aWNrIGhlYWx0aCBjaGVjayB3aXRob3V0IGNoYW5nZXMnKTtcbiAgICBjb25zb2xlLmxvZygnICAvY3JlYXRlLWRvYy1wYWdlICAgLSBDcmVhdGUgYSBuZXcgZG9jdW1lbnRhdGlvbiBwYWdlJyk7XG4gICAgY29uc29sZS5sb2coJyAgL3VwZGF0ZS1kb2NzLWpzb24gIC0gQWRkIHBhZ2VzIHRvIG5hdmlnYXRpb24nKTtcbiAgICBjb25zb2xlLmxvZygnICAvZ2VuZXJhdGUtYXBpLWRvY3MgLSBHZW5lcmF0ZSBBUEkgZG9jdW1lbnRhdGlvbicpO1xuICAgIGNvbnNvbGUubG9nKCcgIC9kb2NzLWZyb20tY29kZSAgICAtIEdlbmVyYXRlIGRvY3MgZnJvbSBzcGVjaWZpYyBjb2RlIGZpbGVzJyk7XG4gICAgY29uc29sZS5sb2coKTtcbiAgfVxuXG4gIGlmICh0b29sID09PSAnY3Vyc29yJyB8fCB0b29sID09PSAnYm90aCcpIHtcbiAgICBjb25zb2xlLmxvZygnQ3Vyc29yIHJ1bGVzIGNvbmZpZ3VyZWQgZm9yICoubWR4IGZpbGVzLicpO1xuICAgIGNvbnNvbGUubG9nKCk7XG4gICAgY29uc29sZS5sb2coJ1N1Z2dlc3RlZCBwcm9tcHRzIGluIEFnZW50IG1vZGU6Jyk7XG4gICAgY29uc29sZS5sb2coJyAgXCJBbmFseXplIHRoaXMgcmVwbyBhbmQgZ2VuZXJhdGUgaW5pdGlhbCBkb2N1bWVudGF0aW9uXCInKTtcbiAgICBjb25zb2xlLmxvZygnICBcIk1pZ3JhdGUgbXkgTWludGxpZnkgZG9jcyB0byBEZXZEb2MgZm9ybWF0XCInKTtcbiAgICBjb25zb2xlLmxvZygnICBcIkNoZWNrIG15IGRvY3MgZm9yIG91dGRhdGVkIGNvbnRlbnRcIicpO1xuICAgIGNvbnNvbGUubG9nKCcgIFwiQ3JlYXRlIGEgbmV3IGd1aWRlIGFib3V0IGF1dGhlbnRpY2F0aW9uXCInKTtcbiAgICBjb25zb2xlLmxvZygpO1xuICB9XG5cbiAgY29uc29sZS5sb2coJ1F1aWNrIHN0YXJ0OicpO1xuICBpZiAodG9vbCA9PT0gJ2NsYXVkZScgfHwgdG9vbCA9PT0gJ2JvdGgnKSB7XG4gICAgY29uc29sZS5sb2coJyAgQ2xhdWRlIENvZGU6IC9ib290c3RyYXAtZG9jcycpO1xuICB9XG4gIGlmICh0b29sID09PSAnY3Vyc29yJyB8fCB0b29sID09PSAnYm90aCcpIHtcbiAgICBjb25zb2xlLmxvZygnICBDdXJzb3I6IEFzayBcImdlbmVyYXRlIGluaXRpYWwgZG9jdW1lbnRhdGlvbiBmcm9tIHRoaXMgcmVwb1wiJyk7XG4gIH1cbiAgY29uc29sZS5sb2coKTtcbn1cbiJdfQ==
|
|
349
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2xpL2NvbW1hbmRzL2FpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNE1BLGdCQXVKQztBQW5XRCxnREFBd0I7QUFDeEIsd0RBQTBCO0FBQzFCLCtDQUE0QztBQVM1QyxzQ0FBc0M7QUFDdEMsS0FBSyxVQUFVLE1BQU0sQ0FBQyxRQUFnQixFQUFFLFlBQXFCO0lBQzNELE1BQU0sUUFBUSxHQUFHLHdEQUFhLFVBQVUsR0FBQyxDQUFDO0lBQzFDLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUM7UUFDbEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO1FBQ3BCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtLQUN2QixDQUFDLENBQUM7SUFFSCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDN0IsTUFBTSxlQUFlLEdBQUcsWUFBWTtZQUNsQyxDQUFDLENBQUMsR0FBRyxRQUFRLEtBQUssWUFBWSxLQUFLO1lBQ25DLENBQUMsQ0FBQyxHQUFHLFFBQVEsSUFBSSxDQUFDO1FBRXBCLEVBQUUsQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDdEMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxZQUFZLElBQUksRUFBRSxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxLQUFLLFVBQVUsWUFBWSxDQUFDLFFBQWdCLEVBQUUsT0FBMkM7SUFDdkYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUM7SUFDL0IsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0s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QUksUUFBUSxFQUFFLENBQUM7UUFDYixPQUFPLENBQUMsR0FBRyxDQUFDLHNFQUFzRSxDQUFDLENBQUM7UUFDcEYsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyJztcblxudHlwZSBBSVRvb2wgPSAnY2xhdWRlJyB8ICdjdXJzb3InIHwgJ2JvdGgnO1xuXG5pbnRlcmZhY2UgQUlPcHRpb25zIHtcbiAgdG9vbD86IEFJVG9vbDtcbiAgdXBkYXRlPzogYm9vbGVhbjtcbn1cblxuLy8gU2ltcGxlIHByb21wdCBoZWxwZXIgdXNpbmcgcmVhZGxpbmVcbmFzeW5jIGZ1bmN0aW9uIHByb21wdChxdWVzdGlvbjogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCByZWFkbGluZSA9IGF3YWl0IGltcG9ydCgncmVhZGxpbmUnKTtcbiAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoe1xuICAgIGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuICAgIG91dHB1dDogcHJvY2Vzcy5zdGRvdXQsXG4gIH0pO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IGRpc3BsYXlRdWVzdGlvbiA9IGRlZmF1bHRWYWx1ZSBcbiAgICAgID8gYCR7cXVlc3Rpb259ICgke2RlZmF1bHRWYWx1ZX0pOiBgXG4gICAgICA6IGAke3F1ZXN0aW9ufTogYDtcbiAgICBcbiAgICBybC5xdWVzdGlvbihkaXNwbGF5UXVlc3Rpb24sIChhbnN3ZXIpID0+IHtcbiAgICAgIHJsLmNsb3NlKCk7XG4gICAgICByZXNvbHZlKGFuc3dlci50cmltKCkgfHwgZGVmYXVsdFZhbHVlIHx8ICcnKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByb21wdFNlbGVjdChxdWVzdGlvbjogc3RyaW5nLCBjaG9pY2VzOiB7IHZhbHVlOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfVtdKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc29sZS5sb2coYFxcbiR7cXVlc3Rpb259XFxuYCk7XG4gIGNob2ljZXMuZm9yRWFjaCgoY2hvaWNlLCBpKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCAgJHtpICsgMX0uICR7Y2hvaWNlLmxhYmVsfWApO1xuICB9KTtcbiAgY29uc29sZS5sb2coKTtcbiAgXG4gIGNvbnN0IHJlYWRsaW5lID0gYXdhaXQgaW1wb3J0KCdyZWFkbGluZScpO1xuICBjb25zdCBybCA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7XG4gICAgaW5wdXQ6IHByb2Nlc3Muc3RkaW4sXG4gICAgb3V0cHV0OiBwcm9jZXNzLnN0ZG91dCxcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcmwucXVlc3Rpb24oJ0VudGVyIG51bWJlcjogJywgKGFuc3dlcikgPT4ge1xuICAgICAgcmwuY2xvc2UoKTtcbiAgICAgIGNvbnN0IGluZGV4ID0gcGFyc2VJbnQoYW5zd2VyLnRyaW0oKSwgMTApIC0gMTtcbiAgICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgY2hvaWNlcy5sZW5ndGgpIHtcbiAgICAgICAgcmVzb2x2ZShjaG9pY2VzW2luZGV4XS52YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBEZWZhdWx0IHRvIGZpcnN0IGNob2ljZVxuICAgICAgICByZXNvbHZlKGNob2ljZXNbMF0udmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuLy8gQ2xhdWRlIENvZGUgc2tpbGxzIHRvIGNyZWF0ZVxuY29uc3QgQ0xBVURFX1NLSUxMUyA9IFtcbiAgJ2Jvb3RzdHJhcC1kb2NzJyxcbiAgJ21pZ3JhdGUtZG9jcycsXG4gICdpbXBvcnQtYXBpLXNwZWMnLFxuICAnY2hlY2stZG9jcycsXG4gICdibGFtZS1kb2MnLFxuICAnY3JlYXRlLWRvYycsXG4gICd1cGRhdGUtZG9jJyxcbiAgJ2RlbGV0ZS1kb2MnLFxuICAnY29tbWl0LWRvYycsXG5dO1xuXG4vLyBDdXJzb3IgcnVsZXMgdG8gY3JlYXRlXG5jb25zdCBDVVJTT1JfUlVMRVMgPSBbXG4gICdkZXZkb2MubWRjJyxcbiAgJ2RldmRvYy1ib290c3RyYXAubWRjJyxcbiAgJ2RldmRvYy1taWdyYXRlLm1kYycsXG4gICdkZXZkb2MtYmxhbWUubWRjJyxcbiAgJ2RldmRvYy1jcmVhdGUubWRjJyxcbiAgJ2RldmRvYy11cGRhdGUubWRjJyxcbiAgJ2RldmRvYy1kZWxldGUubWRjJyxcbiAgJ2RldmRvYy1jb21taXQubWRjJyxcbl07XG5cbi8qKlxuICogR2V0IHRoZSBBSSBhZ2VudHMgdGVtcGxhdGUgZGlyZWN0b3J5IHBhdGggKGhhbmRsZXMgYm90aCBkZXZlbG9wbWVudCBhbmQgaW5zdGFsbGVkIHBhY2thZ2Ugc2NlbmFyaW9zKVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZURpcigpOiBzdHJpbmcge1xuICAvLyBUcnkgcmVsYXRpdmUgdG8gY29tcGlsZWQgZGlzdCAocGFja2FnZXMvZGV2ZG9jL2Rpc3QvY2xpL2NvbW1hbmRzIC0+IHBhY2thZ2VzL2RldmRvYy9haS1hZ2VudHMpXG4gIGxldCB0ZW1wbGF0ZURpciA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICcuLicsICcuLicsICdhaS1hZ2VudHMnKTtcbiAgXG4gIGlmIChmcy5leGlzdHNTeW5jKHRlbXBsYXRlRGlyKSkge1xuICAgIHJldHVybiB0ZW1wbGF0ZURpcjtcbiAgfVxuICBcbiAgLy8gVHJ5IHJlbGF0aXZlIHRvIHNvdXJjZSAocGFja2FnZXMvZGV2ZG9jL3NyYy9jbGkvY29tbWFuZHMgLT4gcGFja2FnZXMvZGV2ZG9jL2FpLWFnZW50cylcbiAgdGVtcGxhdGVEaXIgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAnLi4nLCAnYWktYWdlbnRzJyk7XG4gIFxuICBpZiAoZnMuZXhpc3RzU3luYyh0ZW1wbGF0ZURpcikpIHtcbiAgICByZXR1cm4gdGVtcGxhdGVEaXI7XG4gIH1cbiAgXG4gIC8vIFRyeSBkZXZkb2MvdGVtcGxhdGVzIGF0IHJlcG8gcm9vdCAoZGV2ZWxvcG1lbnQgLSBtb25vcmVwbyBzdHJ1Y3R1cmUpXG4gIC8vIF9fZGlybmFtZSBpcyBwYWNrYWdlcy9kZXZkb2MvZGlzdC9jbGkvY29tbWFuZHMgLT4gZ28gdXAgNSBsZXZlbHMgdG8gcmVwbyByb290XG4gIHRlbXBsYXRlRGlyID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJy4uJywgJy4uJywgJy4uJywgJ2RldmRvYycsICd0ZW1wbGF0ZXMnLCAnc3RhcnRlcicpO1xuICBcbiAgaWYgKGZzLmV4aXN0c1N5bmModGVtcGxhdGVEaXIpKSB7XG4gICAgcmV0dXJuIHRlbXBsYXRlRGlyO1xuICB9XG4gIFxuICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIHRlbXBsYXRlIGRpcmVjdG9yeScpO1xufVxuXG4vKipcbiAqIENvcHkgQ0xBVURFLm1kIHRvIHByb2plY3Qgcm9vdFxuICogUmV0dXJucyAnY3JlYXRlZCcgfCAndXBkYXRlZCcgfCAnc2tpcHBlZCdcbiAqL1xuZnVuY3Rpb24gY29weUNsYXVkZU1kKHByb2plY3RQYXRoOiBzdHJpbmcsIHRlbXBsYXRlRGlyOiBzdHJpbmcpOiAnY3JlYXRlZCcgfCAndXBkYXRlZCcgfCAnc2tpcHBlZCcge1xuICBjb25zdCBzb3VyY2VQYXRoID0gcGF0aC5qb2luKHRlbXBsYXRlRGlyLCAnQ0xBVURFLm1kJyk7XG4gIGNvbnN0IGRlc3RQYXRoID0gcGF0aC5qb2luKHByb2plY3RQYXRoLCAnQ0xBVURFLm1kJyk7XG4gIFxuICBpZiAoIWZzLmV4aXN0c1N5bmMoc291cmNlUGF0aCkpIHtcbiAgICByZXR1cm4gJ3NraXBwZWQnO1xuICB9XG4gIFxuICBjb25zdCBleGlzdGVkID0gZnMuZXhpc3RzU3luYyhkZXN0UGF0aCk7XG4gIGZzLmNvcHlTeW5jKHNvdXJjZVBhdGgsIGRlc3RQYXRoKTtcbiAgcmV0dXJuIGV4aXN0ZWQgPyAndXBkYXRlZCcgOiAnY3JlYXRlZCc7XG59XG5cbi8qKlxuICogQ29weSBDbGF1ZGUgQ29kZSBza2lsbHMgdG8gLmNsYXVkZS9za2lsbHMvXG4gKiBSZXR1cm5zIGFycmF5IG9mIHsgc2tpbGwsIHN0YXR1czogJ2NyZWF0ZWQnIHwgJ3VwZGF0ZWQnIH1cbiAqL1xuZnVuY3Rpb24gY29weUNsYXVkZVNraWxscyhwcm9qZWN0UGF0aDogc3RyaW5nLCB0ZW1wbGF0ZURpcjogc3RyaW5nKTogeyBza2lsbDogc3RyaW5nOyBzdGF0dXM6ICdjcmVhdGVkJyB8ICd1cGRhdGVkJyB9W10ge1xuICBjb25zdCByZXN1bHRzOiB7IHNraWxsOiBzdHJpbmc7IHN0YXR1czogJ2NyZWF0ZWQnIHwgJ3VwZGF0ZWQnIH1bXSA9IFtdO1xuICBjb25zdCBzb3VyY2VTa2lsbHNEaXIgPSBwYXRoLmpvaW4odGVtcGxhdGVEaXIsICcuY2xhdWRlJywgJ3NraWxscycpO1xuICBjb25zdCBkZXN0U2tpbGxzRGlyID0gcGF0aC5qb2luKHByb2plY3RQYXRoLCAnLmNsYXVkZScsICdza2lsbHMnKTtcbiAgXG4gIGlmICghZnMuZXhpc3RzU3luYyhzb3VyY2VTa2lsbHNEaXIpKSB7XG4gICAgbG9nZ2VyLndhcm4oJ0NsYXVkZSBza2lsbHMgdGVtcGxhdGUgZGlyZWN0b3J5IG5vdCBmb3VuZCcpO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG4gIFxuICAvLyBFbnN1cmUgZGVzdGluYXRpb24gZGlyZWN0b3J5IGV4aXN0c1xuICBmcy5lbnN1cmVEaXJTeW5jKGRlc3RTa2lsbHNEaXIpO1xuICBcbiAgZm9yIChjb25zdCBza2lsbCBvZiBDTEFVREVfU0tJTExTKSB7XG4gICAgY29uc3Qgc291cmNlRGlyID0gcGF0aC5qb2luKHNvdXJjZVNraWxsc0Rpciwgc2tpbGwpO1xuICAgIGNvbnN0IGRlc3REaXIgPSBwYXRoLmpvaW4oZGVzdFNraWxsc0Rpciwgc2tpbGwpO1xuICAgIFxuICAgIGlmIChmcy5leGlzdHNTeW5jKHNvdXJjZURpcikpIHtcbiAgICAgIGNvbnN0IGV4aXN0ZWQgPSBmcy5leGlzdHNTeW5jKGRlc3REaXIpO1xuICAgICAgZnMuY29weVN5bmMoc291cmNlRGlyLCBkZXN0RGlyKTtcbiAgICAgIHJlc3VsdHMucHVzaCh7IHNraWxsLCBzdGF0dXM6IGV4aXN0ZWQgPyAndXBkYXRlZCcgOiAnY3JlYXRlZCcgfSk7XG4gICAgfVxuICB9XG4gIFxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuLyoqXG4gKiBDb3B5IEN1cnNvciBydWxlcyB0byAuY3Vyc29yL3J1bGVzL1xuICogUmV0dXJucyBhcnJheSBvZiB7IHJ1bGUsIHN0YXR1czogJ2NyZWF0ZWQnIHwgJ3VwZGF0ZWQnIH1cbiAqL1xuZnVuY3Rpb24gY29weUN1cnNvclJ1bGVzKHByb2plY3RQYXRoOiBzdHJpbmcsIHRlbXBsYXRlRGlyOiBzdHJpbmcpOiB7IHJ1bGU6IHN0cmluZzsgc3RhdHVzOiAnY3JlYXRlZCcgfCAndXBkYXRlZCcgfVtdIHtcbiAgY29uc3QgcmVzdWx0czogeyBydWxlOiBzdHJpbmc7IHN0YXR1czogJ2NyZWF0ZWQnIHwgJ3VwZGF0ZWQnIH1bXSA9IFtdO1xuICBjb25zdCBzb3VyY2VSdWxlc0RpciA9IHBhdGguam9pbih0ZW1wbGF0ZURpciwgJy5jdXJzb3InLCAncnVsZXMnKTtcbiAgY29uc3QgZGVzdFJ1bGVzRGlyID0gcGF0aC5qb2luKHByb2plY3RQYXRoLCAnLmN1cnNvcicsICdydWxlcycpO1xuICBcbiAgaWYgKCFmcy5leGlzdHNTeW5jKHNvdXJjZVJ1bGVzRGlyKSkge1xuICAgIGxvZ2dlci53YXJuKCdDdXJzb3IgcnVsZXMgdGVtcGxhdGUgZGlyZWN0b3J5IG5vdCBmb3VuZCcpO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG4gIFxuICAvLyBFbnN1cmUgZGVzdGluYXRpb24gZGlyZWN0b3J5IGV4aXN0c1xuICBmcy5lbnN1cmVEaXJTeW5jKGRlc3RSdWxlc0Rpcik7XG4gIFxuICBmb3IgKGNvbnN0IHJ1bGUgb2YgQ1VSU09SX1JVTEVTKSB7XG4gICAgY29uc3Qgc291cmNlUGF0aCA9IHBhdGguam9pbihzb3VyY2VSdWxlc0RpciwgcnVsZSk7XG4gICAgY29uc3QgZGVzdFBhdGggPSBwYXRoLmpvaW4oZGVzdFJ1bGVzRGlyLCBydWxlKTtcbiAgICBcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhzb3VyY2VQYXRoKSkge1xuICAgICAgY29uc3QgZXhpc3RlZCA9IGZzLmV4aXN0c1N5bmMoZGVzdFBhdGgpO1xuICAgICAgZnMuY29weVN5bmMoc291cmNlUGF0aCwgZGVzdFBhdGgpO1xuICAgICAgcmVzdWx0cy5wdXNoKHsgcnVsZSwgc3RhdHVzOiBleGlzdGVkID8gJ3VwZGF0ZWQnIDogJ2NyZWF0ZWQnIH0pO1xuICAgIH1cbiAgfVxuICBcbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgQUkgdG9vbHMgYXJlIGFscmVhZHkgaW5zdGFsbGVkXG4gKi9cbmZ1bmN0aW9uIGNoZWNrRXhpc3RpbmdJbnN0YWxsYXRpb24ocHJvamVjdFBhdGg6IHN0cmluZyk6IHsgY2xhdWRlOiBib29sZWFuOyBjdXJzb3I6IGJvb2xlYW4gfSB7XG4gIGNvbnN0IGNsYXVkZURpciA9IHBhdGguam9pbihwcm9qZWN0UGF0aCwgJy5jbGF1ZGUnLCAnc2tpbGxzJyk7XG4gIGNvbnN0IGN1cnNvckRpciA9IHBhdGguam9pbihwcm9qZWN0UGF0aCwgJy5jdXJzb3InLCAncnVsZXMnKTtcbiAgXG4gIHJldHVybiB7XG4gICAgY2xhdWRlOiBmcy5leGlzdHNTeW5jKGNsYXVkZURpcikgJiYgZnMucmVhZGRpclN5bmMoY2xhdWRlRGlyKS5sZW5ndGggPiAwLFxuICAgIGN1cnNvcjogZnMuZXhpc3RzU3luYyhjdXJzb3JEaXIpICYmIGZzLnJlYWRkaXJTeW5jKGN1cnNvckRpcikuc29tZShmID0+IGYuc3RhcnRzV2l0aCgnZGV2ZG9jJykpLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWkob3B0aW9uczogQUlPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnNvbGUubG9nKCk7XG4gIFxuICBjb25zdCBwcm9qZWN0UGF0aCA9IHByb2Nlc3MuY3dkKCk7XG4gIGNvbnN0IGV4aXN0aW5nID0gY2hlY2tFeGlzdGluZ0luc3RhbGxhdGlvbihwcm9qZWN0UGF0aCk7XG4gIGNvbnN0IGlzVXBkYXRlID0gb3B0aW9ucy51cGRhdGUgfHwgZXhpc3RpbmcuY2xhdWRlIHx8IGV4aXN0aW5nLmN1cnNvcjtcbiAgXG4gIGlmIChpc1VwZGF0ZSkge1xuICAgIGxvZ2dlci5pbmZvKCdEZXZEb2MgQUkgQWdlbnQgVXBkYXRlJyk7XG4gIH0gZWxzZSB7XG4gICAgbG9nZ2VyLmluZm8oJ0RldkRvYyBBSSBBZ2VudCBTZXR1cCcpO1xuICB9XG4gIGNvbnNvbGUubG9nKCk7XG5cbiAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIERldkRvYyBwcm9qZWN0XG4gIGNvbnN0IGRvY3NKc29uUGF0aCA9IHBhdGguam9pbihwcm9qZWN0UGF0aCwgJ2RvY3MuanNvbicpO1xuICBjb25zdCBoYXNEb2NzSnNvbiA9IGZzLmV4aXN0c1N5bmMoZG9jc0pzb25QYXRoKTtcbiAgXG4gIGlmICghaGFzRG9jc0pzb24pIHtcbiAgICBsb2dnZXIud2FybignTm8gZG9jcy5qc29uIGZvdW5kLiBUaGlzIG1heSBub3QgYmUgYSBEZXZEb2MgcHJvamVjdC4nKTtcbiAgICBjb25zb2xlLmxvZygpO1xuICB9XG5cbiAgLy8gR2V0IHRlbXBsYXRlIGRpcmVjdG9yeVxuICBsZXQgdGVtcGxhdGVEaXI6IHN0cmluZztcbiAgdHJ5IHtcbiAgICB0ZW1wbGF0ZURpciA9IGdldFRlbXBsYXRlRGlyKCk7XG4gIH0gY2F0Y2gge1xuICAgIGxvZ2dlci5lcnJvcignQ291bGQgbm90IGZpbmQgQUkgYWdlbnQgdGVtcGxhdGVzLiBQbGVhc2UgZW5zdXJlIERldkRvYyBpcyBpbnN0YWxsZWQgY29ycmVjdGx5LicpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIC8vIEdldCB0b29sIHNlbGVjdGlvbiBpZiBub3QgcHJvdmlkZWRcbiAgbGV0IHRvb2w6IEFJVG9vbCA9IG9wdGlvbnMudG9vbCB8fCAnYm90aCc7XG4gIFxuICBpZiAoIW9wdGlvbnMudG9vbCkge1xuICAgIC8vIElmIHVwZGF0aW5nLCBkZWZhdWx0IHRvIHVwZGF0aW5nIHdoYXQncyBhbHJlYWR5IGluc3RhbGxlZFxuICAgIGlmIChpc1VwZGF0ZSAmJiBleGlzdGluZy5jbGF1ZGUgJiYgIWV4aXN0aW5nLmN1cnNvcikge1xuICAgICAgdG9vbCA9ICdjbGF1ZGUnO1xuICAgIH0gZWxzZSBpZiAoaXNVcGRhdGUgJiYgZXhpc3RpbmcuY3Vyc29yICYmICFleGlzdGluZy5jbGF1ZGUpIHtcbiAgICAgIHRvb2wgPSAnY3Vyc29yJztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdG9vbENob2ljZXMgPSBbXG4gICAgICAgIHsgdmFsdWU6ICdib3RoJywgbGFiZWw6ICdCb3RoIC0gQ2xhdWRlIENvZGUgYW5kIEN1cnNvcicgfSxcbiAgICAgICAgeyB2YWx1ZTogJ2NsYXVkZScsIGxhYmVsOiAnQ2xhdWRlIENvZGUgLSBTa2lsbHMgYW5kIENMQVVERS5tZCcgfSxcbiAgICAgICAgeyB2YWx1ZTogJ2N1cnNvcicsIGxhYmVsOiAnQ3Vyc29yIC0gUnVsZXMgKC5jdXJzb3IvcnVsZXMvKScgfSxcbiAgICAgIF07XG5cbiAgICAgIHRvb2wgPSBhd2FpdCBwcm9tcHRTZWxlY3QoJ1doaWNoIEFJIHRvb2wgZG8geW91IHVzZT8nLCB0b29sQ2hvaWNlcykgYXMgQUlUb29sO1xuICAgIH1cbiAgfVxuXG4gIGNvbnNvbGUubG9nKCk7XG4gIGlmIChpc1VwZGF0ZSkge1xuICAgIGxvZ2dlci5pbmZvKCdVcGRhdGluZyBBSSBhZ2VudCBjb25maWd1cmF0aW9uLi4uJyk7XG4gIH0gZWxzZSB7XG4gICAgbG9nZ2VyLmluZm8oJ1NldHRpbmcgdXAgQUkgYWdlbnQgY29uZmlndXJhdGlvbi4uLicpO1xuICB9XG4gIGNvbnNvbGUubG9nKCk7XG5cbiAgbGV0IGNyZWF0ZWRDb3VudCA9IDA7XG4gIGxldCB1cGRhdGVkQ291bnQgPSAwO1xuXG4gIC8vIFNldHVwIENsYXVkZSBDb2RlXG4gIGlmICh0b29sID09PSAnY2xhdWRlJyB8fCB0b29sID09PSAnYm90aCcpIHtcbiAgICAvLyBDb3B5IENMQVVERS5tZFxuICAgIGNvbnN0IGNsYXVkZU1kU3RhdHVzID0gY29weUNsYXVkZU1kKHByb2plY3RQYXRoLCB0ZW1wbGF0ZURpcik7XG4gICAgaWYgKGNsYXVkZU1kU3RhdHVzID09PSAnY3JlYXRlZCcpIHtcbiAgICAgIGxvZ2dlci5zdWNjZXNzKCdDcmVhdGVkIENMQVVERS5tZCcpO1xuICAgICAgY3JlYXRlZENvdW50Kys7XG4gICAgfSBlbHNlIGlmIChjbGF1ZGVNZFN0YXR1cyA9PT0gJ3VwZGF0ZWQnKSB7XG4gICAgICBsb2dnZXIuc3VjY2VzcygnVXBkYXRlZCBDTEFVREUubWQnKTtcbiAgICAgIHVwZGF0ZWRDb3VudCsrO1xuICAgIH1cbiAgICBcbiAgICAvLyBDb3B5IHNraWxsc1xuICAgIGNvbnN0IHNraWxsUmVzdWx0cyA9IGNvcHlDbGF1ZGVTa2lsbHMocHJvamVjdFBhdGgsIHRlbXBsYXRlRGlyKTtcbiAgICBmb3IgKGNvbnN0IHsgc2tpbGwsIHN0YXR1cyB9IG9mIHNraWxsUmVzdWx0cykge1xuICAgICAgaWYgKHN0YXR1cyA9PT0gJ2NyZWF0ZWQnKSB7XG4gICAgICAgIGxvZ2dlci5zdWNjZXNzKGBDcmVhdGVkIC5jbGF1ZGUvc2tpbGxzLyR7c2tpbGx9L1NLSUxMLm1kYCk7XG4gICAgICAgIGNyZWF0ZWRDb3VudCsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLnN1Y2Nlc3MoYFVwZGF0ZWQgLmNsYXVkZS9za2lsbHMvJHtza2lsbH0vU0tJTEwubWRgKTtcbiAgICAgICAgdXBkYXRlZENvdW50Kys7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0dXAgQ3Vyc29yXG4gIGlmICh0b29sID09PSAnY3Vyc29yJyB8fCB0b29sID09PSAnYm90aCcpIHtcbiAgICBjb25zdCBydWxlUmVzdWx0cyA9IGNvcHlDdXJzb3JSdWxlcyhwcm9qZWN0UGF0aCwgdGVtcGxhdGVEaXIpO1xuICAgIGZvciAoY29uc3QgeyBydWxlLCBzdGF0dXMgfSBvZiBydWxlUmVzdWx0cykge1xuICAgICAgaWYgKHN0YXR1cyA9PT0gJ2NyZWF0ZWQnKSB7XG4gICAgICAgIGxvZ2dlci5zdWNjZXNzKGBDcmVhdGVkIC5jdXJzb3IvcnVsZXMvJHtydWxlfWApO1xuICAgICAgICBjcmVhdGVkQ291bnQrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5zdWNjZXNzKGBVcGRhdGVkIC5jdXJzb3IvcnVsZXMvJHtydWxlfWApO1xuICAgICAgICB1cGRhdGVkQ291bnQrKztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTdW1tYXJ5XG4gIGNvbnNvbGUubG9nKCk7XG4gIGlmICh1cGRhdGVkQ291bnQgPiAwICYmIGNyZWF0ZWRDb3VudCA+IDApIHtcbiAgICBsb2dnZXIuc3VjY2VzcyhgQUkgYWdlbnQgY29uZmlndXJhdGlvbiBjb21wbGV0ZSEgKCR7Y3JlYXRlZENvdW50fSBjcmVhdGVkLCAke3VwZGF0ZWRDb3VudH0gdXBkYXRlZClgKTtcbiAgfSBlbHNlIGlmICh1cGRhdGVkQ291bnQgPiAwKSB7XG4gICAgbG9nZ2VyLnN1Y2Nlc3MoYEFJIGFnZW50IGNvbmZpZ3VyYXRpb24gdXBkYXRlZCEgKCR7dXBkYXRlZENvdW50fSBmaWxlcylgKTtcbiAgfSBlbHNlIHtcbiAgICBsb2dnZXIuc3VjY2VzcygnQUkgYWdlbnQgY29uZmlndXJhdGlvbiBjb21wbGV0ZSEnKTtcbiAgfVxuICBjb25zb2xlLmxvZygpO1xuXG4gIGlmICh0b29sID09PSAnY2xhdWRlJyB8fCB0b29sID09PSAnYm90aCcpIHtcbiAgICBjb25zb2xlLmxvZygnQXZhaWxhYmxlIENsYXVkZSBDb2RlIGNvbW1hbmRzOicpO1xuICAgIGNvbnNvbGUubG9nKCcgIC9ib290c3RyYXAtZG9jcyAgICAtIEFuYWx5emUgcmVwbyBhbmQgZ2VuZXJhdGUgaW5pdGlhbCBkb2N1bWVudGF0aW9uJyk7XG4gICAgY29uc29sZS5sb2coJyAgL21pZ3JhdGUtZG9jcyAgICAgIC0gTWlncmF0ZSBmcm9tIE1pbnRsaWZ5LCBEb2N1c2F1cnVzLCBHaXRCb29rLCBldGMuJyk7XG4gICAgY29uc29sZS5sb2coJyAgL2ltcG9ydC1hcGktc3BlYyAgIC0gSW1wb3J0IE9wZW5BUEksIEdyYXBoUUwsIG9yIEFzeW5jQVBJIHNwZWNzJyk7XG4gICAgY29uc29sZS5sb2coJyAgL2NoZWNrLWRvY3MgICAgICAgIC0gUXVpY2sgaGVhbHRoIGNoZWNrIHdpdGhvdXQgY2hhbmdlcycpO1xuICAgIGNvbnNvbGUubG9nKCcgIC9ibGFtZS1kb2MgICAgICAgICAtIEZpbmQgZHVwbGljYXRlcywgb3V0ZGF0ZWQgY29udGVudCwgZGlzY3JlcGFuY2llcycpO1xuICAgIGNvbnNvbGUubG9nKCcgIC9jcmVhdGUtZG9jICAgICAgICAtIENyZWF0ZSBhIG5ldyBkb2N1bWVudGF0aW9uIHBhZ2UnKTtcbiAgICBjb25zb2xlLmxvZygnICAvdXBkYXRlLWRvYyAgICAgICAgLSBVcGRhdGUgZXhpc3RpbmcgZG9jdW1lbnRhdGlvbicpO1xuICAgIGNvbnNvbGUubG9nKCcgIC9kZWxldGUtZG9jICAgICAgICAtIERlbGV0ZSBkb2N1bWVudGF0aW9uIHBhZ2VzJyk7XG4gICAgY29uc29sZS5sb2coJyAgL2NvbW1pdC1kb2MgICAgICAgIC0gQ29tbWl0IGRvY3VtZW50YXRpb24gY2hhbmdlcycpO1xuICAgIGNvbnNvbGUubG9nKCk7XG4gIH1cblxuICBpZiAodG9vbCA9PT0gJ2N1cnNvcicgfHwgdG9vbCA9PT0gJ2JvdGgnKSB7XG4gICAgY29uc29sZS5sb2coJ0N1cnNvciBydWxlcyBjb25maWd1cmVkIGZvciAqLm1keCBmaWxlcy4nKTtcbiAgICBjb25zb2xlLmxvZygpO1xuICAgIGNvbnNvbGUubG9nKCdTdWdnZXN0ZWQgcHJvbXB0cyBpbiBBZ2VudCBtb2RlOicpO1xuICAgIGNvbnNvbGUubG9nKCcgIFwiQW5hbHl6ZSB0aGlzIHJlcG8gYW5kIGdlbmVyYXRlIGluaXRpYWwgZG9jdW1lbnRhdGlvblwiJyk7XG4gICAgY29uc29sZS5sb2coJyAgXCJNaWdyYXRlIG15IE1pbnRsaWZ5IGRvY3MgdG8gRGV2RG9jIGZvcm1hdFwiJyk7XG4gICAgY29uc29sZS5sb2coJyAgXCJDaGVjayBteSBkb2NzIGZvciBvdXRkYXRlZCBjb250ZW50XCInKTtcbiAgICBjb25zb2xlLmxvZygnICBcIkNyZWF0ZSBhIG5ldyBndWlkZSBhYm91dCBhdXRoZW50aWNhdGlvblwiJyk7XG4gICAgY29uc29sZS5sb2coKTtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKCdRdWljayBzdGFydDonKTtcbiAgaWYgKHRvb2wgPT09ICdjbGF1ZGUnIHx8IHRvb2wgPT09ICdib3RoJykge1xuICAgIGNvbnNvbGUubG9nKCcgIENsYXVkZSBDb2RlOiAvYm9vdHN0cmFwLWRvY3MnKTtcbiAgfVxuICBpZiAodG9vbCA9PT0gJ2N1cnNvcicgfHwgdG9vbCA9PT0gJ2JvdGgnKSB7XG4gICAgY29uc29sZS5sb2coJyAgQ3Vyc29yOiBBc2sgXCJnZW5lcmF0ZSBpbml0aWFsIGRvY3VtZW50YXRpb24gZnJvbSB0aGlzIHJlcG9cIicpO1xuICB9XG4gIGNvbnNvbGUubG9nKCk7XG4gIFxuICBpZiAoaXNVcGRhdGUpIHtcbiAgICBjb25zb2xlLmxvZygnVGlwOiBSZXN0YXJ0IENsYXVkZSBDb2RlIG9yIEN1cnNvciB0byBsb2FkIHRoZSB1cGRhdGVkIHNraWxscy9ydWxlcy4nKTtcbiAgICBjb25zb2xlLmxvZygpO1xuICB9XG59XG4iXX0=
|
|
@@ -16,8 +16,20 @@ declare const TEMPLATES: {
|
|
|
16
16
|
};
|
|
17
17
|
};
|
|
18
18
|
type TemplateType = keyof typeof TEMPLATES;
|
|
19
|
+
declare const DOC_TYPES: {
|
|
20
|
+
readonly public: {
|
|
21
|
+
readonly name: "Public";
|
|
22
|
+
readonly description: "User-facing docs with custom subdomain and deployment";
|
|
23
|
+
};
|
|
24
|
+
readonly internal: {
|
|
25
|
+
readonly name: "Internal";
|
|
26
|
+
readonly description: "Developer docs for local/private use (no subdomain needed)";
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
type DocType = keyof typeof DOC_TYPES;
|
|
19
30
|
interface CreateOptions {
|
|
20
31
|
template?: TemplateType;
|
|
32
|
+
docType?: DocType;
|
|
21
33
|
git?: boolean;
|
|
22
34
|
install?: boolean;
|
|
23
35
|
url?: string;
|