@brainfish-ai/devdoc 0.1.45 → 0.1.46
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/README.md +45 -2
- package/dist/cli/commands/create.js +25 -8
- package/dist/cli/commands/sdk.d.ts +30 -0
- package/dist/cli/commands/sdk.js +365 -0
- package/dist/cli/index.js +28 -1
- package/dist/sdk/index.d.ts +126 -0
- package/dist/sdk/index.js +871 -0
- package/package.json +7 -3
- package/renderer/app/api/collections/route.js +38 -9
- package/renderer/components/docs-viewer/agent/agent-chat.js +146 -109
- package/renderer/components/docs-viewer/index.js +21 -3
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* SDK Generation CLI Commands
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
|
+
};
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.sdkInit = sdkInit;
|
|
43
|
+
exports.sdkGenerate = sdkGenerate;
|
|
44
|
+
exports.sdkValidate = sdkValidate;
|
|
45
|
+
exports.sdkList = sdkList;
|
|
46
|
+
const path_1 = __importDefault(require("path"));
|
|
47
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
48
|
+
const logger_1 = require("../../utils/logger");
|
|
49
|
+
const sdk_1 = require("../../sdk");
|
|
50
|
+
// Simple prompt helper
|
|
51
|
+
async function prompt(question, defaultValue) {
|
|
52
|
+
const readline = await Promise.resolve().then(() => __importStar(require('readline')));
|
|
53
|
+
const rl = readline.createInterface({
|
|
54
|
+
input: process.stdin,
|
|
55
|
+
output: process.stdout,
|
|
56
|
+
});
|
|
57
|
+
return new Promise((resolve) => {
|
|
58
|
+
const displayQuestion = defaultValue
|
|
59
|
+
? `${question} (${defaultValue}): `
|
|
60
|
+
: `${question}: `;
|
|
61
|
+
rl.question(displayQuestion, (answer) => {
|
|
62
|
+
rl.close();
|
|
63
|
+
resolve(answer.trim() || defaultValue || '');
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
async function promptMultiSelect(question, choices) {
|
|
68
|
+
console.log(`\n${question}\n`);
|
|
69
|
+
choices.forEach((choice, i) => {
|
|
70
|
+
const marker = choice.checked ? '[x]' : '[ ]';
|
|
71
|
+
console.log(` ${i + 1}. ${marker} ${choice.label}`);
|
|
72
|
+
});
|
|
73
|
+
console.log();
|
|
74
|
+
console.log('Enter numbers separated by commas (e.g., 1,2,3):');
|
|
75
|
+
const readline = await Promise.resolve().then(() => __importStar(require('readline')));
|
|
76
|
+
const rl = readline.createInterface({
|
|
77
|
+
input: process.stdin,
|
|
78
|
+
output: process.stdout,
|
|
79
|
+
});
|
|
80
|
+
return new Promise((resolve) => {
|
|
81
|
+
rl.question('> ', (answer) => {
|
|
82
|
+
rl.close();
|
|
83
|
+
if (!answer.trim()) {
|
|
84
|
+
// Return defaults
|
|
85
|
+
resolve(choices.filter((c) => c.checked).map((c) => c.value));
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const indices = answer
|
|
89
|
+
.split(',')
|
|
90
|
+
.map((s) => parseInt(s.trim(), 10) - 1)
|
|
91
|
+
.filter((i) => i >= 0 && i < choices.length);
|
|
92
|
+
resolve(indices.map((i) => choices[i].value));
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Initialize SDK configuration
|
|
98
|
+
*/
|
|
99
|
+
async function sdkInit(options) {
|
|
100
|
+
console.log();
|
|
101
|
+
logger_1.logger.info('🔧 Initialize SDK Generation');
|
|
102
|
+
console.log();
|
|
103
|
+
const projectRoot = process.cwd();
|
|
104
|
+
// Find OpenAPI spec if not provided
|
|
105
|
+
let openapiPath = options.openapi;
|
|
106
|
+
if (!openapiPath) {
|
|
107
|
+
// Look for common OpenAPI spec locations
|
|
108
|
+
const commonPaths = [
|
|
109
|
+
'openapi.json',
|
|
110
|
+
'openapi.yaml',
|
|
111
|
+
'openapi.yml',
|
|
112
|
+
'api-reference/openapi.json',
|
|
113
|
+
'api-reference/openapi.yaml',
|
|
114
|
+
'api-reference/openapi.yml',
|
|
115
|
+
'docs/openapi.json',
|
|
116
|
+
'spec/openapi.json',
|
|
117
|
+
];
|
|
118
|
+
for (const p of commonPaths) {
|
|
119
|
+
if (await fs_extra_1.default.pathExists(path_1.default.join(projectRoot, p))) {
|
|
120
|
+
openapiPath = p;
|
|
121
|
+
logger_1.logger.info(`Found OpenAPI spec at: ${p}`);
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (!openapiPath) {
|
|
126
|
+
openapiPath = await prompt('Path to OpenAPI specification', './openapi.json');
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// Validate spec exists
|
|
130
|
+
const fullSpecPath = path_1.default.resolve(projectRoot, openapiPath);
|
|
131
|
+
if (!(await fs_extra_1.default.pathExists(fullSpecPath))) {
|
|
132
|
+
logger_1.logger.error(`OpenAPI specification not found: ${openapiPath}`);
|
|
133
|
+
process.exit(1);
|
|
134
|
+
}
|
|
135
|
+
// Get package name
|
|
136
|
+
let packageName = options.packageName;
|
|
137
|
+
if (!packageName) {
|
|
138
|
+
// Try to get from docs.json or package.json
|
|
139
|
+
const docsJsonPath = path_1.default.join(projectRoot, 'docs.json');
|
|
140
|
+
const pkgJsonPath = path_1.default.join(projectRoot, 'package.json');
|
|
141
|
+
if (await fs_extra_1.default.pathExists(docsJsonPath)) {
|
|
142
|
+
const docsJson = await fs_extra_1.default.readJson(docsJsonPath);
|
|
143
|
+
packageName = docsJson.name?.toLowerCase().replace(/\s+/g, '-');
|
|
144
|
+
}
|
|
145
|
+
else if (await fs_extra_1.default.pathExists(pkgJsonPath)) {
|
|
146
|
+
const pkgJson = await fs_extra_1.default.readJson(pkgJsonPath);
|
|
147
|
+
packageName = pkgJson.name;
|
|
148
|
+
}
|
|
149
|
+
packageName = await prompt('Base package name', packageName || 'api-sdk');
|
|
150
|
+
}
|
|
151
|
+
// Select languages
|
|
152
|
+
const generators = (0, sdk_1.getGeneratorInfo)();
|
|
153
|
+
const languageChoices = generators.map((g) => ({
|
|
154
|
+
value: g.language,
|
|
155
|
+
label: `${g.displayName}${g.native ? ' (recommended)' : g.requiresJava ? ' (requires Java)' : ''}`,
|
|
156
|
+
checked: g.language === 'typescript' || g.language === 'python',
|
|
157
|
+
}));
|
|
158
|
+
const selectedLanguages = (await promptMultiSelect('Select languages to generate:', languageChoices));
|
|
159
|
+
if (selectedLanguages.length === 0) {
|
|
160
|
+
logger_1.logger.error('At least one language must be selected');
|
|
161
|
+
process.exit(1);
|
|
162
|
+
}
|
|
163
|
+
// Create configuration
|
|
164
|
+
try {
|
|
165
|
+
const { configPath, config } = await (0, sdk_1.initSDKConfig)(projectRoot, {
|
|
166
|
+
openapi: openapiPath,
|
|
167
|
+
packageName,
|
|
168
|
+
languages: selectedLanguages,
|
|
169
|
+
force: options.force,
|
|
170
|
+
});
|
|
171
|
+
console.log();
|
|
172
|
+
logger_1.logger.success(`Created ${path_1.default.basename(configPath)}`);
|
|
173
|
+
console.log();
|
|
174
|
+
console.log('Configuration:');
|
|
175
|
+
console.log(` OpenAPI spec: ${config.openapi}`);
|
|
176
|
+
console.log(` Package name: ${config.packageName}`);
|
|
177
|
+
console.log(` Languages: ${selectedLanguages.join(', ')}`);
|
|
178
|
+
console.log(` Output: ${config.output}`);
|
|
179
|
+
console.log();
|
|
180
|
+
console.log('Next steps:');
|
|
181
|
+
console.log(" Run 'devdoc sdk generate' to generate SDKs");
|
|
182
|
+
console.log(" Run 'devdoc sdk generate --preview' to preview without overwriting");
|
|
183
|
+
console.log();
|
|
184
|
+
}
|
|
185
|
+
catch (error) {
|
|
186
|
+
logger_1.logger.error(error instanceof Error ? error.message : String(error));
|
|
187
|
+
process.exit(1);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Generate SDKs
|
|
192
|
+
*/
|
|
193
|
+
async function sdkGenerate(options) {
|
|
194
|
+
console.log();
|
|
195
|
+
logger_1.logger.info('📦 Generate SDKs');
|
|
196
|
+
console.log();
|
|
197
|
+
const projectRoot = process.cwd();
|
|
198
|
+
// Validate language option if provided
|
|
199
|
+
if (options.lang && !sdk_1.SUPPORTED_LANGUAGES.includes(options.lang)) {
|
|
200
|
+
logger_1.logger.error(`Unsupported language: ${options.lang}`);
|
|
201
|
+
console.log();
|
|
202
|
+
console.log('Supported languages:');
|
|
203
|
+
sdk_1.SUPPORTED_LANGUAGES.forEach((lang) => {
|
|
204
|
+
console.log(` - ${lang}`);
|
|
205
|
+
});
|
|
206
|
+
process.exit(1);
|
|
207
|
+
}
|
|
208
|
+
try {
|
|
209
|
+
// Check if config exists
|
|
210
|
+
const { config, error } = await (0, sdk_1.loadSDKConfig)(projectRoot);
|
|
211
|
+
if (!config) {
|
|
212
|
+
logger_1.logger.error(error || 'SDK configuration not found');
|
|
213
|
+
console.log();
|
|
214
|
+
console.log("Run 'devdoc sdk init' to create a configuration");
|
|
215
|
+
process.exit(1);
|
|
216
|
+
}
|
|
217
|
+
// Validate spec first
|
|
218
|
+
const specPath = (0, sdk_1.resolveSpecPath)(projectRoot, config.openapi);
|
|
219
|
+
logger_1.logger.info('Validating OpenAPI spec...');
|
|
220
|
+
const validation = await (0, sdk_1.validateSpec)(specPath);
|
|
221
|
+
if (!validation.valid) {
|
|
222
|
+
logger_1.logger.error('OpenAPI specification is invalid:');
|
|
223
|
+
validation.errors.forEach((err) => console.log(` - ${err}`));
|
|
224
|
+
process.exit(1);
|
|
225
|
+
}
|
|
226
|
+
if (validation.warnings.length > 0) {
|
|
227
|
+
validation.warnings.forEach((warn) => logger_1.logger.warn(warn));
|
|
228
|
+
}
|
|
229
|
+
logger_1.logger.success('OpenAPI spec is valid');
|
|
230
|
+
console.log();
|
|
231
|
+
// Generate SDKs
|
|
232
|
+
logger_1.logger.info('Generating SDKs...');
|
|
233
|
+
console.log();
|
|
234
|
+
const result = await (0, sdk_1.generateSDKs)(projectRoot, {
|
|
235
|
+
language: options.lang,
|
|
236
|
+
preview: options.preview,
|
|
237
|
+
outputDir: options.output,
|
|
238
|
+
});
|
|
239
|
+
// Display results
|
|
240
|
+
for (const r of result.results) {
|
|
241
|
+
const generator = (0, sdk_1.getGeneratorInfo)().find((g) => g.language === r.language);
|
|
242
|
+
const displayName = generator?.displayName || r.language;
|
|
243
|
+
if (r.success) {
|
|
244
|
+
const relPath = path_1.default.relative(projectRoot, r.outputPath);
|
|
245
|
+
logger_1.logger.success(`${displayName.padEnd(12)} ./${relPath.padEnd(25)} ${(r.duration / 1000).toFixed(1)}s`);
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
logger_1.logger.error(`${displayName.padEnd(12)} Failed: ${r.error}`);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
console.log();
|
|
252
|
+
if (result.failureCount > 0) {
|
|
253
|
+
logger_1.logger.warn(`Generated ${result.successCount} SDK(s), ${result.failureCount} failed`);
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
logger_1.logger.success(`Generated ${result.successCount} SDK(s) in ${(result.totalDuration / 1000).toFixed(1)}s`);
|
|
257
|
+
}
|
|
258
|
+
// Show next steps
|
|
259
|
+
if (result.successCount > 0) {
|
|
260
|
+
console.log();
|
|
261
|
+
console.log('Next steps:');
|
|
262
|
+
for (const r of result.results.filter((r) => r.success)) {
|
|
263
|
+
const relPath = path_1.default.relative(projectRoot, r.outputPath);
|
|
264
|
+
switch (r.language) {
|
|
265
|
+
case 'typescript':
|
|
266
|
+
console.log(` cd ${relPath} && npm install`);
|
|
267
|
+
break;
|
|
268
|
+
case 'python':
|
|
269
|
+
console.log(` cd ${relPath} && pip install -e .`);
|
|
270
|
+
break;
|
|
271
|
+
case 'go':
|
|
272
|
+
console.log(` # Import from ${relPath}`);
|
|
273
|
+
break;
|
|
274
|
+
default:
|
|
275
|
+
console.log(` # See ${relPath}/README.md`);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
console.log();
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
catch (error) {
|
|
282
|
+
logger_1.logger.error(error instanceof Error ? error.message : String(error));
|
|
283
|
+
process.exit(1);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Validate OpenAPI specification
|
|
288
|
+
*/
|
|
289
|
+
async function sdkValidate(specPath) {
|
|
290
|
+
console.log();
|
|
291
|
+
logger_1.logger.info('🔍 Validate OpenAPI Specification');
|
|
292
|
+
console.log();
|
|
293
|
+
const projectRoot = process.cwd();
|
|
294
|
+
// Get spec path from config if not provided
|
|
295
|
+
if (!specPath) {
|
|
296
|
+
const { config } = await (0, sdk_1.loadSDKConfig)(projectRoot);
|
|
297
|
+
if (config) {
|
|
298
|
+
specPath = config.openapi;
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
logger_1.logger.error('No spec path provided and no sdk.json found');
|
|
302
|
+
process.exit(1);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
const fullPath = (0, sdk_1.resolveSpecPath)(projectRoot, specPath);
|
|
306
|
+
logger_1.logger.info(`Validating: ${specPath}`);
|
|
307
|
+
console.log();
|
|
308
|
+
const result = await (0, sdk_1.validateSpec)(fullPath);
|
|
309
|
+
if (result.errors.length > 0) {
|
|
310
|
+
logger_1.logger.error('Errors:');
|
|
311
|
+
result.errors.forEach((err) => console.log(` ✗ ${err}`));
|
|
312
|
+
console.log();
|
|
313
|
+
}
|
|
314
|
+
if (result.warnings.length > 0) {
|
|
315
|
+
logger_1.logger.warn('Warnings:');
|
|
316
|
+
result.warnings.forEach((warn) => console.log(` ⚠ ${warn}`));
|
|
317
|
+
console.log();
|
|
318
|
+
}
|
|
319
|
+
if (result.valid) {
|
|
320
|
+
logger_1.logger.success('Specification is valid');
|
|
321
|
+
}
|
|
322
|
+
else {
|
|
323
|
+
logger_1.logger.error('Specification is invalid');
|
|
324
|
+
process.exit(1);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* List available generators and their status
|
|
329
|
+
*/
|
|
330
|
+
async function sdkList() {
|
|
331
|
+
console.log();
|
|
332
|
+
logger_1.logger.info('📋 SDK Generators');
|
|
333
|
+
console.log();
|
|
334
|
+
const projectRoot = process.cwd();
|
|
335
|
+
const { config } = await (0, sdk_1.loadSDKConfig)(projectRoot);
|
|
336
|
+
const enabledLanguages = config ? (0, sdk_1.getEnabledGenerators)(config) : [];
|
|
337
|
+
const generators = (0, sdk_1.getGeneratorInfo)();
|
|
338
|
+
console.log('Available generators:\n');
|
|
339
|
+
// Native generators (no Java required)
|
|
340
|
+
console.log('Native (no Java required):');
|
|
341
|
+
for (const g of generators.filter((g) => g.native)) {
|
|
342
|
+
const enabled = enabledLanguages.includes(g.language);
|
|
343
|
+
const status = enabled ? logger_1.logger.green('enabled') : logger_1.logger.yellow('disabled');
|
|
344
|
+
console.log(` ${g.displayName.padEnd(12)} ${status}`);
|
|
345
|
+
}
|
|
346
|
+
console.log();
|
|
347
|
+
// Java-based generators
|
|
348
|
+
console.log('OpenAPI Generator (requires Java):');
|
|
349
|
+
for (const g of generators.filter((g) => g.requiresJava)) {
|
|
350
|
+
const enabled = enabledLanguages.includes(g.language);
|
|
351
|
+
const status = enabled ? logger_1.logger.green('enabled') : logger_1.logger.yellow('disabled');
|
|
352
|
+
console.log(` ${g.displayName.padEnd(12)} ${status}`);
|
|
353
|
+
}
|
|
354
|
+
console.log();
|
|
355
|
+
if (!config) {
|
|
356
|
+
console.log("No sdk.json found. Run 'devdoc sdk init' to configure generators.");
|
|
357
|
+
}
|
|
358
|
+
else {
|
|
359
|
+
console.log(`Configuration: sdk.json`);
|
|
360
|
+
console.log(`OpenAPI spec: ${config.openapi}`);
|
|
361
|
+
console.log(`Enabled: ${enabledLanguages.join(', ') || 'none'}`);
|
|
362
|
+
}
|
|
363
|
+
console.log();
|
|
364
|
+
}
|
|
365
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2RrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaS9jb21tYW5kcy9zZGsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9GSCwwQkF5R0M7QUFXRCxrQ0EyR0M7QUFLRCxrQ0EyQ0M7QUFLRCwwQkEwQ0M7QUFoWkQsZ0RBQXdCO0FBQ3hCLHdEQUEwQjtBQUMxQiwrQ0FBNEM7QUFDNUMsbUNBV21CO0FBRW5CLHVCQUF1QjtBQUN2QixLQUFLLFVBQVUsTUFBTSxDQUFDLFFBQWdCLEVBQUUsWUFBcUI7SUFDM0QsTUFBTSxRQUFRLEdBQUcsd0RBQWEsVUFBVSxHQUFDLENBQUM7SUFDMUMsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQztRQUNsQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7UUFDcEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0tBQ3ZCLENBQUMsQ0FBQztJQUVILE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUM3QixNQUFNLGVBQWUsR0FBRyxZQUFZO1lBQ2xDLENBQUMsQ0FBQyxHQUFHLFFBQVEsS0FBSyxZQUFZLEtBQUs7WUFDbkMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxJQUFJLENBQUM7UUFFcEIsRUFBRSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUN0QyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELEtBQUssVUFBVSxpQkFBaUIsQ0FDOUIsUUFBZ0IsRUFDaEIsT0FBOEQ7SUFFOUQsT0FBTyxDQUFDLEdBQUcs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VUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7UUFDekQsTUFBTSxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0RCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0UsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUVkLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUVBQW1FLENBQUMsQ0FBQztJQUNuRixDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUN2QyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUMvQyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTREsgR2VuZXJhdGlvbiBDTEkgQ29tbWFuZHNcbiAqL1xuXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXInO1xuaW1wb3J0IHtcbiAgZ2VuZXJhdGVTREtzLFxuICB2YWxpZGF0ZVNwZWMsXG4gIGluaXRTREtDb25maWcsXG4gIGxvYWRTREtDb25maWcsXG4gIGdldEVuYWJsZWRHZW5lcmF0b3JzLFxuICBnZXRHZW5lcmF0b3JJbmZvLFxuICByZXNvbHZlU3BlY1BhdGgsXG4gIGlzTmF0aXZlR2VuZXJhdG9yLFxuICBTREtMYW5ndWFnZSxcbiAgU1VQUE9SVEVEX0xBTkdVQUdFUyxcbn0gZnJvbSAnLi4vLi4vc2RrJztcblxuLy8gU2ltcGxlIHByb21wdCBoZWxwZXJcbmFzeW5jIGZ1bmN0aW9uIHByb21wdChxdWVzdGlvbjogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCByZWFkbGluZSA9IGF3YWl0IGltcG9ydCgncmVhZGxpbmUnKTtcbiAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoe1xuICAgIGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuICAgIG91dHB1dDogcHJvY2Vzcy5zdGRvdXQsXG4gIH0pO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IGRpc3BsYXlRdWVzdGlvbiA9IGRlZmF1bHRWYWx1ZVxuICAgICAgPyBgJHtxdWVzdGlvbn0gKCR7ZGVmYXVsdFZhbHVlfSk6IGBcbiAgICAgIDogYCR7cXVlc3Rpb259OiBgO1xuXG4gICAgcmwucXVlc3Rpb24oZGlzcGxheVF1ZXN0aW9uLCAoYW5zd2VyKSA9PiB7XG4gICAgICBybC5jbG9zZSgpO1xuICAgICAgcmVzb2x2ZShhbnN3ZXIudHJpbSgpIHx8IGRlZmF1bHRWYWx1ZSB8fCAnJyk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcm9tcHRNdWx0aVNlbGVjdChcbiAgcXVlc3Rpb246IHN0cmluZyxcbiAgY2hvaWNlczogeyB2YWx1ZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nOyBjaGVja2VkPzogYm9vbGVhbiB9W11cbik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc29sZS5sb2coYFxcbiR7cXVlc3Rpb259XFxuYCk7XG4gIGNob2ljZXMuZm9yRWFjaCgoY2hvaWNlLCBpKSA9PiB7XG4gICAgY29uc3QgbWFya2VyID0gY2hvaWNlLmNoZWNrZWQgPyAnW3hdJyA6ICdbIF0nO1xuICAgIGNvbnNvbGUubG9nKGAgICR7aSArIDF9LiAke21hcmtlcn0gJHtjaG9pY2UubGFiZWx9YCk7XG4gIH0pO1xuICBjb25zb2xlLmxvZygpO1xuICBjb25zb2xlLmxvZygnRW50ZXIgbnVtYmVycyBzZXBhcmF0ZWQgYnkgY29tbWFzIChlLmcuLCAxLDIsMyk6Jyk7XG5cbiAgY29uc3QgcmVhZGxpbmUgPSBhd2FpdCBpbXBvcnQoJ3JlYWRsaW5lJyk7XG4gIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHtcbiAgICBpbnB1dDogcHJvY2Vzcy5zdGRpbixcbiAgICBvdXRwdXQ6IHByb2Nlc3Muc3Rkb3V0LFxuICB9KTtcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBybC5xdWVzdGlvbignPiAnLCAoYW5zd2VyKSA9PiB7XG4gICAgICBybC5jbG9zZSgpO1xuICAgICAgaWYgKCFhbnN3ZXIudHJpbSgpKSB7XG4gICAgICAgIC8vIFJldHVybiBkZWZhdWx0c1xuICAgICAgICByZXNvbHZlKGNob2ljZXMuZmlsdGVyKChjKSA9PiBjLmNoZWNrZWQpLm1hcCgoYykgPT4gYy52YWx1ZSkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGluZGljZXMgPSBhbnN3ZXJcbiAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgLm1hcCgocykgPT4gcGFyc2VJbnQocy50cmltKCksIDEwKSAtIDEpXG4gICAgICAgIC5maWx0ZXIoKGkpID0+IGkgPj0gMCAmJiBpIDwgY2hvaWNlcy5sZW5ndGgpO1xuXG4gICAgICByZXNvbHZlKGluZGljZXMubWFwKChpKSA9PiBjaG9pY2VzW2ldLnZhbHVlKSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5pbnRlcmZhY2UgU0RLSW5pdE9wdGlvbnMge1xuICBvcGVuYXBpPzogc3RyaW5nO1xuICBwYWNrYWdlTmFtZT86IHN0cmluZztcbiAgZm9yY2U/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemUgU0RLIGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNka0luaXQob3B0aW9uczogU0RLSW5pdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc29sZS5sb2coKTtcbiAgbG9nZ2VyLmluZm8oJ/CflKcgSW5pdGlhbGl6ZSBTREsgR2VuZXJhdGlvbicpO1xuICBjb25zb2xlLmxvZygpO1xuXG4gIGNvbnN0IHByb2plY3RSb290ID0gcHJvY2Vzcy5jd2QoKTtcblxuICAvLyBGaW5kIE9wZW5BUEkgc3BlYyBpZiBub3QgcHJvdmlkZWRcbiAgbGV0IG9wZW5hcGlQYXRoID0gb3B0aW9ucy5vcGVuYXBpO1xuXG4gIGlmICghb3BlbmFwaVBhdGgpIHtcbiAgICAvLyBMb29rIGZvciBjb21tb24gT3BlbkFQSSBzcGVjIGxvY2F0aW9uc1xuICAgIGNvbnN0IGNvbW1vblBhdGhzID0gW1xuICAgICAgJ29wZW5hcGkuanNvbicsXG4gICAgICAnb3BlbmFwaS55YW1sJyxcbiAgICAgICdvcGVuYXBpLnltbCcsXG4gICAgICAnYXBpLXJlZmVyZW5jZS9vcGVuYXBpLmpzb24nLFxuICAgICAgJ2FwaS1yZWZlcmVuY2Uvb3BlbmFwaS55YW1sJyxcbiAgICAgICdhcGktcmVmZXJlbmNlL29wZW5hcGkueW1sJyxcbiAgICAgICdkb2NzL29wZW5hcGkuanNvbicsXG4gICAgICAnc3BlYy9vcGVuYXBpLmpzb24nLFxuICAgIF07XG5cbiAgICBmb3IgKGNvbnN0IHAgb2YgY29tbW9uUGF0aHMpIHtcbiAgICAgIGlmIChhd2FpdCBmcy5wYXRoRXhpc3RzKHBhdGguam9pbihwcm9qZWN0Um9vdCwgcCkpKSB7XG4gICAgICAgIG9wZW5hcGlQYXRoID0gcDtcbiAgICAgICAgbG9nZ2VyLmluZm8oYEZvdW5kIE9wZW5BUEkgc3BlYyBhdDogJHtwfWApO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIW9wZW5hcGlQYXRoKSB7XG4gICAgICBvcGVuYXBpUGF0aCA9IGF3YWl0IHByb21wdCgnUGF0aCB0byBPcGVuQVBJIHNwZWNpZmljYXRpb24nLCAnLi9vcGVuYXBpLmpzb24nKTtcbiAgICB9XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBzcGVjIGV4aXN0c1xuICBjb25zdCBmdWxsU3BlY1BhdGggPSBwYXRoLnJlc29sdmUocHJvamVjdFJvb3QsIG9wZW5hcGlQYXRoKTtcbiAgaWYgKCEoYXdhaXQgZnMucGF0aEV4aXN0cyhmdWxsU3BlY1BhdGgpKSkge1xuICAgIGxvZ2dlci5lcnJvcihgT3BlbkFQSSBzcGVjaWZpY2F0aW9uIG5vdCBmb3VuZDogJHtvcGVuYXBpUGF0aH1gKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICAvLyBHZXQgcGFja2FnZSBuYW1lXG4gIGxldCBwYWNrYWdlTmFtZSA9IG9wdGlvbnMucGFja2FnZU5hbWU7XG4gIGlmICghcGFja2FnZU5hbWUpIHtcbiAgICAvLyBUcnkgdG8gZ2V0IGZyb20gZG9jcy5qc29uIG9yIHBhY2thZ2UuanNvblxuICAgIGNvbnN0IGRvY3NKc29uUGF0aCA9IHBhdGguam9pbihwcm9qZWN0Um9vdCwgJ2RvY3MuanNvbicpO1xuICAgIGNvbnN0IHBrZ0pzb25QYXRoID0gcGF0aC5qb2luKHByb2plY3RSb290LCAncGFja2FnZS5qc29uJyk7XG5cbiAgICBpZiAoYXdhaXQgZnMucGF0aEV4aXN0cyhkb2NzSnNvblBhdGgpKSB7XG4gICAgICBjb25zdCBkb2NzSnNvbiA9IGF3YWl0IGZzLnJlYWRKc29uKGRvY3NKc29uUGF0aCk7XG4gICAgICBwYWNrYWdlTmFtZSA9IGRvY3NKc29uLm5hbWU/LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzKy9nLCAnLScpO1xuICAgIH0gZWxzZSBpZiAoYXdhaXQgZnMucGF0aEV4aXN0cyhwa2dKc29uUGF0aCkpIHtcbiAgICAgIGNvbnN0IHBrZ0pzb24gPSBhd2FpdCBmcy5yZWFkSnNvbihwa2dKc29uUGF0aCk7XG4gICAgICBwYWNrYWdlTmFtZSA9IHBrZ0pzb24ubmFtZTtcbiAgICB9XG5cbiAgICBwYWNrYWdlTmFtZSA9IGF3YWl0IHByb21wdCgnQmFzZSBwYWNrYWdlIG5hbWUnLCBwYWNrYWdlTmFtZSB8fCAnYXBpLXNkaycpO1xuICB9XG5cbiAgLy8gU2VsZWN0IGxhbmd1YWdlc1xuICBjb25zdCBnZW5lcmF0b3JzID0gZ2V0R2VuZXJhdG9ySW5mbygpO1xuICBjb25zdCBsYW5ndWFnZUNob2ljZXMgPSBnZW5lcmF0b3JzLm1hcCgoZykgPT4gKHtcbiAgICB2YWx1ZTogZy5sYW5ndWFnZSxcbiAgICBsYWJlbDogYCR7Zy5kaXNwbGF5TmFtZX0ke2cubmF0aXZlID8gJyAocmVjb21tZW5kZWQpJyA6IGcucmVxdWlyZXNKYXZhID8gJyAocmVxdWlyZXMgSmF2YSknIDogJyd9YCxcbiAgICBjaGVja2VkOiBnLmxhbmd1YWdlID09PSAndHlwZXNjcmlwdCcgfHwgZy5sYW5ndWFnZSA9PT0gJ3B5dGhvbicsXG4gIH0pKTtcblxuICBjb25zdCBzZWxlY3RlZExhbmd1YWdlcyA9IChhd2FpdCBwcm9tcHRNdWx0aVNlbGVjdChcbiAgICAnU2VsZWN0IGxhbmd1YWdlcyB0byBnZW5lcmF0ZTonLFxuICAgIGxhbmd1YWdlQ2hvaWNlc1xuICApKSBhcyBTREtMYW5ndWFnZVtdO1xuXG4gIGlmIChzZWxlY3RlZExhbmd1YWdlcy5sZW5ndGggPT09IDApIHtcbiAgICBsb2dnZXIuZXJyb3IoJ0F0IGxlYXN0IG9uZSBsYW5ndWFnZSBtdXN0IGJlIHNlbGVjdGVkJyk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgLy8gQ3JlYXRlIGNvbmZpZ3VyYXRpb25cbiAgdHJ5IHtcbiAgICBjb25zdCB7IGNvbmZpZ1BhdGgsIGNvbmZpZyB9ID0gYXdhaXQgaW5pdFNES0NvbmZpZyhwcm9qZWN0Um9vdCwge1xuICAgICAgb3BlbmFwaTogb3BlbmFwaVBhdGgsXG4gICAgICBwYWNrYWdlTmFtZSxcbiAgICAgIGxhbmd1YWdlczogc2VsZWN0ZWRMYW5ndWFnZXMsXG4gICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZSxcbiAgICB9KTtcblxuICAgIGNvbnNvbGUubG9nKCk7XG4gICAgbG9nZ2VyLnN1Y2Nlc3MoYENyZWF0ZWQgJHtwYXRoLmJhc2VuYW1lKGNvbmZpZ1BhdGgpfWApO1xuICAgIGNvbnNvbGUubG9nKCk7XG4gICAgY29uc29sZS5sb2coJ0NvbmZpZ3VyYXRpb246Jyk7XG4gICAgY29uc29sZS5sb2coYCAgT3BlbkFQSSBzcGVjOiAke2NvbmZpZy5vcGVuYXBpfWApO1xuICAgIGNvbnNvbGUubG9nKGAgIFBhY2thZ2UgbmFtZTogJHtjb25maWcucGFja2FnZU5hbWV9YCk7XG4gICAgY29uc29sZS5sb2coYCAgTGFuZ3VhZ2VzOiAke3NlbGVjdGVkTGFuZ3VhZ2VzLmpvaW4oJywgJyl9YCk7XG4gICAgY29uc29sZS5sb2coYCAgT3V0cHV0OiAke2NvbmZpZy5vdXRwdXR9YCk7XG4gICAgY29uc29sZS5sb2coKTtcbiAgICBjb25zb2xlLmxvZygnTmV4dCBzdGVwczonKTtcbiAgICBjb25zb2xlLmxvZyhcIiAgUnVuICdkZXZkb2Mgc2RrIGdlbmVyYXRlJyB0byBnZW5lcmF0ZSBTREtzXCIpO1xuICAgIGNvbnNvbGUubG9nKFwiICBSdW4gJ2RldmRvYyBzZGsgZ2VuZXJhdGUgLS1wcmV2aWV3JyB0byBwcmV2aWV3IHdpdGhvdXQgb3ZlcndyaXRpbmdcIik7XG4gICAgY29uc29sZS5sb2coKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZXJyb3IoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cbn1cblxuaW50ZXJmYWNlIFNES0dlbmVyYXRlT3B0aW9ucyB7XG4gIGxhbmc/OiBzdHJpbmc7XG4gIHByZXZpZXc/OiBib29sZWFuO1xuICBvdXRwdXQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgU0RLc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2RrR2VuZXJhdGUob3B0aW9uczogU0RLR2VuZXJhdGVPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnNvbGUubG9nKCk7XG4gIGxvZ2dlci5pbmZvKCfwn5OmIEdlbmVyYXRlIFNES3MnKTtcbiAgY29uc29sZS5sb2coKTtcblxuICBjb25zdCBwcm9qZWN0Um9vdCA9IHByb2Nlc3MuY3dkKCk7XG5cbiAgLy8gVmFsaWRhdGUgbGFuZ3VhZ2Ugb3B0aW9uIGlmIHByb3ZpZGVkXG4gIGlmIChvcHRpb25zLmxhbmcgJiYgIVNVUFBPUlRFRF9MQU5HVUFHRVMuaW5jbHVkZXMob3B0aW9ucy5sYW5nIGFzIFNES0xhbmd1YWdlKSkge1xuICAgIGxvZ2dlci5lcnJvcihgVW5zdXBwb3J0ZWQgbGFuZ3VhZ2U6ICR7b3B0aW9ucy5sYW5nfWApO1xuICAgIGNvbnNvbGUubG9nKCk7XG4gICAgY29uc29sZS5sb2coJ1N1cHBvcnRlZCBsYW5ndWFnZXM6Jyk7XG4gICAgU1VQUE9SVEVEX0xBTkdVQUdFUy5mb3JFYWNoKChsYW5nKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhgICAtICR7bGFuZ31gKTtcbiAgICB9KTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIENoZWNrIGlmIGNvbmZpZyBleGlzdHNcbiAgICBjb25zdCB7IGNvbmZpZywgZXJyb3IgfSA9IGF3YWl0IGxvYWRTREtDb25maWcocHJvamVjdFJvb3QpO1xuXG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihlcnJvciB8fCAnU0RLIGNvbmZpZ3VyYXRpb24gbm90IGZvdW5kJyk7XG4gICAgICBjb25zb2xlLmxvZygpO1xuICAgICAgY29uc29sZS5sb2coXCJSdW4gJ2RldmRvYyBzZGsgaW5pdCcgdG8gY3JlYXRlIGEgY29uZmlndXJhdGlvblwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBzcGVjIGZpcnN0XG4gICAgY29uc3Qgc3BlY1BhdGggPSByZXNvbHZlU3BlY1BhdGgocHJvamVjdFJvb3QsIGNvbmZpZy5vcGVuYXBpKTtcbiAgICBsb2dnZXIuaW5mbygnVmFsaWRhdGluZyBPcGVuQVBJIHNwZWMuLi4nKTtcbiAgICBcbiAgICBjb25zdCB2YWxpZGF0aW9uID0gYXdhaXQgdmFsaWRhdGVTcGVjKHNwZWNQYXRoKTtcbiAgICBcbiAgICBpZiAoIXZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignT3BlbkFQSSBzcGVjaWZpY2F0aW9uIGlzIGludmFsaWQ6Jyk7XG4gICAgICB2YWxpZGF0aW9uLmVycm9ycy5mb3JFYWNoKChlcnIpID0+IGNvbnNvbGUubG9nKGAgIC0gJHtlcnJ9YCkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgICBcbiAgICBpZiAodmFsaWRhdGlvbi53YXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICB2YWxpZGF0aW9uLndhcm5pbmdzLmZvckVhY2goKHdhcm4pID0+IGxvZ2dlci53YXJuKHdhcm4pKTtcbiAgICB9XG4gICAgXG4gICAgbG9nZ2VyLnN1Y2Nlc3MoJ09wZW5BUEkgc3BlYyBpcyB2YWxpZCcpO1xuICAgIGNvbnNvbGUubG9nKCk7XG5cbiAgICAvLyBHZW5lcmF0ZSBTREtzXG4gICAgbG9nZ2VyLmluZm8oJ0dlbmVyYXRpbmcgU0RLcy4uLicpO1xuICAgIGNvbnNvbGUubG9nKCk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZW5lcmF0ZVNES3MocHJvamVjdFJvb3QsIHtcbiAgICAgIGxhbmd1YWdlOiBvcHRpb25zLmxhbmcgYXMgU0RLTGFuZ3VhZ2UgfCB1bmRlZmluZWQsXG4gICAgICBwcmV2aWV3OiBvcHRpb25zLnByZXZpZXcsXG4gICAgICBvdXRwdXREaXI6IG9wdGlvbnMub3V0cHV0LFxuICAgIH0pO1xuXG4gICAgLy8gRGlzcGxheSByZXN1bHRzXG4gICAgZm9yIChjb25zdCByIG9mIHJlc3VsdC5yZXN1bHRzKSB7XG4gICAgICBjb25zdCBnZW5lcmF0b3IgPSBnZXRHZW5lcmF0b3JJbmZvKCkuZmluZCgoZykgPT4gZy5sYW5ndWFnZSA9PT0gci5sYW5ndWFnZSk7XG4gICAgICBjb25zdCBkaXNwbGF5TmFtZSA9IGdlbmVyYXRvcj8uZGlzcGxheU5hbWUgfHwgci5sYW5ndWFnZTtcblxuICAgICAgaWYgKHIuc3VjY2Vzcykge1xuICAgICAgICBjb25zdCByZWxQYXRoID0gcGF0aC5yZWxhdGl2ZShwcm9qZWN0Um9vdCwgci5vdXRwdXRQYXRoKTtcbiAgICAgICAgbG9nZ2VyLnN1Y2Nlc3MoYCR7ZGlzcGxheU5hbWUucGFkRW5kKDEyKX0gLi8ke3JlbFBhdGgucGFkRW5kKDI1KX0gJHsoci5kdXJhdGlvbiAvIDEwMDApLnRvRml4ZWQoMSl9c2ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKGAke2Rpc3BsYXlOYW1lLnBhZEVuZCgxMil9IEZhaWxlZDogJHtyLmVycm9yfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKCk7XG5cbiAgICBpZiAocmVzdWx0LmZhaWx1cmVDb3VudCA+IDApIHtcbiAgICAgIGxvZ2dlci53YXJuKGBHZW5lcmF0ZWQgJHtyZXN1bHQuc3VjY2Vzc0NvdW50fSBTREsocyksICR7cmVzdWx0LmZhaWx1cmVDb3VudH0gZmFpbGVkYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5zdWNjZXNzKGBHZW5lcmF0ZWQgJHtyZXN1bHQuc3VjY2Vzc0NvdW50fSBTREsocykgaW4gJHsocmVzdWx0LnRvdGFsRHVyYXRpb24gLyAxMDAwKS50b0ZpeGVkKDEpfXNgKTtcbiAgICB9XG5cbiAgICAvLyBTaG93IG5leHQgc3RlcHNcbiAgICBpZiAocmVzdWx0LnN1Y2Nlc3NDb3VudCA+IDApIHtcbiAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICBjb25zb2xlLmxvZygnTmV4dCBzdGVwczonKTtcbiAgICAgIFxuICAgICAgZm9yIChjb25zdCByIG9mIHJlc3VsdC5yZXN1bHRzLmZpbHRlcigocikgPT4gci5zdWNjZXNzKSkge1xuICAgICAgICBjb25zdCByZWxQYXRoID0gcGF0aC5yZWxhdGl2ZShwcm9qZWN0Um9vdCwgci5vdXRwdXRQYXRoKTtcbiAgICAgICAgXG4gICAgICAgIHN3aXRjaCAoci5sYW5ndWFnZSkge1xuICAgICAgICAgIGNhc2UgJ3R5cGVzY3JpcHQnOlxuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgY2QgJHtyZWxQYXRofSAmJiBucG0gaW5zdGFsbGApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncHl0aG9uJzpcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgIGNkICR7cmVsUGF0aH0gJiYgcGlwIGluc3RhbGwgLWUgLmApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZ28nOlxuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgIyBJbXBvcnQgZnJvbSAke3JlbFBhdGh9YCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgIyBTZWUgJHtyZWxQYXRofS9SRUFETUUubWRgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc29sZS5sb2coKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nZ2VyLmVycm9yKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGUgT3BlbkFQSSBzcGVjaWZpY2F0aW9uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZGtWYWxpZGF0ZShzcGVjUGF0aD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zb2xlLmxvZygpO1xuICBsb2dnZXIuaW5mbygn8J+UjSBWYWxpZGF0ZSBPcGVuQVBJIFNwZWNpZmljYXRpb24nKTtcbiAgY29uc29sZS5sb2coKTtcblxuICBjb25zdCBwcm9qZWN0Um9vdCA9IHByb2Nlc3MuY3dkKCk7XG5cbiAgLy8gR2V0IHNwZWMgcGF0aCBmcm9tIGNvbmZpZyBpZiBub3QgcHJvdmlkZWRcbiAgaWYgKCFzcGVjUGF0aCkge1xuICAgIGNvbnN0IHsgY29uZmlnIH0gPSBhd2FpdCBsb2FkU0RLQ29uZmlnKHByb2plY3RSb290KTtcbiAgICBcbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICBzcGVjUGF0aCA9IGNvbmZpZy5vcGVuYXBpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ05vIHNwZWMgcGF0aCBwcm92aWRlZCBhbmQgbm8gc2RrLmpzb24gZm91bmQnKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBmdWxsUGF0aCA9IHJlc29sdmVTcGVjUGF0aChwcm9qZWN0Um9vdCwgc3BlY1BhdGgpO1xuICBsb2dnZXIuaW5mbyhgVmFsaWRhdGluZzogJHtzcGVjUGF0aH1gKTtcbiAgY29uc29sZS5sb2coKTtcblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCB2YWxpZGF0ZVNwZWMoZnVsbFBhdGgpO1xuXG4gIGlmIChyZXN1bHQuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yczonKTtcbiAgICByZXN1bHQuZXJyb3JzLmZvckVhY2goKGVycikgPT4gY29uc29sZS5sb2coYCAg4pyXICR7ZXJyfWApKTtcbiAgICBjb25zb2xlLmxvZygpO1xuICB9XG5cbiAgaWYgKHJlc3VsdC53YXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgbG9nZ2VyLndhcm4oJ1dhcm5pbmdzOicpO1xuICAgIHJlc3VsdC53YXJuaW5ncy5mb3JFYWNoKCh3YXJuKSA9PiBjb25zb2xlLmxvZyhgICDimqAgJHt3YXJufWApKTtcbiAgICBjb25zb2xlLmxvZygpO1xuICB9XG5cbiAgaWYgKHJlc3VsdC52YWxpZCkge1xuICAgIGxvZ2dlci5zdWNjZXNzKCdTcGVjaWZpY2F0aW9uIGlzIHZhbGlkJyk7XG4gIH0gZWxzZSB7XG4gICAgbG9nZ2VyLmVycm9yKCdTcGVjaWZpY2F0aW9uIGlzIGludmFsaWQnKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cbn1cblxuLyoqXG4gKiBMaXN0IGF2YWlsYWJsZSBnZW5lcmF0b3JzIGFuZCB0aGVpciBzdGF0dXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNka0xpc3QoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnNvbGUubG9nKCk7XG4gIGxvZ2dlci5pbmZvKCfwn5OLIFNESyBHZW5lcmF0b3JzJyk7XG4gIGNvbnNvbGUubG9nKCk7XG5cbiAgY29uc3QgcHJvamVjdFJvb3QgPSBwcm9jZXNzLmN3ZCgpO1xuICBjb25zdCB7IGNvbmZpZyB9ID0gYXdhaXQgbG9hZFNES0NvbmZpZyhwcm9qZWN0Um9vdCk7XG4gIGNvbnN0IGVuYWJsZWRMYW5ndWFnZXMgPSBjb25maWcgPyBnZXRFbmFibGVkR2VuZXJhdG9ycyhjb25maWcpIDogW107XG5cbiAgY29uc3QgZ2VuZXJhdG9ycyA9IGdldEdlbmVyYXRvckluZm8oKTtcblxuICBjb25zb2xlLmxvZygnQXZhaWxhYmxlIGdlbmVyYXRvcnM6XFxuJyk7XG5cbiAgLy8gTmF0aXZlIGdlbmVyYXRvcnMgKG5vIEphdmEgcmVxdWlyZWQpXG4gIGNvbnNvbGUubG9nKCdOYXRpdmUgKG5vIEphdmEgcmVxdWlyZWQpOicpO1xuICBmb3IgKGNvbnN0IGcgb2YgZ2VuZXJhdG9ycy5maWx0ZXIoKGcpID0+IGcubmF0aXZlKSkge1xuICAgIGNvbnN0IGVuYWJsZWQgPSBlbmFibGVkTGFuZ3VhZ2VzLmluY2x1ZGVzKGcubGFuZ3VhZ2UpO1xuICAgIGNvbnN0IHN0YXR1cyA9IGVuYWJsZWQgPyBsb2dnZXIuZ3JlZW4oJ2VuYWJsZWQnKSA6IGxvZ2dlci55ZWxsb3coJ2Rpc2FibGVkJyk7XG4gICAgY29uc29sZS5sb2coYCAgJHtnLmRpc3BsYXlOYW1lLnBhZEVuZCgxMil9ICR7c3RhdHVzfWApO1xuICB9XG5cbiAgY29uc29sZS5sb2coKTtcblxuICAvLyBKYXZhLWJhc2VkIGdlbmVyYXRvcnNcbiAgY29uc29sZS5sb2coJ09wZW5BUEkgR2VuZXJhdG9yIChyZXF1aXJlcyBKYXZhKTonKTtcbiAgZm9yIChjb25zdCBnIG9mIGdlbmVyYXRvcnMuZmlsdGVyKChnKSA9PiBnLnJlcXVpcmVzSmF2YSkpIHtcbiAgICBjb25zdCBlbmFibGVkID0gZW5hYmxlZExhbmd1YWdlcy5pbmNsdWRlcyhnLmxhbmd1YWdlKTtcbiAgICBjb25zdCBzdGF0dXMgPSBlbmFibGVkID8gbG9nZ2VyLmdyZWVuKCdlbmFibGVkJykgOiBsb2dnZXIueWVsbG93KCdkaXNhYmxlZCcpO1xuICAgIGNvbnNvbGUubG9nKGAgICR7Zy5kaXNwbGF5TmFtZS5wYWRFbmQoMTIpfSAke3N0YXR1c31gKTtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKCk7XG5cbiAgaWYgKCFjb25maWcpIHtcbiAgICBjb25zb2xlLmxvZyhcIk5vIHNkay5qc29uIGZvdW5kLiBSdW4gJ2RldmRvYyBzZGsgaW5pdCcgdG8gY29uZmlndXJlIGdlbmVyYXRvcnMuXCIpO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKGBDb25maWd1cmF0aW9uOiBzZGsuanNvbmApO1xuICAgIGNvbnNvbGUubG9nKGBPcGVuQVBJIHNwZWM6ICR7Y29uZmlnLm9wZW5hcGl9YCk7XG4gICAgY29uc29sZS5sb2coYEVuYWJsZWQ6ICR7ZW5hYmxlZExhbmd1YWdlcy5qb2luKCcsICcpIHx8ICdub25lJ31gKTtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKCk7XG59XG4iXX0=
|
package/dist/cli/index.js
CHANGED
|
@@ -13,6 +13,7 @@ const whoami_1 = require("./commands/whoami");
|
|
|
13
13
|
const upload_1 = require("./commands/upload");
|
|
14
14
|
const ai_1 = require("./commands/ai");
|
|
15
15
|
const domain_1 = require("./commands/domain");
|
|
16
|
+
const sdk_1 = require("./commands/sdk");
|
|
16
17
|
const packageJson = require('../../package.json');
|
|
17
18
|
const program = new commander_1.Command();
|
|
18
19
|
program
|
|
@@ -142,5 +143,31 @@ domainCmd
|
|
|
142
143
|
.option('-u, --url <url>', 'API URL')
|
|
143
144
|
.option('-k, --api-key <key>', 'API key for authentication')
|
|
144
145
|
.action(domain_1.domainRemove);
|
|
146
|
+
// SDK generation
|
|
147
|
+
const sdkCmd = program
|
|
148
|
+
.command('sdk')
|
|
149
|
+
.description('Generate client SDKs from OpenAPI specification');
|
|
150
|
+
sdkCmd
|
|
151
|
+
.command('init')
|
|
152
|
+
.description('Initialize SDK generation configuration')
|
|
153
|
+
.option('-o, --openapi <path>', 'Path to OpenAPI specification')
|
|
154
|
+
.option('-n, --package-name <name>', 'Base package name for generated SDKs')
|
|
155
|
+
.option('-f, --force', 'Overwrite existing configuration')
|
|
156
|
+
.action(sdk_1.sdkInit);
|
|
157
|
+
sdkCmd
|
|
158
|
+
.command('generate')
|
|
159
|
+
.description('Generate SDKs for configured languages')
|
|
160
|
+
.option('-l, --lang <language>', 'Generate only for specific language')
|
|
161
|
+
.option('-p, --preview', 'Preview what would be generated without writing files')
|
|
162
|
+
.option('-o, --output <dir>', 'Override output directory')
|
|
163
|
+
.action(sdk_1.sdkGenerate);
|
|
164
|
+
sdkCmd
|
|
165
|
+
.command('validate [spec]')
|
|
166
|
+
.description('Validate OpenAPI specification')
|
|
167
|
+
.action(sdk_1.sdkValidate);
|
|
168
|
+
sdkCmd
|
|
169
|
+
.command('list')
|
|
170
|
+
.description('List available generators and their status')
|
|
171
|
+
.action(sdk_1.sdkList);
|
|
145
172
|
program.parse(process.argv);
|
|
146
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseUNBQW9DO0FBQ3BDLDhDQUEyQztBQUMzQywwQ0FBdUM7QUFDdkMsd0NBQXFDO0FBQ3JDLDRDQUF5QztBQUN6Qyw0Q0FBeUM7QUFDekMsNENBQXlDO0FBQ3pDLDhDQUEyQztBQUMzQywwQ0FBMEQ7QUFDMUQsOENBQTJDO0FBQzNDLDhDQUF1RDtBQUN2RCxzQ0FBbUM7QUFDbkMsOENBQXdGO0FBRXhGLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBRWxELE1BQU0sT0FBTyxHQUFHLElBQUksbUJBQU8sRUFBRSxDQUFDO0FBRTlCLE9BQU87S0FDSixJQUFJLENBQUMsUUFBUSxDQUFDO0tBQ2QsV0FBVyxDQUFDLHdDQUF3QyxDQUFDO0tBQ3JELE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFaEMsT0FBTztLQUNKLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQztLQUNyQyxXQUFXLENBQUMsd0NBQXdDLENBQUM7S0FDckQsTUFBTSxDQUFDLHVCQUF1QixFQUFFLDJDQUEyQyxDQUFDO0tBQzVFLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSx1Q0FBdUMsQ0FBQztLQUN4RSxNQUFNLENBQUMsNkJBQTZCLEVBQUUsbURBQW1ELENBQUM7S0FDMUYsTUFBTSxDQUFDLFVBQVUsRUFBRSx5QkFBeUIsQ0FBQztLQUM3QyxNQUFNLENBQUMsY0FBYyxFQUFFLDhCQUE4QixDQUFDO0tBQ3RELE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxzQ0FBc0MsQ0FBQztLQUNqRSxNQUFNLENBQUMsZUFBTSxDQUFDLENBQUM7QUFFbEIsT0FBTztLQUNKLE9BQU8sQ0FBQyxNQUFNLENBQUM7S0FDZixXQUFXLENBQUMsNENBQTRDLENBQUM7S0FDekQsTUFBTSxDQUFDLG1CQUFtQixFQUFFLGNBQWMs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QVMsQ0FBQztLQUNwQyxNQUFNLENBQUMscUJBQXFCLEVBQUUsNEJBQTRCLENBQUM7S0FDM0QsTUFBTSxDQUFDLHFCQUFZLENBQUMsQ0FBQztBQUV4QixTQUFTO0tBQ04sT0FBTyxDQUFDLFFBQVEsQ0FBQztLQUNqQixXQUFXLENBQUMsaURBQWlELENBQUM7S0FDOUQsTUFBTSxDQUFDLGlCQUFpQixFQUFFLFNBQVMsQ0FBQztLQUNwQyxNQUFNLENBQUMscUJBQXFCLEVBQUUsNEJBQTRCLENBQUM7S0FDM0QsTUFBTSxDQUFDLHFCQUFZLENBQUMsQ0FBQztBQUV4QixTQUFTO0tBQ04sT0FBTyxDQUFDLHdCQUF3QixDQUFDO0tBQ2pDLFdBQVcsQ0FBQyxtQ0FBbUMsQ0FBQztLQUNoRCxNQUFNLENBQUMsaUJBQWlCLEVBQUUsU0FBUyxDQUFDO0tBQ3BDLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSw0QkFBNEIsQ0FBQztLQUMzRCxNQUFNLENBQUMscUJBQVksQ0FBQyxDQUFDO0FBRXhCLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBjcmVhdGUgfSBmcm9tICcuL2NvbW1hbmRzL2NyZWF0ZSc7XG5pbXBvcnQgeyBpbml0IH0gZnJvbSAnLi9jb21tYW5kcy9pbml0JztcbmltcG9ydCB7IGRldiB9IGZyb20gJy4vY29tbWFuZHMvZGV2JztcbmltcG9ydCB7IGJ1aWxkIH0gZnJvbSAnLi9jb21tYW5kcy9idWlsZCc7XG5pbXBvcnQgeyBzdGFydCB9IGZyb20gJy4vY29tbWFuZHMvc3RhcnQnO1xuaW1wb3J0IHsgY2hlY2sgfSBmcm9tICcuL2NvbW1hbmRzL2NoZWNrJztcbmltcG9ydCB7IGRlcGxveSB9IGZyb20gJy4vY29tbWFuZHMvZGVwbG95JztcbmltcG9ydCB7IGxpc3RLZXlzLCByZWdlbmVyYXRlS2V5IH0gZnJvbSAnLi9jb21tYW5kcy9rZXlzJztcbmltcG9ydCB7IHdob2FtaSB9IGZyb20gJy4vY29tbWFuZHMvd2hvYW1pJztcbmltcG9ydCB7IHVwbG9hZCwgbGlzdEFzc2V0cyB9IGZyb20gJy4vY29tbWFuZHMvdXBsb2FkJztcbmltcG9ydCB7IGFpIH0gZnJvbSAnLi9jb21tYW5kcy9haSc7XG5pbXBvcnQgeyBkb21haW5BZGQsIGRvbWFpblN0YXR1cywgZG9tYWluVmVyaWZ5LCBkb21haW5SZW1vdmUgfSBmcm9tICcuL2NvbW1hbmRzL2RvbWFpbic7XG5cbmNvbnN0IHBhY2thZ2VKc29uID0gcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJyk7XG5cbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG5wcm9ncmFtXG4gIC5uYW1lKCdkZXZkb2MnKVxuICAuZGVzY3JpcHRpb24oJ0RvY3VtZW50YXRpb24gZnJhbWV3b3JrIGZvciBkZXZlbG9wZXJzJylcbiAgLnZlcnNpb24ocGFja2FnZUpzb24udmVyc2lvbik7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2NyZWF0ZSBbcHJvamVjdC1kaXJlY3RvcnldJylcbiAgLmRlc2NyaXB0aW9uKCdDcmVhdGUgYSBuZXcgRGV2RG9jIGRvY3VtZW50YXRpb24gc2l0ZScpXG4gIC5vcHRpb24oJy10LCAtLXRlbXBsYXRlIDx0eXBlPicsICdUZW1wbGF0ZSB0byB1c2UgKGJhc2ljLCBvcGVuYXBpLCBncmFwaHFsKScpXG4gIC5vcHRpb24oJy1kLCAtLWRvYy10eXBlIDx0eXBlPicsICdEb2N1bWVudGF0aW9uIHR5cGUgKHB1YmxpYywgaW50ZXJuYWwpJylcbiAgLm9wdGlvbignLXMsIC0tc3ViZG9tYWluIDxzdWJkb21haW4+JywgJ1N1YmRvbWFpbiBmb3IgeW91ciBkb2NzIChlLmcuLCBteS1kb2NzLmRldmRvYy5zaCknKVxuICAub3B0aW9uKCctLW5vLWdpdCcsICdTa2lwIGdpdCBpbml0aWFsaXphdGlvbicpXG4gIC5vcHRpb24oJy0tbm8taW5zdGFsbCcsICdTa2lwIGluc3RhbGxpbmcgZGVwZW5kZW5jaWVzJylcbiAgLm9wdGlvbignLXUsIC0tdXJsIDx1cmw+JywgJ0FQSSBVUkwgKGRlZmF1bHQ6IGh0dHBzOi8vZGV2ZG9jLnNoKScpXG4gIC5hY3Rpb24oY3JlYXRlKTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnaW5pdCcpXG4gIC5kZXNjcmlwdGlvbignSW5pdGlhbGl6ZS9yZWdpc3RlciBwcm9qZWN0IHdpdGggQnJhaW5maXNoJylcbiAgLm9wdGlvbignLXMsIC0tc2x1ZyA8c2x1Zz4nLCAnUHJvamVjdCBzbHVnJylcbiAgLm9wdGlvbignLS1zdWJkb21haW4gPHN1YmRvbWFpbj4nLCAnU3ViZG9tYWluIGZvciB5b3VyIGRvY3MgKGUuZy4sIG15LWRvY3MuZGV2ZG9jLnNoKScpXG4gIC5vcHRpb24oJy1mLCAtLWZvcmNlJywgJ092ZXJ3cml0ZSBleGlzdGluZyAuZGV2ZG9jLmpzb24nKVxuICAub3B0aW9uKCctLWFpIFt0b29sXScsICdTZXQgdXAgQUkgYWdlbnRzIChjbGF1ZGUsIGN1cnNvciwgYm90aCwgb3IganVzdCAtLWFpIHRvIGNob29zZSknKVxuICAub3B0aW9uKCctdSwgLS11cmwgPHVybD4nLCAnQVBJIFVSTCAoZGVmYXVsdDogaHR0cHM6Ly9kZXZkb2Muc2gpJylcbiAgLmFjdGlvbihpbml0KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnZGV2JylcbiAgLmRlc2NyaXB0aW9uKCdTdGFydCBkZXZlbG9wbWVudCBzZXJ2ZXIgd2l0aCBob3QgcmVsb2FkJylcbiAgLm9wdGlvbignLXAsIC0tcG9ydCA8cG9ydD4nLCAnUG9ydCB0byBydW4gdGhlIHNlcnZlciBvbicsICczMzMzJylcbiAgLm9wdGlvbignLUgsIC0taG9zdCA8aG9zdD4nLCAnSG9zdCB0byBiaW5kIHRoZSBzZXJ2ZXIgdG8nLCAnbG9jYWxob3N0JylcbiAgLm9wdGlvbignLW8sIC0tb3BlbicsICdPcGVuIGJyb3dzZXIgYXV0b21hdGljYWxseScsIHRydWUpXG4gIC5vcHRpb24oJy0tbm8tb3BlbicsICdEbyBub3Qgb3BlbiBicm93c2VyIGF1dG9tYXRpY2FsbHknKVxuICAuYWN0aW9uKGRldik7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2J1aWxkJylcbiAgLmRlc2NyaXB0aW9uKCdCdWlsZCBkb2N1bWVudGF0aW9uIGZvciBwcm9kdWN0aW9uJylcbiAgLm9wdGlvbignLW8sIC0tb3V0cHV0IDxkaXI+JywgJ091dHB1dCBkaXJlY3RvcnknLCAnZGlzdCcpXG4gIC5hY3Rpb24oYnVpbGQpO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdzdGFydCcpXG4gIC5kZXNjcmlwdGlvbignU3RhcnQgcHJvZHVjdGlvbiBzZXJ2ZXInKVxuICAub3B0aW9uKCctcCwgLS1wb3J0IDxwb3J0PicsICdQb3J0IHRvIHJ1biB0aGUgc2VydmVyIG9uJywgJzMwMDAnKVxuICAuYWN0aW9uKHN0YXJ0KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnY2hlY2snKVxuICAuZGVzY3JpcHRpb24oJ1ZhbGlkYXRlIGRvY3MuanNvbiBhbmQgTURYIGZpbGVzJylcbiAgLmFjdGlvbihjaGVjayk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2FpJylcbiAgLmRlc2NyaXB0aW9uKCdTZXQgdXAgb3IgdXBkYXRlIEFJIGFnZW50IGNvbmZpZ3VyYXRpb24gKENsYXVkZSBDb2RlIHNraWxscywgQ3Vyc29yIHJ1bGVzKScpXG4gIC5vcHRpb24oJy10LCAtLXRvb2wgPHRvb2w+JywgJ0FJIHRvb2wgdG8gY29uZmlndXJlIChjbGF1ZGUsIGN1cnNvciwgYm90aCknKVxuICAub3B0aW9uKCctLXVwZGF0ZScsICdVcGRhdGUgZXhpc3Rpbmcgc2tpbGxzL3J1bGVzIHRvIGxhdGVzdCB2ZXJzaW9uJylcbiAgLmFjdGlvbihhaSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2RlcGxveScpXG4gIC5kZXNjcmlwdGlvbignRGVwbG95IGRvY3VtZW50YXRpb24gdG8gRGV2RG9jIHBsYXRmb3JtJylcbiAgLm9wdGlvbignLXUsIC0tdXJsIDx1cmw+JywgJ0FQSSBVUkwgKGRlZmF1bHQ6IGh0dHBzOi8vZGV2ZG9jLnNoKScpXG4gIC5vcHRpb24oJy1rLCAtLWFwaS1rZXkgPGtleT4nLCAnQVBJIGtleSBmb3IgYXV0aGVudGljYXRpb24nKVxuICAuYWN0aW9uKGRlcGxveSk7XG5cbi8vIEtleXMgbWFuYWdlbWVudFxuY29uc3Qga2V5c0NtZCA9IHByb2dyYW1cbiAgLmNvbW1hbmQoJ2tleXMnKVxuICAuZGVzY3JpcHRpb24oJ01hbmFnZSBBUEkga2V5cyBmb3IgeW91ciBwcm9qZWN0Jyk7XG5cbmtleXNDbWRcbiAgLmNvbW1hbmQoJ2xpc3QnKVxuICAuZGVzY3JpcHRpb24oJ1Nob3cgY3VycmVudCBBUEkga2V5IGluZm8nKVxuICAub3B0aW9uKCctdSwgLS11cmwgPHVybD4nLCAnQVBJIFVSTCcpXG4gIC5hY3Rpb24obGlzdEtleXMpO1xuXG5rZXlzQ21kXG4gIC5jb21tYW5kKCdyZWdlbmVyYXRlJylcbiAgLmRlc2NyaXB0aW9uKCdHZW5lcmF0ZSBhIG5ldyBBUEkga2V5IChpbnZhbGlkYXRlcyB0aGUgb2xkIG9uZSknKVxuICAub3B0aW9uKCctdSwgLS11cmwgPHVybD4nLCAnQVBJIFVSTCcpXG4gIC5hY3Rpb24ocmVnZW5lcmF0ZUtleSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3dob2FtaScpXG4gIC5kZXNjcmlwdGlvbignU2hvdyBjdXJyZW50IHByb2plY3QgaW5mb3JtYXRpb24nKVxuICAub3B0aW9uKCctdSwgLS11cmwgPHVybD4nLCAnQVBJIFVSTCcpXG4gIC5hY3Rpb24od2hvYW1pKTtcblxuLy8gQXNzZXRzIG1hbmFnZW1lbnRcbmNvbnN0IGFzc2V0c0NtZCA9IHByb2dyYW1cbiAgLmNvbW1hbmQoJ2Fzc2V0cycpXG4gIC5kZXNjcmlwdGlvbignTWFuYWdlIHByb2plY3QgYXNzZXRzIChpbWFnZXMsIGZpbGVzKScpO1xuXG5hc3NldHNDbWRcbiAgLmNvbW1hbmQoJ3VwbG9hZCA8ZmlsZXMuLi4+JylcbiAgLmRlc2NyaXB0aW9uKCdVcGxvYWQgYXNzZXRzIHRvIHN0b3JhZ2UgKG1heCAyNU1CIHBlciBmaWxlKScpXG4gIC5vcHRpb24oJy11LCAtLXVybCA8dXJsPicsICdBUEkgVVJMJylcbiAgLm9wdGlvbignLWssIC0tYXBpLWtleSA8a2V5PicsICdBUEkga2V5IGZvciBhdXRoZW50aWNhdGlvbicpXG4gIC5hY3Rpb24odXBsb2FkKTtcblxuYXNzZXRzQ21kXG4gIC5jb21tYW5kKCdsaXN0JylcbiAgLmRlc2NyaXB0aW9uKCdMaXN0IHVwbG9hZGVkIGFzc2V0cycpXG4gIC5vcHRpb24oJy11LCAtLXVybCA8dXJsPicsICdBUEkgVVJMJylcbiAgLm9wdGlvbignLWssIC0tYXBpLWtleSA8a2V5PicsICdBUEkga2V5IGZvciBhdXRoZW50aWNhdGlvbicpXG4gIC5hY3Rpb24obGlzdEFzc2V0cyk7XG5cbi8vIFNob3J0Y3V0IGZvciB1cGxvYWRcbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3VwbG9hZCA8ZmlsZXMuLi4+JylcbiAgLmRlc2NyaXB0aW9uKCdVcGxvYWQgYXNzZXRzIHRvIHN0b3JhZ2UgKHNob3J0Y3V0IGZvciBcImRldmRvYyBhc3NldHMgdXBsb2FkXCIpJylcbiAgLm9wdGlvbignLXUsIC0tdXJsIDx1cmw+JywgJ0FQSSBVUkwnKVxuICAub3B0aW9uKCctaywgLS1hcGkta2V5IDxrZXk+JywgJ0FQSSBrZXkgZm9yIGF1dGhlbnRpY2F0aW9uJylcbiAgLmFjdGlvbih1cGxvYWQpO1xuXG4vLyBEb21haW4gbWFuYWdlbWVudCAtIGN1c3RvbSBkb21haW5zIChvbmUgcGVyIHByb2plY3QsIGZyZWUpXG5jb25zdCBkb21haW5DbWQgPSBwcm9ncmFtXG4gIC5jb21tYW5kKCdkb21haW4nKVxuICAuZGVzY3JpcHRpb24oJ01hbmFnZSBjdXN0b20gZG9tYWluIGZvciB5b3VyIGRvY3VtZW50YXRpb24nKTtcblxuZG9tYWluQ21kXG4gIC5jb21tYW5kKCdhZGQgPGN1c3RvbS1kb21haW4+JylcbiAgLmRlc2NyaXB0aW9uKCdBZGQgYSBjdXN0b20gZG9tYWluIChlLmcuLCBkb2NzLmV4YW1wbGUuY29tKScpXG4gIC5vcHRpb24oJy11LCAtLXVybCA8dXJsPicsICdBUEkgVVJMJylcbiAgLm9wdGlvbignLWssIC0tYXBpLWtleSA8a2V5PicsICdBUEkga2V5IGZvciBhdXRoZW50aWNhdGlvbicpXG4gIC5hY3Rpb24oZG9tYWluQWRkKTtcblxuZG9tYWluQ21kXG4gIC5jb21tYW5kKCdzdGF0dXMnKVxuICAuZGVzY3JpcHRpb24oJ0NoZWNrIGN1c3RvbSBkb21haW4gc3RhdHVzIGFuZCBETlMgY29uZmlndXJhdGlvbicpXG4gIC5vcHRpb24oJy11LCAtLXVybCA8dXJsPicsICdBUEkgVVJMJylcbiAgLm9wdGlvbignLWssIC0tYXBpLWtleSA8a2V5PicsICdBUEkga2V5IGZvciBhdXRoZW50aWNhdGlvbicpXG4gIC5hY3Rpb24oZG9tYWluU3RhdHVzKTtcblxuZG9tYWluQ21kXG4gIC5jb21tYW5kKCd2ZXJpZnknKVxuICAuZGVzY3JpcHRpb24oJ1ZlcmlmeSBETlMgY29uZmlndXJhdGlvbiBmb3IgeW91ciBjdXN0b20gZG9tYWluJylcbiAgLm9wdGlvbignLXUsIC0tdXJsIDx1cmw+JywgJ0FQSSBVUkwnKVxuICAub3B0aW9uKCctaywgLS1hcGkta2V5IDxrZXk+JywgJ0FQSSBrZXkgZm9yIGF1dGhlbnRpY2F0aW9uJylcbiAgLmFjdGlvbihkb21haW5WZXJpZnkpO1xuXG5kb21haW5DbWRcbiAgLmNvbW1hbmQoJ3JlbW92ZSBbY3VzdG9tLWRvbWFpbl0nKVxuICAuZGVzY3JpcHRpb24oJ1JlbW92ZSBjdXN0b20gZG9tYWluIGZyb20gcHJvamVjdCcpXG4gIC5vcHRpb24oJy11LCAtLXVybCA8dXJsPicsICdBUEkgVVJMJylcbiAgLm9wdGlvbignLWssIC0tYXBpLWtleSA8a2V5PicsICdBUEkga2V5IGZvciBhdXRoZW50aWNhdGlvbicpXG4gIC5hY3Rpb24oZG9tYWluUmVtb3ZlKTtcblxucHJvZ3JhbS5wYXJzZShwcm9jZXNzLmFyZ3YpO1xuIl19
|
|
173
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseUNBQW9DO0FBQ3BDLDhDQUEyQztBQUMzQywwQ0FBdUM7QUFDdkMsd0NBQXFDO0FBQ3JDLDRDQUF5QztBQUN6Qyw0Q0FBeUM7QUFDekMsNENBQXlDO0FBQ3pDLDhDQUEyQztBQUMzQywwQ0FBMEQ7QUFDMUQsOENBQTJDO0FBQzNDLDhDQUF1RDtBQUN2RCxzQ0FBbUM7QUFDbkMsOENBQXdGO0FBQ3hGLHdDQUE0RTtBQUU1RSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUVsRCxNQUFNLE9BQU8sR0FBRyxJQUFJLG1CQUFPLEVBQUUsQ0FBQztBQUU5QixPQUFPO0tBQ0osSUFBSSxDQUFDLFFBQVEsQ0FBQztLQUNkLFdBQVcsQ0FBQyx3Q0FBd0MsQ0FBQztLQUNyRCxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRWhDLE9BQU87S0FDSixPQUFPLENBQUMsNEJBQTRCLENBQUM7S0FDckMsV0FBVyxDQUFDLHdDQUF3QyxDQUFDO0tBQ3JELE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSwyQ0FBMkMsQ0FBQztLQUM1RSxNQUFNLENBQUMsdUJBQXVCLEVBQUUsdUNBQXVDLENBQUM7S0FDeEUsTUFBTSxDQUFDLDZCQUE2QixFQUFFLG1EQUFtRCxDQUFDO0tBQzFGLE1BQU0sQ0FBQyxVQUFVLEVBQUUseUJBQXlCLENBQUM7S0FDN0MsTUFBTSxDQUFDLGNBQWMsRUFBRSw4QkFBOEIsQ0FBQztLQUN0RCxNQUFNLENBQUMsaUJBQWlCLEVBQUUsc0NBQXNDLENBQUM7S0FDakUsTUFBTSxDQUFDLGVBQU0sQ0FBQyxDQUFDO0FBRWxCLE9BQU87S0FDSixPQUFPLENBQUMsTUFBTSxDQUFDO0tBQ2YsV0FBVyxDQUFDLDRDQUE0QyxDQUFDO0tBQ3pELE1BQU0sQ0FBQyxtQkFB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TUFBTSxDQUFDLG9CQUFvQixFQUFFLDJCQUEyQixDQUFDO0tBQ3pELE1BQU0sQ0FBQyxpQkFBVyxDQUFDLENBQUM7QUFFdkIsTUFBTTtLQUNILE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztLQUMxQixXQUFXLENBQUMsZ0NBQWdDLENBQUM7S0FDN0MsTUFBTSxDQUFDLGlCQUFXLENBQUMsQ0FBQztBQUV2QixNQUFNO0tBQ0gsT0FBTyxDQUFDLE1BQU0sQ0FBQztLQUNmLFdBQVcsQ0FBQyw0Q0FBNEMsQ0FBQztLQUN6RCxNQUFNLENBQUMsYUFBTyxDQUFDLENBQUM7QUFFbkIsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IGNyZWF0ZSB9IGZyb20gJy4vY29tbWFuZHMvY3JlYXRlJztcbmltcG9ydCB7IGluaXQgfSBmcm9tICcuL2NvbW1hbmRzL2luaXQnO1xuaW1wb3J0IHsgZGV2IH0gZnJvbSAnLi9jb21tYW5kcy9kZXYnO1xuaW1wb3J0IHsgYnVpbGQgfSBmcm9tICcuL2NvbW1hbmRzL2J1aWxkJztcbmltcG9ydCB7IHN0YXJ0IH0gZnJvbSAnLi9jb21tYW5kcy9zdGFydCc7XG5pbXBvcnQgeyBjaGVjayB9IGZyb20gJy4vY29tbWFuZHMvY2hlY2snO1xuaW1wb3J0IHsgZGVwbG95IH0gZnJvbSAnLi9jb21tYW5kcy9kZXBsb3knO1xuaW1wb3J0IHsgbGlzdEtleXMsIHJlZ2VuZXJhdGVLZXkgfSBmcm9tICcuL2NvbW1hbmRzL2tleXMnO1xuaW1wb3J0IHsgd2hvYW1pIH0gZnJvbSAnLi9jb21tYW5kcy93aG9hbWknO1xuaW1wb3J0IHsgdXBsb2FkLCBsaXN0QXNzZXRzIH0gZnJvbSAnLi9jb21tYW5kcy91cGxvYWQnO1xuaW1wb3J0IHsgYWkgfSBmcm9tICcuL2NvbW1hbmRzL2FpJztcbmltcG9ydCB7IGRvbWFpbkFkZCwgZG9tYWluU3RhdHVzLCBkb21haW5WZXJpZnksIGRvbWFpblJlbW92ZSB9IGZyb20gJy4vY29tbWFuZHMvZG9tYWluJztcbmltcG9ydCB7IHNka0luaXQsIHNka0dlbmVyYXRlLCBzZGtWYWxpZGF0ZSwgc2RrTGlzdCB9IGZyb20gJy4vY29tbWFuZHMvc2RrJztcblxuY29uc3QgcGFja2FnZUpzb24gPSByZXF1aXJlKCcuLi8uLi9wYWNrYWdlLmpzb24nKTtcblxuY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG5cbnByb2dyYW1cbiAgLm5hbWUoJ2RldmRvYycpXG4gIC5kZXNjcmlwdGlvbignRG9jdW1lbnRhdGlvbiBmcmFtZXdvcmsgZm9yIGRldmVsb3BlcnMnKVxuICAudmVyc2lvbihwYWNrYWdlSnNvbi52ZXJzaW9uKTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnY3JlYXRlIFtwcm9qZWN0LWRpcmVjdG9yeV0nKVxuICAuZGVzY3JpcHRpb24oJ0NyZWF0ZSBhIG5ldyBEZXZEb2MgZG9jdW1lbnRhdGlvbiBzaXRlJylcbiAgLm9wdGlvbignLXQsIC0tdGVtcGxhdGUgPHR5cGU+JywgJ1RlbXBsYXRlIHRvIHVzZSAoYmFzaWMsIG9wZW5hcGksIGdyYXBocWwpJylcbiAgLm9wdGlvbignLWQsIC0tZG9jLXR5cGUgPHR5cGU+JywgJ0RvY3VtZW50YXRpb24gdHlwZSAocHVibGljLCBpbnRlcm5hbCknKVxuICAub3B0aW9uKCctcywgLS1zdWJkb21haW4gPHN1YmRvbWFpbj4nLCAnU3ViZG9tYWluIGZvciB5b3VyIGRvY3MgKGUuZy4sIG15LWRvY3MuZGV2ZG9jLnNoKScpXG4gIC5vcHRpb24oJy0tbm8tZ2l0JywgJ1NraXAgZ2l0IGluaXRpYWxpemF0aW9uJylcbiAgLm9wdGlvbignLS1uby1pbnN0YWxsJywgJ1NraXAgaW5zdGFsbGluZyBkZXBlbmRlbmNpZXMnKVxuICAub3B0aW9uKCctdSwgLS11cmwgPHVybD4nLCAnQVBJIFVSTCAoZGVmYXVsdDogaHR0cHM6Ly9kZXZkb2Muc2gpJylcbiAgLmFjdGlvbihjcmVhdGUpO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdpbml0JylcbiAgLmRlc2NyaXB0aW9uKCdJbml0aWFsaXplL3JlZ2lzdGVyIHByb2plY3Qgd2l0aCBCcmFpbmZpc2gnKVxuICAub3B0aW9uKCctcywgLS1zbHVnIDxzbHVnPicsICdQcm9qZWN0IHNsdWcnKVxuICAub3B0aW9uKCctLXN1YmRvbWFpbiA8c3ViZG9tYWluPicsICdTdWJkb21haW4gZm9yIHlvdXIgZG9jcyAoZS5nLiwgbXktZG9jcy5kZXZkb2Muc2gpJylcbiAgLm9wdGlvbignLWYsIC0tZm9yY2UnLCAnT3ZlcndyaXRlIGV4aXN0aW5nIC5kZXZkb2MuanNvbicpXG4gIC5vcHRpb24oJy0tYWkgW3Rvb2xdJywgJ1NldCB1cCBBSSBhZ2VudHMgKGNsYXVkZSwgY3Vyc29yLCBib3RoLCBvciBqdXN0IC0tYWkgdG8gY2hvb3NlKScpXG4gIC5vcHRpb24oJy11LCAtLXVybCA8dXJsPicsICdBUEkgVVJMIChkZWZhdWx0OiBodHRwczovL2RldmRvYy5zaCknKVxuICAuYWN0aW9uKGluaXQpO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdkZXYnKVxuICAuZGVzY3JpcHRpb24oJ1N0YXJ0IGRldmVsb3BtZW50IHNlcnZlciB3aXRoIGhvdCByZWxvYWQnKVxuICAub3B0aW9uKCctcCwgLS1wb3J0IDxwb3J0PicsICdQb3J0IHRvIHJ1biB0aGUgc2VydmVyIG9uJywgJzMzMzMnKVxuICAub3B0aW9uKCctSCwgLS1ob3N0IDxob3N0PicsICdIb3N0IHRvIGJpbmQgdGhlIHNlcnZlciB0bycsICdsb2NhbGhvc3QnKVxuICAub3B0aW9uKCctbywgLS1vcGVuJywgJ09wZW4gYnJvd3NlciBhdXRvbWF0aWNhbGx5JywgdHJ1ZSlcbiAgLm9wdGlvbignLS1uby1vcGVuJywgJ0RvIG5vdCBvcGVuIGJyb3dzZXIgYXV0b21hdGljYWxseScpXG4gIC5hY3Rpb24oZGV2KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnYnVpbGQnKVxuICAuZGVzY3JpcHRpb24oJ0J1aWxkIGRvY3VtZW50YXRpb24gZm9yIHByb2R1Y3Rpb24nKVxuICAub3B0aW9uKCctbywgLS1vdXRwdXQgPGRpcj4nLCAnT3V0cHV0IGRpcmVjdG9yeScsICdkaXN0JylcbiAgLmFjdGlvbihidWlsZCk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3N0YXJ0JylcbiAgLmRlc2NyaXB0aW9uKCdTdGFydCBwcm9kdWN0aW9uIHNlcnZlcicpXG4gIC5vcHRpb24oJy1wLCAtLXBvcnQgPHBvcnQ+JywgJ1BvcnQgdG8gcnVuIHRoZSBzZXJ2ZXIgb24nLCAnMzAwMCcpXG4gIC5hY3Rpb24oc3RhcnQpO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdjaGVjaycpXG4gIC5kZXNjcmlwdGlvbignVmFsaWRhdGUgZG9jcy5qc29uIGFuZCBNRFggZmlsZXMnKVxuICAuYWN0aW9uKGNoZWNrKTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnYWknKVxuICAuZGVzY3JpcHRpb24oJ1NldCB1cCBvciB1cGRhdGUgQUkgYWdlbnQgY29uZmlndXJhdGlvbiAoQ2xhdWRlIENvZGUgc2tpbGxzLCBDdXJzb3IgcnVsZXMpJylcbiAgLm9wdGlvbignLXQsIC0tdG9vbCA8dG9vbD4nLCAnQUkgdG9vbCB0byBjb25maWd1cmUgKGNsYXVkZSwgY3Vyc29yLCBib3RoKScpXG4gIC5vcHRpb24oJy0tdXBkYXRlJywgJ1VwZGF0ZSBleGlzdGluZyBza2lsbHMvcnVsZXMgdG8gbGF0ZXN0IHZlcnNpb24nKVxuICAuYWN0aW9uKGFpKTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnZGVwbG95JylcbiAgLmRlc2NyaXB0aW9uKCdEZXBsb3kgZG9jdW1lbnRhdGlvbiB0byBEZXZEb2MgcGxhdGZvcm0nKVxuICAub3B0aW9uKCctdSwgLS11cmwgPHVybD4nLCAnQVBJIFVSTCAoZGVmYXVsdDogaHR0cHM6Ly9kZXZkb2Muc2gpJylcbiAgLm9wdGlvbignLWssIC0tYXBpLWtleSA8a2V5PicsICdBUEkga2V5IGZvciBhdXRoZW50aWNhdGlvbicpXG4gIC5hY3Rpb24oZGVwbG95KTtcblxuLy8gS2V5cyBtYW5hZ2VtZW50XG5jb25zdCBrZXlzQ21kID0gcHJvZ3JhbVxuICAuY29tbWFuZCgna2V5cycpXG4gIC5kZXNjcmlwdGlvbignTWFuYWdlIEFQSSBrZXlzIGZvciB5b3VyIHByb2plY3QnKTtcblxua2V5c0NtZFxuICAuY29tbWFuZCgnbGlzdCcpXG4gIC5kZXNjcmlwdGlvbignU2hvdyBjdXJyZW50IEFQSSBrZXkgaW5mbycpXG4gIC5vcHRpb24oJy11LCAtLXVybCA8dXJsPicsICdBUEkgVVJMJylcbiAgLmFjdGlvbihsaXN0S2V5cyk7XG5cbmtleXNDbWRcbiAgLmNvbW1hbmQoJ3JlZ2VuZXJhdGUnKVxuICAuZGVzY3JpcHRpb24oJ0dlbmVyYXRlIGEgbmV3IEFQSSBrZXkgKGludmFsaWRhdGVzIHRoZSBvbGQgb25lKScpXG4gIC5vcHRpb24oJy11LCAtLXVybCA8dXJsPicsICdBUEkgVVJMJylcbiAgLmFjdGlvbihyZWdlbmVyYXRlS2V5KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnd2hvYW1pJylcbiAgLmRlc2NyaXB0aW9uKCdTaG93IGN1cnJlbnQgcHJvamVjdCBpbmZvcm1hdGlvbicpXG4gIC5vcHRpb24oJy11LCAtLXVybCA8dXJsPicsICdBUEkgVVJMJylcbiAgLmFjdGlvbih3aG9hbWkpO1xuXG4vLyBBc3NldHMgbWFuYWdlbWVudFxuY29uc3QgYXNzZXRzQ21kID0gcHJvZ3JhbVxuICAuY29tbWFuZCgnYXNzZXRzJylcbiAgLmRlc2NyaXB0aW9uKCdNYW5hZ2UgcHJvamVjdCBhc3NldHMgKGltYWdlcywgZmlsZXMpJyk7XG5cbmFzc2V0c0NtZFxuICAuY29tbWFuZCgndXBsb2FkIDxmaWxlcy4uLj4nKVxuICAuZGVzY3JpcHRpb24oJ1VwbG9hZCBhc3NldHMgdG8gc3RvcmFnZSAobWF4IDI1TUIgcGVyIGZpbGUpJylcbiAgLm9wdGlvbignLXUsIC0tdXJsIDx1cmw+JywgJ0FQSSBVUkwnKVxuICAub3B0aW9uKCctaywgLS1hcGkta2V5IDxrZXk+JywgJ0FQSSBrZXkgZm9yIGF1dGhlbnRpY2F0aW9uJylcbiAgLmFjdGlvbih1cGxvYWQpO1xuXG5hc3NldHNDbWRcbiAgLmNvbW1hbmQoJ2xpc3QnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgdXBsb2FkZWQgYXNzZXRzJylcbiAgLm9wdGlvbignLXUsIC0tdXJsIDx1cmw+JywgJ0FQSSBVUkwnKVxuICAub3B0aW9uKCctaywgLS1hcGkta2V5IDxrZXk+JywgJ0FQSSBrZXkgZm9yIGF1dGhlbnRpY2F0aW9uJylcbiAgLmFjdGlvbihsaXN0QXNzZXRzKTtcblxuLy8gU2hvcnRjdXQgZm9yIHVwbG9hZFxucHJvZ3JhbVxuICAuY29tbWFuZCgndXBsb2FkIDxmaWxlcy4uLj4nKVxuICAuZGVzY3JpcHRpb24oJ1VwbG9hZCBhc3NldHMgdG8gc3RvcmFnZSAoc2hvcnRjdXQgZm9yIFwiZGV2ZG9jIGFzc2V0cyB1cGxvYWRcIiknKVxuICAub3B0aW9uKCctdSwgLS11cmwgPHVybD4nLCAnQVBJIFVSTCcpXG4gIC5vcHRpb24oJy1rLCAtLWFwaS1rZXkgPGtleT4nLCAnQVBJIGtleSBmb3IgYXV0aGVudGljYXRpb24nKVxuICAuYWN0aW9uKHVwbG9hZCk7XG5cbi8vIERvbWFpbiBtYW5hZ2VtZW50IC0gY3VzdG9tIGRvbWFpbnMgKG9uZSBwZXIgcHJvamVjdCwgZnJlZSlcbmNvbnN0IGRvbWFpbkNtZCA9IHByb2dyYW1cbiAgLmNvbW1hbmQoJ2RvbWFpbicpXG4gIC5kZXNjcmlwdGlvbignTWFuYWdlIGN1c3RvbSBkb21haW4gZm9yIHlvdXIgZG9jdW1lbnRhdGlvbicpO1xuXG5kb21haW5DbWRcbiAgLmNvbW1hbmQoJ2FkZCA8Y3VzdG9tLWRvbWFpbj4nKVxuICAuZGVzY3JpcHRpb24oJ0FkZCBhIGN1c3RvbSBkb21haW4gKGUuZy4sIGRvY3MuZXhhbXBsZS5jb20pJylcbiAgLm9wdGlvbignLXUsIC0tdXJsIDx1cmw+JywgJ0FQSSBVUkwnKVxuICAub3B0aW9uKCctaywgLS1hcGkta2V5IDxrZXk+JywgJ0FQSSBrZXkgZm9yIGF1dGhlbnRpY2F0aW9uJylcbiAgLmFjdGlvbihkb21haW5BZGQpO1xuXG5kb21haW5DbWRcbiAgLmNvbW1hbmQoJ3N0YXR1cycpXG4gIC5kZXNjcmlwdGlvbignQ2hlY2sgY3VzdG9tIGRvbWFpbiBzdGF0dXMgYW5kIEROUyBjb25maWd1cmF0aW9uJylcbiAgLm9wdGlvbignLXUsIC0tdXJsIDx1cmw+JywgJ0FQSSBVUkwnKVxuICAub3B0aW9uKCctaywgLS1hcGkta2V5IDxrZXk+JywgJ0FQSSBrZXkgZm9yIGF1dGhlbnRpY2F0aW9uJylcbiAgLmFjdGlvbihkb21haW5TdGF0dXMpO1xuXG5kb21haW5DbWRcbiAgLmNvbW1hbmQoJ3ZlcmlmeScpXG4gIC5kZXNjcmlwdGlvbignVmVyaWZ5IEROUyBjb25maWd1cmF0aW9uIGZvciB5b3VyIGN1c3RvbSBkb21haW4nKVxuICAub3B0aW9uKCctdSwgLS11cmwgPHVybD4nLCAnQVBJIFVSTCcpXG4gIC5vcHRpb24oJy1rLCAtLWFwaS1rZXkgPGtleT4nLCAnQVBJIGtleSBmb3IgYXV0aGVudGljYXRpb24nKVxuICAuYWN0aW9uKGRvbWFpblZlcmlmeSk7XG5cbmRvbWFpbkNtZFxuICAuY29tbWFuZCgncmVtb3ZlIFtjdXN0b20tZG9tYWluXScpXG4gIC5kZXNjcmlwdGlvbignUmVtb3ZlIGN1c3RvbSBkb21haW4gZnJvbSBwcm9qZWN0JylcbiAgLm9wdGlvbignLXUsIC0tdXJsIDx1cmw+JywgJ0FQSSBVUkwnKVxuICAub3B0aW9uKCctaywgLS1hcGkta2V5IDxrZXk+JywgJ0FQSSBrZXkgZm9yIGF1dGhlbnRpY2F0aW9uJylcbiAgLmFjdGlvbihkb21haW5SZW1vdmUpO1xuXG4vLyBTREsgZ2VuZXJhdGlvblxuY29uc3Qgc2RrQ21kID0gcHJvZ3JhbVxuICAuY29tbWFuZCgnc2RrJylcbiAgLmRlc2NyaXB0aW9uKCdHZW5lcmF0ZSBjbGllbnQgU0RLcyBmcm9tIE9wZW5BUEkgc3BlY2lmaWNhdGlvbicpO1xuXG5zZGtDbWRcbiAgLmNvbW1hbmQoJ2luaXQnKVxuICAuZGVzY3JpcHRpb24oJ0luaXRpYWxpemUgU0RLIGdlbmVyYXRpb24gY29uZmlndXJhdGlvbicpXG4gIC5vcHRpb24oJy1vLCAtLW9wZW5hcGkgPHBhdGg+JywgJ1BhdGggdG8gT3BlbkFQSSBzcGVjaWZpY2F0aW9uJylcbiAgLm9wdGlvbignLW4sIC0tcGFja2FnZS1uYW1lIDxuYW1lPicsICdCYXNlIHBhY2thZ2UgbmFtZSBmb3IgZ2VuZXJhdGVkIFNES3MnKVxuICAub3B0aW9uKCctZiwgLS1mb3JjZScsICdPdmVyd3JpdGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbicpXG4gIC5hY3Rpb24oc2RrSW5pdCk7XG5cbnNka0NtZFxuICAuY29tbWFuZCgnZ2VuZXJhdGUnKVxuICAuZGVzY3JpcHRpb24oJ0dlbmVyYXRlIFNES3MgZm9yIGNvbmZpZ3VyZWQgbGFuZ3VhZ2VzJylcbiAgLm9wdGlvbignLWwsIC0tbGFuZyA8bGFuZ3VhZ2U+JywgJ0dlbmVyYXRlIG9ubHkgZm9yIHNwZWNpZmljIGxhbmd1YWdlJylcbiAgLm9wdGlvbignLXAsIC0tcHJldmlldycsICdQcmV2aWV3IHdoYXQgd291bGQgYmUgZ2VuZXJhdGVkIHdpdGhvdXQgd3JpdGluZyBmaWxlcycpXG4gIC5vcHRpb24oJy1vLCAtLW91dHB1dCA8ZGlyPicsICdPdmVycmlkZSBvdXRwdXQgZGlyZWN0b3J5JylcbiAgLmFjdGlvbihzZGtHZW5lcmF0ZSk7XG5cbnNka0NtZFxuICAuY29tbWFuZCgndmFsaWRhdGUgW3NwZWNdJylcbiAgLmRlc2NyaXB0aW9uKCdWYWxpZGF0ZSBPcGVuQVBJIHNwZWNpZmljYXRpb24nKVxuICAuYWN0aW9uKHNka1ZhbGlkYXRlKTtcblxuc2RrQ21kXG4gIC5jb21tYW5kKCdsaXN0JylcbiAgLmRlc2NyaXB0aW9uKCdMaXN0IGF2YWlsYWJsZSBnZW5lcmF0b3JzIGFuZCB0aGVpciBzdGF0dXMnKVxuICAuYWN0aW9uKHNka0xpc3QpO1xuXG5wcm9ncmFtLnBhcnNlKHByb2Nlc3MuYXJndik7XG4iXX0=
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK Generation Module
|
|
3
|
+
*
|
|
4
|
+
* This module provides functionality for generating client SDKs from OpenAPI specifications.
|
|
5
|
+
* It supports multiple languages using both native generators and OpenAPI Generator.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Supported SDK languages
|
|
9
|
+
*/
|
|
10
|
+
export type SDKLanguage = 'typescript' | 'python' | 'go' | 'java' | 'csharp' | 'ruby' | 'php' | 'swift' | 'kotlin' | 'rust';
|
|
11
|
+
/**
|
|
12
|
+
* SDK configuration file (sdk.json)
|
|
13
|
+
*/
|
|
14
|
+
export interface SDKConfig {
|
|
15
|
+
openapi: string;
|
|
16
|
+
packageName: string;
|
|
17
|
+
output: string;
|
|
18
|
+
languages: {
|
|
19
|
+
[key in SDKLanguage]?: LanguageConfig;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Language-specific configuration
|
|
24
|
+
*/
|
|
25
|
+
export interface LanguageConfig {
|
|
26
|
+
enabled: boolean;
|
|
27
|
+
packageName?: string;
|
|
28
|
+
output?: string;
|
|
29
|
+
additionalOptions?: Record<string, string>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Generator information
|
|
33
|
+
*/
|
|
34
|
+
export interface GeneratorInfo {
|
|
35
|
+
language: SDKLanguage;
|
|
36
|
+
displayName: string;
|
|
37
|
+
native: boolean;
|
|
38
|
+
requiresJava: boolean;
|
|
39
|
+
generatorName?: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* SDK generation result for a single language
|
|
43
|
+
*/
|
|
44
|
+
export interface SDKGenerationResult {
|
|
45
|
+
language: SDKLanguage;
|
|
46
|
+
success: boolean;
|
|
47
|
+
outputPath: string;
|
|
48
|
+
error?: string;
|
|
49
|
+
duration: number;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Overall SDK generation result
|
|
53
|
+
*/
|
|
54
|
+
export interface GenerateSDKsResult {
|
|
55
|
+
results: SDKGenerationResult[];
|
|
56
|
+
successCount: number;
|
|
57
|
+
failureCount: number;
|
|
58
|
+
totalDuration: number;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Validation result
|
|
62
|
+
*/
|
|
63
|
+
export interface ValidationResult {
|
|
64
|
+
valid: boolean;
|
|
65
|
+
errors: string[];
|
|
66
|
+
warnings: string[];
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Options for SDK generation
|
|
70
|
+
*/
|
|
71
|
+
export interface GenerateOptions {
|
|
72
|
+
language?: SDKLanguage;
|
|
73
|
+
preview?: boolean;
|
|
74
|
+
outputDir?: string;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Options for SDK config initialization
|
|
78
|
+
*/
|
|
79
|
+
export interface InitConfigOptions {
|
|
80
|
+
openapi: string;
|
|
81
|
+
packageName: string;
|
|
82
|
+
languages: SDKLanguage[];
|
|
83
|
+
force?: boolean;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* All supported languages
|
|
87
|
+
*/
|
|
88
|
+
export declare const SUPPORTED_LANGUAGES: SDKLanguage[];
|
|
89
|
+
/**
|
|
90
|
+
* Load SDK configuration from project directory
|
|
91
|
+
*/
|
|
92
|
+
export declare function loadSDKConfig(projectRoot: string): Promise<{
|
|
93
|
+
config: SDKConfig | null;
|
|
94
|
+
error?: string;
|
|
95
|
+
}>;
|
|
96
|
+
/**
|
|
97
|
+
* Initialize SDK configuration
|
|
98
|
+
*/
|
|
99
|
+
export declare function initSDKConfig(projectRoot: string, options: InitConfigOptions): Promise<{
|
|
100
|
+
configPath: string;
|
|
101
|
+
config: SDKConfig;
|
|
102
|
+
}>;
|
|
103
|
+
/**
|
|
104
|
+
* Get enabled generators from config
|
|
105
|
+
*/
|
|
106
|
+
export declare function getEnabledGenerators(config: SDKConfig): SDKLanguage[];
|
|
107
|
+
/**
|
|
108
|
+
* Get generator information for all languages
|
|
109
|
+
*/
|
|
110
|
+
export declare function getGeneratorInfo(): GeneratorInfo[];
|
|
111
|
+
/**
|
|
112
|
+
* Check if a generator is native (doesn't require Java)
|
|
113
|
+
*/
|
|
114
|
+
export declare function isNativeGenerator(language: SDKLanguage): boolean;
|
|
115
|
+
/**
|
|
116
|
+
* Resolve OpenAPI spec path relative to project root
|
|
117
|
+
*/
|
|
118
|
+
export declare function resolveSpecPath(projectRoot: string, specPath: string): string;
|
|
119
|
+
/**
|
|
120
|
+
* Validate an OpenAPI specification
|
|
121
|
+
*/
|
|
122
|
+
export declare function validateSpec(specPath: string): Promise<ValidationResult>;
|
|
123
|
+
/**
|
|
124
|
+
* Generate SDKs for configured languages
|
|
125
|
+
*/
|
|
126
|
+
export declare function generateSDKs(projectRoot: string, options?: GenerateOptions): Promise<GenerateSDKsResult>;
|